Open Interest
FreeValueStandardPro
Get the latest open interest snapshot for an option contract.
- Retrieve the last open interest message of an option contract.
- Open interest is reported around 06:30 ET every morning by OPRA and reflects the open interest at the end of the previous trading day.
- This endpoint will return no data if the market was closed for the day. Theta Data resets the snapshot cache at midnight ET every night.
SPY · 20250321
from thetadatadx import Client
client = Client.from_env()
rows = client.market_data.option_snapshot_open_interest(
"SPY", "20250321",
strike="570", right="C",
)
for t in rows:
print(t.date, t.open_interest) Sample response ·
JSON[
{
"open_interest": 8066,
"timestamp": "2025-08-20T06:30:13"
}
]Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
symbol | string | yes | — | Ticker symbol (e.g. AAPL) |
expiration | date | yes | — | Expiration date YYYYMMDD. Pass * to select all expirations for the underlying (chain-wide; query one date at a time). |
strike | string | no | * | Strike price in dollars as a string (e.g. 500 or 17.5). Use * for wildcard selection. |
right | string | no | both | Option side. Use both or * (alias) for calls and puts. Accepted values: call, put, both, *. |
max_dte | int | no | — | Maximum days to expiration |
strike_range | int | no | — | Strike range filter |
min_time | string | no | — | Minimum time filter |
timeout_ms | int | no | — | Per-request deadline in milliseconds. 0 means no deadline. |
Response
Rows of OpenInterestTick:
| Field | Type | Description |
|---|---|---|
ms_of_day | i32 | Milliseconds since midnight Eastern Time. |
open_interest | i32 | Total outstanding contracts. |
date | i32 | Trading date as a YYYYMMDD integer. |
Wildcard requests additionally populate expiration (YYYYMMDD), strike (dollars), and right ("C" / "P") on every row to identify the contract; on single-contract requests these are absent (None / null / undefined; the Rust and C rows carry the documented 0 / 0.0 / '\0' fills).