Tick-level options trades for one contract: price, size, exchange, condition codes, and nanosecond timestamps. Use it for intraday analysis, building aggregates, microstructure work, and audit trails.
This page covers historical trades and the last trade shortcut.
Example Endpoint
/v1/options/trades/O:NFLX260402C00075000/?limit=10Endpoints
GET /v1/options/trades/{options_ticker}
GET /v1/options/trades/{options_ticker}/last
Historical trades
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
options_ticker | string | Yes | Full options ticker (for example O:NFLX260402C00075000). Encode : as %3A in URLs if needed. |
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
timestamp | string | No | Filter by trade time: YYYY-MM-DD or a nanosecond Unix timestamp string. |
timestamp.gte | string | No | Lower bound (date or nanosecond timestamp). |
timestamp.gt | string | No | Strictly greater than. |
timestamp.lte | string | No | Upper bound. |
timestamp.lt | string | No | Strictly less than. |
sort | string | No | Field used for ordering. |
order | string | No | Sort direction for sort. |
limit | integer | No | Max rows returned. Default 1000, maximum 10000. |
page | string | No | Pagination continuation: use the URL in next_url, or pass the page query value from that URL here. |
Response
| Field | Type | Description |
|---|---|---|
status | string | Outcome (for example OK). |
request_id | string | Unique identifier for this request, assigned by CuteMarkets. |
results | array | Trade objects (newest or oldest first per sort / order). |
next_url | string | When more trades exist, full URL for the next page. |
Use limit and time filters to narrow each page; follow next_url when present.
Each element of results may include:
| Field | Type | Description |
|---|---|---|
sip_timestamp | integer | Nanosecond time when the SIP recorded the trade. |
participant_timestamp | integer | Nanosecond exchange/participant time, when present. |
price | number | Premium per share (contract multiplier still applies to notional). |
size | number | Contracts traded (volume). |
exchange | integer | Exchange / participant id (numeric OPRA/SIP id). |
conditions | array[integer] | Sale condition codes. |
correction | integer | Correction indicator when present. |
id | string | Trade id, when present. |
sequence_number | integer | Sequence when supplied. |
decimal_size | string | String form of size when supplied. |
Example request
curl \
"https://api.cutemarkets.com/v1/options/trades/O:NFLX260402C00075000/?limit=10" \
-H "Authorization: Bearer YOUR_API_KEY"
Time range (example):
curl \
"https://api.cutemarkets.com/v1/options/trades/O:NFLX260402C00075000/?timestamp.gte=2026-03-01×tamp.lte=2026-03-31&limit=500&sort=timestamp&order=desc" \
-H "Authorization: Bearer YOUR_API_KEY"
Sample response (historical)
{
"results": [
{
"conditions": [209],
"exchange": 313,
"id": "",
"price": 20.7,
"sequence_number": 2634406060,
"sip_timestamp": 1775071411326665293,
"size": 5,
"decimal_size": "5.0"
},
{
"conditions": [209],
"exchange": 307,
"id": "",
"price": 20,
"sequence_number": 1491034441,
"sip_timestamp": 1774973863784892318,
"size": 2,
"decimal_size": "2.0"
},
{
"conditions": [233],
"exchange": 302,
"id": "",
"participant_timestamp": 1774460986022000000,
"price": 17.4,
"sequence_number": 0,
"sip_timestamp": 1774460986022000000,
"size": 3,
"decimal_size": "3.0"
}
],
"status": "OK",
"request_id": "cm_b922dc90c9e74f0f98305e72a57955af"
}
Related workflow pages
How trades differ from quotes
Trades are executed prints. They prove that contracts changed hands, but they do not prove that the same price was available to your strategy at a later timestamp. Quotes show the bid and ask market; trades show what actually printed. A realistic options workflow usually needs both, because trade activity and executable context answer different questions.
Use trades to measure activity, tape behavior, volume bursts, and whether an aggregate bar was supported by real prints. Use quotes to test entries, exits, spread constraints, and fill assumptions. If a model buys at the midpoint but only stores trades, the fill logic cannot prove that the midpoint was available. If a model stores only quotes, it may miss whether there was actual printed activity around the signal.
Backtesting guidance
When trades feed a backtest, preserve the exact contract, timestamp bounds, sort order, and page sequence. Option contracts are sparse compared with stocks, so a query can return no trades even though the contract had an active quote market. That is not necessarily an error. It means the research code needs a fallback policy: reject the fill, use quotes for execution evidence, or widen the activity window while labeling the assumption.
Condition codes and corrections also matter. A production-grade research pipeline should keep the raw condition array and correction indicator, then decide which prints are eligible for volume, VWAP, or signal calculations. Do not silently collapse all prints into one price series without documenting the eligibility rule.
Last trade caveats
The last-trade endpoint is convenient for UI cards, current-state panels, and quick diagnostics. It should not be used as a historical fill model. A last trade can be stale, off the current bid/ask, or affected by sale conditions. Display the timestamp with the price and pair it with the latest quote when the user needs to evaluate whether the contract is currently actionable.
Last trade
Returns the latest trade for one options contract in a compact object (nanosecond timestamps, abbreviated field names). The shape differs from rows in Historical trades, use the field table below.
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
options_ticker | string | Yes | Full options ticker (for example O:NFLX260410C00060000). |
Query parameters
None.
Response
| Field | Type | Description |
|---|---|---|
status | string | Outcome (for example OK). |
request_id | string | Unique identifier for this request, assigned by CuteMarkets. |
results | object | Single last-trade payload (short keys below). |
Fields on results when a last sale is available (names are abbreviated):
| Field | Type | Description |
|---|---|---|
T | string | Options contract symbol. |
p | number | Trade price per share (premium). |
s | number | Size (contracts / volume). |
t | integer | SIP nanosecond Unix timestamp (when the SIP received the trade). |
x | integer | Exchange id (numeric). |
c | array[integer] | Condition codes. |
y | integer | Participant / exchange nanosecond timestamp (when the trade was generated). |
f | integer | TRF nanosecond timestamp (when the trade reporting facility received the message), when present. |
r | integer | Trade reporting facility id, when present. |
i | string | Trade id (scoped by ticker, exchange, and TRF rules), when present. |
q | integer | Sequence number (increasing per symbol; not always contiguous), when present. |
e | integer | Trade correction indicator, when present. |
z | integer | Tape id: 1 = Tape A (NYSE-listed), 2 = B (NYSE Arca / NYSE American), 3 = C (NASDAQ), when present. |
ds | string | Decimal size as a string, when present. |
When no last trade exists for the contract, the response uses the usual error envelope, treat non-OK statuses like other options routes.
Example request
curl \
"https://api.cutemarkets.com/v1/options/trades/O:NFLX260410C00060000/last/" \
-H "Authorization: Bearer YOUR_API_KEY"
Sample response
{
"results": {
"T": "O:NFLX260410C00060000",
"c": [233],
"ds": "10.0",
"i": "",
"p": 35.14,
"q": 2765195189,
"s": 10,
"t": 1775072777652877667,
"x": 302
},
"status": "OK",
"request_id": "cm_a1b2c3d4e5f6478990a1b2c3d4e5f678"
}