Skip to main content
Every v2 response carries computed_at and freshness_seconds in the meta block. This page explains what they mean and the cadence behind them.

Refresh cadences

Reading freshness from a response

Every successful response includes:
  • computed_at — wall-clock when the underlying cache was last written
  • freshness_secondsnow - computed_at, in seconds
For a healthy 30s endpoint, freshness_seconds should be in the range 0–60. Values consistently > 90 mean the worker is having trouble refreshing — check /v2/status for confirmation.

Operational status

/v2/status gives you a per-symbol per-category health grid:
Each cell is one of:
  • healthy — within the expected refresh window
  • degraded — behind schedule but still usable
  • unhealthy — dangerously stale; worker is having trouble
  • unavailable — no cache at all (cold start or extended outage)
The overall_status is the worst case across the grid — pessimistic on purpose so monitoring alerts trip on the first real problem.

When you don’t care about freshness

For one-off historical queries (/v2/gex/stress-history, /v2/options/iv/iv-rv, /v2/options/vrp), the data is daily/historical and computed_at reflects when the historical row was written. Don’t panic if freshness_seconds is huge — that’s normal for time-series.

Public liveness probe

/v2/health is a no-auth liveness probe for external monitors (UptimeRobot, Datadog synthetic, etc.). Returns status: ok | degraded | unhealthy based on Redis + Postgres reachability. Always HTTP 200 — the body has the truth, not the status code, so the envelope contract stays clean.

Response format

Every meta field documented in detail.

Rate limits

Cadence considerations for polling — don’t poll faster than the refresh.