Issue Nº 49 — Sep 30, 2026
An empty list can mean a wrong season, and a 404 can mean a wrong league
Issue forty-nine covers OpenLigaDB, a free, keyless German football data API in the Sports & Fitness category. This session queried it live. Three kinds of bad request give three different answers. The "current matchday" call already points at the next round during a break. The time zone field uses a Windows zone name, and it is null on older rows.
Three bad requests, three different answers
This session sent GET https://api.openligadb.de/getcurrentgroup/nosuchleague. The API returned HTTP 404 with the content type application/problem+json. The body had the fields type, title, status and traceId.
GET https://api.openligadb.de/nosuchpath also returned HTTP 404. This time the body was empty and no content-type header was sent.
A bad season or matchday is not an error. GET https://api.openligadb.de/getbltable/bl1/1850 and GET https://api.openligadb.de/getmatchdata/bl1/2026/99 both returned HTTP 200 and the body []. A client cannot tell a typo in the season from a season with no data. Check for an empty array before you show an empty table.
"Current" points at the next matchday, and the time zone field is uneven
On 2026-09-30, GET https://api.openligadb.de/getcurrentgroup/bl1 returned {"groupName":"5. Spieltag","groupOrderID":5,"groupID":50637}. The last Bundesliga round, matchday 4, was played on 2026-09-20. The first game of matchday 5 starts at 2026-10-09T18:30:00Z. So in a break, "current" means the next round, not the last one played.
The match rows for matchday 5 carry timeZoneID as "W. Europe Standard Time". This is a Windows zone name, not an IANA name like Europe/Berlin. A tz database will not read it. All nine rows for matchday 4 carry timeZoneID as null.
The field matchDateTimeUTC was present on the rows this session read. Use it, and ignore timeZoneID.
League codes ignore case, Accept is ignored, CORS is a wildcard
GET https://api.openligadb.de/getbltable/BL1/2025 and GET https://api.openligadb.de/getbltable/bl1/2025 both returned HTTP 200. Both tables start with FC Bayern München on 89 points. The league shortcut is not case-sensitive.
A request to GET https://api.openligadb.de/getcurrentgroup/bl1 with the header Accept: application/xml still returned application/json. The API does not do content negotiation for this route.
A GET with the header Origin: https://greatapis.com returned access-control-allow-origin: *. An OPTIONS preflight to the same path returned HTTP 204 with the same wildcard. Browser code on any site can call this API directly.
OpenLigaDB, by the numbers
- GET/getmatchdata/{leagueShortcut}/{leagueSeason}/{groupOrderId}
- GET/getbltable/{leagueShortcut}/{leagueSeason}
- GET/getcurrentgroup/{leagueShortcut}