Data freshness
One machine-readable answer to "how fresh is this number?" for every served surface.
Every surface Polyrank serves is stamped with the exact chain block (or observation time) it
reflects, in one registry. You never have to memorize per-widget staleness folklore: ask the
endpoint, or read the X-Data-As-Of-Block / X-Data-As-Of-Time response headers on the
leaderboard, trader, and market rails.
GET /v1/meta/freshness
Anonymous — no API key needed.
curl -s https://api.polyrank.app/v1/meta/freshness | jq '.surfaces[] | {surface, status, as_of_block, age_seconds}'{
"surfaces": [
{
"surface": "pnl.realized",
"anchor": "block",
"label": "Realized P&L (per-wallet)",
"status": "measured",
"as_of_block": "75123456",
"as_of_time": "2026-08-31T12:00:00.000Z",
"age_seconds": 93,
"budget_seconds": 18000
}
],
"frontier_readable": true,
"as_of": "2026-08-31T12:01:33.000Z"
}The four anchor classes
Not everything can be block-aligned, and pretending otherwise would be its own confusion:
- block — truth lives on-chain (trades, P&L, positions, resolutions).
as_of_blockis the exact Polygon block the surface reflects. - time — observations that exist only at the moment of capture (CLOB midpoints, market metadata). A mid has no block; a missed observation is gone, not "behind".
- slot — the prediction ledger's pre-registered 15-minute slots (a design property, not a staleness bug).
- cohort — ranks and percentiles are anchored to the vintage of the inputs they ranked:
input_frontiercarries the block of the metric snapshot that was ranked. Recomputing a rank per block is neither possible nor meaningful.
A registered surface with no stamp yet is status: "unmeasured" — absence never means
fresh.
The registry
| Surface | Anchor | What it is | Stamped by | Staleness budget |
|---|---|---|---|---|
chain.trades | block | Raw on-chain trades | exchange_trades_backfill, indexer_catchup_monitor | 15 min |
pnl.realized | block | Realized P&L (per-wallet) | pnl_trade_handler, position_ledger_batch | 5 h |
chain.resolutions | block | On-chain resolution completeness (attested) | resolution_reconcile | 2 h |
pnl.resolved | block | Resolution re-marks in P&L | pnl_resolution_handler | 30 min |
pnl.skill | block | Skill counts (brier / resolved tallies) | pnl_skill_handler | 5 h |
pnl.baseline | block | P&L baseline (wallet_token_agg + trade cursor) | position_ledger_batch, wallet_token_agg_build | 30 h |
pnl.unrealized | time | Unrealized P&L re-mark (mids applied) | pnl_mid_remark | 1 h |
mids | time | CLOB midpoints | open_position_mids, clob_market_subscriber | 30 min |
markets.meta | time | Market metadata (gamma) | gamma_sync | 1 h |
markets.tokenmap | time | Derived token map | derived_token_map_load | 1 h |
predictions | slot | Market prediction ledger (15-min slots) | market_prediction_snapshot | 1 h |
metrics.lifetime | block | Lifetime wallet metrics (the board) | metrics_grid_chain | 34 h |
metrics.24h | block | Windowed metrics (24h) | windowed_metrics_batch | 36 h |
metrics.7d | block | Windowed metrics (7d) | windowed_metrics_batch | 36 h |
metrics.30d | block | Windowed metrics (30d) | windowed_metrics_batch | 36 h |
metrics.90d | block | Windowed metrics (90d) | windowed_metrics_batch | 36 h |
ranks.lifetime | cohort (of metrics.lifetime) | Percentile ranks (lifetime) | percentile_rank_recompute, metrics_grid_chain | 16 h |
ranks.24h | cohort (of metrics.24h) | Percentile ranks (24h) | percentile_rank_recompute, windowed_metrics_batch | 16 h |
ranks.7d | cohort (of metrics.7d) | Percentile ranks (7d) | percentile_rank_recompute, windowed_metrics_batch | 16 h |
ranks.30d | cohort (of metrics.30d) | Percentile ranks (30d) | percentile_rank_recompute, windowed_metrics_batch | 16 h |
ranks.90d | cohort (of metrics.90d) | Percentile ranks (90d) | percentile_rank_recompute, windowed_metrics_batch | 16 h |
Budgets tighten by measurement, never by aspiration
Each budget is the surface's measured worst-case cadence as of 2026-08-31. As the realtime stages of the block-frontier plan land, budgets tighten to match the new measured reality — the endpoint is always the source of truth for what is promised today.