Monitoring Odds Changes
Odds move constantly, but most events' odds are unchanged in any given minute. This page shows how to keep an odds integration current without re-pulling everything: poll the change logs, respect the response cache, and re-pull only what moved.
The Change Log Feeds
Two packages carry a change log; each reports the sport events whose odds changed within a five-minute window, using Unix timestamps:
| Feed | Change attribute |
|---|---|
| Sport Event Markets Change Log (Prematch) | sport_event_markets_odds_change |
| Player Props Change Log (Player Props) | player_props_odds_change |
{
"generated_at": "2026-07-20T16:30:19+00:00",
"status": {
"from": 1784564719,
"to": 1784565019
},
"changes": [
{
"type": "sport_event",
"id": "sr:sport_event:72176810",
"sport_event_markets_odds_change": 1784565017
},
{
"type": "sport_event",
"id": "sr:sport_event:66886856",
"sport_event_markets_odds_change": 1784565017
},
{
"type": "sport_event",
"id": "sr:sport_event:68096138",
"sport_event_markets_odds_change": 1784565016
},
{
"type": "sport_event",
"id": "sr:sport_event:72905560",
"sport_event_markets_odds_change": 1784565016
}
]
}{
"generated_at": "2026-07-20T16:30:28+00:00",
"status": {
"from": 1784564728,
"to": 1784565028
},
"changes": [
{
"type": "sport_event",
"id": "sr:sport_event:63303061",
"player_props_odds_change": 1784565025
},
{
"type": "sport_event",
"id": "sr:sport_event:63302901",
"player_props_odds_change": 1784565025
},
{
"type": "sport_event",
"id": "sr:sport_event:63301693",
"player_props_odds_change": 1784565024
},
{
"type": "sport_event",
"id": "sr:sport_event:72529074",
"player_props_odds_change": 1784565022
}
]
}The status object bounds the window (from and to, five minutes apart); each change row carries the event ID and the moment its odds last changed inside the window. Both snippets are trimmed to four changes.
The Futures package has no change log; refresh futures by re-polling the futures feeds on a slower cadence (see Tracking Futures Odds). The Live Odds package has none either; poll its event feeds directly while events are in play (see Tracking Live Odds).
The Change-Log Loop
- Poll the change log for each package you consume, at least once per five minutes
- For each returned
sr:sport_event:ID that you track, re-pull that event's markets or props - Events not in the change log need no call at all
The window does not rewindA change log covers only the most recent five minutes, and past windows cannot be queried. If your poller is down longer than the window, reconcile by re-pulling your tracked events directly rather than trusting the next change log response to cover the gap.
Cadences and Cache
Feed TTLs and recommended polling cadences for every feed are on the Update Frequencies chart. For this page's loop: poll the change logs every 1 to 5 minutes while you have events in a bettable window (the window is five minutes; polling slower risks missed changes), re-pull markets and props immediately for the events a change log reports, and refresh the discovery and mappings feeds daily.
Reconciliation Rules
- Treat the change log as a hint, not a ledger: it tells you that an event moved, not what moved; the market payload is always the source of truth
- On startup or after any outage, re-pull all tracked events once before resuming change-log-driven refresh
- Use
generated_atin each payload to order writes if you process responses concurrently - Events stay in the odds feeds for two weeks after they complete; treat a
404for a previously valid event ID as retirement, and rely on your stored closing lines afterward
Updated 15 days ago
