Get option expiration schedule
GET/v1/expirations/{symbol}

Get option expiration schedule

Returns available expiration dates and days to expiry (DTE) for an underlying stock.

Endpoint Usage & Plan Rules

Plan Access
Included in Basic
Active subscription
Rate Limit
One request per call; no daily quota
Result Clamping
Not Clamped
Full response returned

Parameters

Required Parameters

NameTypeLocationDescription
symbolstringpathUnderlying equity ticker symbol. Missing symbol returns 400 missing_symbol.

Optional Parameters

NameTypeLocationDescription
minDteintegerqueryMinimum days to expiration (alias: dteMin; default 0).
maxDteintegerqueryMaximum days to expiration (alias: dteMax; default 365; 0 means unset, defaulting to 365).

Request Examples

curl -s -H "Authorization: Bearer $WSO_API_KEY" \
  "https://api.wheelstrategyoptions.com/v1/expirations/AAPL"

Try it

GET/v1/expirations/{symbol}
Included in Basic

Requests run against the live API with your key and count against its rate limits. The key is sent only to this site. Sign in to get a key

Add your API key to send.
Response

Send a request to see the live response, its status, timing, and rate-limit headers.

Response Attributes (200 OK)

FieldTypeNullableDescription
symbolstringNoUnderlying equity ticker symbol.
asOfstringYesISO 8601 UTC timestamp of expirations snapshot.
expirationsobject[]NoList of active expiration dates sorted chronologically.

Response Example

json
{
  "asOf": "2026-10-09T19:33:58.413Z",
  "expirations": [
    {
      "expiration": "2026-10-09",
      "dte": 0
    },
    {
      "expiration": "2026-10-12",
      "dte": 3
    },
    {
      "expiration": "2026-10-14",
      "dte": 5
    },
    {
      "expiration": "2026-10-16",
      "dte": 7
    },
    {
      "expiration": "2026-10-19",
      "dte": 10
    },
    {
      "expiration": "2026-10-21",
      "dte": 12
    },
    {
      "expiration": "2026-10-23",
      "dte": 14
    },
    {
      "expiration": "2026-10-30",
      "dte": 21
    },
    {
      "expiration": "2026-11-06",
      "dte": 28
    },
    {
      "expiration": "2026-11-13",
      "dte": 35
    },
    {
      "expiration": "2026-11-20",
      "dte": 42
    },
    {
      "expiration": "2026-11-27",
      "dte": 49
    },
    {
      "expiration": "2026-12-18",
      "dte": 70
    },
    {
      "expiration": "2027-01-15",
      "dte": 98
    },
    {
      "expiration": "2027-02-19",
      "dte": 133
    },
    {
      "expiration": "2027-03-19",
      "dte": 161
    },
    {
      "expiration": "2027-04-16",
      "dte": 189
    },
    {
      "expiration": "2027-06-17",
      "dte": 251
    },
    {
      "expiration": "2027-09-17",
      "dte": 343
    }
  ],
  "symbol": "AAPL"
}

Error Responses

StatusDescription
400Bad Request. The request body, query parameters, or path values violated validation constraints.
401Unauthorized. Missing, malformed, or invalid API key credential.
403Forbidden. Rejection reasons: `subscription_required` (no subscription record), `subscription_inactive` (subscription not active), `trial_ended` (trial has expired), `wrong_credential_type`, `origin_forbidden` (origin authentication failed).
404Not Found. Requested resource, ticker symbol, or option contract does not exist.
405Method Not Allowed. Returned with an `Allow` header when an unsupported HTTP method is used. Error code: `method_not_allowed`. (HEAD is served on all GET routes and counts against the rate limit like GET.)
429Too Many Requests. Rejection reasons: `rate_limited` (per-minute limit), `too_many_concurrent_requests` (in-flight cap), `too_many_auth_failures`.
500Internal Server Error. Unhandled internal server or database error.
503Service Unavailable. Backing database, cache, or external provider connection unavailable.
Batch fetch multiple option quotesGet filtered option chain matrix