Skip to content

OverviewCore concepts

A price and a daily statistic on the same market can have different ages. Use the timestamp for the value you display. A successful request does not make every field current.

Every market record carries asOf, the observation time rather than your request time. A newer price observation can advance it while catalog statistics stay older. Read Capability-honest data for provenance and capabilities.

  • asOf describes the catalog observation, or the newer price observation when applied.
  • volume24hAsOf describes the volume observation. It does not advance with a price update.
  • priceChangeAsOf is the oldest evaluation time among the market’s enriched outcomes. It is not the current quote time or the time the calculation finished.

A null timestamp means unknown. Keep it unknown in your display.

Across venues, a market with unchanged stored content keeps its catalog asOf until content changes or the first walk meets its per-market age threshold of 4.5 to under 7.5 hours by code default (normally 6 or 8 hours on the 2-hour schedule), so an older timestamp alone does not mean a walk failed.

The catalog walk is scheduled every 2 hours. The production serving snapshot refreshes every 15 minutes using incremental reloads of rows whose write time advanced. A full rebuild runs every 6 hours by code default, which operators may tune. Changes become visible after the completed refresh that includes them. Collection time and serving time therefore both matter.

Intervals marked default below are code defaults. Operators may tune them. Work takes time, so a scheduled interval is not a promise that every row updates within that interval.

Field familyUnit and meaningRefresh schedule
outcomes[].priceProbability from 0 to 1; null means unavailable. Read priceBasis to distinguish a midpoint, last trade, or another source.An enabled hot set for Polymarket and Kalshi refreshes selected markets independently of the full catalog walk, then waits 45 seconds by default. The long tail uses full venue walks, with a 30-second default wait between completed walks. These cadences apply only to venues with price-refresher lanes; walk duration adds to each interval and venue-specific settings can differ. novig and predictstreet have no price-refresher lane; any available prices update only with the catalog walk. novig publishes no catalog price. sxbet also has no price-refresher lane, but its default V3 catalog walk fetches books for open active markets within a 25-minute default budget. Each outcome gets a midpoint with priceBasis: mid only when its book has both a best bid and a best ask. A missing side leaves that outcome unpriced. A failed snapshot leaves that market unpriced. If the 25-minute default budget expires or 25 snapshot requests fail consecutively (the code default), the walk stops fetching books. Markets left without a fetched book are written with null prices; an earlier midpoint is not kept. As of 2026-10-10, booked SX Bet rows use their book request time when ingest advances asOf. This time precedes pacing and metadata waits. A walk without a book keeps the previous stamp, including at due freshness touches. A newly inserted, never-booked row uses its first walk’s start. An in-age fill can price a null outcome even at or before that stamp. A stored non-null price requires a newer fill. When the overlay supplies a price, the served asOf becomes the fill time. A booked market whose stored content did not change keeps its earlier catalog asOf until the first walk reaches its per-market age threshold. By code default, that threshold is 4.5 to under 7.5 hours, normally reached after 6 or 8 hours on the 2-hour schedule. The due booked walk uses that market’s book request time, so fills after the book request remain eligible. Eligible fills can show for up to 30 minutes by code default, while the venue marker below stays fresh. Between walks, a live-fill overlay supplies last-trade prices and the other outcome’s complement for recently traded SX Bet markets with provenance.source: predictefy-live. An overlay is served only while its row is at most 30 minutes old by code default. A venue’s overlay is also ignored when its last completed refresh is older than 5 minutes by code default. Recorded production settings use 10 minutes for this limit. For SX Bet, this clock instead tracks the newest accepted fill time. Kalshi long-tail records mostly show the catalog-walk price.
volume24hRolling 24-hour volume in venue units. Polymarket uses USD; Kalshi and Gemini use contracts; Hyperliquid uses USDC. Read volume24hUnit before comparing.Venue-published values follow the catalog walk. Enabled derived-volume jobs wait 5 minutes by default between passes, using collected history. For limitless, pred, sxbet, rain, and novig, derived values do not advance the row’s write time. Database-served reads see committed updates immediately. Snapshot-served records wait for the next ingest walk that advances the row’s write time, then a refresh, or the next full rebuild. Read volume24hAsOf and volume24hSource.
outcomes[].priceChange*Absolute probability changes over 1m, 5m, 15m, 1h, 6h, 24h, 7d, and 30d. These are not percentage returns.Recalculation is queued after successful catalog refreshes. Cached entries become eligible after 10 minutes by default; that is not an independent timer. Read priceChangeAsOf.
liquidityThe venue’s statistic in its native unit, not standardized executable depth. Kalshi supplies USD. null means unavailable; zero is a reported zero.Catalog walk, then serving snapshot. Price updates do not refresh it.
status, resolutionDateMarket state and the stored close date as a timestamp. A missing close date stays null.Catalog walk, then serving snapshot. Resolution checks separately recover venue-reported outcomes for markets that disappear from active listings. They do not guarantee immediate settlement updates.
Matched pairs, matchQualityStored relationships and recorded resolution judgments, not live verification. Use the pair’s asOf and matchQuality.judgedAt.The matcher is scheduled hourly. Passes can take hours, so the schedule does not promise hourly results. A pair can remain not_judged or unavailable.
Sports oddsReturned probability, American, and decimal representations.Use each cell’s asOf, stale, and meta.freshness. The sports freshness tiers define the thresholds.

For dollar comparisons, use volume24hUsd. It accepts USD and USDC values, counting USDC at par. Contract counts and unsupported, unknown, or conflicting units return null; the native volume24h remains unchanged.

By default, price changes use a fresh overlay value as the current input for each outcome the entry holds; otherwise they use the stored catalog price. The same freshness rule applies as for the served record: the entry must be newer than any known catalog observation and pass the venue marker and row age limits. A matching number replaces the catalog price. A matching null makes the outcome unpriced, so it is skipped unless enabled tape enrichment supplies the current input. Unmatched outcomes keep the catalog price. SX Bet keeps the catalog input because the calculation ignores the stream’s last-trade overlay. novig and predictstreet have no overlay lane, so they use any available catalog price. The reference is the newest eligible tick or candle at or before the evaluation instant minus the requested window. The value is the current input minus the reference. An overlay row can be up to 30 minutes old by default when selected. Cached figures refresh no more often than every 10 minutes by default. Even with overlays, the reference can still be newer than the current input for 1m, 5m, and 15m. Then the sign can oppose recent movement, so those values are unreliable measures of recent movement whenever the current input is older than the window. With catalog inputs, this risk remains whenever the catalog walk is older than the requested window. The returned asOf dates the applied overlay price, otherwise the catalog observation. It dates the calculation’s current input when both use the same observation; a later served overlay can advance it independently. If the overlay the figures used stops being served before they are recalculated, while the served catalog observation is older than that overlay, the record can return to an older catalog price and asOf while the figures keep that overlay input. In that case asOf can also be older than the calculation’s current input. The refresher atomically keeps a stored entry when a candidate has an equal or earlier stamp, so a full price walk cannot replace a newer hot-lane entry. priceChangeAsOf still dates the evaluation, not both price observations. When no catalog price exists, enabled tape enrichment can supply the current input.

Price-change windows need reference history. A null change can mean missing history or, for Kalshi, a pricing-method change inside the window. It can also mean Predictefy cannot confirm that no such change occurred. It never means zero. These windows enrich open, active snapshot records; database-served records omit them and return priceChangeAsOf: null.

The order-book pricing method is enabled in production. With a valid YES bid and ask and positive size on both sides, YES uses their midpoint unless the last trade lies within that spread. In that case, YES uses the last trade. NO is the complement of YES. Without a valid two-sided book, the previous pricing method remains the fallback. Read each outcome’s priceBasis; a displayed price is not a fill guarantee. The priceBasis vocabulary includes the four Kalshi order-book rules: book-mid (both sides quote, so their midpoint), book-last-inside (the last trade sits within the two-sided book), book-one-sided (one side quotes, so that side’s quote) and venue-price-chain (no book side quotes, so the venue’s own price fields apply; the API reference lists the exact field order).

Catalog market responses currently omit the optional openInterest field. Collection does not imply that this field is returned by fetchMarkets or fetchMarket.

Collected units differ: Kalshi, Pascal, and Hyperliquid use contracts; PredictStreet uses shares; Polymarket and Limitless use USDC. Availability still depends on the market.

Venue-provided open interest follows ingest. The enabled Polymarket sampler has separate schedules: 60 seconds by default for live up/down-market history and 2 hours by default for catalog sampling. The live sampler writes history only. Sampled Polymarket open interest uses usdc.

fetchArbitrage has separate clocks for book observations, assessment, and publication:

  • legs.buyYes.asOf and legs.buyNo.asOf date the exact input books used for each leg’s assessment.
  • Row asOf is the earlier leg observation, or null when either book is missing.
  • assessedAt dates the assessment. A new assessment can reuse an older book without advancing that book’s observation time.
  • Published meta.asOf dates the surface publication. Computed-fallback pages omit it.

Clock-only changes wait for a snapshot, normally every 30 seconds. Material row changes can carry updated clocks sooner. A recent response, publication, or live: true does not prove that both observations occurred within 60 seconds.

The code default for ARB_ENGINE_HUB_BOOK_MAX_AGE_MS is 60,000 ms for hub snapshots without confirmed subscription liveness. Confirmed live subscriptions use ARB_ENGINE_LIVE_BOOK_MAX_AGE_MS, 600,000 ms (10 minutes) by default. Production runs with 7,200,000 ms (2 hours) for the live-book ceiling, as recorded at the last production roll. The 120,000 ms default for ARB_ENGINE_PASS_DEADLINE_MS limits a pass, not accepted book age.

An accepted hub snapshot avoids a venue read. Otherwise, the engine attempts a fallback, subject to cached failures and other read limits. The fallback’s two-second positive cache can also reuse a book. Neither path advances the stored observation time.

After the reads rollout carrying legacy-null normalization, unknown legacy REST leg timestamps are explicit nulls. They stay null until the engine replaces the row with observed evidence. Older servers and stream frames can omit them. Reject null or absent observations when enforcing a strict age limit. Never substitute a row, assessment, or publication clock for missing leg evidence. The 60-second example checks both legs separately and leaves Core’s book-age ceilings unchanged.

Normal lag includes collection cadence, processing time, and the next serving refresh. Slow or failed work can extend it. A recent price does not prove recent volume, liquidity, or matching. Treat the returned record and metric timestamps as the evidence of age, rather than calculating a guaranteed maximum from a timer.

An older catalog asOf may reflect the rule for unchanged content in Read the clocks.

History endpoints have their own capture, backfill, and aggregation schedules. A fresh catalog record does not prove complete history. Read Historical data for candle provenance and coverage.