Calendar — entry 010 of 17

Nager.Date

Verified Sep 2026

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.

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

Score94out of 100
Authentication25/25No authentication required
Pricing20/20Free to use
Docs20/20Machine-readable spec file bundled
Formats9/15Single response format
Freshness20/20Verified within 6 months

Embed this badge

Scored 94 on greatapis.com
<a href="https://greatapis.com/api/nager-date/"><img src="https://greatapis.com/badge/nager-date.svg" alt="Scored 94 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.

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
Responses
StatusDescriptionSchema
200Successfully returns the list of supported countries.—
GET/api/v4/Countries/{countryCode}Retrieves detailed information about a specific country
Parameters
NameInRequiredType
countryCodepathyesstring
Responses
StatusDescriptionSchema
200Returns the requested country information.CountryInfoWithBordersDto
404The 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
Parameters
NameInRequiredType
countryCodepathyesstring
Responses
StatusDescriptionSchema
200A list of upcoming public holidays for the next 365 days.—
204No upcoming holidays were found for the specified country.—
404The 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
Parameters
NameInRequiredType
countryCodepathyesstring
yearpathyesinteger
Responses
StatusDescriptionSchema
200Successfully retrieved the list of public holidays.—
400The request was invalid. See the validation details for more information.ProblemDetails
404The 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.
Parameters
NameInRequiredType
isoCodepathyesstring
offsetpathyesinteger
Responses
StatusDescriptionSchema
200Today is a public holiday—
204Today is not a public holiday—
400The 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
Responses
StatusDescriptionSchema
200Successfully retrieved version information.VersionInfoDto
500An unexpected server error occurred.—

Try it

Developer reference

Base URLhttps://date.nager.at
Key endpoints
  • 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 JSON true/false — a live GET this run against /IotHolidays/GB/IsToday/0 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 /Holidays/ZZ/2026 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 /Holidays/{countryCode}/Next isn't singular despite reading like it returns one date — a live GET this run against /Holidays/GB/Next returned 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, counties and launchYear fields and added subdivisionCodes and holidayTypes in 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.