Docs
GET /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

symbol string

Underlying 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.

session string ISO date

Exchange 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_ms string epoch ms

Inclusive lower bound on event_ts_ms (epoch milliseconds).

to_ms string epoch ms

Inclusive upper bound on event_ts_ms (epoch milliseconds).

min_premium_usd string USD

Keep only prints whose own premium_usd is at least this many dollars. Requests with an API key must send this or symbol.

right string

Keep only call or put prints.

expiry string ISO date

Keep 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_usd is dollars, price dollars per share, size contracts.
  • Contract strike is in integer thousandths of a dollar.
  • event_ts_ms and scanned_at_ms are epoch milliseconds; rank 1 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

http
GET /v2/flow/eod?session=2026-09-04&symbol=SPY
json
{
  "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.

StatusMeaning
400

invalid_params — invalid filter, or a keyed request omitted session or both narrowing filters

401

unauthenticated

403

not_entitled_tier — not an app principal, or below site pro; attestation_required — Pro without a CBOE attestation

404

not_found — filtered symbol is not registered