Skip to main content
Every V1 endpoint returns the same envelope so you can write one parser for the whole API.

Envelope

{
  "success": true,
  "type": "live",
  "cacheHit": false,
  "sport": "football",
  "data": { ... }
}
FieldTypeMeaning
successbooleantrue for any 2xx response.
typestringEndpoint identifier, e.g. live, game, standings, brackets, search.
cacheHitbooleantrue when served from the in-memory cache. Useful for monitoring.
sportstringSport slug (only on sport-scoped endpoints).
dataobjectEndpoint-specific payload. Most payloads also carry lastUpdateId, requestedUpdateId, and ttl.

data envelope extras

Many endpoints share these helper fields inside data:
{
  "lastUpdateId": 5677082919,
  "requestedUpdateId": -1,
  "ttl": 30,
  "sports": [],
  "countries": [],
  "competitions": [],
  "competitors": []
}
  • lastUpdateId lets you skip identical payloads on the next poll by passing ?lastUpdateId=....
  • ttl is the suggested seconds before re-requesting.
  • sports / countries / competitions / competitors are denormalized lookups so a single response can render without follow-up calls.

Status groups

statusGroup on every game object summarizes phase:
ValueMeaning
1Upcoming / not started
2Postponed / cancelled
3Live / in progress
4Ended
statusText is the human label (Scheduled, Halftime, 1st Half, Ended, …) and shortStatusText is the compact form (FT, HT, 1H, LIVE).

Datetimes

All V1 datetimes are ISO 8601 with timezone offset:
2026-04-04T14:15:00+00:00
(V2 uses Unix epoch in startTimestamp — that’s a V2-only convention.)

Errors

Errors come straight from the backend without wrapping, with the matching HTTP status:
{ "success": false, "error": "Game not found", "code": 404 }
HTTPCause
400Bad parameter (e.g. invalid date format)
401Missing or invalid x-api-key
403Key valid but plan does not cover the endpoint
404Entity not found
429Rate limit exceeded — back off and retry
5xxUpstream issue — pass through to the user verbatim
See Error Handling for retry and backoff guidance.

Cache TTLs

The server caches every response. Public TTLs:
Endpoint familyTTL
Live / current scores5s
Game detail10s
Competition games / results30s
Search30s
Standings, brackets, stats60s
News, transfers60s
Competitions, countries60s
Sports list300s
cacheHit: true means you hit cache. To force a fresh request, vary a query param (?_=Date.now()), but please don’t — the cache is what keeps the API fast.

Pagination

Endpoints that paginate return a paging object inside data:
{
  "paging": {
    "previousPage": 0,
    "nextPage": 2,
    "currentPage": 1,
    "totalPages": 6
  }
}
Pass ?page=N (zero-indexed) to advance.
Last modified on June 12, 2026