OpenHolidays
App · Calendars · 12 actions
Look up public holidays and school holidays for 36 countries from a workflow. List a country's public holidays for a year or a date range, get the next one coming up, check whether a date, or today, is a holiday, and count the working days between two dates with weekends and holidays taken out. School holidays are the unusual part: term breaks come back as spans of days, down to the state, canton or school zone that keeps them, so a workflow can plan around the weeks parents are away. One step also answers a date across every country at once, for a team spread over several. Names come back in any of 30 languages. Every action reads: nothing here changes anything. No account or API key required.
Actions
| Action | What it does |
|---|---|
| Check whether a date is a holiday | Check one date and get four plain answers: is it a public holiday, are the schools out, is it a weekend, is it a working day. |
| Check which years are covered | Find out how far back and how far forward a country's holiday data reaches, for public and school holidays separately. |
| Count working days | Count the working days between two dates, with weekends and public holidays taken out. |
| Find which countries have a public holiday | Ask one date of every country at once and get back the ones with a public holiday that day, in a single step rather than one per country. |
| Find which countries have schools out | Ask one date of every country at once and get back the ones whose schools are closed that day. |
| Get the next public holiday | Get the single next public holiday in a country, returned flat so a later step can read the name, the date and how many days away it is without indexing into a list. |
| List a country's regions | List the states, cantons, regions or municipalities a country publishes holidays for, largest areas first. |
| List countries | List every country OpenHolidays has holiday data for, with its ISO 3166-1 code and official languages, sorted by name. |
| List languages | List the languages OpenHolidays publishes holiday names in, with their ISO 639-1 codes. |
| List public holidays | List a country's public holidays. |
| List school holiday groups | List the zones and school types a country splits its school holidays by. |
| List school holidays | List a country's school holidays, which is the thing almost no holiday API publishes. |
Check whether a date is a holiday
Check one date and get four plain answers: is it a public holiday, are the schools out, is it a weekend, is it a working day. Use it to gate a workflow on whether an office is open, or to hold a send that would land on a day off. It defaults to today, so 'is today a holiday' needs nothing but the country. Only Public holidays count as a day off unless you say otherwise, and anything else marked on the date is reported separately rather than silently dropped.
Inputs
- Country
countrytextRequired - The country to look up, chosen from the 36 countries OpenHolidays covers. The list is fetched from the API itself, so it is always current. A value from an earlier step can be a two-letter code such as 'DE' or a name such as 'Germany'.
- Date to check
check_ondate - The date to check. Defaults to today.
- State or region
subdivisiontext - Narrow to one state, canton, region or municipality. Pick the country first and the list fills with what that country publishes, largest areas at the top. Leaving it empty returns the whole country. Setting it keeps the nationwide holidays plus the ones that apply there, which is the calendar someone there really keeps.
- Count these as days off
holiday_typeslist - Which holiday types count as a day off here. Public alone by default, because that is what closes an office. A half day counts as half a day either way.One or more of:
Public(Public: a public holiday, and a day off),Bank(Bank: banks and offices are closed),Optional(Optional: marked, but most people work). Default:["Public"]. - Weekend days
weekend_dayslist - Which days of the week are not worked. Saturday and Sunday by default. Change it for a business that trades on Saturday, otherwise the count is out by a day every week.One or more of:
Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday. Default:["Saturday", "Sunday"]. - Language for names
languagetext - The language holiday and region names come back in. English by default. Where a name has no translation in the language you pick, the original is returned rather than nothing.Default:
EN.
Outputs
country_codetext- The country looked up
country_nametext- Its English name
datetext- The date that was checked
holiday_typeslist- The types counted as a day off
is_half_daytrue/false- True when the only holiday that applies is a half day
is_public_holidaytrue/false- True when a public holiday of the chosen types applies
is_school_holidaytrue/false- True when the schools are out that day
is_weekendtrue/false- True when it falls on one of the weekend days
is_working_daytrue/false- True when it is neither a weekend day nor a day off
languagetext- The language the names came back in
other_public_holidayslist- Public holidays on the same date the type filter left out, such as an Optional one
public_holiday_nameslist- Just their names
public_holidayslist- The public holidays that made it a holiday
school_holiday_nameslist- Just their names
school_holidayslist- The school holidays covering that date
subdivisiontext- The region filter applied, or null
weekdaytext- The day of the week it falls on
weekend_dayslist- The days treated as the weekend
Example output
{
"country_code": "DE",
"country_name": "Germany",
"date": "2026-10-03",
"holiday_types": [
"Public"
],
"is_half_day": false,
"is_public_holiday": true,
"is_school_holiday": false,
"is_weekend": true,
"is_working_day": false,
"language": "EN",
"other_public_holidays": [],
"public_holiday_names": [
"Day of German Unity"
],
"public_holidays": [
{
"comment": null,
"country_code": "DE",
"country_name": "Germany",
"day_count": 1,
"days_until": 19,
"end_date": "2026-10-03",
"ends_after_range": false,
"group_codes": [],
"groups": [],
"id": "555eaa64-b8f6-44ce-850b-6af0d75555e9",
"is_half_day": false,
"is_single_day": true,
"name": "Day of German Unity",
"names_by_language": {
"DE": "Tag der Deutschen Einheit",
"EN": "Day of German Unity"
},
"nationwide": true,
"regional_scope": "National",
"start_date": "2026-10-03",
"starts_before_range": false,
"subdivision_codes": [],
"subdivisions": [],
"tags": [],
"temporal_scope": "FullDay",
"type": "Public",
"weekday": "Saturday"
}
],
"school_holiday_names": [],
"school_holidays": [],
"subdivision": null,
"weekday": "Saturday",
"weekend_days": [
"Saturday",
"Sunday"
]
}Check which years are covered
Find out how far back and how far forward a country's holiday data reaches, for public and school holidays separately. The two rarely match: Germany's public holidays run from 2020 while its school holidays start a decade earlier. Ask this before a workflow depends on a year, because a year outside the data comes back empty rather than as an error. It is also the one-step check that the connection works.
Inputs
- Country
countrytextRequired - The country to look up, chosen from the 36 countries OpenHolidays covers. The list is fetched from the API itself, so it is always current. A value from an earlier step can be a two-letter code such as 'DE' or a name such as 'Germany'.
- State or region
subdivisiontext - Narrow to one state, canton, region or municipality. Pick the country first and the list fills with what that country publishes, largest areas at the top. Leaving it empty returns the whole country. Setting it keeps the nationwide holidays plus the ones that apply there, which is the calendar someone there really keeps.
- School zone or school type
grouptext - Narrow to one school holiday group. Four countries set different school holiday dates by language community, by region or by type of school, and this is how to pick one. The rest publish none, in which case leave it empty.
Outputs
country_codetext- The country looked up
country_nametext- Its English name
grouptext- The school zone or school type applied, or null
public_holidaysobjectschool_holidaysobjectsubdivisiontext- The region filter applied, or null
Example output
{
"country_code": "DE",
"country_name": "Germany",
"group": null,
"public_holidays": {
"earliest_date": "2020-01-01",
"first_year": 2020,
"last_year": 2030,
"latest_date": "2030-12-26",
"year_count": 11
},
"school_holidays": {
"earliest_date": "2010-07-12",
"first_year": 2010,
"last_year": 2031,
"latest_date": "2031-05-23",
"year_count": 22
},
"subdivision": null
}Count working days
Count the working days between two dates, with weekends and public holidays taken out. Use it for a delivery date, an SLA window, a payroll period or a project estimate. It also hands back which holidays cost a working day and which fell at a weekend anyway. Half days count as half, and the weekend itself is a setting, so a business that trades on Saturday counts its own.
Inputs
- Country
countrytextRequired - The country to look up, chosen from the 36 countries OpenHolidays covers. The list is fetched from the API itself, so it is always current. A value from an earlier step can be a two-letter code such as 'DE' or a name such as 'Germany'.
- From date
start_datedateRequired - The first day of the range, counted in.
- To date
end_datedateRequired - The last day of the range, counted in. It must be on or after the from date, and the range can cover at most three years.
- State or region
subdivisiontext - Narrow to one state, canton, region or municipality. Pick the country first and the list fills with what that country publishes, largest areas at the top. Leaving it empty returns the whole country. Setting it keeps the nationwide holidays plus the ones that apply there, which is the calendar someone there really keeps.
- Count these as days off
holiday_typeslist - Which holiday types count as a day off here. Public alone by default, because that is what closes an office. A half day counts as half a day either way.One or more of:
Public(Public: a public holiday, and a day off),Bank(Bank: banks and offices are closed),Optional(Optional: marked, but most people work). Default:["Public"]. - Weekend days
weekend_dayslist - Which days of the week are not worked. Saturday and Sunday by default. Change it for a business that trades on Saturday, otherwise the count is out by a day every week.One or more of:
Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday. Default:["Saturday", "Sunday"]. - Language for names
languagetext - The language holiday and region names come back in. English by default. Where a name has no translation in the language you pick, the original is returned rather than nothing.Default:
EN.
Outputs
country_codetext- The country looked up
country_nametext- Its English name
end_datetext- The last day of the range
holiday_dateslist- Just those start dates
holiday_days_offnumber- Working days lost to a holiday, half counting a half
holiday_typeslist- The types counted as a day off
holidayslist- The holidays that landed on a working day
holidays_on_weekendslist- Holidays that fell at a weekend, so cost nobody a day
languagetext- The language the names came back in
start_datetext- The first day of the range
subdivisiontext- The region filter applied, or null
total_daysnumber- Every day in the range, both ends counted
weekend_dayslist- The days treated as the weekend
weekend_days_countnumber- How many fell on a weekend day
working_daysnumber- Days that are neither weekend nor holiday; can end in .5 when a half day falls in the range
Example output
{
"country_code": "DE",
"country_name": "Germany",
"end_date": "2026-12-31",
"holiday_dates": [
"2026-10-03"
],
"holiday_days_off": 2,
"holiday_types": [
"Public"
],
"holidays": [
{
"comment": null,
"country_code": "DE",
"country_name": "Germany",
"day_count": 1,
"days_until": 19,
"end_date": "2026-10-03",
"ends_after_range": false,
"group_codes": [],
"groups": [],
"id": "555eaa64-b8f6-44ce-850b-6af0d75555e9",
"is_half_day": false,
"is_single_day": true,
"name": "Day of German Unity",
"names_by_language": {
"DE": "Tag der Deutschen Einheit",
"EN": "Day of German Unity"
},
"nationwide": true,
"regional_scope": "National",
"start_date": "2026-10-03",
"starts_before_range": false,
"subdivision_codes": [],
"subdivisions": [],
"tags": [],
"temporal_scope": "FullDay",
"type": "Public",
"weekday": "Saturday"
}
],
"holidays_on_weekends": [],
"language": "EN",
"start_date": "2026-12-01",
"subdivision": null,
"total_days": 31,
"weekend_days": [
"Saturday",
"Sunday"
],
"weekend_days_count": 8,
"working_days": 21
}Find which countries have a public holiday
Ask one date of every country at once and get back the ones with a public holiday that day, in a single step rather than one per country. Use it to tell a global team who is off today, or to hold a send that would land on a holiday somewhere. Defaults to today, and can be narrowed to the countries you operate in.
Inputs
- Date
on_datedate - The date to ask about. Defaults to today.
- Countries
countrieslist - Only these countries. Leave empty for every country the data covers.
- Holiday types
holiday_typeslist - Only holidays of these types. Leave empty for every type. An Optional holiday is marked in the calendar but is a day most people work, so pick Public for the days that actually close an office.One or more of:
Public(Public: a public holiday, and a day off),Bank(Bank: banks and offices are closed),Optional(Optional: marked, but most people work). - How many to return
limitnumber - How many holidays to return. Defaults to 100, which is more than any one date has.From 1 to 500. Default:
100. - Language for names
languagetext - The language holiday and region names come back in. English by default. Where a name has no translation in the language you pick, the original is returned rather than nothing.Default:
EN.
Outputs
countnumber- How many are returned
countrieslist- The country filter applied, empty when every country
country_codeslist- The countries actually present in the result
country_countnumber- How many countries that is
datetext- The date that was asked about
holiday_typeslist- The type filter applied, empty when every type is kept
holidayslistlanguagetext- The language the names came back in
matched_countnumber- How many matched before the limit
total_countnumber- How many the date held before filtering
weekdaytext- The day of the week it falls on
Example output
{
"count": 1,
"countries": [
"DE"
],
"country_codes": [
"DE"
],
"country_count": 1,
"date": "2026-10-03",
"holiday_types": [],
"holidays": [
{
"comment": null,
"country_code": "DE",
"country_name": "Germany",
"day_count": 1,
"days_until": 19,
"end_date": "2026-10-03",
"ends_after_range": false,
"group_codes": [],
"groups": [],
"id": "555eaa64-b8f6-44ce-850b-6af0d75555e9",
"is_half_day": false,
"is_single_day": true,
"name": "Day of German Unity",
"names_by_language": {
"DE": "Tag der Deutschen Einheit",
"EN": "Day of German Unity"
},
"nationwide": true,
"regional_scope": "National",
"start_date": "2026-10-03",
"starts_before_range": false,
"subdivision_codes": [],
"subdivisions": [],
"tags": [],
"temporal_scope": "FullDay",
"type": "Public",
"weekday": "Saturday"
}
],
"language": "EN",
"matched_count": 1,
"total_count": 34,
"weekday": "Saturday"
}Find which countries have schools out
Ask one date of every country at once and get back the ones whose schools are closed that day. School holidays are staggered across Europe, so this is how to see, in one step, which offices will be thin on the ground in a given week. Defaults to today, and can be narrowed to the countries you operate in.
Inputs
- Date
on_datedate - The date to ask about. Defaults to today.
- Countries
countrieslist - Only these countries. Leave empty for every country the data covers.
- What to include
holiday_typeslist - Which of the things a school calendar marks to include. Leave it empty for all of them. Alongside the holidays themselves, a few countries mark the day term starts and the day lessons end.One or more of:
School(School holidays: the schools are closed),BackToSchool(Back to school: the term starts),EndOfLessons(End of lessons: the term ends). - How many to return
limitnumber - How many entries to return. Defaults to 100. A summer date can have more, so raise it for a July run.From 1 to 500. Default:
100. - Language for names
languagetext - The language holiday and region names come back in. English by default. Where a name has no translation in the language you pick, the original is returned rather than nothing.Default:
EN.
Outputs
countnumber- How many are returned
countrieslist- The country filter applied, empty when every country
country_codeslist- The countries actually present in the result
country_countnumber- How many countries that is
datetext- The date that was asked about
holiday_typeslist- The type filter applied, empty when every type is kept
holidayslistlanguagetext- The language the names came back in
matched_countnumber- How many matched before the limit
total_countnumber- How many the date held before filtering
weekdaytext- The day of the week it falls on
Example output
{
"count": 1,
"countries": [
"DE"
],
"country_codes": [
"DE"
],
"country_count": 1,
"date": "2025-12-24",
"holiday_types": [],
"holidays": [
{
"comment": null,
"country_code": "DE",
"country_name": "Germany",
"day_count": 15,
"days_until": -266,
"end_date": "2026-01-05",
"ends_after_range": false,
"group_codes": [],
"groups": [],
"id": "fae75443-4eb3-4720-9ba2-3dcca3553820",
"is_half_day": false,
"is_single_day": false,
"name": "Christmas Holidays",
"names_by_language": {
"EN": "Christmas Holidays"
},
"nationwide": false,
"regional_scope": "Regional",
"start_date": "2025-12-22",
"starts_before_range": true,
"subdivision_codes": [
"DE-BY"
],
"subdivisions": [
{
"code": "DE-BY",
"short_name": "BY"
}
],
"tags": [],
"temporal_scope": "FullDay",
"type": "School",
"weekday": "Monday"
}
],
"language": "EN",
"matched_count": 1,
"total_count": 68,
"weekday": "Wednesday"
}Get the next public holiday
Get the single next public holiday in a country, returned flat so a later step can read the name, the date and how many days away it is without indexing into a list. Answers 'when is the next day off' in one step, so a scheduled workflow can act a fortnight before one. If nothing falls in the year ahead it returns found = false rather than failing.
Inputs
- Country
countrytextRequired - The country to look up, chosen from the 36 countries OpenHolidays covers. The list is fetched from the API itself, so it is always current. A value from an earlier step can be a two-letter code such as 'DE' or a name such as 'Germany'.
- State or region
subdivisiontext - Narrow to one state, canton, region or municipality. Pick the country first and the list fills with what that country publishes, largest areas at the top. Leaving it empty returns the whole country. Setting it keeps the nationwide holidays plus the ones that apply there, which is the calendar someone there really keeps.
- Counting from
from_datedate - The date to start looking from. Defaults to today.
- Count these as days off
holiday_typeslist - Which holiday types count as a day off here. Public alone by default, because that is what closes an office. A half day counts as half a day either way.One or more of:
Public(Public: a public holiday, and a day off),Bank(Bank: banks and offices are closed),Optional(Optional: marked, but most people work). Default:["Public"]. - Nationwide holidays only
nationwide_onlytrue/false - Keep only the holidays that apply to the whole country, dropping the ones limited to particular states or regions. Off by default.Default:
false. - Language for names
languagetext - The language holiday and region names come back in. English by default. Where a name has no translation in the language you pick, the original is returned rather than nothing.Default:
EN.
Outputs
counted_fromtext- The date the search started from
country_codetext- The country looked up
country_nametext- Its English name
day_countnumber- How many days it runs for
days_untilnumber- Days from the date it was counted from
end_datetext- The last day
foundtrue/false- False when nothing falls in the window
holiday_typeslist- The types counted as a day off
idtext- The holiday's stable id
is_half_daytrue/false- True when only half the day is off
is_single_daytrue/false- True when it starts and ends on the same day
languagetext- The language the name came back in
nametext- The name, in the language that was asked for
names_by_languageobject- Every translation published, keyed by language code
nationwidetrue/false- True when it applies to the whole country
start_datetext- The first day, as YYYY-MM-DD
subdivisiontext- The region filter applied, or null
subdivision_codeslist- Where it applies when it is not nationwide
typetext- Public, Bank or Optional
weekdaytext- The day of the week
window_daysnumber- How far ahead it looked, in days
Example output
{
"counted_from": "2026-09-14",
"country_code": "DE",
"country_name": "Germany",
"day_count": 1,
"days_until": 19,
"end_date": "2026-10-03",
"found": true,
"holiday_types": [
"Public"
],
"id": "555eaa64-b8f6-44ce-850b-6af0d75555e9",
"is_half_day": false,
"is_single_day": true,
"language": "EN",
"name": "Day of German Unity",
"names_by_language": {
"DE": "Tag der Deutschen Einheit",
"EN": "Day of German Unity"
},
"nationwide": true,
"start_date": "2026-10-03",
"subdivision": null,
"subdivision_codes": [],
"type": "Public",
"weekday": "Saturday",
"window_days": 366
}List a country's regions
List the states, cantons, regions or municipalities a country publishes holidays for, largest areas first. Use it to find the code a region filter wants, or to see how far down a country's calendar varies: Germany stops at its sixteen federal states, Switzerland reaches individual municipalities. Each region carries its ISO 3166-2 code too, which is not always the same as the code this API answers to.
Inputs
- Country
countrytextRequired - The country to look up, chosen from the 36 countries OpenHolidays covers. The list is fetched from the API itself, so it is always current. A value from an earlier step can be a two-letter code such as 'DE' or a name such as 'Germany'.
- Search for
searchtext - Only regions whose name or code contains this text. Case and accents are ignored.
- Largest areas only
top_level_onlytrue/false - Keep only a country's largest areas, dropping the districts and municipalities inside them. Useful for a country like Switzerland, which publishes 26 cantons and nearly 2,000 places within them.Default:
false. - Language for names
languagetext - The language holiday and region names come back in. English by default. Where a name has no translation in the language you pick, the original is returned rather than nothing.Default:
EN.
Outputs
countnumber- How many are returned
country_codetext- The country looked up
country_nametext- Its English name
languagetext- The language the names came back in
region_codeslist- Just the codes, ready to feed a later step
regionslist- One entry per region, largest areas first
searchtext- The search that was applied
top_level_countnumber- How many of the returned regions are top level
total_countnumber- How many the country publishes before filtering
Example output
{
"count": 2,
"country_code": "DE",
"country_name": "Germany",
"language": "EN",
"region_codes": [
"DE-BY",
"DE-BY-AU"
],
"regions": [
{
"category": "federal state",
"code": "DE-BY",
"depth": 0,
"group_codes": [],
"iso_code": "DE-BY",
"name": "Bavaria",
"official_languages": [
"DE"
],
"parent_path": [],
"short_name": "BY"
},
{
"category": "municipality",
"code": "DE-BY-AU",
"depth": 1,
"group_codes": [],
"iso_code": null,
"name": "Augsburg",
"official_languages": [
"DE"
],
"parent_path": [
"Bavaria"
],
"short_name": "BY-AU"
}
],
"search": null,
"top_level_count": 1,
"total_count": 17
}List countries
List every country OpenHolidays has holiday data for, with its ISO 3166-1 code and official languages, sorted by name. This is the same list every country dropdown here is built from, and the way to check whether somewhere is covered before a workflow depends on it. Coverage is 36 countries, mostly European. Search it by name or by code.
Inputs
- Search for
searchtext - Only countries whose name or code contains this text. Case and accents are ignored, and names in every language are searched. Leave empty for all of them.
- How many to return
limitnumber - How many countries to return. Every match is returned unless you set this.From 1 to 1000.
Outputs
countnumber- How many are returned
countrieslist- One entry per country, sorted by name
country_codeslist- Just the codes, ready to feed a later step
matched_countnumber- How many matched a search
searchtext- The search that was applied
total_countnumber- How many countries are covered in all
Example output
{
"count": 2,
"countries": [
{
"country_code": "DE",
"name": "Germany",
"names_by_language": {
"EN": "Germany"
},
"official_languages": [
"DE"
]
},
{
"country_code": "CH",
"name": "Switzerland",
"names_by_language": {
"EN": "Switzerland"
},
"official_languages": [
"DE",
"FR",
"IT"
]
}
],
"country_codes": [
"DE",
"CH"
],
"matched_count": 2,
"search": null,
"total_count": 36
}List languages
List the languages OpenHolidays publishes holiday names in, with their ISO 639-1 codes. Useful when a workflow has to write to people in their own language: pick the code here, then set it as the language on any other action. Not every holiday is translated into every language, and where one is not the original name is returned rather than a blank.
Inputs
- Search for
searchtext - Only languages whose name or code contains this text. Leave empty for all of them.
Outputs
countnumber- How many are returned
language_codeslist- Just the codes, ready to feed a later step
languageslist- One entry per language, sorted by name
searchtext- The search that was applied
total_countnumber- How many languages are published in all
Example output
{
"count": 2,
"language_codes": [
"DE",
"EN"
],
"languages": [
{
"language_code": "DE",
"name": "German",
"names_by_language": {
"EN": "German"
}
},
{
"language_code": "EN",
"name": "English",
"names_by_language": {
"EN": "English"
}
}
],
"search": null,
"total_count": 30
}List public holidays
List a country's public holidays. Leave the dates empty for this calendar year, or set them for a quarter, a sprint or any window up to three years. Each holiday comes back with its date, the weekday, whether it applies nationwide and which regions it applies in. Choosing a state or canton keeps that region's own holidays alongside the national ones, which is the calendar someone working there actually keeps.
Inputs
- Country
countrytextRequired - The country to look up, chosen from the 36 countries OpenHolidays covers. The list is fetched from the API itself, so it is always current. A value from an earlier step can be a two-letter code such as 'DE' or a name such as 'Germany'.
- From date
start_datedate - The first day of the range, counted in. Leave both dates empty for the current calendar year.
- To date
end_datedate - The last day of the range, counted in. It must be on or after the from date, and the range can cover at most three years.
- State or region
subdivisiontext - Narrow to one state, canton, region or municipality. Pick the country first and the list fills with what that country publishes, largest areas at the top. Leaving it empty returns the whole country. Setting it keeps the nationwide holidays plus the ones that apply there, which is the calendar someone there really keeps.
- Holiday types
holiday_typeslist - Only holidays of these types. Leave empty for every type. An Optional holiday is marked in the calendar but is a day most people work, so pick Public for the days that actually close an office.One or more of:
Public(Public: a public holiday, and a day off),Bank(Bank: banks and offices are closed),Optional(Optional: marked, but most people work). - Nationwide holidays only
nationwide_onlytrue/false - Keep only the holidays that apply to the whole country, dropping the ones limited to particular states or regions. Off by default.Default:
false. - Name contains
name_containstext - Only holidays whose name contains this text. Case and accents are ignored, and every language the name is published in is searched, so 'weihnachten' finds Christmas in a German calendar asked for in English.
- Language for names
languagetext - The language holiday and region names come back in. English by default. Where a name has no translation in the language you pick, the original is returned rather than nothing.Default:
EN.
Outputs
countnumber- How many are returned
country_codetext- The country looked up
country_nametext- Its English name
dateslist- Just the start dates, ready to feed a later step
days_in_rangenumber- How many days the range covers
end_datetext- The last day of the range
holiday_typeslist- The type filter applied, empty when every type is kept
holidayslistlanguagetext- The language the names came back in
name_containstext- The name filter applied, or null
nationwide_onlytrue/false- Whether regional holidays were dropped
start_datetext- The first day of the range
subdivisiontext- The region filter applied, or null
total_countnumber- How many the range held before filtering
Example output
{
"count": 2,
"country_code": "DE",
"country_name": "Germany",
"dates": [
"2026-01-06",
"2026-10-03"
],
"days_in_range": 365,
"end_date": "2026-12-31",
"holiday_types": [
"Public"
],
"holidays": [
{
"comment": null,
"country_code": "DE",
"country_name": "Germany",
"day_count": 1,
"days_until": -251,
"end_date": "2026-01-06",
"ends_after_range": false,
"group_codes": [],
"groups": [],
"id": "7f99caaa-1eb2-4564-a6e8-13844634c929",
"is_half_day": false,
"is_single_day": true,
"name": "Epiphany",
"names_by_language": {
"DE": "Heilige Drei Koenige",
"EN": "Epiphany"
},
"nationwide": false,
"regional_scope": "Regional",
"start_date": "2026-01-06",
"starts_before_range": false,
"subdivision_codes": [
"DE-BW",
"DE-BY",
"DE-ST"
],
"subdivisions": [
{
"code": "DE-BW",
"short_name": "BW"
},
{
"code": "DE-BY",
"short_name": "BY"
},
{
"code": "DE-ST",
"short_name": "ST"
}
],
"tags": [],
"temporal_scope": "FullDay",
"type": "Public",
"weekday": "Tuesday"
},
{
"comment": null,
"country_code": "DE",
"country_name": "Germany",
"day_count": 1,
"days_until": 19,
"end_date": "2026-10-03",
"ends_after_range": false,
"group_codes": [],
"groups": [],
"id": "555eaa64-b8f6-44ce-850b-6af0d75555e9",
"is_half_day": false,
"is_single_day": true,
"name": "Day of German Unity",
"names_by_language": {
"DE": "Tag der Deutschen Einheit",
"EN": "Day of German Unity"
},
"nationwide": true,
"regional_scope": "National",
"start_date": "2026-10-03",
"starts_before_range": false,
"subdivision_codes": [],
"subdivisions": [],
"tags": [],
"temporal_scope": "FullDay",
"type": "Public",
"weekday": "Saturday"
}
],
"language": "EN",
"name_contains": null,
"nationwide_only": false,
"start_date": "2026-01-01",
"subdivision": null,
"total_count": 20
}List school holiday groups
List the zones and school types a country splits its school holidays by. Belgium sets its by language community, the Netherlands by region, and Switzerland and Germany by type of school, so primary and vocational schools break on different days. This is how to find the code for one. The other 32 countries publish none, and an empty result is the normal answer for them rather than a fault; where a country staggers school holidays by zone, as France does, the zones are regions instead and 'List a country's regions' finds them.
Inputs
- Country
countrytextRequired - The country to look up, chosen from the 36 countries OpenHolidays covers. The list is fetched from the API itself, so it is always current. A value from an earlier step can be a two-letter code such as 'DE' or a name such as 'Germany'.
- State or region
subdivisiontext - Narrow to one state, canton, region or municipality. Pick the country first and the list fills with what that country publishes, largest areas at the top. Leaving it empty returns the whole country. Setting it keeps the nationwide holidays plus the ones that apply there, which is the calendar someone there really keeps.
- Language for names
languagetext - The language holiday and region names come back in. English by default. Where a name has no translation in the language you pick, the original is returned rather than nothing.Default:
EN.
Outputs
countnumber- How many there are
country_codetext- The country looked up
country_nametext- Its English name
group_codeslist- Just the codes, ready to feed a later step
groupslist- One entry per group, empty for most countries
languagetext- The language the names came back in
subdivisiontext- The region filter applied, or null
Example output
{
"count": 2,
"country_code": "DE",
"country_name": "Germany",
"group_codes": [
"DE-MV-ABS",
"DE-MV-BBS"
],
"groups": [
{
"category": "school type",
"code": "DE-MV-ABS",
"comment": null,
"depth": 0,
"name": "General Schools",
"short_name": "MV-ABS",
"subdivision_codes": [
"DE-MV"
]
},
{
"category": "school type",
"code": "DE-MV-BBS",
"comment": null,
"depth": 0,
"name": "Vocational Schools",
"short_name": "MV-BBS",
"subdivision_codes": [
"DE-MV"
]
}
],
"language": "EN",
"subdivision": null
}List school holidays
List a country's school holidays, which is the thing almost no holiday API publishes. Each one is a span of days rather than a single date, so a fortnight of Easter holidays comes back as one entry with its start, its end and how many days it runs. Term dates vary by region and, in a few countries, by zone or type of school, so pick those to get the dates a particular school really keeps. Use it to plan around the weeks parents will be taking off.
Inputs
- Country
countrytextRequired - The country to look up, chosen from the 36 countries OpenHolidays covers. The list is fetched from the API itself, so it is always current. A value from an earlier step can be a two-letter code such as 'DE' or a name such as 'Germany'.
- From date
start_datedate - The first day of the range, counted in. Leave both dates empty for the current calendar year.
- To date
end_datedate - The last day of the range, counted in. It must be on or after the from date, and the range can cover at most three years.
- State or region
subdivisiontext - Narrow to one state, canton, region or municipality. Pick the country first and the list fills with what that country publishes, largest areas at the top. Leaving it empty returns the whole country. Setting it keeps the nationwide holidays plus the ones that apply there, which is the calendar someone there really keeps.
- School zone or school type
grouptext - Narrow to one school holiday group. Four countries set different school holiday dates by language community, by region or by type of school, and this is how to pick one. The rest publish none, in which case leave it empty.
- What to include
holiday_typeslist - Which of the things a school calendar marks to include. Leave it empty for all of them. Alongside the holidays themselves, a few countries mark the day term starts and the day lessons end.One or more of:
School(School holidays: the schools are closed),BackToSchool(Back to school: the term starts),EndOfLessons(End of lessons: the term ends). - Name contains
name_containstext - Only holidays whose name contains this text. Case and accents are ignored, and every language the name is published in is searched, so 'weihnachten' finds Christmas in a German calendar asked for in English.
- Language for names
languagetext - The language holiday and region names come back in. English by default. Where a name has no translation in the language you pick, the original is returned rather than nothing.Default:
EN.
Outputs
countnumber- How many are returned
country_codetext- The country looked up
country_nametext- Its English name
dateslist- Just the start dates, ready to feed a later step
days_in_rangenumber- How many days the range covers
end_datetext- The last day of the range
grouptext- The school zone or school type applied, or null
holiday_typeslist- The type filter applied, empty when every type is kept
holidayslistlanguagetext- The language the names came back in
name_containstext- The name filter applied, or null
start_datetext- The first day of the range
subdivisiontext- The region filter applied, or null
total_countnumber- How many the range held before filtering
total_days_offnumber- The days off across all of them added up
Example output
{
"count": 1,
"country_code": "DE",
"country_name": "Germany",
"dates": [
"2025-12-22"
],
"days_in_range": 365,
"end_date": "2026-12-31",
"group": null,
"holiday_types": [
"School"
],
"holidays": [
{
"comment": null,
"country_code": "DE",
"country_name": "Germany",
"day_count": 15,
"days_until": -266,
"end_date": "2026-01-05",
"ends_after_range": false,
"group_codes": [],
"groups": [],
"id": "fae75443-4eb3-4720-9ba2-3dcca3553820",
"is_half_day": false,
"is_single_day": false,
"name": "Christmas Holidays",
"names_by_language": {
"EN": "Christmas Holidays"
},
"nationwide": false,
"regional_scope": "Regional",
"start_date": "2025-12-22",
"starts_before_range": true,
"subdivision_codes": [
"DE-BY"
],
"subdivisions": [
{
"code": "DE-BY",
"short_name": "BY"
}
],
"tags": [],
"temporal_scope": "FullDay",
"type": "School",
"weekday": "Monday"
}
],
"language": "EN",
"name_contains": null,
"start_date": "2026-01-01",
"subdivision": "DE-BY",
"total_count": 8,
"total_days_off": 15
}