API  /  Errors

Error reference

Every error returns JSON with a detail field. The HTTP status code tells you the category; the body tells you the specific cause. Below: every code we return, when it fires, common causes, and the fix.

// All error responses share this shape: { "detail": "<human-readable explanation>" }

4xx — Client errors

400Bad Request

Your request was malformed — bad query parameter, invalid header, unsupported value.

Common causes

Fix

Read detail; it names the offending parameter. Validate against reference before retrying.

{ "detail": "DTE filter out of range. Valid: 0,1,7,30 or omit." }
401Unauthorized

Missing, malformed, or unrecognized API key.

Common causes

Fix

Verify the header shape: Authorization: Bearer gxb_live_<key>. If your key was regenerated, use the new one from the modal you saw at regen time. If you don't have a key on record, mint one at /account.

{ "detail": "Missing API key" }
402Payment Required

Returned only by the /api/account/api-key/purchase endpoint when the proration invoice fails to charge. Stripe rejected the card and we rolled back the SubscriptionItem.

Common causes

Fix

Update payment method via Stripe Customer Portal (linked from /account), then retry. No charge was made on the failed attempt; the SubscriptionItem was rolled back.

{ "detail": "Payment failed. Try a different card or contact support — no charge was made." }
403Forbidden

Authenticated but not allowed. Either the endpoint requires a higher tier than your key has, or the resource (ticker) isn't in your tier's whitelist.

Common causes

Fix

For tier-gated endpoints: upgrade to Trader at /account. For ticker access: check the tier matrix.

{ "detail": "Endpoint requires Trader plan." }
404Not Found

Route doesn't exist or the requested resource has no data.

Common causes

Fix

Verify the URL. Use /api/v1/<resource> for API-key auth. Check supported tickers on /pricing or in reference.

410Gone

Your key was permanently revoked — either by you (regenerate or cancel-addon) or by us (security suspension).

Common causes

Fix

Visit /account. If the addon is still active and you just lost the key, click Regenerate and capture the new key in the modal. If the addon was canceled and you want it back, click Add API Access again.

{ "detail": "Invalid API key" }
429Too Many Requests

You crossed your tier's per-minute or per-day cap. The response includes a Retry-After header (seconds to wait).

Common causes

Fix

Honor Retry-After. Implement exponential backoff as fallback. See rate-limits for a copy-paste retry helper.

// Headers include Retry-After: <seconds> { "detail": "Rate limit exceeded. Try again in 23 seconds." }

5xx — Server errors

500Internal Server Error

Something broke on our end. These should be rare; we monitor them.

Fix

Don't retry inline — use exponential backoff (start 2s, double, cap at 60s, give up after 5 attempts). If 500s persist for one ticker, try a different ticker to isolate. Email contact@gexboard.com if it lasts more than a few minutes.

502 / 503 / 504Bad Gateway / Service Unavailable / Timeout

Upstream issue: our market data provider, our database, or the gateway. Usually transient.

Fix

Same as 500 — back off exponentially. If you see sustained 503s, our service is genuinely down; check gexboard.com/status. Avoid retrying inside a tight loop — it makes recovery slower for everyone.

Reporting bugs

If you hit an error you can't explain or that contradicts the contract on this page: contact@gexboard.com with the request URL, headers (redact your key), response body, and approximate timestamp UTC. We respond within 24 business hours.