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
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Yes | Date in YYYY-MM-DD format |
| country | string | Yes | ISO 3166-1 alpha-2 country code |
{
"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
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | No | Date in YYYY-MM-DD format (defaults to today) |
| country | string | Yes | ISO 3166-1 alpha-2 country code |
| direction | string | No | “next” (default) or “prev” |
{
"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
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Yes | Start date in YYYY-MM-DD format |
| country | string | Yes | ISO 3166-1 alpha-2 country code |
| days | integer | Yes | Workdays to add (-365 to 365, non-zero) |
{
"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
| Parameter | Type | Required | Description |
|---|---|---|---|
| start | string | Yes | Start date (exclusive) in YYYY-MM-DD |
| end | string | Yes | End date (inclusive) in YYYY-MM-DD |
| country | string | Yes | ISO 3166-1 alpha-2 country code |
{
"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.
{
"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.
| Code | Status | Description |
|---|---|---|
| INVALID_API_KEY | 401 | API key is missing or invalid |
| RATE_LIMIT_EXCEEDED | 429 | Monthly call limit reached |
| INVALID_DATE | 400 | Date format is not YYYY-MM-DD |
| INVALID_COUNTRY | 400 | Country code is not valid ISO 3166-1 alpha-2 |
| COUNTRY_NOT_SUPPORTED | 400 | Country is not in supported list |
| INVALID_DAYS_PARAM | 400 | days must be non-zero integer, -365 to 365 |
| INVALID_DATE_RANGE | 400 | end date must be after start date |
| DATE_RANGE_TOO_LARGE | 400 | Date range exceeds 366 days |
| INTERNAL_ERROR | 500 | Server error — please try again |
Rate Limits
Rate limits are applied per API key on a monthly basis. Every response includes these headers:
| Header | Description |
|---|---|
| X-RateLimit-Limit | Your monthly request limit |
| X-RateLimit-Remaining | Remaining requests this month |
| X-RateLimit-Reset | ISO 8601 timestamp when limit resets (1st of next month) |
| Plan | Monthly Limit |
|---|---|
| Free | 10,000 |
| Starter ($19/mo) | 100,000 |
| Growth ($49/mo) | 500,000 |
| Business ($149/mo) | 2,000,000 |
| Enterprise | Custom |
Supported Countries
Holiday data is synced weekly from authoritative sources. Currently supported:
AUAustraliaATAustriaBEBelgiumBRBrazilCACanadaCZCzech RepublicDKDenmarkFIFinlandFRFranceDEGermanyHUHungaryINIndiaIEIrelandITItalyJPJapanMXMexicoNLNetherlandsNZNew ZealandNGNigeriaNONorwayPLPolandPTPortugalRORomaniaSGSingaporeZASouth AfricaESSpainSESwedenCHSwitzerlandGBUnited KingdomUSUnited States