Options · Single contract
Options contract trade quotes
Every trade of one contract with the best bid and offer at the trade.
GET
/v1/options/contract/trade-quotesoptionsContractTradeQuotesEach trade print of one contract paired with the national best bid and offer that preceded it, oldest first, paginated with cursor_id. Use it to classify trades against the market. Select a range with start_time and end_time (at most 31 days) or one trading date with date; the default is the latest regular session.
Example request
curl -sS --get "https://api.ordermap.si/v1/options/contract/trade-quotes" \
-H "Authorization: Bearer $ORDERMAP_API_KEY" \
--data-urlencode underlying_symbol=SPXW \
--data-urlencode contract_type=call \
--data-urlencode strike=5800 \
--data-urlencode date_of_expiry=2026-10-16const params = new URLSearchParams({
underlying_symbol: "SPXW",
contract_type: "call",
strike: "5800",
date_of_expiry: "2026-10-16",
});
const res = await fetch(`https://api.ordermap.si/v1/options/contract/trade-quotes?${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
10 parameters, 4 required.
| Parameter | Type and limits | Description |
|---|---|---|
underlying_queryrequired | stringat most 8 characterspattern ^[A-Za-z][A-Za-z0-9.]{0,7}$ | Option root of the contract, at most six characters: SPXW (weekly and daily, PM-settled) and SPX (monthly, AM-settled) are different roots, as are NDXP and NDX, RUTW and RUT, QQQ, SPY, XSP ... |
contract_queryrequired | stringcallput | call or put. |
strikequeryrequired | number> 0max 99999.999 | Strike price in dollars with at most three decimals, for example 5800 or 5812.5. |
date_queryrequired | stringdate | Expiration date of the contract, YYYY-MM-DD. |
start_queryoptional | integerunix-msmin 946684800000max 4102444800000 | Start of the range, Unix epoch milliseconds, inclusive. At most 31 days. |
end_queryoptional | integerunix-msmin 946684800000max 4102444800000 | End of the range, Unix epoch milliseconds, exclusive. At most 31 days. |
datequeryoptional | stringdate | One trading date, YYYY-MM-DD, instead of start_time and end_time. With a session of gth the window starts on the evening before. |
sessionqueryoptional | stringrthgthalldefault rth | Trading session: rth is the regular session (09:30-16:15 ET), gth the overnight session that ends on the morning of the trading date (the previous evening 20:15 ET to 09:25 ET, split at midnight ET), all is both with the curb session (to 17:00 ET). gth and all require the overnight entitlement. |
limitqueryoptional | integerdefault 1000min 1max 5000 | 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>required17 fields insideasknumber | nullrequiredBest offer price.ask_conditioninteger | nullrequiredQuote condition code of the offer.ask_exchangeinteger | nullrequiredExchange code of the best offer.ask_sizeinteger | nullrequiredContracts offered.bidnumber | nullrequiredBest bid price.bid_conditioninteger | nullrequiredQuote condition code of the bid.bid_exchangeinteger | nullrequiredExchange code of the best bid.bid_sizeinteger | nullrequiredContracts bid.conditionintegerrequiredSale condition code.exchangeintegerrequiredExchange code of the venue that executed the trade.extended_conditionsarray<integer>requiredExtended sale condition codes; empty when none apply.option_symbolstringrequiredOCC option symbol of the contract: root padded to six characters, expiration YYMMDD, C or P and the strike in thousandths over eight digits.pricenumberrequiredTrade price per contract in dollars.quote_timestampinteger | nullunix-msrequiredTime of the quote paired with the trade. Unix epoch milliseconds (UTC).sequenceintegerrequiredSequence number of the trade in the consolidated feed.sizeintegerrequiredContracts traded.timestampintegerunix-msrequiredTime of the trade. Unix epoch milliseconds (UTC).
metaobjectrequiredMeta objectpaginationobjectrequiredPagination object
Example response
{
"data": [
{
"option_symbol": "SPXW 261016C05800000",
"timestamp": 1792157400123,
"quote_timestamp": 1792157400120,
"sequence": 1563208,
"price": 12.4,
"size": 25,
"exchange": 5,
"condition": 18,
"extended_conditions": [],
"bid": 12.3,
"bid_size": 10,
"bid_exchange": 5,
"bid_condition": 50,
"ask": 12.6,
"ask_size": 12,
"ask_exchange": 5,
"ask_condition": 50
}
],
"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": 1000,
"next_cursor_id": null,
"next_url": null
}
}Values are illustrative. Missing values are null, never 0.