How it differs from production
- Production endpoint
GET /v1/holidays/:iso2/:year- Sandbox endpoint
GET /v1/sandbox/holidays/:iso2/:year- Network
- Base Sepolia testnet (
eip155:84532) - Asset
- Test USDC at
0x036CbD53842c5426634e7929541eC2318f3dCF7e - Faucet
- alchemy.com/faucets/base-sepolia
- Price
- $0.001 in test USDC per request — same nominal as production
- Dataset
- 5 country/year fixtures: US/2026, GB/2026, ZA/2026, JP/2026, BR/2026
- Response
- Identical schema to production.
meta.sandbox: truetells you which side you're on. - Bazaar listing
- None — only the production endpoint lists at agentic.market
Curated set
What you can ask for.
Anything else returns a 404 with the available list and a pointer to mainnet for the full dataset.
US/2026GB/2026ZA/2026JP/2026BR/2026Production covers any year 1900-2100 across 203 countries.
Six steps
From zero to graduated.
Get test USDC.
Visit the Alchemy Base Sepolia faucet. Drip a few cents to your test wallet.
Try the unpaid call.
See the 402 challenge:
The response carries the network, asset, payTo, and amount.curl -i https://apitoll.io/v1/sandbox/holidays/US/2026Sign an EIP-3009 authorization.
Put the signed payload in the
X-PAYMENTheader (base64-encoded JSON). Most agent SDKs (@x402/axios,x402-fetch) handle this automatically.Retry with payment.
You'll get the data back, plus an
x-payment-responsesettlement receipt header.Iterate.
Test against the curated set above until your integration is solid.
Graduate.
Remove
/sandbox/from the URL. Same response shape, real USDC settlement on Base mainnet, full dataset.
Why a sandbox exists
The list of holidays in 2026 is set; what you're testing here is your client's ability to fetch and parse it, not the data itself. Get that handshake right against deterministic data first.
The sandbox uses the same code path as production. If your agent works against https://apitoll.io/v1/sandbox/holidays/US/2026, removing /sandbox/ is the only change needed to graduate to https://apitoll.io/v1/holidays/US/2026.