Skip to content

Options · Reference and discovery

Options contracts

Contracts of an underlying: those listed now, or those quoted on a past date.
On this page

The contracts of an underlying ordered by date_of_expiry, strike, contract_type (call before put), paginated with cursor_id. Without date it lists what is listed now; with date it lists the contracts that were quoted on that date, including ones that have since expired. Without date_of_expiry the listing covers the expirations within max_dte days (default 30). For an index family such as SPX every root is included and each row names its root.

Example request

curl -sS --get "https://api.ordermap.si/v1/options/contracts" \
  -H "Authorization: Bearer $ORDERMAP_API_KEY" \
  --data-urlencode underlying_symbol=SPXW

Set ORDERMAP_API_KEY to your key. Replace the dates with a recent trading date.

Parameters

7 parameters, 1 required.

ParameterType and limitsDescription
underlying_symbolqueryrequiredstringat most 8 characterspattern ^[A-Za-z][A-Za-z0-9.]{0,7}$Underlying: an option root (SPXW, QQQ ...) or an index family (SPX covers SPX and SPXW).
date_of_expiryqueryoptionalstringdateOnly this expiration, YYYY-MM-DD.
contract_typequeryoptionalstringcallputOnly calls or only puts.
datequeryoptionalstringdateList the contracts quoted on this past date, YYYY-MM-DD, instead of the current listing.
max_dtequeryoptionalintegermin 0max 1000Without date_of_expiry: include expirations up to this many days away (default 30).
limitqueryoptionalintegerdefault 1000min 1max 2500Maximum rows to return.
cursor_idqueryoptionalstringat most 1024 charactersOpaque cursor returned as pagination.next_cursor_id; resumes the same query on the next page.

Response

StatusMeaningBody
200Successful response.Schema below
400Invalid, unknown or repeated parameters, or an invalid cursor.Error object
401Missing or invalid API key.Error object
403The plan, dataset release or account state does not allow this request.Error object
422The request is valid but no data exists for it.Error object
429Rate limit, burst limit or cooldown; wait Retry-After seconds.Retry-AfterError object
500Internal error.Error object
503Data temporarily unavailable; retry after Retry-After seconds.Retry-AfterError object
504The 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>required5 fields inside
    • contract_typestringrequiredCall or put.callput
    • date_of_expirystringdaterequiredExpiration date.
    • 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.
    • strikenumberrequiredStrike price in dollars.
    • underlying_symbolstringrequiredOption root of the contract.
  • metaobjectrequiredMeta object
  • paginationobjectrequiredPagination object

Example response

{
  "data": [
    {
      "option_symbol": "SPXW  261016C05800000",
      "underlying_symbol": "SPXW",
      "date_of_expiry": "2026-10-16",
      "strike": 5800,
      "contract_type": "call"
    }
  ],
  "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.