API v1 retired: v2 catalogues, fixture redirects, change feeds and source health
The public v1 read endpoints are retired. V2 gains reference catalogues, redirects for merged fixtures, a merges feed, a channel changes feed and a source health endpoint. Each feature below is marked live, or built but not enabled.
/api/v1 read endpoints no longer exist. If you still call any of them, follow the migration guide. Your API key, origin restrictions and allowance are unchanged.New
- Reference catalogues (live).
/api/v2/sports,/api/v2/countriesand/api/v2/competitionsreturn plain lists ordered by name, thenid. They need nomarket./competitionstakessport_idsandcountry_ids(repeat the parameter; up to 100 IDs each). IDs in one filter combine with OR, the two filters with AND. Unknown parameters answer 422. Competitions carrycountry_id; look the name up in/countries. - Redirects for merged fixtures (live). When two fixtures turn out to be one, the retired fixture ID now answers
410 Goneinstead of 404. The body names the surviving fixture insuperseded_by, and aLinkheader withrel="successor-version"points to it. This applies to/api/v2/matches/{id}and its/availabilityand/schedule-evidencereads. Hidden and unknown IDs still answer 404. - Merges feed (live).
GET /api/v2/fixtures/merges?since=0lists merges oldest first, so you can update stored IDs without waiting for a request to fail.sinceis a feed position, not a time. Passnext_sinceback until it isnull.limitis 1–1000 (default 500). - Channel changes feed (live; currently empty).
GET /api/v2/channels/changes?since=…lists changes to the channel catalogue: splits, merges, renames and market moves.sinceis an instant with an explicit offset. No change has been published to the feed yet, so it answers with an emptychangeslist. - Source health (live).
GET /api/v2/source-health?market=GBreports, per registered broadcast feed in a market, when its latest accepted import completed and how that import ended. An import is not independent verification of any listing. Fields, outcomes and the five events it does and does not describe are on the source health page.
curl --get 'https://worldsportsapi.com/api/v2/competitions' \
-H "x-api-key: $SPORT_API_KEY" \
--data-urlencode 'sport_ids=1'
curl --get 'https://worldsportsapi.com/api/v2/fixtures/merges' \
-H "x-api-key: $SPORT_API_KEY" \
--data-urlencode 'since=0' \
--data-urlencode 'limit=500'{
"error": "fixture_merged",
"detail": "Fixture 45 was merged into fixture 123",
"superseded_by": 123,
"merged_at": "2026-10-07T21:27:03.066505+00:00"
}Changed
- Placeholder channels and broadcasters are hidden by default.
/api/v2/channelsand/api/v2/broadcastersleave out stand-ins such asTBC(is_placeholderis true) unless you addinclude_placeholders=true. The value must be exactlytrueorfalse; anything else answers 422. Today three rows are affected: channels 961TBCand 2274TNT Sports TBC, and broadcaster 33TBC. Channel 33 is a separate, real channel and is not hidden. Fixture listings are unchanged: a listing on a placeholder channel still appears in/matches, and a placeholder ID is still accepted aschannel_id. - The API schema. The OpenAPI document no longer lists any
/api/v1read path, documents the 410 response and the new endpoints, and names the channel schemaChannel. If you generate a client, regenerate it. - The documentation is v2 only. The quickstart, examples and reference describe v2. See the global contract for markets, timezones, feeds and redirects.
Breaking: public v1 read endpoints are retired
The public API no longer serves the v1 read endpoints below and answers 404 Not Found. A request answered by the Sport API website gateway instead returns 410 Gone with a JSON body containing replacement: the v2 path, or null where v2 has none. Treat both as the signal to move.
| v1 path (retired) | v2 replacement |
|---|---|
/api/v1/sports | /api/v2/sports |
/api/v1/countries | /api/v2/countries |
/api/v1/competitions | /api/v2/competitions |
/api/v1/competitions/stages | No v2 equivalent |
/api/v1/competitions/aliases | No v2 equivalent |
/api/v1/participants | No v2 equivalent |
/api/v1/matches | /api/v2/matches |
/api/v1/matches/next | /api/v2/matches/next |
/api/v1/matches/source-status | /api/v2/matches/source-status |
/api/v1/matches/{match_id} | /api/v2/matches/{match_id} |
/api/v1/broadcasters | /api/v2/broadcasters |
/api/v1/broadcasters/channels | /api/v2/channels |
/api/v1/broadcasters/channels/aliases | No v2 equivalent |
/api/v1/participants/resolve | No v2 equivalent |
Four of these have no v2 equivalent: competitions/stages, competitions/aliases, participants and broadcasters/channels/aliases. Still available under /api/v1: the root, /api/v1/readyz, and the /api/v1/openapi.json redirect to /api/openapi.json.
Fixes
- Source health could fail with a server error. The first deployment of
/api/v2/source-healthon 14 October did not give the API’s read-only role access to the freshness columns it reads, so a request could answer 500. The access is now granted, for those columns only, and the endpoint answers 200 for GB and IE.
Required migration steps
- Search your code and logs for requests to
/api/v1/. Each one now fails. - Replace each with its v2 path from the table above. The migration guide lists what changes in each.
- For fixtures, send civil
start_dateandend_datewith an IANAtimezone, or offset-bearingfromandto. Sendmarketto receive broadcast listings. Read fixtures fromitems. - For channels and broadcasters, send
market. Addinclude_placeholders=trueonly if you relied on rows such asTBC. - For competitions, read
country_idand look the name up in/countries. Drop thenameandcountryfilters, and usesport_idsinstead. - Handle
410when you read a fixture by ID. Storesuperseded_byin place of the old ID, and poll/fixtures/mergesto update stored IDs ahead of time. - If you store channel IDs, poll
/channels/changesand re-key what you stored for the market named in each change. - Regenerate any client built from the OpenAPI document.
Notice before a breaking removal
From 14 October 2026, a breaking removal will be announced in these release notes at least 90 days before it takes effect. The announcement will name the replacement and removal date. Additive changes need no notice. A shorter period is allowed only when a law, a security problem or a source licence forces it; the announcement will explain why. This policy does not change past retirements.
What is live and what is not enabled
| Feature | Status | Meaning |
|---|---|---|
| v1 read endpoints retired | Live | Public v1 read paths answer 404. |
| Reference catalogues | Live | Available to every key. |
| Placeholder hiding | Live | The default for /channels and /broadcasters. |
| Merged-fixture 410 and merges feed | Live | Merged fixtures are already recorded. |
| Channel changes feed | Live, empty | The feed answers; no change has been published to it. |
| Source health | Live | GB and IE return rows. |
| Watch facts | Live | Irish Formula 1 watch_options and watch_access filtering; facts contain no URLs. See /docs/global#watch-facts. |
| Regional channel entries per market | Built, not applied | The catalogue is unchanged. When it changes, /channels/changes reports it. |
| Source updates on Where Is Match pages | Built, off | Available per market when enabled; currently off for GB and IE. It reads /source-health. |