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 JSONtrue/false— a live GET this run against/IsTodayPublicHoliday/GBreturned 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/ZZreturned 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/GBreturned 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.