Skip to Content
Core ConceptsThe `timestamp` Field

Understanding the timestamp field

Every odds row SharpAPI returns carries a single timestamp field. It is the time SharpAPI last refreshed that row through its pipeline — a delivery / feed-freshness signal that advances on every ingest cycle, even when the underlying price has not moved. This page explains what timestamp tracks, what it does not track, and how to reason about freshness on books like Pinnacle that hold lines steady.

SharpAPI exposes one per-odd timestamp: timestamp. There is no longer a separate field for “when the price last moved.” The former odds_changed_at, last_seen_at, and wire_received_at fields have been removed — read timestamp instead. This matches OpticOdds’ timestamp semantic for drop-in parity.

What timestamp Actually MeansPermalink for this section

timestamp is the ISO 8601 time SharpAPI last refreshed this odd through its pipeline. It advances every ingest cycle: each time we re-observe the row — whether or not the price, line, or is_live flag changed — timestamp moves forward to the observation time.

This makes it a feed-freshness / liveness signal, not a price-change signal. A fresh timestamp tells you the row is being actively maintained and the displayed price is current; it does not tell you when the trading desk last repriced the line.

Why a Fresh timestamp Does Not Mean the Price Just MovedPermalink for this section

Pinnacle is a market-maker. Their trading desk publishes a new price only when actual flow forces a re-price — they do not shade lines around retail action to squeeze margin the way soft books do. That discipline is the reason Pinnacle is used as the sharp reference for +EV calculations, but it also means a line can sit unchanged for long stretches while SharpAPI keeps re-observing it and advancing timestamp every cycle.

Observed over a 24-hour window of Pinnacle’s own CDN responses, the rate at which Pinnacle published new data (rather than a cached 304 Not Modified) varies enormously by sport:

SportPinnacle CDN “new data” rate
Soccer~94%
Tennis~66%
NHL~51%
MLB~18%
NBA~9%

NBA and MLB player props commonly go long stretches without the trading desk moving the line — 30+ minutes is not unusual. Because timestamp reflects delivery freshness rather than the last price move, it stays fresh throughout: the row is still being maintained, the price is still current, the desk simply has not repriced.

How to Read timestampPermalink for this section

timestamp answers one question: “how fresh is this row in SharpAPI’s feed?”

  • A recent timestamp (a few seconds old for a major-league market) means the row is live and the displayed price is current.
  • A stale timestamp (more than a minute or two old for a major-league market) is a freshness signal worth investigating — the row may not be getting maintained.
{ "sportsbook": "pinnacle", "market_type": "player_total_bases", "selection": "Edmundo Sosa Over", "line": 0.5, "odds_american": -129, "timestamp": "2026-04-21T21:35:02Z" }

In this example the pipeline last refreshed this row at 21:35:02Z. As long as that value keeps advancing each cycle, treat the displayed price as current — even if Pinnacle’s desk has not moved Sosa’s total-bases line since pre-market open.

Use timestamp as your single freshness gate. If it stops advancing for a major-league market, that is a feed signal worth investigating. If it keeps advancing while the price stays put, the book is simply holding the line — treat the displayed price as current.

Benchmarking Across VendorsPermalink for this section

When comparing SharpAPI’s delivery against another vendor, compare against timestamp — it is SharpAPI’s delivery / feed-freshness stamp, the direct analogue of OpticOdds’ timestamp. Computing now - timestamp measures how fresh the row is in the feed.

Be careful comparing freshness fields across platforms: some vendors surface a source-update time (when the trading desk last moved the line) under similar field names. A source-update time on a quiet market like NBA player props can routinely read hours old because the desk has not repriced — not because delivery is slow. SharpAPI’s timestamp is a delivery stamp, so it stays fresh as long as the row is being maintained.

For an aggregate counterpart, the /health endpoint exposes Pinnacle’s CDN publish cadence per sport (cdn_fetch_pct_1h, cdn_fetch_pct_24h). Low values for a given sport indicate the trading desk is holding lines steady; high values indicate active repricing. This lets you separate “Pinnacle is quiet” from “pipeline is stuck” without instrumenting anything yourself.

Why Pinnacle Is DifferentPermalink for this section

Pinnacle accepts sharp action and re-prices based on real flow rather than shading lines around retail bettors. That market-maker discipline is why we use them as the devig reference for +EV — their lines are the closest thing to a fair price available in the market. The tradeoff is that pre-match lines can sit unchanged for long stretches when nothing in the market has moved. With a delivery-oriented timestamp, that quiet period shows up correctly as a fresh, actively-maintained row rather than a “stale” one.

Last updated on