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
Result Clamping
Not Clamped
Full response returned
Parameters
Required Parameters
| Name | Type | Location | Description |
|---|---|---|---|
| symbol | string | path | Underlying equity ticker symbol. Missing symbol returns 400 missing_symbol. |
Optional Parameters
| Name | Type | Location | Description |
|---|---|---|---|
| minDte | integer | query | Minimum days to expiration (alias: dteMin; default 0). |
| maxDte | integer | query | Maximum 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 BasicAdd 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)
| Field | Type | Nullable | Description |
|---|---|---|---|
| symbol | string | No | Underlying equity ticker symbol. |
| asOf | string | Yes | ISO 8601 UTC timestamp of expirations snapshot. |
| expirations | object[] | No | List 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
| Status | Description |
|---|---|
| 400 | Bad Request. The request body, query parameters, or path values violated validation constraints. |
| 401 | Unauthorized. Missing, malformed, or invalid API key credential. |
| 403 | Forbidden. 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). |
| 404 | Not Found. Requested resource, ticker symbol, or option contract does not exist. |
| 405 | Method 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.) |
| 429 | Too Many Requests. Rejection reasons: `rate_limited` (per-minute limit), `too_many_concurrent_requests` (in-flight cap), `too_many_auth_failures`. |
| 500 | Internal Server Error. Unhandled internal server or database error. |
| 503 | Service Unavailable. Backing database, cache, or external provider connection unavailable. |