Weekly Options Classification API
Options workflows often need more than a list of dates. You need to know whether a listed expiration is weekly, standard monthly, quarterly OpEx, or a long-dated LEAPS cycle.
Weekly
Listed short-dated cycle that is not the standard monthly third-Friday expiration.
Monthly
Standard third-Friday cycle, adjusted earlier if that Friday is a market holiday.
Quarterly
Monthly cycle in March, June, September, or December.
LEAPS
Long-dated monthly cycle, often January, listed far into the future.
Classification signals to preserve
The API can return listed dates and contracts; your application should store enough context to explain why a date was labeled weekly, monthly, quarterly, or long-dated.
| Signal | Reason | Implementation detail |
|---|---|---|
| Listed date | The listed expiration is the source of truth for whether contracts exist. | Fetch `/v1/tickers/expirations/{ticker}` before assigning labels or requesting a chain. |
| Adjusted monthly date | The standard third-Friday rule can move earlier when the market is closed. | Calculate the adjusted monthly anchor, then compare the listed date against that anchor. |
| Quarterly month | March, June, September, and December monthly cycles often need a separate OpEx label. | If the adjusted monthly date falls in a quarterly month, classify it as quarterly instead of generic monthly. |
| Distance from today | Long-dated contracts can look like normal monthly expirations if the date is stored without context. | Keep a long-dated or LEAPS candidate label when the expiration is far beyond nearby weekly cycles. |
Production detail
Separate classification from tradability
A classification label explains where a date sits in the expiration calendar. It does not prove a contract is liquid, active, or suitable for a scanner. After the date is classified, request contracts for that date, then inspect quote width, quote timestamp, open interest, and recent trade evidence before surfacing a leg.
This separation matters for thinly traded names and for backtests. A backtest that assumes every Friday is a tradable weekly date can create empty contract sets or select contracts that were not listed at the simulated time. A cleaner workflow stores the listed date, classification label, OCC symbol, and quote evidence together.
Minimum classification logic
Fetch listed expirations first, then classify each date against the adjusted third-Friday monthly cycle. Keep holiday adjustment separate from listed-date discovery.
def classify_expiration(date, monthly_date):
if date == monthly_date and date.month in {3, 6, 9, 12}:
return "quarterly"
if date == monthly_date:
return "monthly"
if date.year - today.year >= 1:
return "leaps_or_long_dated"
return "weekly"Endpoint examples
curl "https://api.cutemarkets.com/v1/tickers/expirations/QQQ/" \
-H "Authorization: Bearer YOUR_API_KEY"
curl "https://api.cutemarkets.com/v1/options/contracts/?underlying_ticker=QQQ&expiration_date=2026-04-17&limit=100" \
-H "Authorization: Bearer YOUR_API_KEY"Related pages