Documentation
Bizday is an operational API for AI agents. It gives agents safe deadlines, send times, policy checks, receipt memory, approvals, budget checks, readiness audits, and workday calculations for business workflows in 30+ countries.
Base URL: https://api.bizday.dev
curl -X POST "https://api.bizday.dev/v1/decide/demo" \
-H "Content-Type: application/json" \
-d '{"decision":"sla_deadline"}'Agent Operations
Use these endpoints when an agent needs to act safely, explain its reasoning, or check whether a workflow is allowed before taking action.
/v1/decide/capabilitiesPublic catalog of supported decisions, prices, free tier, and spend controls.
/v1/decide/demoPublic no-key demo so agents can test the response shape before requesting budget.
/v1/decidePreferred production endpoint for quote-first, budget-safe execution.
/v1/station/checkAgent station endpoint for policy, receipt memory, and approvals before action.
/v1/deadline/calculateAuditable deadlines for SLAs, invoices, follow-ups, payroll, and workflows.
/v1/send-time/next-safeSafe send windows for emails, calls, SMS, tasks, and follow-ups.
/v1/receipts/createPersistent receipts for agent actions, purchases, and tool calls.
/v1/receipts/searchReceipt memory so agents can avoid repeating actions or purchases.
/v1/approvals/createCreate a pending approval object when an agent must pause.
/v1/approvals/statusPoll whether a pending approval is approved before proceeding.
/v1/approvals/decideApprove or reject a pending approval from an operator workflow.
/v1/budget/checkBudget, approval-threshold, and vendor allowlist checks before spend.
/v1/readiness/auditAgent-readiness scoring for websites, APIs, and docs.
curl -X POST "https://api.bizday.dev/v1/station/check" \
-H "Authorization: Bearer wday_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"action": "buy_enrichment_credits",
"action_type": "spend",
"amount": 0.25,
"currency": "USD",
"budget_remaining": 1.25,
"vendor": "Bizday",
"vendor_allowlist": ["Bizday"],
"require_approval_over": 5,
"create_receipt": true,
"create_approval": true,
"agent_id": "agent_ops_01",
"workflow_id": "lead_research"
}'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"Security: Query-parameter API keys (?api_key=) are disabled by default. They can leak through logs, browser history, and Referer headers. Always use the Authorization: Bearer header.
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"
}
}
}Example
curl "https://api.bizday.dev/v1/check?date=2026-12-25&country=GB" \
-H "Authorization: Bearer wday_your_api_key"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"
}
}Example
curl "https://api.bizday.dev/v1/next?date=2026-12-24&country=GB" \
-H "Authorization: Bearer wday_your_api_key"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": []
}
}Example
curl "https://api.bizday.dev/v1/add?date=2026-03-05&country=US&days=10" \
-H "Authorization: Bearer wday_your_api_key"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" }
]
}
}Example
curl "https://api.bizday.dev/v1/between?start=2026-03-01&end=2026-03-31&country=DE" \
-H "Authorization: Bearer wday_your_api_key"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