Docs / Public holidays by country

Public holidays by country

Whether a date is a day off in a country or one of its regions, and the reason; or every public holiday of a year.

curl "https://agent-helper.org/holidays/de/2026-10-03"
day off
# DE 2026-10-03 (sat)
# type: reference-data
# source: Nager.Date (with manual overrides)
# as-of: retrieved 2026-09-16T18:20:10Z
# reason: German Unity Day (Tag der Deutschen Einheit)
# weekend: sat,sun (built-in table (Saturday-Sunday unless known otherwise))
# license: https://github.com/nager/Nager.Date/blob/main/LICENSE.md

The trap

A list of public holidays answers a narrower question than the one usually asked. The real question is whether people will be at work on a given day, and a holiday list gets that wrong in four common ways.

Holidays move. When 4 July falls on a Saturday, as it does in 2026, the United States observes the federal holiday on Friday 3 July. The United Kingdom moves a bank holiday that lands on a weekend to the next Monday. Germany does not move them at all. Code that stores 4 July because that is the date of Independence Day treats that Friday as a normal working day.

Some countries move working days too. Russia publishes a government decree each autumn that rearranges the next year's days off, turning a Saturday into a working day and a Monday into a day off so that holidays join up with weekends. Those transfers are not holidays, so most holiday data leaves them out, and 31 December 2026 looks like an ordinary Thursday when it is in fact a day off.

Holidays are regional. Epiphany on 6 January is a day off in Bavaria and a working day in Berlin; Germany's national list does not contain it and the Bavarian one does. States, provinces and cantons elsewhere work the same way.

A holiday is also not always a day off. The data behind most services sorts days into public holidays, bank holidays, school holidays, optional days and observances. A public holiday usually closes government offices and banks, private employers may still open, and some days that are called holidays close nothing at all.

None of this produces an error. A country code and a date always yield an answer, and the answer always looks plausible.

What this endpoint does

A date is answered with day off or business day and the reason: a holiday's name, the weekend, or a transferred day together with the decree it comes from. Only days the source classifies as public holidays count; bank, school, optional and observance days are left out, and a list for a year says so.

Without region=, only nationwide holidays count. With an ISO 3166-2 code such as DE-BY, that region's own holidays are added, and a code from another country is refused. Where the source records an observed date, that date is used. Russian transfers are added by hand from each year's decree; until a year's decree is added, answers for that year say that only the Labour Code was applied. The weekend is Saturday and Sunday unless the country is known to differ, and weekend= overrides it.

Parameters

NameRequiredMeaning and valuesDefaultLimit
countryyesISO 3166-1 alpha-2 code10 characters
whenyesyear YYYY, or date YYYY-MM-DD12 characters
regionnoISO 3166-2 subdivision to include regional holidays, e.g. DE-BY1024 bytes
weekendnooverride weekend days, e.g. fri,sat1024 bytes

The whole path and query together are capped at 2048 bytes. Every parameter has the same meaning under /v1/holidays/{country}/{when}.

Examples

A holiday observed on a Friday

curl "https://agent-helper.org/holidays/us/2026-07-03"
day off
# US 2026-07-03 (fri)
# type: reference-data
# source: Nager.Date (with manual overrides)
# as-of: retrieved 2026-09-16T18:20:10Z
# reason: Independence Day
# weekend: sat,sun (built-in table (Saturday-Sunday unless known otherwise))
# license: https://github.com/nager/Nager.Date/blob/main/LICENSE.md

The holiday's own date, a Saturday

curl "https://agent-helper.org/holidays/us/2026-07-04"
day off
# US 2026-07-04 (sat)
# type: reference-data
# source: Nager.Date (with manual overrides)
# as-of: retrieved 2026-09-16T18:20:10Z
# reason: weekend (sat)
# weekend: sat,sun (built-in table (Saturday-Sunday unless known otherwise))
# license: https://github.com/nager/Nager.Date/blob/main/LICENSE.md

A transferred day off in Russia

curl "https://agent-helper.org/holidays/ru/2026-12-31"
day off
# RU 2026-12-31 (thu)
# type: reference-data
# source: Nager.Date (with manual overrides)
# as-of: retrieved 2026-09-16T18:20:10Z
# reason: Day off transferred from Sunday 4 January
# weekend: sat,sun (built-in table (Saturday-Sunday unless known otherwise))
# note: RU 2026: transfers of days off from Постановление Правительства РФ от 24.09.2025 N 1466 "О переносе выходных дней в 2026 году"; Трудовой кодекс РФ, ст. 112
# license: https://github.com/nager/Nager.Date/blob/main/LICENSE.md

A regional holiday

curl "https://agent-helper.org/holidays/de/2026-01-06?region=DE-BY"
day off
# DE 2026-01-06 (tue)
# type: reference-data
# source: Nager.Date (with manual overrides)
# as-of: retrieved 2026-09-16T18:20:10Z
# reason: Epiphany (Heilige Drei Könige)
# weekend: sat,sun (built-in table (Saturday-Sunday unless known otherwise))
# license: https://github.com/nager/Nager.Date/blob/main/LICENSE.md

A region of another country (error)

curl "https://agent-helper.org/holidays/de/2026-01-06?region=BY"
error: 400 bad parameter 'region'
parameter: region
problem: 'BY' is not an ISO 3166-2 code of DE
hint: e.g. DE-XX; see /ref/subdivisions/DE
[the rest of this error repeats the parameter list above]

Limits and provenance

Rate class static (cacheable data: documentation, reference tables, rates, holidays, feeds, current time): 600 requests a minute per address, bursts of 100; wider limits apply per network and per autonomous system. Current values: /limits.

Answers are marked # type: reference-data; successful ones are served with Cache-Control: public, max-age=3600.

Data comes from a copy refreshed on a schedule, never fetched on your request:

Freshness of each copy and full terms: /sources.

Related

Every endpoint in this group

/holidays/{country}/{when}?[region=]&[weekend=]

Public holidays of a year (when=2026) or the status of one date (when=2026-12-25)

country: ISO 3166-1 alpha-2 code; when: year YYYY, or date YYYY-MM-DD; region (optional): ISO 3166-2 subdivision to include regional holidays, e.g. DE-BY; weekend (optional): override weekend days, e.g. fri,sat

curl "https://agent-helper.org/holidays/de/2026"

/holidays/{country}/next?[after=]&[tz=]&[count=]&[region=]

Next public holidays after a date

country: ISO 3166-1 alpha-2 code; after (optional): date YYYY-MM-DD (exclusive); or give tz= to mean today there; tz (optional): IANA timezone defining today; count (optional): 1-50; region (optional): ISO 3166-2 subdivision to include regional holidays, e.g. DE-BY

curl "https://agent-helper.org/holidays/fr/next?after=2026-09-15"

/holidays/countries

Countries with holiday data

curl "https://agent-helper.org/holidays/countries"