Options · Order flow
Options trades
/v1/options/tradesoptionsTradesEvery option print, one row per execution, classified against the quote in force: aggressor side (above_ask, at_ask, near_ask, mid, near_bid, at_bid, below_bid or unknown), sentiment, the underlying price, implied volatility and delta at execution, open interest, the day's volume and the print's exchange and trade condition. Cancelled prints are not served. Give underlying_symbol or up to ten underlying_symbols. Filters on exchange and on the at/near split of a side are applied to each page after it is read, within a bounded scan; meta.coverage.scan_complete is false when the budget ended before the page filled. Rows are newest first; next_cursor_id pages back through the session and stays valid across restarts for 24 hours. Only prints retained by the platform can be served: roughly the last five sessions, and overnight prints only for the most recent session. Requesting an older session starts a load and answers 503 data_pending with retry_after_ms. A print cancelled after it was served is not recalled, and prints backfilled behind a cursor's position can be missed by a walk in progress; re-read the session for a complete view.
Example request
curl -sS --get "https://api.ordermap.si/v1/options/trades" \
-H "Authorization: Bearer $ORDERMAP_API_KEY" \
--data-urlencode underlying_symbol=SPXWconst params = new URLSearchParams({
underlying_symbol: "SPXW",
});
const res = await fetch(`https://api.ordermap.si/v1/options/trades?${params}`, {
headers: { Authorization: `Bearer ${process.env.ORDERMAP_API_KEY}` },
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const { data, meta } = await res.json();
console.log(data, meta.coverage);
// Paginated: repeat with cursor_id set to pagination.next_cursor_id until it is null.Set ORDERMAP_API_KEY to your key. Replace the dates with a recent trading date.
Parameters
25 parameters, none required.
| Parameter | Type and limits | Description |
|---|---|---|
underlying_queryoptional | stringat most 8 characterspattern ^[A-Za-z][A-Za-z0-9.]{0,7}$ | Option root or family: SPX returns the SPX and SPXW roots, SPXW only the weekly root, QQQ, NDXP, RUTW, XSP ... Give this or underlying_symbols. |
underlying_queryoptional | array<string>comma-separated in one parameter1 to 10 itemseach at most 128 characterspattern ^[A-Za-z][A-Za-z0-9.]{0,7}$ | Several underlyings in one request, comma separated, at most 10 (for example SPX,SPY,QQQ). Use either underlying_symbol or underlying_symbols. |
datequeryoptional | stringdate | Trading date (YYYY-MM-DD). Default: the current session, else the most recent completed one. Overnight prints belong to the next trading date. |
sessionqueryoptional | stringrthgthalldefault rth | Trading session: rth is the regular session, gth the overnight (global trading hours) session before the trading date, all both. Overnight data requires the Pro plan and exists only for underlyings with an overnight session; GET /v1/options/sessions shows which. |
start_queryoptional | integerunix-msmin 946684800000max 4102444800000 | Start of the window (inclusive). The window must lie within one trading session; combine with date to name that session. |
end_queryoptional | integerunix-msmin 946684800000max 4102444800000 | End of the window (exclusive). |
contract_queryoptional | stringcallput | Calls or puts. Omit for both. |
date_queryoptional | stringdate | Only contracts expiring on this date. |
min_queryoptional | integermin 0max 3650 | Minimum days to expiration (0 = expires on the trading date). |
max_queryoptional | integermin 0max 3650 | Maximum days to expiration. |
min_queryoptional | numbermin 0max 1000000000000 | Minimum premium in US dollars of a print (price x size x multiplier). |
max_queryoptional | numbermin 0max 1000000000000 | Maximum premium in US dollars of a print. |
min_queryoptional | integermin 1max 1000000000 | Minimum print size in contracts. |
max_queryoptional | integermin 1max 1000000000 | Maximum print size in contracts. |
trade_queryoptional | array<string>comma-separated in one parametersweepblocksplitsinglegoldenmultilegcrossfloorauctioniso1 to 10 items | Comma-separated order types: sweep, block, split, single, golden, multileg, cross, floor, auction, iso. A print matches when any listed type applies. Sweeps and splits are inferred groupings, not exchange-confirmed. |
sidequeryoptional | array<string>comma-separated in one parameterabove_askat_asknear_askaskmidnear_bidat_bidbidbelow_bidunknown1 to 10 items | Comma-separated aggressor classes: above_ask, at_ask, near_ask, mid, near_bid, at_bid, below_bid, unknown. ask selects at_ask and near_ask, bid selects near_bid and at_bid. at_ask without near_ask (and at_bid without near_bid) can be asked for only on /v1/options/trades and /v1/options/flow/overnight; elsewhere use ask and bid. |
sentimentqueryoptional | array<string>comma-separated in one parameterbullishbearishneutralunknown1 to 4 items | Comma-separated sentiments: bullish (calls bought or puts sold), bearish (puts bought or calls sold), neutral (traded at the mid) and unknown (direction not determinable). |
otm_queryoptional | boolean | Only out-of-the-money contracts (strike beyond the underlying price). Prints without a known underlying price are excluded. |
include_queryoptional | boolean | Include multi-leg (complex order) prints. Default true. |
unusual_queryoptional | boolean | Only unusual activity: volume above open interest within 45 days, premium of at least $250,000, or an out-of-the-money sweep at the ask. |
min_queryoptional | number> 0max 1000000 | Lowest strike in dollars. |
max_queryoptional | number> 0max 1000000 | Highest strike in dollars. |
exchangequeryoptional | array<string>comma-separated in one parameternomamexcboeisearcaphlxboxmrcygmnic2miaxemldbxbzxedgxperlmemx1 to 17 items | Comma-separated exchanges the print executed on: nom, amex, cboe, ise, arca, phlx, box, mrcy, gmni, c2, miax, emld, bx, bzx, edgx, perl, memx. |
limitqueryoptional | integerdefault 100min 1max 500 | Maximum rows to return. |
cursor_queryoptional | stringat most 1024 characters | Opaque cursor returned as pagination.next_cursor_id; resumes the same query on the next page. |
Response
| Status | Meaning | Body |
|---|---|---|
200 | Successful response. | Schema below |
400 | Invalid, unknown or repeated parameters, or an invalid cursor. | Error object |
401 | Missing or invalid API key. | Error object |
403 | The plan, dataset release or account state does not allow this request. | Error object |
422 | The request is valid but no data exists for it. | Error object |
429 | Rate limit, burst limit or cooldown; wait Retry-After seconds.Retry-After | Error object |
500 | Internal error. | Error object |
503 | Data temporarily unavailable; retry after Retry-After seconds.Retry-After | Error object |
504 | The request timed out. | Error object |
Authenticated responses carry the X-RateLimit-* headers (see rate limits); 429 and 503 add Retry-After.
200 response body
dataarray<object>required31 fields insideasknumber | nullrequiredBest ask at execution; null when no valid quote was available.bidnumber | nullrequiredBest bid at execution; null when no valid quote was available.condition_codeintegerrequiredNumeric trade condition code.contract_typestringrequiredCall or put.callputdate_of_expirystringdaterequiredExpiration date.day_volumeintegerrequiredContracts traded in this contract so far on the trading date, as counted by the platform.days_to_expiryintegerrequiredCalendar days from the trading date to expiration.deltanumber | nullrequiredDelta at execution.exchangestringrequiredExecuting exchange, for example cboe, or unmapped_<code> for a venue without a name.exchange_codeintegerrequiredNumeric exchange code of the options price reporting authority.flagsarray<string>requiredCondition flags: iso (intermarket sweep), auction, cross, floor, complex (multi-leg order), tied, implied, ext_hours, late, cancelled, aggressor_hint, post_cash_close, vol_gt_oi (day volume above open interest), size_gt_oi (print size above open interest), no_side.isoauctioncrossfloorcomplextiedimpliedext_hourslatecancelledaggressor_hintpost_cash_closevol_gt_oisize_gt_oino_sidegroup_idstring | nullrequiredIdentifier of the sweep or split this print belongs to; null for a single print.idstringrequiredIdentifier of the print: root:expiry:strike x 1000:right:date:sequence. Stable; treat it as opaque.implied_volatilitynumber | nullrequiredImplied volatility solved at execution.is_blockbooleanrequiredA block: at least 100 contracts and $50,000 premium, or $250,000 premium, or a large auction, cross or floor print.is_goldenbooleanrequiredA golden sweep: a sweep of at least $1,000,000 premium.is_unusualbooleanrequiredVolume above open interest within 45 days, premium of at least $250,000, or an out-of-the-money sweep at the ask.open_interestinteger | nullrequiredOpen interest of the contract at the start of the trading date.otm_percentnumber | nullrequiredHow far out of the money the strike is, in percent of the underlying price; negative when in the money.premiumnumberrequiredPremium in US dollars: price x size x multiplier.pricenumberrequiredExecution price per share.sentimentstringrequiredDirection implied by the side: bullish (calls bought or puts sold), bearish (puts bought or calls sold), neutral (traded at the mid) or unknown.bullishbearishneutralunknownsessionstringrequiredSession of the print.rthgthcurbothersidestringrequiredAggressor class of the print against the quote it was classified with: above_ask (through the ask), at_ask, near_ask (inside the spread, above the mid zone), mid, near_bid, at_bid, below_bid, or unknown when the quote was missing or invalid.above_askat_asknear_askmidnear_bidat_bidbelow_bidunknownside_confidencenumberrequiredConfidence of the side classification, 0 to 1; lower when the quote was stale or the order was a complex one.sizeintegerrequiredContracts traded.strikenumberrequiredStrike in dollars.timestampintegerunix-msrequiredExecution time. Unix epoch milliseconds (UTC).trade_typestringrequiredPrint or order type. Sweeps and splits are inferred groupings of prints, not exchange-confirmed.sweepsplitsinglemultilegcrossfloorunderlying_pricenumber | nullrequiredUnderlying price at execution; null when unknown.underlying_symbolstringrequiredOption root of the contract, for example SPXW.
metaobjectrequiredMeta objectpaginationobjectrequiredPagination object
Example response
{
"data": [
{
"ask": 3.4,
"bid": 3.3,
"condition_code": 18,
"contract_type": "call",
"date_of_expiry": "2026-10-16",
"day_volume": 1810,
"days_to_expiry": 0,
"delta": 0.31,
"exchange": "cboe",
"exchange_code": 5,
"flags": [],
"group_id": null,
"id": "SPXW:20261016:6050000:C:20261016:48213",
"implied_volatility": 0.142,
"is_block": true,
"is_golden": false,
"is_unusual": false,
"open_interest": 4120,
"otm_percent": 0.4787,
"premium": 85000,
"price": 3.4,
"sentiment": "bullish",
"session": "rth",
"side": "at_ask",
"side_confidence": 0.9,
"size": 250,
"strike": 6050,
"timestamp": 1792161012345,
"trade_type": "single",
"underlying_price": 6021.4,
"underlying_symbol": "SPXW"
}
],
"meta": {
"as_of": 1760659200123,
"coverage": {
"complete": true
},
"delay_ms": 0,
"delayed": false,
"request_id": "0199f0c2-5a1e-7c3b-9d4e-2b6f8a1c3d5e",
"source": "opra"
},
"pagination": {
"count": 1,
"has_more": false,
"limit": 100,
"next_cursor_id": null,
"next_url": null
}
}Values are illustrative. Missing values are null, never 0.