Exact expiration
Use this for one selected expiration date. It is the cleanest request shape for a chain, a strike table, or a single-date contract export.
expiration_date=2026-05-15
Expiration filters are simple, but off-by-one assumptions can break a scanner or historical study. This page explains exact expiration filters, inclusive range filters, exclusive range filters, and the API sequence for verifying the dates before requesting contracts.
Exact filter
expiration_date
Matches one expiration date exactly, such as 2026-05-15.
Inclusive filters
.gte and .lte
Include contracts on the boundary date.
Exclusive filters
.gt and .lt
Exclude contracts on the boundary date.
Semantics
Use expiration_date when the model has already selected a single listed date. This is the correct filter for chain-like views, one-expiration scanners, and contract lists where the UI date picker has a specific value. The result set should only contain contracts expiring on that date.
Use range filters when the model is asking for a window: all expirations through the next monthly OpEx, all LEAPS beyond one year, or all contracts between two event dates. The suffix controls whether the boundary date is included. gte and lteinclude the boundary; gt and ltexclude it.
Use this for one selected expiration date. It is the cleanest request shape for a chain, a strike table, or a single-date contract export.
expiration_date=2026-05-15
Use gte when the first date in the window should be included. This is common for scanners starting from the next listed expiration.
expiration_date.gte=2026-05-15
Use lt when the cutoff date should not be included. This is useful for windows such as before the next monthly OpEx.
expiration_date.lt=2026-05-15
Examples
A robust client usually discovers listed dates first, then applies exact or range filters. This prevents calendar assumptions from leaking into the contract request and makes date boundary behavior explicit in the URL.
# Discover valid listed dates first
curl "https://api.cutemarkets.com/v1/tickers/expirations/SPY/" \
-H "Authorization: Bearer YOUR_API_KEY"
# Exact date: only the May 15, 2026 expiration
curl "https://api.cutemarkets.com/v1/options/contracts/?underlying_ticker=SPY&expiration_date=2026-05-15&limit=100" \
-H "Authorization: Bearer YOUR_API_KEY"
# Inclusive range: include May 15, 2026 and later
curl "https://api.cutemarkets.com/v1/options/contracts/?underlying_ticker=SPY&expiration_date.gte=2026-05-15&limit=100" \
-H "Authorization: Bearer YOUR_API_KEY"
# Exclusive range: before May 15, 2026, not including May 15
curl "https://api.cutemarkets.com/v1/options/contracts/?underlying_ticker=SPY&expiration_date.lt=2026-05-15&limit=100" \
-H "Authorization: Bearer YOUR_API_KEY"Testing
Pick a known listed monthly date and assert that every returned contract has exactly that expiration_date.
Use gte and lte with the same listed date and confirm contracts on the boundary remain in the response.
Switch to gt or lt and confirm contracts on the boundary disappear from the response.
Request a date returned by a generic calendar but not by the expirations endpoint, and make sure the client handles an empty result.
Last verified
Date-sensitive calendar references on this page were checked on April 27, 2026. Calendar math is useful for planning, but listed contracts and exchange calendars should still be verified before production workflows run.
Yes. The gte suffix is inclusive, so expiration_date.gte=2026-05-15 includes contracts expiring on May 15, 2026.
No. The lt suffix is exclusive, so expiration_date.lt=2026-05-15 returns contracts expiring before May 15, 2026.
Use expiration_date for an exact single expiration. Use gte, gt, lte, and lt when building date windows, rolling scanners, or LEAPS screens.
Related pages