Business days
POST /api/business-daysCount business days (Mon–Fri) between two dates, inclusive of the start, exclusive of the end. Send POST /api/business-days with the required fields from and to and pay $0.001 per call over x402 or MPP, or call it free by solving a proof-of-work challenge. It returns a JSON object with businessDays and calendarDays.
Optional list of holiday dates to skip.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
from | any | yes | Start date Also accepted as source, src, start. |
to | any | yes | End date Also accepted as target, dest, destination, end. |
holidays | any | no | Optional array of YYYY-MM-DD to exclude |
Example request
curl -i -X POST https://agent402.tools/api/business-days \
-H "Content-Type: application/json" \
-d '{"from":"2026-06-01","to":"2026-06-08","holidays":[]}'
Without payment this returns HTTP 402 Payment Required with the exact price for business-days; any x402 v2 or MPP client pays it and retries.
Example response
{
"businessDays": 5,
"calendarDays": 7
}
| Field | Type | Always present | In the example |
|---|---|---|---|
businessDays | number | yes | 5 |
calendarDays | number | yes | 7 |
From an MCP client
catalog.call {
"slug": "business-days",
"params": {
"from": "2026-06-01",
"to": "2026-06-08",
"holidays": []
}
}
On the hosted connector at https://agent402.tools/mcp, catalog.call runs business-days free (rate-limited, no wallet). Local install: npx -y agent402-mcp.
Errors and behavior
fromandtoare required. An input the tool rejects returns an HTTP 4xx whose body carrieserror,tool,expected,requiredandexample, so the caller can correct it.- A paid call that ends in any status of 400 or above is not charged over x402, MPP or a prepaid credits key: settlement is cancelled when the tool fails. The exception is a Tempo push credential, a transfer the buyer sent before the call: it settles before the tool runs, so if the tool then fails the payment is recorded as a refund owed to the paying wallet.
- Free tier: no outbound network call leaves the server for this tool, so proof-of-work (16 leading zero bits of sha256) pays for it.
- A
GETorHEADto /api/business-days returns the same 402 quote, so the price can be read without a body. - An
Idempotency-Keyheader makes a retried paid call replay the first 200 instead of charging again (an answer larger than 1 MB is not replayed).
Paid call (JavaScript agent)
import { wrapFetchWithPayment } from "@x402/fetch";
import { x402Client } from "@x402/core/client";
import { registerExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";
const client = new x402Client();
client.setSpendControls?.(false); // keep your own spending ceiling in code
registerExactEvmScheme(client, { signer: privateKeyToAccount(KEY) });
const payFetch = wrapFetchWithPayment(fetch, client);
const res = await payFetch("https://agent402.tools/api/business-days", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
"from": "2026-06-01",
"to": "2026-06-08",
"holidays": []
}),
});
No wallet? Pay with compute
Fetch a challenge, solve the sha256 puzzle (16 leading zero bits, a fraction of a second of CPU), and resend with the X-Pow-Solution header:
import { createHash } from "node:crypto";
const lz = (b) => { let t = 0; for (const x of b) { if (!x) { t += 8; continue; } t += Math.clz32(x) - 24; break; } return t; };
const c = await (await fetch("https://agent402.tools/api/pow/challenge?slug=business-days")).json();
let n = 0;
while (lz(createHash("sha256").update(c.challenge + ":" + n).digest()) < c.difficulty) n++;
await fetch("https://agent402.tools/api/business-days", { method: "POST", headers: { "X-Pow-Solution": c.token + ":" + n, "Content-Type": "application/json" }, body: JSON.stringify({"from":"2026-06-01","to":"2026-06-08","holidays":[]}) });
Part of these workflows
Business days is one step in these 3 skill packs, each sold as a single call:
- Multi-stop trip planner - Plan a multi-stop journey deterministically: geocode each stop, sum the pairwise haversine distances, estimate arrival times by adding driving hours per leg, count business days from today to each arrival, and pull the weather forecast at every US stop. Six tools - three pure-CPU (math + time), three egress (geocoding + weather) - covering the deterministic skeleton of every road-trip / sales-tour / delivery-route planning problem.
- Locale brief - "Can I reach this counterparty this week?" - country facts, this year's public holidays, working days remaining this week, and what time it is there right now, in one call.
- Timezone planner - Time zone conversion, business day calculation, and cron schedule preview - scheduling in one pass.
Related tools
Date arithmetic
POST /api/add-timeAdd (or subtract) a duration to a date. duration like "2d", "-3h", "1w 2d", "90m". Returns the resulting UTC ISO timesta…
Age calculator
POST /api/ageCompute a precise age (years, months, days) from a birth date to today (or a given date), plus total days.
Date difference
POST /api/date-diffDifference between two dates/times in ms, seconds, minutes, hours, days, and a human summary.
Relative time
POST /api/relative-timeFormat a timestamp as a human relative phrase ("3 hours ago", "in 2 days") versus now or a reference time.
Cron next runs
POST /api/cron-nextParse a 5-field cron expression and return the next N run times (UTC).
Duration parse/humanize
POST /api/durationParse a duration like "2h30m" / "1d4h" / "90s" to seconds, or humanize a number of seconds.