Alphanume

Insights

How to Get a Point-in-Time Universe of Stocks with Weekly Options

Alphanume Team · May 22, 2026

Use Alphanume's Historical Optionable Tickers endpoint to build a clean, weeklies-only universe for any historical date.

Strategies that trade short-dated options need names with weekly expirations, and they need to know which names had weeklies on the date being tested, not today. The Alphanume Historical Optionable Tickers endpoint provides that point-in-time universe with an expiration-structure flag built in.

The endpoint
GET https://api.alphanume.com/v1/optionable-tickers

Authenticate with ?api_key=alp_your_key or an X-API-Key header (the key is optional for a limited subset). The dataset is cursor-paginated, so paginated responses also return has_more and next_cursor.

Pull a snapshot and keep weeklies
import requests

r = requests.get(
    "https://api.alphanume.com/v1/optionable-tickers",
    params={"date": "2026-06-01", "api_key": "alp_your_key"},
)
weeklies = [row["ticker"] for row in r.json()["data"] if row["has_weeklies"] == 1]
print(len(weeklies), "names with weekly options")

The has_weeklies flag does the filtering for you, and avg_days_between lets you go finer: a value near 7 indicates dense weekly expirations, while larger values indicate sparser monthly-only structures.

Handle pagination

The universe is large, so loop on the cursor until it is exhausted:

cursor = None
universe = []
while True:
    params = {"date": "2026-06-01", "api_key": "alp_your_key"}
    if cursor:
        params["cursor"] = cursor
    data = requests.get("https://api.alphanume.com/v1/optionable-tickers", params=params).json()
    universe += data["data"]
    if not data.get("has_more"):
        break
    cursor = data["next_cursor"]
Why point-in-time matters

Building your universe from monthly snapshots taken on the first trading day of each month means your backtest only ever sees names that were genuinely optionable at the time. That removes the survivorship bias that creeps in when you screen history against today's listings.

Access and limits

Historical Optionable Tickers is on the free tier as a rolling 30-day delayed window, Pro at 600 requests per minute. Start with a free Alphanume API key and the API documentation, or explore it on Alphanume.

Building a weeklies-only universe

Strategies that trade short-dated options need names with weekly expirations, and crucially they need the names that had weeklies on the date being tested, not the ones that have them today. The has_weeklies flag does the filtering directly, while avg_days_between distinguishes dense weekly structures (values near 7) from sparser monthly-only ones.

The universe is large, so the endpoint is cursor-paginated: loop on next_cursor while has_more is true to pull a complete snapshot. Assembling your universe from these monthly point-in-time snapshots is what keeps survivorship bias out of any option-chain-dependent backtest you run on top.

Frequently asked questions

What endpoint returns optionable tickers?

GET https://api.alphanume.com/v1/optionable-tickers. Authenticate with ?api_key=alp_your_key or an X-API-Key header; the key is optional for a limited subset.

How do I filter to weeklies only?

Pull a snapshot and keep rows where has_weeklies equals 1. Use avg_days_between to distinguish dense weeklies from sparser monthly-only structures.

How do I handle pagination?

Loop on next_cursor while has_more is true, passing the cursor on each request, until the universe is exhausted.

Why does point-in-time matter here?

Building the universe from monthly snapshots means your backtest only sees names that were genuinely optionable at the time, which removes survivorship bias.

What date format does it expect?

All dates use YYYY-MM-DD. Pass a date to pull the snapshot for that month.