Business days and public holidays
Business days and public holidays is an API that answers the date questions almost every workflow has: is this a business day? what is the due date 10 business days from now? how many business days are there between two dates? which public holidays does a country or region have this year? The holidays are built into our own server: it calls no third party, so it answers in milliseconds and doesn't depend on another service being up.
What you can ask
check: whether a date is a business day, whether it's a weekend or a holiday (and which one), and the previous and next business day.add: add N business days to a date (or subtract them, with a negative number). The starting day doesn't count: a Friday plus 1 is the Monday. It tells you which days it skipped.between: counts the business days between two dates, both included (like Excel's NETWORKDAYS), with the weekends and holidays that fell in between.list: the public holidays of a year for a country or region.
You give the country as its two-letter code (ES, US, GB, MX…) and, if you want the holidays of a state, province or region, its code in region (CT for Catalonia, MD for Madrid, CA for California…). If you get a region wrong, the error lists the valid codes.
What's worth knowing (honestly)
Where the holidays come from: an open dataset maintained by the community (date-holidays) that covers 207 countries and territories, with uneven quality. We checked the 2026 national lists of Spain (the annex of the BOE of 28 October 2025), England (gov.uk) and the United States (the federal Office of Personnel Management): they match on every holiday that falls on a weekday. But a one-off holiday announced late can be missing: 15 June 2026 is a bank holiday in Scotland for the World Cup and the dataset doesn't have it. That's what extra_holidays is for. For legal deadlines, payroll or contracts, always confirm the date with the official source.
Weekend: Saturday and Sunday, except in 16 countries where Friday and Saturday is the usual weekend (Saudi Arabia, Egypt, Israel, Iraq, Jordan, Kuwait, Qatar, Bahrain, Oman, Algeria, Bangladesh, Libya, the Maldives, Sudan, Syria and Yemen). If your week is different (a shop open on Saturdays, a country with another custom), send weekend, for example ["fri","sat"]. The response says which weekend it used.
Dates, not times: it works with calendar dates (YYYY-MM-DD), from 2000 to 2100. If you send a date with a time (2026-12-24T18:00:00Z) it uses only the date part, as written: it doesn't change time zone.
Without a region, only national holidays: the response warns you (warnings) if the country has regional holidays that weren't counted. By default the holidays of type public count; with types you can add bank, school, observance or optional. A holiday that starts in the middle of the afternoon (the eve of some festivals) comes with full_day: false and that day is still a business day.
All you need
- Your API key. Create it in your dashboard with "+ Create key".
- In your automation platform, an "HTTP Request" step (n8n, Make, Zapier, Pipedream…).
How to use it in n8n
- Method:
POST· URL:https://api.cofferdock.com/business-days - Send Headers:
x-api-key= your key,Content-Type=application/json - Send Body (JSON):
{ "country": "ES", "date": "2026-12-23", "days": 5 } - The resulting date arrives in
result(here,2026-12-31). With a date coming from a previous node, set the value as an expression.
What to send, depending on what you want
| I want to… | Send | You get |
|---|---|---|
| Know if a date is a business day | country, date | is_business_day, the holiday and the next business day |
| Add business days | country, date, days | result and the days it skipped |
| Count business days | country, from, to | business_days |
| See the holidays of a year | country, year | holidays, a list with date and name |
You don't need to say the action: it's deduced from what you send. If you want to be explicit, add action (check, add, between or list).
API overview
- Endpoint:
POST https://api.cofferdock.com/business-days - Auth: header
x-api-key: YOUR_KEY. - Input: JSON. The options can also go in the query string (lists separated by commas).
- Calculation: local, with no browser and no call to any third party. Each call takes milliseconds.
- Errors:
400if something is missing or not valid (a country or region that doesn't exist, an impossible date, a result outside 2000 to 2100): not charged. - Limits: 60 requests/min per IP.
daysfrom -3650 to 3650, ranges of up to 20 years, up to 100 dates inextra_holidays. 1 call = 1 credit.
Options
| Option | Default | Description |
|---|---|---|
action | deduced | check, add, between or list. If missing: with days it's add; with from/to, between; with year, list; with date, check. |
country | - | Two-letter ISO code. Required for list; for the others, without it only weekends are skipped (the response warns you). |
region | - | Code of the state, province or region (needs country). |
date | - | YYYY-MM-DD. For check and add. |
days | - | Integer from -3650 to 3650. For add. With 0, a non-business date moves to the next business day and a business date stays. |
from, to | - | Range, both days included. For between. |
year | - | From 2000 to 2100. For list. |
weekend | Saturday and Sunday (Friday and Saturday in 16 countries) | List of days, for example ["fri","sat"] or "fri,sat". Empty = no weekend. It can't be all seven days. |
types | ["public"] | Holiday types that count: public, bank, school, observance, optional. |
extra_holidays | - | Up to 100 more dates that count as non-business days (a one-off holiday, your company's closing days). |
language | en | Language of the holiday names (es, fr…), if the country has it; otherwise the local one. |
Examples
# Which business day is 5 business days after 23 Dec 2026 in Spain?
curl -X POST "https://api.cofferdock.com/business-days" \
-H "x-api-key: YOUR_KEY" -H "Content-Type: application/json" \
-d '{ "country": "ES", "date": "2026-12-23", "days": 5 }'
{ "success": true, "action": "add", "country": "ES", "region": null,
"weekend": ["Saturday", "Sunday"], "weekend_source": "default",
"date": "2026-12-23", "days": 5, "result": "2026-12-31", "result_weekday": "Thursday",
"skipped": { "weekend_days": 2, "holidays": [ { "date": "2026-12-25", "name": "Christmas Day", "type": "public" } ] },
"warnings": [ "ES has regional holidays that were not included: ..." ],
"meta": { "used": 12, "remaining": 488, "holiday_data": "date-holidays 3.37.0, CC BY-SA 3.0 (...)" } }
# Is 25 Dec 2026 a business day?
{ "country": "ES", "date": "2026-12-25" }
→ { "is_business_day": false, "is_holiday": true,
"holidays": [ { "name": "Christmas Day", "type": "public", "substitute": false, "full_day": true } ],
"next_business_day": "2026-12-28", "previous_business_day": "2026-12-24", ... }
# Business days from 21 to 31 Dec 2026 (both included)
{ "country": "ES", "from": "2026-12-21", "to": "2026-12-31" }
→ { "calendar_days": 11, "business_days": 8, "weekend_days": 2, "holiday_days": 1, ... }
# Catalonia's holidays in 2026
{ "country": "ES", "region": "CT", "year": 2026 }
→ { "count": 14, "holidays": [ { "date": "2026-01-01", "weekday": "Thursday", "name": "New Year's Day",
"type": "public", "substitute": false, "full_day": true }, ... ] }
Data and license
The holidays come from date-holidays (ISC code), an open dataset based mostly on Wikipedia articles, available under the CC BY-SA 3.0 license. The holiday names and dates this API returns come from that dataset: if you publish lists of them, keep this credit and the same license. The calculations (how many business days, which date results) are ours. Every response with a country carries the source in meta.holiday_data.
Supported countries
See the 207 countries and territories
Andorra (AD), United Arab Emirates (AE), Antigua & Barbuda (AG), Anguilla (AI), Albania (AL), Armenia (AM), Angola (AO), Argentina (AR), American Samoa (AS), Austria (AT), Australia (AU), Aruba (AW), Åland Islands (AX), Azerbaijan (AZ), Bosnia and Herzegovina (BA), Barbados (BB), People's Republic of Bangladesh (BD), Belgium (BE), Burkina Faso (BF), Bulgaria (BG), Bahrain (BH), Burundi (BI), Benin (BJ), St. Barths (BL), Bermuda (BM), Brunei (BN), Bolivia (BO), Caribbean Netherlands (BQ), Brazil (BR), Bahamas (BS), Botswana (BW), Belarus (BY), Belize (BZ), Canada (CA), Cocos (Keeling) Islands (CC), Democratic Republic of the Congo (CD), Central African Republic (CF), Republic of the Congo (CG), Switzerland (CH), Republic of Côte d'Ivoire (CI), Cook Islands (CK), Chile (CL), Cameroon (CM), China (CN), Colombia (CO), Costa Rica (CR), Cuba (CU), Cape Verde (CV), Curaçao (CW), Christmas Island (CX), Cyprus (CY), Czech Republic (CZ), Germany (DE), Djibouti (DJ), Denmark (DK), Dominica (DM), Dominican Republic (DO), Algeria (DZ), Ecuador (EC), Estonia (EE), Egypt (EG), Western Sahara (EH), Eritrea (ER), Spain (ES), Ethiopia (ET), Finland (FI), Fiji (FJ), Faroe Islands (FO), France (FR), Gabon (GA), United Kingdom (GB), Grenada (GD), Georgia (GE), French Guiana (GF), Guernsey (GG), Ghana (GH), Gibraltar (GI), Greenland (GL), The Gambia (GM), Guinea (GN), Guadeloupe (GP), Republic of Equatorial Guinea (GQ), Greece (GR), Guatemala (GT), Guam (GU), Guinea-Bissau (GW), Guyana (GY), Hong Kong (HK), Honduras (HN), Croatia (HR), Haiti (HT), Hungary (HU), Canary Islands (IC), Indonesia (ID), Ireland (IE), Israel (IL), Isle of Man (IM), India (IN), Iran (IR), Iceland (IS), Italia (IT), Jersey (JE), Jamaica (JM), Japan (JP), Kenya (KE), Comoros (KM), St. Kitts & Nevis (KN), South Korea (KR), Cayman Islands (KY), Kazakhstan (KZ), St. Lucia (LC), Liechtenstein (LI), Sri Lanka (LK), Liberia (LR), Lesotho (LS), Lithuania (LT), Luxembourg (LU), Latvia (LV), Libya (LY), Kingdom of Morocco (MA), Monaco (MC), Moldova (MD), Montenegro (ME), St. Martin (MF), Madagascar (MG), Macedonia (MK), Republic of Mali (ML), Martinique (MQ), Mauritania (MR), Montserrat (MS), Malta (MT), Mauritius (MU), Malawi (MW), Mexico (MX), Malaysia (MY), Mozambique (MZ), Namibia (NA), New Caledonia (NC), Republic of the Niger (NE), Norfolk Island (NF), Nigeria (NG), Nicaragua (NI), Netherlands (NL), Norway (NO), New Zealand (NZ), Panama (PA), Peru (PE), French Polynesia (PF), Philippines (PH), Pakistan (PK), Poland (PL), St. Pierre & Miquelon (PM), Puerto Rico (PR), Portugal (PT), Paraguay (PY), Réunion (RE), Romania (RO), Serbia (RS), Russia (RU), Rwanda (RW), Saudi Arabia (SA), Seychelles (SC), Sudan (SD), Sweden (SE), Singapore (SG), St. Helena (SH), Slovenia (SI), Svalbard & Jan Mayen (SJ), Slovakia (SK), Sierra Leone (SL), San Marino (SM), Senegal (SN), Somalia (SO), Suriname (SR), South Sudan (SS), São Tomé & Príncipe (ST), El Salvador (SV), Sint Maarten (SX), Swaziland (SZ), Turks & Caicos Islands (TC), Chad (TD), Togolese Republic (TG), Thailand (TH), Tunisia (TN), Tonga (TO), Turkey (TR), Trinidad & Tobago (TT), Taiwan (TW), Tanzania (TZ), Ukraine (UA), Uganda (UG), United States of America (US), Uruguay (UY), Uzbekistan (UZ), Vatican City (VA), St. Vincent & Grenadines (VC), Venezuela (VE), British Virgin Islands (VG), U.S. Virgin Islands (VI), Vietnam (VN), Vanuatu (VU), Wallis and Futuna (WF), Kosovo (XK), Mayotte (YT), South Africa (ZA), Zambia (ZM), Zimbabwe (ZW)