Accurate business-day, holiday, and scheduling math for major countries and their subdivisions — without maintaining a single holiday calendar yourself. Add or subtract working days, check if a date is a business day, find the next valid date, or count working days between two dates, with full support for regional subdivisions, custom weekends, and your own blackout dates. One simple GET call, instant JSON.
{"date":"2026-12-25","region":"US","is_business_day":false}
curl --location --request GET 'https://zylalabs.com/api/12996/business-day+api/26001/is+business+day?date=Required®ion=Required' --header 'Authorization: Bearer YOUR_API_KEY'
{"start":"2026-07-02","days":5,"result":"2026-07-10"}
curl --location --request GET 'https://zylalabs.com/api/12996/business-day+api/26002/add+business+days?date=2026-07-02&days=5®ion=US' --header 'Authorization: Bearer YOUR_API_KEY'
{"from":"2026-07-02","result":"2026-07-06"}
curl --location --request GET 'https://zylalabs.com/api/12996/business-day+api/26003/next+business+day?date=2026-07-02®ion=US' --header 'Authorization: Bearer YOUR_API_KEY'
{"start":"2026-07-01","end":"2026-07-31","business_days":21}
curl --location --request GET 'https://zylalabs.com/api/12996/business-day+api/26004/business+days+between?start=2026-07-01&end=2026-07-31®ion=US' --header 'Authorization: Bearer YOUR_API_KEY'
After signing up, every developer is assigned a personal API access key, a unique combination of letters and digits provided to access to our API endpoint. To authenticate with the Business-Day API simply include your bearer token in the Authorization header.
| Header | Description |
|---|---|
Authorization
|
Required
Should be Bearer access_key. See "Your API Access Key" above when you are subscribed.
|
No long-term commitment. Upgrade, downgrade, or cancel anytime. Free Trial includes up to 50 requests.
(Save 2 months with annual billing 🎉)
Date arithmetic looks trivial until you cross a border. "Five business days from today" means something different in California than in Bavaria, observed-holiday rules shift weekends around, some regions don't even use a Saturday/Sunday weekend, and every customer has their own closures on top of the public calendar. Getting this wrong quietly breaks SLA clocks, delivery estimates, payment settlement windows, and appointment scheduling.
This API handles all of it behind one endpoint. Public holidays for over 100 countries and their subdivisions (US states, German Länder, Canadian provinces, and more) are kept current for you. On top of that you get the things a raw calendar can't do on its own: working-day arithmetic, configurable weekend days for non-Mon–Fri regions, and per-request custom holidays so a customer's own office closures fold into the calculation.
Built for logistics and delivery-date estimation, fintech settlement and payment scheduling, SLA and ticket-aging clocks, payroll, and any appointment or booking system that has to respect real working days. Responses are small, cacheable JSON and return in milliseconds.
Highlights
All endpoints are GET. Dates are ISO YYYY-MM-DD. region is an ISO country code (e.g. US, GB, DE, CA). Optional params:
subdiv — state/province/region code (e.g. CA for California, BY for Bavaria)weekend — comma-separated weekday numbers, Monday=0 … Sunday=6. Default 5,6 (Sat/Sun). Example: 4,5 for a Friday/Saturday weekend.extra_holidays — comma-separated ISO dates to treat as non-working (a customer's own closures), merged with the public calendar.GET /v1/is-business-dayReturns whether a date is a working day (not a weekend, public holiday, or supplied blackout date).
| Param | Required | Example |
|---|---|---|
date |
yes | 2026-12-25 |
region |
yes | US |
subdiv |
no | CA |
weekend |
no | 5,6 |
extra_holidays |
no | 2026-12-24 |
Request:
GET /v1/is-business-day?date=2026-12-25®ion=US
Response:
{ "date": "2026-12-25", "region": "US", "is_business_day": false }
GET /v1/add-business-daysAdds (or subtracts, if days is negative) N working days to a date.
| Param | Required | Example |
|---|---|---|
date |
yes | 2026-07-02 |
days |
yes | 5 |
region |
yes | US |
subdiv |
no | CA |
weekend |
no | 5,6 |
extra_holidays |
no | 2026-07-06 |
Request:
GET /v1/add-business-days?date=2026-07-02&days=5®ion=US&subdiv=CA
Response:
{ "start": "2026-07-02", "days": 5, "result": "2026-07-10" }
(July 3 is the observed Independence Day holiday, plus two weekends, so five working days lands on July 10.)
GET /v1/next-business-dayReturns the first working day after a date. Pass inclusive=true to allow the date itself if it is already a working day.
| Param | Required | Example |
|---|---|---|
date |
yes | 2026-12-25 |
region |
yes | US |
inclusive |
no | false |
subdiv |
no | CA |
weekend |
no | 5,6 |
extra_holidays |
no | — |
Request:
GET /v1/next-business-day?date=2026-12-25®ion=US
Response:
{ "from": "2026-12-25", "result": "2026-12-28" }
GET /v1/business-days-betweenCounts working days in the half-open interval (start, end]. Negative if end precedes start.
| Param | Required | Example |
|---|---|---|
start |
yes | 2026-12-24 |
end |
yes | 2026-12-31 |
region |
yes | US |
subdiv |
no | CA |
weekend |
no | 5,6 |
extra_holidays |
no | — |
Request:
GET /v1/business-days-between?start=2026-12-24&end=2026-12-31®ion=US
Response:
{ "start": "2026-12-24", "end": "2026-12-31", "business_days": 4 }
400 — bad input (malformed date, out-of-range weekend, unsupported region). Body: { "detail": "" }401 — missing or invalid key (handled by the marketplace layer).429 — rate limit exceeded.These show the regional parameters actually changing the result — the most credible thing a browsing developer can see. All values verified against the live calendars.
Epiphany (Jan 6, 2026, a Tuesday) is a public holiday in Bavaria but a normal working day in Berlin:
GET /v1/is-business-day?date=2026-01-06®ion=DE&subdiv=BY
{ "date": "2026-01-06", "region": "DE", "is_business_day": false }
GET /v1/is-business-day?date=2026-01-06®ion=DE&subdiv=BE
{ "date": "2026-01-06", "region": "DE", "is_business_day": true }
The arithmetic reflects it too — adding one working day to Wed June 3 skips Corpus Christi (Thu June 4) in Bavaria, but not in Berlin:
GET /v1/add-business-days?date=2026-06-03&days=1®ion=DE&subdiv=BY
{ "start": "2026-06-03", "days": 1, "result": "2026-06-05" }
GET /v1/add-business-days?date=2026-06-03&days=1®ion=DE&subdiv=BE
{ "start": "2026-06-03", "days": 1, "result": "2026-06-04" }
Egypt with a Friday/Saturday weekend — one working day after Thursday March 5 lands on Sunday March 8, not Friday:
GET /v1/add-business-days?date=2026-03-05&days=1®ion=EG&weekend=4,5
{ "start": "2026-03-05", "days": 1, "result": "2026-03-08" }
GET /v1/next-business-day?date=2026-03-05®ion=EG&weekend=4,5
{ "from": "2026-03-05", "result": "2026-03-08" }
Counting working days under a Friday/Saturday weekend (Saudi Arabia, Mar 1–8):
GET /v1/business-days-between?start=2026-03-01&end=2026-03-08®ion=SA&weekend=4,5
{ "start": "2026-03-01", "end": "2026-03-08", "business_days": 5 }
July 3, 2026 is the observed US Independence Day holiday, but an ordinary working day in the UK:
GET /v1/is-business-day?date=2026-07-03®ion=US
{ "date": "2026-07-03", "region": "US", "is_business_day": false }
GET /v1/is-business-day?date=2026-07-03®ion=GB
{ "date": "2026-07-03", "region": "GB", "is_business_day": true }
Each endpoint returns JSON data that indicates business day status, calculated dates, or the number of working days. For example, the "Is Business Day" endpoint returns whether a specific date is a working day, while the "Add Business Days" endpoint provides the resulting date after adding or subtracting business days.
Key fields in the response include "date" (the input date), "region" (the specified region), "is_business_day" (boolean for business day status), "result" (calculated date), and "business_days" (count of working days between two dates).
Parameters include "date" (required), "region" (required), "subdiv" (optional for subdivisions), "weekend" (optional for custom weekends), "days" (required for adding/subtracting days), and "extra_holidays" (optional for custom blackout dates).
The response data is structured in a JSON format with key-value pairs. Each endpoint's response contains relevant fields based on the request, such as "start," "end," and "result" for date calculations, allowing users to easily parse and utilize the information.
The data is sourced from official holiday calendars for over 100 countries and their subdivisions. The API maintains current holiday information to ensure accuracy, allowing users to rely on it for precise business day calculations.
Typical use cases include logistics and delivery date estimation, financial settlement scheduling, SLA tracking, payroll processing, and appointment scheduling, where accurate business day calculations are crucial for operations.
Users can customize requests by specifying parameters such as "subdiv" for regional subdivisions, "weekend" for non-standard weekends, and "extra_holidays" for custom closures, tailoring the calculations to their specific needs.
Users can utilize the returned data by interpreting the "is_business_day" field to determine scheduling feasibility, using "result" for planning future dates, and leveraging "business_days" for understanding timelines between events or deadlines.
To obtain your API key, first sign in to your account and navigate to the API you want to use. From the API's Pricing section, choose a plan and complete the subscription process. Once subscribed, return to the API page and you will see your API Access Key displayed at the top of the documentation page. You can use this key to authenticate your requests.
You can’t switch APIs during the free trial. If you subscribe to a different API, your trial will end and the new subscription will start as a paid plan.
The free trial lasts for 7 days and allows you to make up to 50 API requests.
No, the free trial is available only once, so we recommend using it on the API that interests you the most. Most of our APIs offer a free trial, but some may not include this option.
Yes. If the API offers a free trial, you will see a "Free 7-Day Trial" option in its Pricing section. The trial lasts for 7 days and allows up to 50 API requests, enabling you to evaluate the API before subscribing to a paid plan.
Zyla API Hub is like a big store for APIs, where you can find thousands of them all in one place. We also offer dedicated support and real-time monitoring of all APIs. Once you sign up, you can pick and choose which APIs you want to use. Just remember, each API needs its own subscription. But if you subscribe to multiple ones, you'll use the same key for all of them, making things easier for you.
You can monitor your API usage through the response headers included with every request:
x-zyla-api-calls-monthly-used: Shows the total number of API requests you have used during the current billing period.
x-zyla-api-calls-monthly-remaining: Shows the number of API requests you have remaining for the current billing period.
Yes, you can cancel your subscription at any time. Simply go to the Pricing section of the API you're subscribed to and click the "Unsubscribe" button.
Please note that upgrades, downgrades, and cancellations take effect immediately. Once your subscription is canceled, access to the service will end immediately, regardless of any remaining API calls in your quota.
Please have a look at our Refund Policy: https://zylalabs.com/terms#refund