WorkdayAPI

API reference

Base URL https://workdayapi.mike-tusa.workers.dev. All responses are JSON with CORS enabled. Dates are plain calendar dates (YYYY-MM-DD), with no time zones. Supported years: 2020-2035.

Authentication and limits

Common parameters

ParameterMeaning
countryISO 3166-1 alpha-2 code, e.g. US, DE. See GET /v1/countries.
regionOptional ISO 3166-2 subdivision where supported: DE-BY, GB-SCT… (BY also works). GB defaults to GB-ENG (England and Wales).
weekendOptional override, e.g. fri,sat, sun or none. Default sat,sun.
typesHoliday types that are non-business days. Default public,bank; use public to ignore "bank" days (customary closures such as Christmas Eve in Sweden). observance days never block business days, so a list without public or bank (e.g. types=observance) is rejected with 400 invalid_types on the business-day endpoints (it is fine on /v1/holidays).

Endpoints

GET /v1/holidays

country, year, optional region, types. Lists the year's holidays. Moved holidays carry observed (for example a Saturday 1 January observed on Friday 31 December appears in both years).

curl "https://workdayapi.mike-tusa.workers.dev/v1/holidays?country=DE&year=2027&region=DE-BY"
{ "country": "DE", "region": "DE-BY", "year": 2027, "count": 12,
  "holidays": [ { "date": "2027-01-01", "name": "New Year's Day", "local_name": "Neujahr", "type": "public", "national": true }, … ] }

GET /v1/is-business-day

date, country, optional region, weekend, types.

curl "https://workdayapi.mike-tusa.workers.dev/v1/is-business-day?date=2026-12-28&country=GB"
{ "date": "2026-12-28", "business_day": false, "reason": "observed_holiday",
  "holiday": { "name": "Boxing Day (observed)", "type": "public", "actual_date": "2026-12-26" },
  "previous_business_day": "2026-12-24", "next_business_day": "2026-12-29", … }

reason is one of business_day, weekend, holiday, observed_holiday. At the edges of the supported range (2020-01-01, 2035-12-31) a neighbour that would fall outside it is null.

GET /v1/add

date, days (integer, negative counts backwards, |days| ≤ 2500), country, optional region, weekend, types. The start date itself is never counted; days=0 returns the date if it is a business day, otherwise the next one.

curl "https://workdayapi.mike-tusa.workers.dev/v1/add?date=2026-12-22&days=5&country=US"
{ "date": "2026-12-22", "days": 5, "result": "2026-12-30", "result_weekday": "wednesday", "calendar_days": 8,
  "skipped_holidays": [ { "date": "2026-12-25", "name": "Christmas Day", "type": "public" } ], … }

GET /v1/between

from, to, country, optional inclusive=true, region, weekend, types. Counts the days after from up to and including to (so between(from, add(from, n)) = n); inclusive=true also counts from. If to is before from the counts are negative. holiday_days counts holidays (including any on weekends); weekend_days counts the other weekend days.

curl "https://workdayapi.mike-tusa.workers.dev/v1/between?from=2026-12-01&to=2026-12-31&country=FR"
{ "business_days": 21, "calendar_days": 30, "weekend_days": 8, "holiday_days": 1, "holidays": [ … ] }

POST /v1/batch Pro key

Up to 100 operations per call (each submitted op counts as one call, including ops that return an error), using at most 10 distinct calendars (a calendar = country + region + types + weekend). Body ≤ 16 KB. Batch responses are compact JSON; per-day lists (holidays for between, skipped_holidays for add) are replaced by holidays_count / skipped_holidays_count unless the op sets "details": true (at most 10 ops per batch). Errors: 422 too_many_ops, too_many_calendars, too_many_details (rejected batches are not charged).

curl -X POST https://workdayapi.mike-tusa.workers.dev/v1/batch -H "Authorization: Bearer $KEY" -H "content-type: application/json" \
  -d '{"ops":[{"op":"add","date":"2026-10-05","days":10,"country":"US"},{"op":"between","from":"2026-01-01","to":"2026-12-31","country":"DE","region":"DE-BY"}]}'
{ "count": 2, "results": [ { "index": 0, "ok": true, "result": { … } }, { "index": 1, "ok": true, "result": { … } } ] }

GET /v1/countries, GET /v1/meta, GET /health

Supported countries with regions, scope, notes and official sources; service version, data version and limits.

Errors

{ "error": { "code": "invalid_date", "message": "\"date\" must be a calendar date in YYYY-MM-DD format." }, "docs": "/docs" }

400 invalid or missing parameter / duplicate_parameter / invalid_types · 401 invalid_api_key / api_key_required · 403 plan_required · 404 unknown_country / unknown_region / not_found · 405 method_not_allowed · 413 payload_too_large · 422 year_out_of_range / date_out_of_range / result_out_of_range / too_many_ops / too_many_calendars / too_many_details · 429 rate_limited / monthly_quota_exceeded / too_many_auth_failures (all with Retry-After) · 503 daily_capacity_reached.

Pricing

Free

$0

1,000 calls / month, all GET endpoints, all countries and regions.

Pro

$9/mo

50,000 calls / month, batch endpoint, higher burst. Or $90 / year.

Coming soon

Paid plans are not on sale yet. Prices are planned and may change before launch.

Data, sources and disclaimer

Data provided as-is, without warranty. Holidays are computed from rules (fixed dates, Easter, n-th weekday, substitute-day rules) that WorkdayAPI wrote from official government sources; no third-party holiday dataset is bundled. Governments sometimes declare one-off holidays at short notice and many rules have regional exceptions, so verify critical deadlines with the official source. WorkdayAPI is not legal, payroll or financial advice; do not rely on it alone for statutory, payroll, tax or contractual deadlines. Types: public = statutory holiday; bank = not statutory but banks/most businesses are closed (counted as non-business by default); observance = informational, still a business day. Entries marked "predicted": true follow past government practice but have not been officially declared for that year yet (e.g. South Africa's Tuesday substitute when Christmas falls on a Sunday).

CodeCountryScope and notesOfficial sources
ATAustriaGesetzliche Feiertage (Arbeitsruhegesetz §7)
Good Friday has not been a holiday since 2019 (replaced by a personal day). 24 and 31 December are customary half days and are not included.
source 1, source 2
AUAustraliaNational public holidays observed in every state and territory
Only holidays common to all states and territories. State-only holidays (Easter Saturday, King’s Birthday, Labour Day, Melbourne Cup, etc.) are not included yet. Anzac Day has no national substitute (some states add one).
source 1, source 2, source 3
BEBelgiumTen legal public holidays (FPS Employment)
A holiday on a Sunday (or usual rest day) is replaced by a day chosen per company/sector, so no fixed observed dates are added.
source 1, source 2
BRBrazilFeriados nacionais (Lei 662/1949 and amendments) plus bank holidays
Carnival Monday/Tuesday and Corpus Christi are "pontos facultativos" (optional for the federal government) but banks are closed, so they are type "bank". State and municipal holidays are not included. Black Consciousness Day (20 Nov) is national from 2024.
source 1, source 2, source 3
CACanadaFederal general holidays (Canada Labour Code s.166; substitute days per s.195)
Federal holidays only; provincial holidays (Family Day, Civic Holiday, Saint-Jean-Baptiste, etc.) are not included. Holidays falling on a weekend move to the next weekday (federal practice). Easter Monday is a federal public-service holiday only, so it is listed as an observance (business day).
source 1, source 2, source 3
CZCzechiaStátní svátky a ostatní svátky (zákon č. 245/2000 Sb.)source 1, source 2
DEGermany
Regions: DE-BW, DE-BY, DE-BE, DE-BB, DE-HB, DE-HH, DE-HE, DE-MV, DE-NI, DE-NW, DE-RP, DE-SL, DE-SN, DE-ST, DE-SH, DE-TH
Gesetzliche Feiertage: nationwide plus per Bundesland
Holidays are set by each Land; without ?region= only the nine nationwide holidays (per BMI) are returned. Holidays that apply only in some municipalities (Fronleichnam in parts of Sachsen/Thüringen, Mariä Himmelfahrt in Catholic communities of Bayern, Augsburger Friedensfest) are not included. Easter Sunday and Whit Sunday are listed for Brandenburg (they fall on Sundays).
source 1, source 2
DKDenmarkHelligdage (folkekirkens helligdage; Store Bededag abolished from 2024)
Constitution Day (5 June), Christmas Eve and New Year’s Eve are not public holidays by law; they are listed as observances.
source 1, source 2
EEEstoniaRiigipühad (Pühade ja tähtpäevade seadus)source 1
FIFinlandPublic holidays (church holidays, May Day, Independence Day)
Midsummer Eve and Christmas Eve are not statutory holidays but are general days off and bank closing days (type "bank").
source 1, source 2
FRFranceJours fériés (Code du travail art. L3133-1), metropolitan France
Alsace-Moselle (Good Friday, 26 December) and overseas departments are not included. Whit Monday is a legal holiday but is also the default "journée de solidarité", so many employers work it.
source 1, source 2
GBUnited Kingdom
Regions: GB-ENG, GB-WLS, GB-SCT, GB-NIR
Bank holidays (gov.uk), per nation
Without ?region= the England and Wales calendar (GB-ENG) is used. Substitute days follow gov.uk.
source 1, source 2
HRCroatiaBlagdani i neradni dani (Zakon o blagdanima, NN 110/19)source 1
IEIrelandPublic holidays (Organisation of Working Time Act 1997, Schedule 2)
Irish law gives no automatic substitute weekday when a holiday falls on a weekend (employees get a day off within a month, an extra leave day or pay instead), so no observed dates are added. Good Friday is not a public holiday (listed as an observance).
source 1, source 2
ISIcelandFrídagar (Lög nr. 88/1971, 6. gr.)
Christmas Eve and New Year’s Eve are holidays from 13:00 only, so they are listed as observances (business days).
source 1
ITItalyFestività nazionali (L. 260/1949 and amendments)
Local patron-saint days are not included. 4 October (San Francesco d’Assisi) is a national holiday from 2026 (Legge 8 ottobre 2025, n. 151).
source 1, source 2
JPJapan国民の祝日 (Act on National Holidays) incl. substitute and citizens’ holidays
Equinox days are officially fixed each February for the following year; dates after the latest Cabinet Office announcement use the standard astronomical formula and could change. Bank holidays 2-3 January and 31 December are not included (banks close, but they are not national holidays).
source 1, source 2
LTLithuaniaŠvenčių dienos (Darbo kodeksas, 123 str.)source 1
LULuxembourgJours fériés légaux (Code du travail L.232-2)
A holiday on a Sunday gives employees a compensatory day within three months (not a fixed date), so no observed dates are added.
source 1
MXMexicoDías de descanso obligatorio (Ley Federal del Trabajo art. 74) plus CNBV bank holidays
Holy Thursday, Good Friday, 2 November and 12 December are bank holidays set by the CNBV (type "bank"; 2026 list published in the DOF, later years assume the same pattern until published). Election-day rest days (always Sundays) are not included.
source 1, source 2
NLNetherlandsOfficiële feestdagen (Rijksoverheid)
Dutch law gives no general right to a day off; Good Friday and Liberation Day are mostly working days, so they are listed as observances.
source 1
NONorwayHelligdager (helligdagsfredloven) and 1 and 17 Maysource 1, source 2
NZNew ZealandNational public holidays (Holidays Act 2003; Te Kāhui o Matariki Public Holiday Act 2022)
Regional anniversary days are not included. Mondayisation applies to New Year, Waitangi, Anzac, Christmas and Boxing Day.
source 1, source 2
PLPolandDni wolne od pracy (Ustawa z 18 stycznia 1951 r.)
Christmas Eve (24 December) is a public holiday from 2025 (Dz.U. 2024 poz. 1965, in force 1 Feb 2025).
source 1, source 2
PTPortugalFeriados obrigatórios (Código do Trabalho art. 234)
Carnival Tuesday is optional (listed as an observance). Municipal holidays are not included.
source 1, source 2
SESwedenAllmänna helgdagar (Lag 1989:253) plus days treated as Sundays
Midsummer Eve, Christmas Eve and New Year’s Eve are not statutory holidays but are treated like Sundays (e.g. Semesterlagen) and banks are closed, so they are type "bank".
source 1
SISloveniaPrazniki in dela prosti dnevi (ZPDPD)
Only work-free days are included (e.g. Reformation Day 31 Oct is work-free; Primož Trubar Day and other non-work-free holidays are omitted).
source 1, source 2, source 3, source 4
USUnited StatesFederal holidays (5 U.S.C. 6103; OPM observed-date rule)
Saturday holidays are observed the preceding Friday and Sunday holidays the following Monday (federal employees). Inauguration Day (DC area only), one-off executive-order closures and state holidays are not included.
source 1, source 2
ZASouth AfricaPublic holidays (Public Holidays Act 36 of 1994)
A holiday on a Sunday moves to the Monday (Public Holidays Act s.2(1)). When that Monday is already a holiday (Christmas on a Sunday), the Act gives no further day; the President proclaimed Tuesday 27 December in 2011, 2016 and 2022, and later cases (2033-12-27) are listed as predicted until proclaimed. One-off holidays declared under s.2A (election days, 15 Dec 2023, 4 Nov 2026 local government elections, Proclamation 346 of 2026) are included; future ones are added when proclaimed.
source 1, source 2, source 3, source 4