# How the Odds API Handles Postponed, Delayed, Cancelled and Stale Events
URL: https://sockodds.com/blog/postponed-delayed-cancelled-events-odds-api/

> 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.

[Odds API](https://sockodds.com/blog/category/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](https://sockodds.com/blog/sockodds-the-australian-extension-of-sportsgameodds/) | [Getting Started with the SockOdds API](https://sockodds.com/blog/getting-started-with-the-sockodds-api/)

## Start building today

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