/v2/symbols/{symbol} Get one symbol
reference_getSymbol
One entry of the symbol registry, as listed by GET /v2/symbols. Use GET /v2/symbols/lookup instead to ask whether an arbitrary ticker exists.
Path parameters
symbolstring requiredSymbol, e.g.
SPY
Details
The symbol is matched case-insensitively.
Limits
No per-operation limit applies to requests with an API key.
Empty results
A symbol outside the registry is 404 not_found.
Example
GET /v2/symbols/SPY{
"data": {
"symbol": "SPY",
"name": "SPDR S&P 500 ETF Trust",
"class": "equity",
"chain_policy": { "window_days": 60, "tenor_frame": "weekly" },
"min_tier": "free",
"requires_attestation": false
},
"meta": { "caps": { "tier": "pro", "applied": [] } }
}Response
Prices are dollars, timestamps epoch milliseconds, strikes integer thousandths of a dollar; null means unknown. Units →
200application/json
One registry entry in data
object
A successful response: the payload consumers parse plus response metadata. data shapes are the platform types — never reshaped by the envelope.
data object required
One symbol registry entry. min_tier/requires_attestation are the per-symbol entitlement class the server enforces.
chain_policy object required
Per-symbol chain policy — the option-chain window and tenor framing the chain/GEX endpoints and the WS clamp all consume (one policy, many consumers).
tenor_frame string required The expiry spacing to expect: daily, weekly or monthly.
window_days integer · int32 required How many days of expiries, from today, the option chain covers.
class string required Asset class: equity or index.
min_tier string required Minimum tier that may read this symbol (per-symbol floor).
freebasicproname string required Display name.
requires_attestation boolean required Whether a non-professional market-data attestation is required (index products).
symbol string required Ticker, uppercase (e.g. SPY, SPX).
meta object required
Response metadata.
caps object nullable
meta.caps — the entitlement caps that shaped this response. applied lists the caps that actually changed it (for example range_clamped).
applied array<string> required Which caps actually shaped this response (e.g. range_clamped). Empty = nothing was clamped.
darkpool boolean nullable Whether this account can use Off-Exchange in the site.
flow boolean nullable Whether the OPRA option-flow capability (flow) is granted to this principal in the app: site Pro plus a CBOE non-professional attestation (never on an itm_ key). Emitted explicitly — true and false — by the account endpoints, so the app reads the grant instead of inferring it from tier and attestation; absent on routes that do not report it.
gexDepth string nullable GEX data depth when the route reports it. Camel-cased to match the browser capability bundle; absent on unrelated routes.
tier string required The tier the request was served under.
cursor string nullable Opaque continuation cursor (pass back as ?cursor=); absent when there is nothing more to read.
plane string nullable Which serving tier answered the read (meta.plane). Informational provenance: treat it as an opaque label, because new values may appear.
Errors
Every error is the JSON error envelope; branch on error.code.
| Status | Meaning |
|---|---|
| 401 |
|
| 404 |
|