Update Frequencies
This guide helps you plan polling and caching against your request quota. Each feed has a time-to-live (TTL): how long a response is cached, and a data update cadence: how often the underlying data actually changes. The two are not the same: a short TTL on slowly-changing data does not mean you should poll fast. Given your request budget (see API Basics), drive your polling from the Recommended pull columns, not the TTL.
TTL values below were measured from live responses; each response carries its own cache-control header, which is always the authority for the payload in hand.
Frequency Chart
| Feed | TTL (cache) | Data updates | Recommended pull (non-live) | Recommended pull (live) |
|---|---|---|---|---|
| Competitions | 5 minutes | Change at season boundaries and when competitions are added | Weekly | Not applicable |
| Competition Info | 5 minutes | Change at season boundaries and when competitions are added | Weekly | Not applicable |
| Competition Seasons | 5 minutes | Change at season boundaries and when competitions are added | Weekly | Not applicable |
| Seasons | 5 minutes | Change at season boundaries and when competitions are added | Weekly | Not applicable |
| Season Info | 5 minutes | Structure and coverage are set at season start and rarely move | Weekly, and at season start | Not applicable |
| Season Competitors | 5 minutes | Move on transactions and roster changes | Daily | Not applicable |
| Season Players | 5 minutes | Move on transactions and roster changes | Daily | Not applicable |
| Season Summaries | 5 minutes | Schedule changes as announced; results and statistics as games close | Daily, or driven by Sport Events Updated | Use the live feeds for in-play data |
| Daily Summaries | 5 minutes | Entries update as the day's games play and close | A few times per day | Every 5 minutes for a scores page; use the live feeds for faster needs |
| Season Standings | 10 seconds | post coverage: after games close; live coverage: during play | After each day's games close | Every 1 to 5 minutes for live-coverage seasons (NPB and KBO League among them) |
| Season Links | 5 minutes | Brackets fill in as cup rounds resolve | Daily during the event | Not applicable |
| Season Lineups | 30 seconds | Lineups land as they are announced | Daily | In the hour before first pitch |
| Sport Event Summary | 1 second (live game); 6 minutes (closed game) | Scores live through play; statistics settle in the minutes after the final out | One pull a few minutes after closed | Use the live feeds during play |
| Sport Event Timeline | 1 second | Events land pitch by pitch during play, then stop at the final out | Once after closed | Every 2 to 10 seconds for a gamecast |
| Sport Event Lineups | 1 second | Announced before the game; substitutions during it | Once pre-game | In the hour before first pitch, and at game start |
| Live Summaries | 1 second | Real time while games are in the live window | Not applicable | Every 2 to 10 seconds for a gamecast; every 20 to 60 seconds for a scoreboard |
| Live Timelines | 1 second | Real time while games are in the live window | Not applicable | Every 2 to 10 seconds for a gamecast; every 20 to 60 seconds for a scoreboard |
| Live Timelines Delta | 1 second | Real time while games are in the live window | Not applicable | Every 2 to 10 seconds for a gamecast; every 20 to 60 seconds for a scoreboard |
| Competitor Profile | 5 minutes | Move on transactions, not in-game | Daily | Not applicable |
| Player Profile | 5 minutes | Move on transactions, not in-game | Daily | Not applicable |
| Competitor Summaries | 5 minutes | Gain entries as games close | Daily, or after each slate | Not applicable |
| Player Summaries | 5 minutes | Gain entries as games close | Daily, or after each slate | Not applicable |
| Competitor vs Competitor | 1 minute | Updates as meetings are played or scheduled | Daily | Not applicable |
| Sport Events Updated | 1 minute | Entries populate continuously across a rolling 24-hour window | Hourly on quiet days | Every few minutes on game days |
| Sport Events Created | 5 minutes | Schedule publications and entry corrections | Hourly | Not applicable |
| Sport Events Removed | 1 minute | Schedule publications and entry corrections | Hourly | Not applicable |
| Competitor Mappings | 5 minutes | Occasional; merges only when duplicates are resolved | Daily | Not applicable |
| Player Mappings | 5 minutes | Occasional; merges only when duplicates are resolved | Daily | Not applicable |
| Competitor Merge Mappings | 5 minutes | Occasional; merges only when duplicates are resolved | Daily | Not applicable |
| Player Merge Mappings | 5 minutes | Occasional; merges only when duplicates are resolved | Daily | Not applicable |
The Probabilities package (see Tracking Win Probabilities):
| Feed | TTL (cache) | Data updates | Recommended pull (non-live) | Recommended pull (live) |
|---|---|---|---|---|
| Sport Event Probabilities | 1 second | Recalculates periodically pre-match, continuously in play | Every few minutes pre-match | Every few seconds |
| Timeline Probabilities | 1 second | Grows point by point during play, then stops | Once after closed for charting | Use the live feeds instead |
| Live Probabilities | 1 second | In-play recalculations across the live slate | Not applicable | Every few seconds |
| Sport Event Upcoming Probabilities | 1 second | Rolls with the next-24-hour window | A few times per day | Not applicable |
| Season Probabilities | 1 minute | Move meaningfully as games close | Daily, or after each slate | Not applicable |
| Season Outright Probabilities | 1 minute | Move meaningfully as games close | Daily, or after each slate | Not applicable |
TTL Is a Cache Floor, Not a Polling TargetSeveral feeds carry a 1-second TTL even when their data has stopped moving: a completed game's Sport Event Timeline and Timeline Probabilities read 1 second long after the final out. The TTL only tells you how fresh a response can be; polling those feeds every second burns quota for no benefit. Always size your polling from the Recommended pull columns, and treat anything faster as wasted requests.
The Change Feed Window
Sport Events Updated and Sport Events Created report a rolling 24-hour window, newest first, so any polling gap shorter than a day can be recovered without a full re-sync. Sport Events Removed lists games taken out of the system. See Monitoring Data Changes for how to consume all three.
Live Update Cadence
Baseball scoring updates pitch by pitch for competitions with basic_play_by_play coverage, and score by score for the rest; a season's coverage block states which applies (see Fundamentals). Two settling behaviors matter for cadence planning:
- Statistics can settle for a few minutes after the final out; schedule one final Sport Event Summary pull a few minutes after a game moves to
closed. - Standings for
post-coverage seasons (MLB among them) update after games finish, not during play; refreshing them mid-game returns the same table.
Reading TTL from Responses
Every response carries standard HTTP caching headers stating how long it may be served from cache; the values in the chart were read from those headers on live responses. Check the header on the responses you receive rather than assuming a fixed value, and use the change feeds to detect updates as they land; see Monitoring Data Changes.
Best Practices
- Drive polling from the Recommended pull columns; never poll faster than a feed's TTL, and rarely as fast
- Use the live columns only while games are in the live window; off-slate, drop to the non-live cadence and let Sport Events Updated trigger refreshes
- Prefer the delta feed for steady-state play-by-play polling, re-synchronizing from the full timeline after any gap
- Treat the discovery feeds (Competitions, Seasons, Season Info) as weekly feeds whatever their TTL says
- Remember Daily Summaries dates are UTC; a US evening slate spans two UTC dates, so a scores page polls both
Updated about 6 hours ago
