# WorkdayAPI > Business-day and public-holiday math for 29 countries (2020-2035): add business days, count business days between dates, check a date, list holidays. Public JSON API plus a remote MCP server for AI agents. Holiday rules are transcribed from each country's official sources (listed per country in /v1/countries and on the docs page). Weekends default to Saturday and Sunday and can be overridden per call. Results are not legal, payroll or financial advice. ## For AI agents - [MCP server](https://workdayapi.mike-tusa.workers.dev/mcp): remote MCP over Streamable HTTP at `https://workdayapi.mike-tusa.workers.dev/mcp` (POST only, stateless, JSON responses, no sessions). Protocol versions: 2026-07-28, 2025-11-25, 2025-06-18, 2025-03-26, 2024-11-05 (2026-07-28 per-request `_meta`; older versions use `initialize`). Tools: `get_holidays`, `is_business_day`, `add_business_days`, `business_days_between`, `list_countries`. All read-only. Client config (most MCP clients accept this; some use a different format, for example VS Code uses a `servers` key): `{"mcpServers":{"workdayapi":{"type":"http","url":"https://workdayapi.mike-tusa.workers.dev/mcp"}}}` - [OpenAPI 3.1 spec](https://workdayapi.mike-tusa.workers.dev/openapi.json): machine-readable description of the JSON API - [JSON API docs](https://workdayapi.mike-tusa.workers.dev/docs): human-readable API reference with examples and per-country sources ## JSON API - `GET https://workdayapi.mike-tusa.workers.dev/v1/holidays?country=DE&year=2027` (optional `region`, `types`): holidays with local names, types and sources. - `GET https://workdayapi.mike-tusa.workers.dev/v1/is-business-day?country=US&date=2027-07-05`: business day or not, reason, previous/next business day. - `GET https://workdayapi.mike-tusa.workers.dev/v1/add?country=GB&date=2027-12-23&days=3` (|days| <= 2,500; negative counts back): result date and skipped holidays. - `GET https://workdayapi.mike-tusa.workers.dev/v1/between?country=FR&from=2027-12-01&to=2027-12-31` (optional `inclusive=true`): business, weekend and holiday day counts. - Common optional params: `region` (e.g. DE-BY, US-CA), `weekend` (e.g. `fri,sat` or `none`), `types` (`public`, `bank`, `all`). - `GET https://workdayapi.mike-tusa.workers.dev/v1/countries`: supported countries, regions and sources. `GET https://workdayapi.mike-tusa.workers.dev/health`: status and `version` (0.2.0). - `POST https://workdayapi.mike-tusa.workers.dev/v1/keys` (empty or `{}` body): free API key, shown once. `GET https://workdayapi.mike-tusa.workers.dev/v1/key` with your key: plan and monthly usage. `POST https://workdayapi.mike-tusa.workers.dev/v1/batch`: Pro only (paid plans are coming soon). - Errors: `{ "error": { "code", "message" }, "docs": "/docs" }` with HTTP 400 (`missing_parameter`, `invalid_date`, `invalid_country`, `invalid_weekend`, `invalid_types`, `invalid_days`, `invalid_year`, `duplicate_parameter`), 401 `invalid_api_key`, 404 `unknown_country`/`unknown_region`/`not_found`, 405, 422 (`date_out_of_range`, `year_out_of_range`, `days_out_of_range`, `result_out_of_range`), 429 (`rate_limited`, `too_many_auth_failures`, `monthly_quota_exceeded`; see `Retry-After`), 503 (`daily_capacity_reached`, `quota_unavailable`). ## Limits, keys and pricing - Anonymous (no key): about 30 requests per minute per IP (IPv6: per /64), within a shared daily allowance. - Free API key: about 120 requests per minute and 1,000 calls per month. Send `Authorization: Bearer wd_live_…` or `X-Api-Key: wd_live_…`. Pro (50,000 calls per month, batch endpoint) is coming soon; there is no paid plan to buy yet. - The MCP endpoint uses the same keys and the same counters: each `tools/call` is one API call. `initialize`, `tools/list` and other non-call messages don't count as API calls, but are capped at about 120 per minute per IP (over it: HTTP 429 with `Retry-After`). Over an API limit, the tool result has `isError: true` with the reason and `retryAfterSeconds`. An invalid key returns HTTP 401. - MCP request caps: 65,536-byte body; JSON-RPC batches (legacy versions only) of at most 10 messages with at most one `tools/call`; per-day lists in tool results are cut to 50 items (the JSON API returns them all). ## Optional - [Homepage and calculator](https://workdayapi.mike-tusa.workers.dev/) - Contact: digitalpromohub.support@gmail.com