Public holidays API
Everything on this site is also published as plain files you can fetch from any language, any spreadsheet, any agent. There is no key, no quota and no tracking. The files are static, cached at the edge, and rebuilt whenever the dataset changes.
Endpoints
| Path | What you get |
|---|---|
/api/v1/countries.json | Every country and territory with ISO code, slug, weekend days and available years. |
/api/v1/{cc}.json | All years for one country, with holidays and yearly working days totals. cc is the lower case ISO 3166 alpha 2 code, for example be. |
/api/v1/{cc}/{year}.json | One country and one year: holidays, working days per month, long weekends and bridge days. |
/api/v1/{cc}/{year}.ics | iCalendar file, subscribe to it or import it into Google Calendar, Outlook or Apple Calendar. |
/api/v1/{cc}/{year}.csv | Comma separated values: date, weekday, name, observed, estimated. |
/{country-slug}/{year}.md | The country page as Markdown, ideal for language models and note taking tools. |
/llms.txt | Index of the site written for language models, with links to every dataset. |
Example
curl https://openworkdays.com/api/v1/lu/2026.json
{
"country": "Luxembourg",
"code": "LU",
"year": 2026,
"scope": "national",
"weekend": [
5,
6
],
"weekend_days": [
"Saturday",
"Sunday"
],
"summary": {
"public_holidays": 11,
"observed_days": 0,
"holiday_dates": 11,
"holidays_on_weekdays": 7,
"holidays_on_weekends": 4,
"working_days": 254,
"weekend_days": 104,
"calendar_days": 365
},
"holidays": [
{
"date": "2026-01-01",
"name": "New Year's Day",
"weekday": "Thursday"
},
{
"date": "2026-04-06",
"name": "Easter Monday",
"weekday": "Monday"
},
{
"date": "2026-05-01",
"name": "Labor Day",
"weekday": "Friday"
},
"..."
],
"working_days_by_month": [
{
"month": 1,
"name": "January",
"calendar_days": 31,
"weekend_days": 9,
"holidays_on_weekdays": 1,
"working_days": 21
},
{
"month": 2,
"name": "February",
"calendar_days": 28,
"weekend_days": 8,
"holidays_on_weekdays": 0,
"working_days": 20
},
"..."
],
"long_weekends": [
{
"start": "2026-04-04",
"end": "2026-04-06",
"days": 3,
"holidays": [
"Easter Monday"
]
},
"..."
],
"bridge_days": [
{
"take_off": "2026-01-02",
"break_start": "2026-01-01",
"break_end": "2026-01-04",
"days": 4,
"holidays": [
"New Year's Day"
]
},
"..."
]
}
Fields
- holidays[].date, name, weekday
- ISO 8601 date, English name, and the weekday name. A date can appear twice when two holidays coincide.
- holidays[].observed
- Present and true when the entry is a substitute day off granted because the holiday fell on a weekend.
- holidays[].estimated
- Present and true when the date depends on a lunar or astronomical observation and has not been confirmed by the authorities. It can move by one day.
- summary.working_days
- Calendar days minus weekend days minus public holidays that fall on weekdays.
- working_days_by_month[]
- The same breakdown for each month.
- long_weekends[] and bridge_days[]
- Breaks of three or more consecutive days off involving a holiday, and single working days squeezed between days off.
- working_weekend_days[]
- Weekend dates that are official working days (China, Hungary, Latvia and a few others move weekend days to build longer breaks). They count as working days.
- weekend
- Weekday numbers that are weekend days, Monday being 0 and Sunday 6.
- scope
national, or the region used when a country is represented by its main region (the United Kingdom uses England and Wales).
Working days in your own code
Fetch the year file, build a set of holiday dates, then count the days that are neither in the weekend list nor in that set. The site's own calculator does exactly this in about forty lines of JavaScript, which you can read at /static/calc.js.
const year = await fetch("https://openworkdays.com/api/v1/be/2026.json").then(r => r.json());
const holidays = new Set(year.holidays.map(h => h.date));
const weekend = new Set(year.weekend);
function isWorkingDay(d) {
const iso = d.toISOString().slice(0, 10);
const weekday = (d.getUTCDay() + 6) % 7; // Monday = 0
return !weekend.has(weekday) && !holidays.has(iso);
}
Terms
The data is published under Creative Commons Attribution 4.0. Use it in products, internal tools, models and research; keep a link to OpenWorkdays where the data is shown. Please cache responses on your side rather than fetching the same file thousands of times a day; the files change at most a few times a month.
Need something more: regional holidays, historical years, a signed SLA, custom feeds, or help integrating working day logic into your product? Write to hello@openworkdays.com.