Calendar — entry 010 of 17
Nager.Date
Nager.Date is a free, open-source public holiday API covering more than 100 countries, with endpoints for a year's full holiday list, the next public holiday, whether today is a holiday, and country/county metadata — all keyless JSON with no rate limiting. It's maintained on GitHub by a single developer and is popular as the default holiday backend baked into several scheduling and HR libraries specifically because it needs no signup.
Nager.Date is a keyless, open-source public holiday API covering more than 100 countries. A live GET this run against `PublicHolidays/{year}/{countryCode}` returned all 14 UK public holidays for 2026 as a flat JSON array, each entry carrying which of the four UK nations (`GB-ENG`, `GB-NIR`, `GB-SCT`, `GB-WLS`) observe it via a `counties` field -- Scotland's "2 January" and Northern Ireland's "Battle of the Boyne" are two of the entries only some counties carry.
GreatAPIs Score
Auth quickstart
- No API key, signup, or credit card required. A live GET this run confirmed every route answers keyless, and an Origin-header probe against the real host returned `access-control-allow-origin: *` unconditionally -- no token to raise a rate limit, and none is published.
Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.
List 2026 public holidays for the UK
GEThttps://date.nager.at/api/v3/PublicHolidays/2026/GB
[{"date": "2026-01-01", "localName": "New Year's Day", "name": "New Year's Day", "countryCode": "GB", "fixed": false, "global": false, "counties": ["GB-ENG", "GB-NIR", "GB-SCT", "GB-WLS"], "launchYear": null, "types": ["Public"]}, {"date": "2026-01-02", "localName": "2 January", "name": "2 January", "countryCode": "GB", "fixed": false, "global": false, "counties": ["GB-SCT"], "launchYear": null, "types": ["Public"]}, {"...": "12 more holidays, same shape"}]Try it
Developer reference
https://date.nager.at/api/v3- GET/PublicHolidays/{year}/{countryCode}
- GET/NextPublicHolidays/{countryCode}
- GET/IsTodayPublicHoliday/{countryCode}
Gotchas & limits
- `GET /IsTodayPublicHoliday/{countryCode}` answers with an empty body, not a JSON `true`/`false` -- a live GET this run against `/IsTodayPublicHoliday/GB` returned HTTP 204 with zero response bytes, so code that calls `.json()` unconditionally on the response will throw.
- An unrecognized country code doesn't 404 with an empty body like a missing route -- a live GET this run against `/PublicHolidays/2026/ZZ` returned HTTP 404 with an RFC7807-style JSON body, `{"title":"Unknown country code","status":404,"detail":"The country code provided is invalid or not recognized."}`.
- `GET /NextPublicHolidays/{countryCode}` isn't singular despite its name -- a live GET this run against `/NextPublicHolidays/GB` returned 13 entries spanning from the next upcoming holiday (2026-08-03) all the way to July of the following year (2027-07-12), not just the single nearest date.
- The response is a flat array with no envelope key (unlike, e.g., City Bikes' `{"networks":[...]}`) -- code expecting a wrapper object will iterate the wrong thing.