Back to blog

Option Chains Now Refresh About Every 90 Seconds in Market Hours

The latest-session Option Chain now updates about every 90 seconds while the market is open. What refreshes, how to read meta.as_of, and how often to poll.

3 min readOptionData
option-chainapirestchangelog
OPTION CHAINOptionData blog450445440435430425

The Option Chain API now keeps the current session fresh while the market is open. Since October 1, 2026, a request without date during U.S. market hours returns a chain that refreshes about every 90 seconds: contracts that trade pick up newer quotes, Greeks, IV, volume, open interest, and last price. The request and response shapes are unchanged, so existing integrations get fresher data without code changes.

Intraday chains at a glance

  • Refresh cadence: about every 90 seconds - current session, U.S. market hours

  • What refreshes: contracts that traded since the last update

  • Freshness marker: meta.as_of (UTC)

  • Suggested polling: 1–2 min narrow · 2–5 min full chain

What refreshes, and what doesn't

Each update rebuilds the contracts that traded. A contract with no new trade keeps its previous chain values, so one update does not refresh every Greek on the board. The response still includes every listed contract that matches your filters, including contracts that have not traded.

meta.as_of is the newest update represented in the response. It tells you how fresh the chain is overall; it does not mean every contract was refreshed at that moment. meta.trading_date names the session you received.

A new session becomes the default only after its complete chain is available. Until then, requests without date return the previous session and report it in meta.trading_date. Requests with a past date return that session's fixed snapshot, as before.

Poll on a schedule, act on as_of

Updates land about every 90 seconds, so polling faster mostly returns the same data. Option Chain admits at most one request per second per customer, shared across all of your API keys; a 429 includes Retry-After. That ceiling is for interactive and multi-filter use, not a polling rate. Poll a narrow request (one expiration or a strike range) every one to two minutes and a full chain every two to five, and only do new work when meta.as_of moves:

import time

import requests

URL = "https://www.optiondata.io/api/option-chain"
HEADERS = {"Authorization": "Bearer YOUR_API_KEY"}
QUERY = {"symbol": "AAPL", "put_call": "CALL"}  # narrow further with expiration_date or strike_min/strike_max

last_as_of = None
while True:
    response = requests.post(URL, headers=HEADERS, json=QUERY, timeout=30)
    if response.status_code == 429:
        time.sleep(int(response.headers.get("Retry-After", "60")))
        continue
    response.raise_for_status()
    body = response.json()
    as_of = body["meta"]["as_of"]
    if as_of != last_as_of:
        last_as_of = as_of
        print(body["meta"]["trading_date"], as_of, len(body["data"]), "contracts")
    time.sleep(90)

What it's good for

  • Intraday IV and skew monitoring. Track how implied volatility moves across strikes during the session instead of waiting for the close.
  • Quote-aware alerts. Check bid, ask, and open interest on the contracts your realtime flow alerts fire on.
  • Fresher pricing inputs. Feed current Greeks and quotes into risk or pricing models without maintaining a socket.

Pick the right tool

For every print as it happens, use the realtime WebSocket. For precomputed GEX, walls, Gamma Flip, and Max Pain, use Market Structure, whose intraday GEX summary can refresh about every five minutes. The Option Chain is the contract-level board in between.

The full contract, including every field and filter, is in the Option Chain API reference. For an introduction to the endpoint, see Option Chain API: The Whole Chain in One POST.


Run it with the OptionData API. Sign up, use the Support page's QR contact module to request the invitation required for qualification, then explicitly activate the 14-day no-card trial when you are ready. Eligible trial users can receive 50% off the first year with a promotion code from Sales; contact Sales for the code, then enter it on Billing before the trial ends. One key covers Realtime WebSocket, Historical SQL, Option Chain REST, and Market Structure.

OptionData API

Run this with the OptionData API — one Pro key covers Realtime WebSocket, Historical SQL, Option Chain, and Market Structure.

Pull the full option chain
Snapshot every strike and expiration (bid/ask, last price, OI, IV, Greeks) for a symbol in one POST — the latest session or any past trading day.
curl -X POST https://www.optiondata.io/api/option-chain \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"symbol":"AAPL"}'