BizDay

Documentation

BizDay is a REST API for workday calculations. It answers questions like “is this date a workday?”, “what’s the next workday?”, and “how many workdays between two dates?” for 30+ countries.

Base URL: https://api.bizday.dev

Authentication

All API requests (except /v1/countries) require an API key. Pass it via the Authorization header:

curl "https://api.bizday.dev/v1/check?date=2026-03-05&country=US" \
  -H "Authorization: Bearer wday_your_api_key"

You can also pass the key as a query parameter:

curl "https://api.bizday.dev/v1/check?date=2026-03-05&country=US&api_key=wday_your_api_key"

Making Requests

All endpoints accept GET requests with query parameters. Dates must be in YYYY-MM-DD format. Country codes must be ISO 3166-1 alpha-2 (e.g. GB, US, DE).

Response Format

All responses follow a consistent JSON envelope:

// Success
{
  "success": true,
  "data": { ... },
  "meta": {
    "country": "GB",
    "requested_date": "2026-03-05",
    "cached": false,
    "timestamp": "2026-03-05T10:23:41.000Z"
  }
}

// Error
{
  "success": false,
  "error": {
    "code": "INVALID_DATE",
    "message": "Date must be in YYYY-MM-DD format.",
    "docs": "https://bizday.dev/docs/errors#INVALID_DATE"
  }
}

GET /v1/check

Check if a specific date is a workday in a given country.

Parameters

ParameterTypeRequiredDescription
datestringYesDate in YYYY-MM-DD format
countrystringYesISO 3166-1 alpha-2 country code
Response
{
  "success": true,
  "data": {
    "date": "2026-12-25",
    "country": "GB",
    "is_workday": false,
    "reason": "public_holiday",
    "holiday": {
      "name": "Christmas Day",
      "local_name": "Christmas Day",
      "type": "Public"
    }
  }
}

GET /v1/next

Find the next (or previous) workday from a given date.

Parameters

ParameterTypeRequiredDescription
datestringNoDate in YYYY-MM-DD format (defaults to today)
countrystringYesISO 3166-1 alpha-2 country code
directionstringNo“next” (default) or “prev”
Response
{
  "success": true,
  "data": {
    "from_date": "2026-12-24",
    "country": "GB",
    "direction": "next",
    "workday": "2026-12-29"
  }
}

GET /v1/add

Add (or subtract) a number of workdays to a date, skipping weekends and holidays.

Parameters

ParameterTypeRequiredDescription
datestringYesStart date in YYYY-MM-DD format
countrystringYesISO 3166-1 alpha-2 country code
daysintegerYesWorkdays to add (-365 to 365, non-zero)
Response
{
  "success": true,
  "data": {
    "start_date": "2026-03-05",
    "country": "US",
    "workdays_added": 10,
    "result_date": "2026-03-19",
    "weekends_skipped": 4,
    "holidays_skipped": []
  }
}

GET /v1/between

Count the number of workdays between two dates.

Parameters

ParameterTypeRequiredDescription
startstringYesStart date (exclusive) in YYYY-MM-DD
endstringYesEnd date (inclusive) in YYYY-MM-DD
countrystringYesISO 3166-1 alpha-2 country code
Response
{
  "success": true,
  "data": {
    "country": "DE",
    "start_date": "2026-03-01",
    "end_date": "2026-03-31",
    "workdays": 21,
    "weekends": 9,
    "holidays": 1,
    "holiday_list": [
      { "date": "2026-04-03", "name": "Good Friday" }
    ]
  }
}

GET /v1/countries

List all supported countries. This endpoint does not require authentication.

Response
{
  "success": true,
  "data": {
    "countries": [
      { "code": "AU", "name": "Australia" },
      { "code": "AT", "name": "Austria" },
      ...
    ],
    "count": 30
  }
}

Error Codes

All errors include a machine-readable code and a human-readable message.

CodeStatusDescription
INVALID_API_KEY401API key is missing or invalid
RATE_LIMIT_EXCEEDED429Monthly call limit reached
INVALID_DATE400Date format is not YYYY-MM-DD
INVALID_COUNTRY400Country code is not valid ISO 3166-1 alpha-2
COUNTRY_NOT_SUPPORTED400Country is not in supported list
INVALID_DAYS_PARAM400days must be non-zero integer, -365 to 365
INVALID_DATE_RANGE400end date must be after start date
DATE_RANGE_TOO_LARGE400Date range exceeds 366 days
INTERNAL_ERROR500Server error — please try again

Rate Limits

Rate limits are applied per API key on a monthly basis. Every response includes these headers:

HeaderDescription
X-RateLimit-LimitYour monthly request limit
X-RateLimit-RemainingRemaining requests this month
X-RateLimit-ResetISO 8601 timestamp when limit resets (1st of next month)
PlanMonthly Limit
Free10,000
Starter ($19/mo)100,000
Growth ($49/mo)500,000
Business ($149/mo)2,000,000
EnterpriseCustom

Supported Countries

Holiday data is synced weekly from authoritative sources. Currently supported:

AUAustralia
ATAustria
BEBelgium
BRBrazil
CACanada
CZCzech Republic
DKDenmark
FIFinland
FRFrance
DEGermany
HUHungary
INIndia
IEIreland
ITItaly
JPJapan
MXMexico
NLNetherlands
NZNew Zealand
NGNigeria
NONorway
PLPoland
PTPortugal
RORomania
SGSingapore
ZASouth Africa
ESSpain
SESweden
CHSwitzerland
GBUnited Kingdom
USUnited States