Odds API · 7 September 2026

How the Odds API Handles Postponed, Delayed, Cancelled and Stale Events

What the status flags mean, why a stale event is flagged rather than refreshed, and how to reconcile a rescheduled fixture in your own data.

Fixtures move. Here is exactly what the feed does when they do, so your reconciliation code has nothing to guess about.

Delayed

status.delayed becomes true and status.startsAt moves; the earlier start times are kept in status.previousStartsAt. The eventID does not change.

Cancelled

status.cancelled becomes true on the event, and markets flip their own cancelled flag. The event is retained, not deleted.

Postponed to a new date

Where a book re-lists the fixture as a new event, the feed may carry both: the old one marked cancelled and a new eventID. Match them on teams.*.teamID and leagueID.

Stale

If no source has written an event for 45 minutes, info.stale is true and info.lastUpdatedAt tells you when it last was. Prices on a stale event are the last known, not current — the feed flags this rather than serving old prices as fresh.

Reconciling

  • Key your own records on eventID.
  • Treat cancelled as terminal for that id.
  • Re-search by teams and league when a cancelled event has no result.
  • Never grade from a stale event.

Read more: SockOdds: the Australian extension of the SportsGameOdds schema | Getting Started with the SockOdds API

Start building today

Free plan available. Set up in 5 minutes. Scale when you're ready.