Calendar — entry 010 of 17

Nager.Date

Verified Jul 2026

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.

holidayspublic-holidaysopen-sourcekeyless
AuthenticationNone requiredCall it straight away — no key, no signup.
HTTPSSupportedTraffic is encrypted in transit.
CORSEnabledCallable directly from browser JavaScript.
PricingFreeNo paid tier — free for the documented use case.
FormatsJSONResponses can be requested as JSON.

GreatAPIs Score

Score74out of 100
Authentication25/25No authentication required
Pricing20/20Free to use
Docs0/20No docs or spec available
Formats9/15Single response format
Freshness20/20Verified within 6 months

Embed this badge

Scored 74 on greatapis.com
<a href="https://greatapis.com/api/nager-date/"><img src="https://greatapis.com/badge/nager-date.svg" alt="Scored 74 on greatapis.com"></a>

Auth quickstart

  1. 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.
Stored keyNo key stored

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

200 application/json; charset=utf-8

[{"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

Base URLhttps://date.nager.at/api/v3
Key endpoints
  • 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.