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

Rendered live from the atlas entry
AuthenticationNone required
HTTPSSupported
CORSEnabled
PricingFree
FormatsJSON
Key endpoints
  • GET/getmatchdata/{leagueShortcut}/{leagueSeason}/{groupOrderId}
  • GET/getbltable/{leagueShortcut}/{leagueSeason}
  • GET/getcurrentgroup/{leagueShortcut}
footballsoccerbundesligacrowd-sourcedgermany

Sources

Facts checked Sep 2026