Live API  ·  121 countries  ·  DST-safe arithmetic

Business days API that tells you
exactly what it skipped.

DST transitions, public holidays, timezones across 100+ countries. WorkdayAPI handles all of it — and unlike every other API, it returns a skipped array with each excluded date and the reason why.

Free tier: 100 requests/mo  ·  Pro from $9/mo  ·  See all plans

POST /add-business-hours — response
"deadline": "2026-12-30T14:00:00+11:00", "skipped": [ { "date": "2026-12-25", "type": "holiday", "name": "Christmas Day" }, { "date": "2026-12-26", "type": "holiday", "name": "Boxing Day" }, { "date": "2026-12-27", "type": "weekend" }, { "date": "2026-12-28", "type": "weekend" } ]

DST-safe arithmetic

All datetime math uses Luxon's dt.plus({ hours: 1 }) — never raw milliseconds. Spring-forward days have 23 clock hours. Handled correctly, automatically.

🌏

100+ countries

Public holiday data via Nager.Date, covering 100+ countries. Fetched lazily, cached 24 hours. Australia, US, UK, Germany, Japan and more.

📋

The skipped array

Every response lists the dates that were excluded — with the holiday name or "weekend" label. Debug a wrong deadline in seconds, not after a support ticket.

Try it live

Real requests to the API, right from your browser. Pre-filled with a Christmas holiday example to immediately showcase the skipped array.

Request
Hit "Run →" to see the response

Endpoints

All endpoints return JSON. No authentication on your side — key management is handled by RapidAPI upstream.

GET /health Server health check

Example

curl https://workday-api.fly.dev/health

Response

{ "status": "ok", "version": "1.0.0", "countries": 112 }
GET /is-business-day Check if a date is a business day

Query Parameters

datestringrequiredDate in YYYY-MM-DD format
countrystringrequiredISO 3166-1 alpha-2 country code (e.g. AU, US, GB)
timezonestringoptionalIANA timezone string. Default: UTC

Example

curl "https://workday-api.fly.dev/is-business-day?date=2026-12-25&country=AU&timezone=Australia/Sydney"

Response

{ "date": "2026-12-25", "country": "AU", "timezone": "Australia/Sydney", "isBusinessDay": false, "reason": "Public holiday", "holidayName": "Christmas Day" }
POST /add-business-hours Add business hours to a datetime

Request Body (JSON)

startstringrequiredISO 8601 datetime (e.g. 2026-12-24T14:00:00)
hoursintegerrequiredBusiness hours to add (0–10000)
countrystringrequiredISO 3166-1 alpha-2 country code
timezonestringoptionalIANA timezone string. Default: UTC

Example

curl -X POST https://workday-api.fly.dev/add-business-hours \ -H "Content-Type: application/json" \ -d '{"start":"2026-12-24T14:00:00","hours":24,"country":"AU","timezone":"Australia/Sydney"}'

Response

{ "start": "2026-12-24T14:00:00+11:00", "hours": 24, "deadline": "2026-12-30T14:00:00+11:00", "businessHoursPerDay": 8, "calendarDaysElapsed": 6, "skipped": [ { "date": "2026-12-25", "type": "holiday", "name": "Christmas Day" }, { "date": "2026-12-26", "type": "holiday", "name": "Boxing Day" }, { "date": "2026-12-27", "type": "weekend" }, { "date": "2026-12-28", "type": "weekend" } ] }
POST /add-business-days Add business days to a date

Request Body (JSON)

startstringrequiredStart date YYYY-MM-DD
daysintegerrequiredBusiness days to add (0–10000)
countrystringrequiredISO 3166-1 alpha-2 country code
timezonestringoptionalIANA timezone string. Default: UTC

Example

curl -X POST https://workday-api.fly.dev/add-business-days \ -H "Content-Type: application/json" \ -d '{"start":"2026-12-24","days":5,"country":"GB","timezone":"Europe/London"}'

Response

{ "start": "2026-12-24", "days": 5, "result": "2027-01-02", "skipped": [ { "date": "2026-12-25", "type": "holiday", "name": "Christmas Day" }, { "date": "2026-12-26", "type": "holiday", "name": "Boxing Day" }, { "date": "2026-12-27", "type": "weekend" }, { "date": "2026-12-28", "type": "weekend" }, { "date": "2027-01-01", "type": "holiday", "name": "New Year's Day" } ] }
GET /business-days-between Count business days in a date range

Query Parameters

startstringrequiredStart date YYYY-MM-DD
endstringrequiredEnd date YYYY-MM-DD (must be ≥ start)
countrystringrequiredISO 3166-1 alpha-2 country code
timezonestringoptionalIANA timezone string. Default: UTC

Example

curl "https://workday-api.fly.dev/business-days-between?start=2026-01-01&end=2026-01-31&country=DE"

Response

{ "start": "2026-01-01", "end": "2026-01-31", "country": "DE", "businessDays": 21, "publicHolidays": 1, "weekendDays": 9, "holidays": [ { "date": "2026-01-01", "name": "New Year's Day" } ] }
GET /next-business-day Find the next business day after a date

Query Parameters

datestringrequiredDate in YYYY-MM-DD format
countrystringrequiredISO 3166-1 alpha-2 country code
timezonestringoptionalIANA timezone string. Default: UTC

Example

curl "https://workday-api.fly.dev/next-business-day?date=2026-12-25&country=AU"

Response

{ "from": "2026-12-25", "nextBusinessDay": "2026-12-28", "daysSkipped": 3, "skipped": [ { "date": "2026-12-25", "type": "holiday", "name": "Christmas Day" }, { "date": "2026-12-26", "type": "holiday", "name": "Boxing Day" }, { "date": "2026-12-27", "type": "weekend" } ] }

Error codes

All errors return a consistent JSON shape with a machine-readable code field.

{ "error": "Human-readable message", "code": "MACHINE_READABLE_CODE", "docs": "https://rapidapi.com/workday-api/api/workday-api" }
CodeHTTPDescription
MISSING_PARAM400A required query or body parameter is absent
INVALID_DATE400Date is not YYYY-MM-DD or not a real calendar date
INVALID_COUNTRY400Country code not supported by Nager.Date
INVALID_TIMEZONE400Timezone is not a valid IANA string
INPUT_TOO_LARGE400hours or days value would span more than 500 calendar days
HOLIDAY_SERVICE_UNAVAILABLE503Nager.Date is temporarily unreachable. Retry-After: 30s

Simple, usage-based pricing

All plans via RapidAPI. No credit card required to start. Upgrade or cancel any time.

Free
Starter
$0/mo

Try the API with no commitment.

  • 100 requests / month
  • All 5 endpoints
  • 121 countries
  • Full skipped array
  • No SLA
  • Community support
Get started free
High volume
Ultra
$29/mo

For production systems handling high call volumes across multiple integrations.

  • 50,000 requests / month
  • All 5 endpoints
  • 121 countries
  • Full skipped array
  • 99.9% uptime SLA
  • Priority support
Subscribe on RapidAPI

All plans managed through RapidAPI. Need more than 50,000 requests? Contact us for custom volume pricing.