/v2/watchlists/{id} Create or replace a watchlist
watchlists_putWatchlist
Stores a watchlist under an id you choose (any opaque string). Sending the same request again is safe: a repeat replaces the list rather than adding a second one.
Path parameters
idstring requiredClient-generated watchlist id
Request body
The contract does not describe a body schema for this operation; the notes on this page give its fields.
Details
The body is {"name": "Core", "symbols": ["SPY", "QQQ"]}. The path id wins over any id in the body. Symbols are stored uppercase; each must be in the symbol registry (GET /v2/symbols) and readable on your plan, else the request is refused with 400 invalid_params.
Example
PUT /v2/watchlists/core{
"data": { "id": "core", "name": "Core", "symbols": ["SPY", "QQQ"] },
"meta": { "caps": { "tier": "pro", "applied": [] } }
}Response
Prices are dollars, timestamps epoch milliseconds, strikes integer thousandths of a dollar; null means unknown. Units →
200application/json
The stored watchlist in data (symbols normalized to uppercase)
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
A user watchlist (client-generated id; idempotent PUT).
id string Defaulted: the path id is authoritative on write, so the body may omit it (or carry a stale one).
name string symbols array<string> 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 |
|---|---|
| 400 |
|
| 401 |
|
| 403 |
|