/v2/flow/eod Largest option prints of a session
flow_getEod
The ranked largest option prints of one session, stored after the close. Use it for a settled end-of-day list, market-wide or for one underlying with symbol.
Query parameters
symbolstringUnderlying to read. With it, the answer is that underlying's own top 100 for the session; without it, the top 100 across the list's symbols. Requests with an API key must send this or
min_premium_usd.sessionstring ISO dateExchange session (
YYYY-MM-DD). Omit for the latest stored session; required with an API key. The other filters never change which session is served.from_msstring epoch msInclusive lower bound on
event_ts_ms(epoch milliseconds).to_msstring epoch msInclusive upper bound on
event_ts_ms(epoch milliseconds).min_premium_usdstring USDKeep only prints whose own
premium_usdis at least this many dollars. Requests with an API key must send this orsymbol.rightstringKeep only
callorputprints.expirystring ISO dateKeep only one expiry (
YYYY-MM-DD).
Details
With symbol, the answer is that underlying's own top 100 prints of the session, not its slice of the market-wide list, so filtering by ticker shows more rather than fewer. An unknown symbol is 404 not_found.
Requests with an API key read the equities list; Pro sessions in the ITMatrixHQ apps also see index options. data.tier names the list served.
from_ms, to_ms, min_premium_usd, right and expiry narrow the stored list before it is returned: data.limit is how many prints the list holds, meta.count how many survived the filters, and meta.filters echoes the filters given.
Available with an API Pro key, or in the ITMatrixHQ apps on Pro. Both need a non-professional market-data declaration (POST /v2/account/classification).
Units
premium_usdis dollars,pricedollars per share,sizecontracts.- Contract
strikeis in integer thousandths of a dollar. event_ts_msandscanned_at_msare epoch milliseconds;rank1 is the largest premium of the session.
Freshness
Written after each session closes; data.scanned_at_ms says when. coverage_status is eod_reconciled once the full end-of-day tape has been reconciled.
Limits
Requests with an API key must send session and either symbol or min_premium_usd (otherwise 400 invalid_params).
Empty results
A session with nothing stored is 200 with session_date: null, empty prints and a meta.note. Nothing is synthesized.
Example
GET /v2/flow/eod?session=2026-09-04&symbol=SPY{
"data": {
"session_date": "2026-09-04",
"symbol": "SPY",
"tier": "free",
"limit": 100,
"coverage_status": "eod_reconciled",
"scanned_at_ms": 1788677257387,
"prints": [
{
"print_id": "single_block:O:SPY260918P00760000:1788531722824:382#0",
"event_id": "single_block:O:SPY260918P00760000:1788531722824:382",
"underlying": "SPY",
"contract": {
"underlying": "SPY",
"expiry": "2026-09-18",
"right": "put",
"strike": 760000
},
"price": 3.25,
"size": 32460,
"premium_usd": 10549500.0,
"exchange": 323,
"conditions": [233],
"event_ts_ms": 1788531722824,
"sequence": 382,
"session_date": "2026-09-04",
"coverage_status": "eod_reconciled",
"rank": 1
}
]
},
"meta": { "count": 100 }
}Response
Prices are dollars, timestamps epoch milliseconds, strikes integer thousandths of a dollar; null means unknown. Units →
200application/json
The session's ranked largest prints for the caller's tier set; empty when nothing is persisted
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
coverage_status string nullable null when nothing has been persisted.
limit integer required How many prints this kind of list holds: 100 for one underlying's list (?symbol=), 100 tier-wide. A shorter list means the session had fewer qualifying prints, not a truncated page.
prints array<FlowPrint> required
conditions array<integer · int32> required contract object required 1/1000 $
The four-tuple contract identity (strike = integer thousandths).
expiry string required ISO date YYYY-MM-DD.
right string required call | put.
strike integer · int64 required 1/1000 $ Integer thousandths of a dollar.
underlying string required coverage_status string required observed_live | eod_reconciled.
event_id string required event_ts_ms integer · int64 required epoch ms exchange integer · int32 required premium_usd number · double required USD price number · double required print_id string required <event_id>#<leg_index>.
rank integer · int32 nullable 1 = largest premium of the session's set. Only the EOD list ranks.
sequence integer · int64 required session_date string required ISO date ET session (YYYY-MM-DD).
size integer · int64 required underlying string required scanned_at_ms integer · int64 nullable epoch ms null when nothing has been persisted.
session_date string nullable null when nothing has been persisted for the caller's set.
source string nullable Where the persisted list was read from (informational provenance); null when nothing has been persisted.
symbol string nullable The filtered underlying — present ONLY when ?symbol= was given.
tier string required 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 |
|
| 404 |
|