GEX data status, freshness and polling

The provenance row at the top of the GEX workspace carries three separate chips: which option-chain source is in use and how far behind it publishes, whether the US options session is open, and how old the chain actually on screen is. Freshness is measured from the backend's chain timestamp, never from the moment the request came back.

Senzoukria · Documentation · Updated September 2026


Where to find it

Where
GEX workspace → provenance row, shown above every GEX page
Stale threshold
20 minutes of chain age (STALE_AFTER_MIN)
Age refresh
Chip ages are re-read every 10 seconds
Refresh cadence
Free tier: full chain every 15 min, spot tick every 5 s. OPRA: backend loop every 90 s. Databento: full refresh every 120 s, no spot tick.
Requirement
GEX needs an options data source of your own; market data is billed by the provider, not by Senzoukria.

What it does

Gamma exposure is computed, not published, and it is only as good as the option chain it was computed from. The provenance row separates four things that an earlier build blurred into a single "LIVE" badge: the source and its publication delay, the state of the US options session, the age of the chain in memory, and the state of the last request.

The word LIVE is only shown when the chain carries a usable timestamp, its age is inside the stale threshold, and the selected source is a real-time one. A source with a known publication delay reports DELAYED instead, with the delay written out, even when everything else is healthy.

Source labels and known delay

The first chip: what the provider says about itself, read from the source selection.
SourceChip labelAssumed delay
Alpaca, OPRA entitlement onALPACA OPRA · REAL-TIMENone declared
Alpaca, free tierALPACA · 15 MIN DELAY15 minutes
DatabentoDATABENTO OPRA · ≈15 MIN15 minutes
TradierTRADIER · REAL-TIMENone declared
Market DataMARKET DATA · CACHED · DELAY UNKNOWNUnknown — the connector requests cached data

The data chip, state by state

The third chip is the only one that measures what is on screen. It is derived from the chain timestamp published by the backend, so a request served from the Rust cache does not reset the clock.

Every state the data chip can take, and what each one means.
ChipWhen it appearsWhat it tells you
LOADING…No chain received yet, a request is in flightNothing on the page is populated yet
NO DATANo chain received, last request failed or never ranThe error text, when there is one, is in the tooltip
PROVIDER ERRORA chain is displayed but the last request failedWhat you are reading came from before the failure
STALE · n minChain age above 20 minutesNothing on the page has been refreshed since
AGE UNKNOWNThe source publishes no chain timestampFreshness cannot be measured, so it is not claimed
LIVE · chain n minTimestamped, inside the threshold, real-time sourceThe only state that says live
DELAYED ≈n MIN · chain n minTimestamped and fresh, but the source publishes lateBoth numbers are shown because they mean different things

How to use it

Read the row left to right before reading any level. A DELAYED source with a young chain is usable for structure and useless for the last two minutes of a move. A STALE chip means the walls on screen belong to an earlier state of the book, and the refresh action in the assumptions panel is the fix.

The 20-minute threshold is chosen against the refresh cadence: at 15 minutes for the free tier and 90 to 120 seconds for the paid feeds, it tolerates one missed cycle and refuses to tolerate two.

Limits and pitfalls

The stale flag carried by the snapshot payload itself is never raised by any code path, so it is deliberately ignored; freshness is measured here instead. The five-second spot tick on the free tier refreshes the underlying price only — it does not reload the option chain, which is why the chain clock and the spot clock are kept apart.

Open interest is published once a day after the close. Intraday, every GEX figure moves with spot and with the passage of time, not with positions taken today, and a perfectly fresh chip does not change that.

This page in other languages

Frequently asked questions

Why does my chip say DELAYED when auto-refresh is on?
Auto-refresh describes what the application does; the delay describes what the provider publishes. A free-tier Alpaca chain is roughly 15 minutes behind the market however often it is polled, so the chip reports both the publication delay and the measured chain age.
What does AGE UNKNOWN mean — is it broken?
No. It means the source returned a chain without a usable timestamp, so the age cannot be computed. Rather than invent a freshness number, the workspace states that it does not know one, and the figures may be older than they look.
How often is the option chain actually reloaded?
Every 15 minutes on the free tier, every 90 seconds when the backend OPRA loop is running, and every 120 seconds on Databento, where the Rust cache means roughly one call in two reaches the provider and the credits are spared.

Keep reading