Docs
GET /v2/quotes

Latest price and change for up to 180 symbols

market_getQuotes

One row per requested symbol, in request order, with the latest price, the prior close, the percent change and the session volume. Use it to fill a watchlist or heatmap in one request.

Query parameters

symbols string

Comma-separated symbols, at most 180 (required).

Details

net_gex and gex_change are always null for now; read GEX from GET /v2/gex/{symbol}/grid.

Units

  • spot (the latest ITMatrixHQ price) and official_close (the prior session's close) are dollars.
  • change_pct is percent (-0.72 = -0.72%); volume is shares.
  • session_date is the exchange session of spot, ISO YYYY-MM-DD; event_ts_ms is epoch milliseconds of the price event, null when the price comes from a daily bar.

Freshness

The latest price of the current session as it trades, otherwise the last completed session's close.

Limits

At most 180 symbols per request. No other per-operation limit applies.

Empty results

A symbol with no recent price is a row of null values. A symbol your plan cannot read is served as an empty row and listed in meta.restricted, rather than failing the whole request.

Example

http
GET /v2/quotes?symbols=AAPL
json
{
  "data": [
    {
      "symbol": "AAPL",
      "spot": 341.44,
      "change_pct": 1.64,
      "net_gex": null,
      "gex_change": null,
      "volume": 30001611,
      "official_close": 335.92,
      "session_date": "2026-09-25",
      "event_ts_ms": 1790380731536
    }
  ],
  "meta": { "count": 1 }
}

Response

Prices are dollars, timestamps epoch milliseconds, strikes integer thousandths of a dollar; null means unknown. Units →

200application/json

Quote rows in data, in request order. meta.restricted (when present) lists symbols served as an empty row because your plan cannot read them (tier floor or a missing attestation), rather than failing the whole request

object

A successful response: the payload consumers parse plus response metadata. data shapes are the platform types — never reshaped by the envelope.

data array<object> required
change_pct number · double nullable

Percent change vs official_close (prior session), or null.

event_ts_ms integer · int64 nullable epoch ms

Epoch milliseconds of the price event behind spot; null when it comes from a daily bar.

gex_change number · double nullable

Always null for now.

net_gex number · double nullable

Always null for now; read GEX from GET /v2/gex/{symbol}/grid.

official_close number · double nullable USD

Prior-session official close, dollars, or null.

session_date string nullable

Exchange session of spot, not the request's wall-clock date.

spot number · double nullable USD

Latest price, dollars, or null when no recent price is available.

symbol string required
volume integer · int64 nullable

Latest session volume, shares, or null.

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.

StatusMeaning
400

invalid_params — missing/oversized/invalid symbols

401

unauthenticated

503

internal — no bars source configured here