API  /  Quickstart

Quickstart

Three steps from zero to your first API call. Plan to spend about a minute on this.

1

Add API access & copy your key One-time charge prorated against your current billing cycle

Go to gexboard.com/account and find the API Access card. Click Add API Access. After Stripe confirms your payment, your key is shown once — copy it immediately to a password manager or .env file.

The full key is shown only once. If you close the modal without copying the key, you'll need to Regenerate from the same page (which revokes the old one and emits a new one). There is no recovery of the original key after the modal closes — copy it to a password manager or secrets vault before clicking close.

Your key looks like this:

gxb_live_AbCdEfGh1JKLmnopQRSTuvwxYZ012345_aBcD

Treat it like a password. Anyone with this key can read your GEXBoard data — and consume your rate limit.

2

Set the Authorization header Bearer token · same as Stripe / GitHub / OpenAI

Every request needs an Authorization: Bearer <your-key> header. No query string auth, no other transport. Use HTTPS only — http:// is not supported.

Don't hardcode the key in source. Read from environment variable, secrets manager, or .env:

# .env file (gitignored)
GEXBOARD_API_KEY=gxb_live_AbCdEfGh1JKLmnopQRSTuvwxYZ012345_aBcD
export GEXBOARD_API_KEY="gxb_live_…"
curl "https://gexboard.com/api/v1/radar?ticker=SPY" \
  -H "Authorization: Bearer $GEXBOARD_API_KEY"
import os
from dotenv import load_dotenv

load_dotenv()
KEY = os.environ["GEXBOARD_API_KEY"]
3

Make your first call GET /api/v1/radar?ticker=SPY

Pull the live GEX snapshot for SPY. This is the same payload your dashboard sees — Net GEX, Call Wall, Put Wall, Gamma Flip, dealer regime, and per-strike contributions.

curl "https://gexboard.com/api/v1/radar?ticker=SPY&dte=0" \
  -H "Authorization: Bearer $GEXBOARD_API_KEY" \
  -H "Accept: application/json"
import os
import requests

KEY = os.environ["GEXBOARD_API_KEY"]
r = requests.get(
    "https://gexboard.com/api/v1/radar",
    params={"ticker": "SPY", "dte": 0},
    headers={"Authorization": f"Bearer {KEY}"},
    timeout=10,
)
r.raise_for_status()
data = r.json()
print("Net GEX:    ", data["net_gex"])
print("Call Wall:  ", data["call_wall"])
print("Put Wall:   ", data["put_wall"])
print("Gamma Flip: ", data["gamma_flip"])
print("Regime:     ", data["dealer_mode"])

Expected response (truncated):

{
  "ticker":       "SPY",
  "spot":         737.62,
  "net_gex":      2.4e9,
  "call_wall":    745,
  "put_wall":     730,
  "gamma_flip":   735.5,
  "dealer_mode":  "positive_gamma",
  "strikes": [...],
  "updated_at":   "2026-05-08T22:55:30Z"
}

That's it. You're calling the same engine your dashboard uses, with the same per-second freshness during 0DTE sessions.

Common gotchas

401Authentication required
Missing or malformed Authorization header. Verify the value starts with Bearer  (with a space) and the key starts with gxb_live_. Don't include the angle brackets from documentation.
403Tier required
The endpoint requires a higher tier. /api/v1/greeks, /api/v1/premium-map, and the 30-day history range require Trader API. Upgrade in /account or use a Pro-tier endpoint.
429Rate limit hit
You've crossed the per-minute or per-day cap (Pro: 60/min · 50K/day · Trader: 300/min · unlimited daily). The response includes a Retry-After header in seconds. Back off and resume.
410Key revoked
The key was rotated (regenerate) or revoked. Either you ran Regenerate on /account (use the new key from the modal) or you're past the 1-hour undo window after a Cancel. Reactivate from /account.
5xxServer error
Rare. Don't retry inline — use exponential backoff (start at 2s, double each time, give up after 5 tries). Check gexboard.com/status for incidents.
Stale data?
During market hours (9:30–16:00 ET) updated_at should be within 1–3 seconds of "now" for 0DTE and within 30 seconds for non-0DTE chains. Pre/post-market and weekends, the snapshot reflects the most recent close. Don't poll faster than 1/sec — you'll burn rate limit without getting fresher data.