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

ActionWhat it does
Check whether a date is a holidayCheck 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 coveredFind out how far back and how far forward a country's holiday data reaches, for public and school holidays separately.
Count working daysCount the working days between two dates, with weekends and public holidays taken out.
Find which countries have a public holidayAsk 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 outAsk one date of every country at once and get back the ones whose schools are closed that day.
Get the next public holidayGet 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 regionsList the states, cantons, regions or municipalities a country publishes holidays for, largest areas first.
List countriesList every country OpenHolidays has holiday data for, with its ISO 3166-1 code and official languages, sorted by name.
List languagesList the languages OpenHolidays publishes holiday names in, with their ISO 639-1 codes.
List public holidaysList a country's public holidays.
List school holiday groupsList the zones and school types a country splits its school holidays by.
List school holidaysList 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

CountrycountrytextRequired
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 checkcheck_ondate
The date to check. Defaults to today.
State or regionsubdivisiontext
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 offholiday_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 daysweekend_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 nameslanguagetext
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

CountrycountrytextRequired
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 regionsubdivisiontext
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 typegrouptext
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_holidaysobject
school_holidaysobject
subdivisiontext
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

CountrycountrytextRequired
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 datestart_datedateRequired
The first day of the range, counted in.
To dateend_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 regionsubdivisiontext
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 offholiday_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 daysweekend_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 nameslanguagetext
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

Dateon_datedate
The date to ask about. Defaults to today.
Countriescountrieslist
Only these countries. Leave empty for every country the data covers.
Holiday typesholiday_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 returnlimitnumber
How many holidays to return. Defaults to 100, which is more than any one date has.From 1 to 500. Default: 100.
Language for nameslanguagetext
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
holidayslist
languagetext
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

Dateon_datedate
The date to ask about. Defaults to today.
Countriescountrieslist
Only these countries. Leave empty for every country the data covers.
What to includeholiday_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 returnlimitnumber
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 nameslanguagetext
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
holidayslist
languagetext
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

CountrycountrytextRequired
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 regionsubdivisiontext
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 fromfrom_datedate
The date to start looking from. Defaults to today.
Count these as days offholiday_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 onlynationwide_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 nameslanguagetext
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

CountrycountrytextRequired
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 forsearchtext
Only regions whose name or code contains this text. Case and accents are ignored.
Largest areas onlytop_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 nameslanguagetext
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 forsearchtext
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 returnlimitnumber
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 forsearchtext
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

CountrycountrytextRequired
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 datestart_datedate
The first day of the range, counted in. Leave both dates empty for the current calendar year.
To dateend_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 regionsubdivisiontext
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 typesholiday_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 onlynationwide_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 containsname_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 nameslanguagetext
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
holidayslist
languagetext
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

CountrycountrytextRequired
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 regionsubdivisiontext
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 nameslanguagetext
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

CountrycountrytextRequired
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 datestart_datedate
The first day of the range, counted in. Leave both dates empty for the current calendar year.
To dateend_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 regionsubdivisiontext
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 typegrouptext
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 includeholiday_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 containsname_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 nameslanguagetext
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
holidayslist
languagetext
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
}

On this page