Calendar — entry 010 of 17
Nager.Date
Nager.Date is a free, open-source public holiday API covering 204 countries, with endpoints for a year's full holiday list, the next public holiday, whether today is a holiday, and country 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. The old v3 endpoints are deprecated; the provider will retire them on 31 January 2027, so new integrations should use v4.
Nager.Date is a keyless, open-source public holiday API covering 204 countries. A live GET this run against Holidays/{countryCode}/{year} returned all UK public holidays for 2026 as a flat JSON array, each entry carrying which UK nations (GB-ENG, GB-NIR, GB-SCT, GB-WLS) observe it via a subdivisionCodes field — Scotland's "2 January" and Northern Ireland's "Saint Patrick's Day" are two of the entries only some nations 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.
Endpoints
Countries2
Provides access to detailed country information and the list of all countries supported by the API. This includes general metadata such as country names, codes, regions, and related details.
GET/api/v4/Countries/AvailableRetrieve the complete list of all supported countries
| Status | Description | Schema |
|---|---|---|
200 | Successfully returns the list of supported countries. | — |
GET/api/v4/Countries/{countryCode}Retrieves detailed information about a specific country
| Name | In | Required | Type |
|---|---|---|---|
countryCode | path | yes | string |
| Status | Description | Schema |
|---|---|---|
200 | Returns the requested country information. | CountryInfoWithBordersDto |
404 | The provided country code is invalid or not recognized. | ProblemDetails |
Holidays2
Includes functionality for retrieving public-holiday data, checking whether a specific day is a public holiday, and listing upcoming holidays.
GET/api/v4/Holidays/{countryCode}/NextRetrieve all upcoming public holidays occurring within the next 365 days for a given country
| Name | In | Required | Type |
|---|---|---|---|
countryCode | path | yes | string |
| Status | Description | Schema |
|---|---|---|
200 | A list of upcoming public holidays for the next 365 days. | — |
204 | No upcoming holidays were found for the specified country. | — |
404 | The provided country code is invalid or not recognized. | ProblemDetails |
GET/api/v4/Holidays/{countryCode}/{year}Retrieve the list of all public holidays for the specified year and country
| Name | In | Required | Type |
|---|---|---|---|
countryCode | path | yes | string |
year | path | yes | integer |
| Status | Description | Schema |
|---|---|---|
200 | Successfully retrieved the list of public holidays. | — |
400 | The request was invalid. See the validation details for more information. | ProblemDetails |
404 | The provided country code is invalid or not recognized. | ProblemDetails |
IotHolidays1
Endpoints optimized for IoT devices and automation scripts. Returns only HTTP status codes (e.g., 200 OK or 204 No Content) without a response body to eliminate parsing overhead and reduce bandwidth.
GET/api/v4/IotHolidays/{isoCode}/IsToday/{offset}Determines whether today is a public holiday in the specified country or subdivision, optionally adjusted by a UTC offset.
| Name | In | Required | Type |
|---|---|---|---|
isoCode | path | yes | string |
offset | path | yes | integer |
| Status | Description | Schema |
|---|---|---|
200 | Today is a public holiday | — |
204 | Today is not a public holiday | — |
400 | The request was invalid. See the validation details for more information. | ValidationProblemDetails |
Versions1
Returns information about the current version of the Nager.Date API in use.
GET/api/v4/VersionsRetrieve the current version information of the Nager.Date library
| Status | Description | Schema |
|---|---|---|
200 | Successfully retrieved version information. | VersionInfoDto |
500 | An unexpected server error occurred. | — |
Try it
Developer reference
https://date.nager.at- GET/api/v4/Holidays/{countryCode}/{year}
- GET/api/v4/Holidays/{countryCode}/Next
- GET/api/v4/IotHolidays/{isoCode}/IsToday/{offset}
Gotchas & limits
GET /IotHolidays/{isoCode}/IsToday/{offset}answers with an empty body, not a JSONtrue/false— a live GET this run against/IotHolidays/GB/IsToday/0returned 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
/Holidays/ZZ/2026returned 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 /Holidays/{countryCode}/Nextisn't singular despite reading like it returns one date — a live GET this run against/Holidays/GB/Nextreturned 13 entries spanning from the next upcoming holiday (2026-11-30) all the way to August of the following year (2027-08-30), 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. - v4 dropped v3's
localName,fixed,global,countiesandlaunchYearfields and addedsubdivisionCodesandholidayTypesin their place — a client built against the old v3 shape needs a rewrite, not just a URL change. v3 still answers today, but the provider's own docs say it stops working on 2027-01-31, so start new integrations on v4.