Resource / 176
healthy2s.
Holiday-aware business-day calculator for 200+ countries. Three modes: pass start + addDays (signed integer) to shift a date by N business days; pass start + end to count business days between two dates (exclusive of start, inclusive of end); pass start alone to check one date (is it a business day, which holiday, next/previous business day). Query: country (ISO 3166-1 alpha-2), start (YYYY-MM-DD), optional region (subdivision code), addDays XOR end, optional weekend (comma-separated days, default sat,sun — e.g. fri,sat for the Gulf), optional types (holiday types treated as closures, default public,bank). Skipped holidays are itemized in the response. Use for payment terms, SLA deadlines, and delivery-date math.
| State | Network | Scheme | Atomic amount | Asset | payTo / untrusted |
|---|---|---|---|---|---|
| active | eip155:8453 | exact | 2500 | 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 | 0x2b6D4988Db4723E6908Db86Ab2b8dFBc51FC32C5 |
| active | solana:5eykt4usfv8p8njdtrepy1vzqkqzkvdp | exact | 2500 | EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v | TW6ntaGzvj63ZgPjszd4FCGmVTGfzv1MAYZbjYcyWhn |
All advertised payment options are stored. Base (`eip155:8453`) is the operational network for ranking and canaries; non-Base options remain visible for transparency.
healthy 2026-08-12 22:00:00 UTC GET · HTTP 402 · 63ms · accepts 2 · base 1 ok
Accepts snapshot
[
{
"amount": "2500",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"assetTransferMethod": null,
"extra": {
"name": "USD Coin",
"version": "2"
},
"maxTimeoutSeconds": 60,
"network": "eip155:8453",
"payTo": "0x2b6D4988Db4723E6908Db86Ab2b8dFBc51FC32C5",
"paymentFlow": null,
"raw": {
"amount": "2500",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"maxTimeoutSeconds": 60,
"max_timeout_seconds": 60,
"network": "eip155:8453",
"payTo": "0x2b6D4988Db4723E6908Db86Ab2b8dFBc51FC32C5",
"pay_to": "0x2b6D4988Db4723E6908Db86Ab2b8dFBc51FC32C5",
"scheme": "exact"
},
"scheme": "exact"
},
{
"amount": "2500",
"asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"assetTransferMethod": null,
"extra": {
"feePayer": "Hc3sdEAsCGQcpgfivywog9uwtk8gUBUZgsxdME1EJy88",
"name": "USDC",
"version": "1"
},
"maxTimeoutSeconds": 60,
"network": "solana:5eykt4usfv8p8njdtrepy1vzqkqzkvdp",
"payTo": "TW6ntaGzvj63ZgPjszd4FCGmVTGfzv1MAYZbjYcyWhn",
"paymentFlow": null,
"raw": {
"amount": "2500",
"asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"extra": {
"feePayer": "Hc3sdEAsCGQcpgfivywog9uwtk8gUBUZgsxdME1EJy88",
"name": "USDC",
"version": "1"
},
"maxTimeoutSeconds": 60,
"max_timeout_seconds": 60,
"network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
"payTo": "TW6ntaGzvj63ZgPjszd4FCGmVTGfzv1MAYZbjYcyWhn",
"pay_to": "TW6ntaGzvj63ZgPjszd4FCGmVTGfzv1MAYZbjYcyWhn",
"scheme": "exact"
},
"scheme": "exact"
}
]
PaymentRequired raw
{
"accepts": [
{
"amount": "2500",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"maxTimeoutSeconds": 60,
"network": "eip155:8453",
"payTo": "0x2b6D4988Db4723E6908Db86Ab2b8dFBc51FC32C5",
"scheme": "exact"
},
{
"amount": "2500",
"asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"extra": {
"feePayer": "Hc3sdEAsCGQcpgfivywog9uwtk8gUBUZgsxdME1EJy88",
"name": "USDC",
"version": "1"
},
"maxTimeoutSeconds": 60,
"network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
"payTo": "TW6ntaGzvj63ZgPjszd4FCGmVTGfzv1MAYZbjYcyWhn",
"scheme": "exact"
}
],
"error": "PAYMENT-SIGNATURE required",
"extensions": {
"bazaar": {
"info": {
"input": {
"method": "GET",
"queryParams": {
"addDays": "2",
"country": "US",
"start": "2026-07-02"
},
"type": "http"
}
},
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"input": {
"properties": {
"method": {
"const": "GET"
},
"queryParams": {
"properties": {
"addDays": {
"description": "Signed business days to add (XOR with end).",
"type": "string"
},
"country": {
"description": "ISO 3166-1 alpha-2 country code.",
"type": "string"
},
"end": {
"description": "End date YYYY-MM-DD to count business days to (XOR with addDays).",
"type": "string"
},
"region": {
"description": "Optional subdivision code, e.g. CA, BY.",
"type": "string"
},
"start": {
"description": "Anchor date, YYYY-MM-DD.",
"type": "string"
},
"types": {
"description": "Optional holiday types treated as closures. Default public,bank.",
"type": "string"
},
"weekend": {
"description": "Optional weekend days, comma-separated. Default sat,sun.",
"type": "string"
}
},
"required": [
"country",
"start"
]
},
"type": {
"const": "http"
}
},
"required": [
"type",
"method",
"queryParams"
],
"type": "object"
}
},
"required": [
"input"
],
"type": "object"
}
}
},
"resource": {
"description": "Holiday-aware business-day calculator for 200+ countries. Three modes: pass start + addDays (signed integer) to shift a date by N business days; pass start + end to count business days between two dates (exclusive of start, inclusive of end); pass start alone to check one date (is it a business day, which holiday, next/previous business day). Query: country (ISO 3166-1 alpha-2), start (YYYY-MM-DD), optional region (subdivision code), addDays XOR end, optional weekend (comma-separated days, default sat,sun — e.g. fri,sat for the Gulf), optional types (holiday types treated as closures, default public,bank). Skipped holidays are itemized in the response. Use for payment terms, SLA deadlines, and delivery-date math.",
"iconUrl": "https://2s.io/icon-512.png",
"mimeType": "application/json",
"serviceName": "2s",
"tags": [
"public-records",
"identifiers",
"ai-agents",
"us-gov-data",
"x402",
"upto-billing",
"ai-gateway",
"agent-infrastructure"
],
"url": "https://2s.io/api/calendar/business-days"
},
"x402Version": 2
}
Response headers
{
"access-control-allow-headers": "Authorization, Content-Type",
"access-control-allow-methods": "GET, POST, OPTIONS",
"access-control-allow-origin": "*",
"access-control-max-age": "86400",
"age": "0",
"cache-control": "public, max-age=0, must-revalidate",
"content-security-policy": "default-src 'none'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; connect-src 'self'; frame-ancestors 'none'; base-uri 'none'",
"content-type": "application/json",
"date": "Wed, 12 Aug 2026 22:00:00 GMT",
"payment-required": "eyJ4NDAyVmVyc2lvbiI6MiwiYWNjZXB0cyI6W3sic2NoZW1lIjoiZXhhY3QiLCJuZXR3b3JrIjoiZWlwMTU1Ojg0NTMiLCJhbW91bnQiOiIyNTAwIiwiYXNzZXQiOiIweDgzMzU4OWZDRDZlRGI2RTA4ZjRjN0MzMkQ0ZjcxYjU0YmRBMDI5MTMiLCJwYXlUbyI6IjB4MmI2RDQ5ODhEYjQ3MjNFNjkwOERiODZBYjJiOGRGQmM1MUZDMzJDNSIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwiZXh0cmEiOnsibmFtZSI6IlVTRCBDb2luIiwidmVyc2lvbiI6IjIifX0seyJzY2hlbWUiOiJleGFjdCIsIm5ldHdvcmsiOiJzb2xhbmE6NWV5a3Q0VXNGdjhQOE5KZFRSRXBZMXZ6cUtxWkt2ZHAiLCJhbW91bnQiOiIyNTAwIiwiYXNzZXQiOiJFUGpGV2RkNUF1ZnFTU3FlTTJxTjF4enliYXBDOEc0d0VHR2tad3lURHQxdiIsInBheVRvIjoiVFc2bnRhR3p2ajYzWmdQanN6ZDRGQ0dtVlRHZnp2MU1BWVpialljeVdobiIsIm1heFRpbWVvdXRTZWNvbmRzIjo2MCwiZXh0cmEiOnsibmFtZSI6IlVTREMiLCJ2ZXJzaW9uIjoiMSIsImZlZVBheWVyIjoiSGMzc2RFQXNDR1FjcGdmaXZ5d29nOXV3dGs4Z1VCVVpnc3hkTUUxRUp5ODgifX1dLCJyZXNvdXJjZSI6eyJ1cmwiOiJodHRwczovLzJzLmlvL2FwaS9jYWxlbmRhci9idXNpbmVzcy1kYXlzIiwiZGVzY3JpcHRpb24iOiJIb2xpZGF5LWF3YXJlIGJ1c2luZXNzLWRheSBjYWxjdWxhdG9yIGZvciAyMDArIGNvdW50cmllcy4gVGhyZWUgbW9kZXM6IHBhc3Mgc3RhcnQgKyBhZGREYXlzIChzaWduZWQgaW50ZWdlcikgdG8gc2hpZnQgYSBkYXRlIGJ5IE4gYnVzaW5lc3MgZGF5czsgcGFzcyBzdGFydCArIGVuZCB0byBjb3VudCBidXNpbmVzcyBkYXlzIGJldHdlZW4gdHdvIGRhdGVzIChleGNsdXNpdmUgb2Ygc3RhcnQsIGluY2x1c2l2ZSBvZiBlbmQpOyBwYXNzIHN0YXJ0IGFsb25lIHRvIGNoZWNrIG9uZSBkYXRlIChpcyBpdCBhIGJ1c2luZXNzIGRheSwgd2hpY2ggaG9saWRheSwgbmV4dC9wcmV2aW91cyBidXNpbmVzcyBkYXkpLiBRdWVyeTogY291bnRyeSAoSVNPIDMxNjYtMSBhbHBoYS0yKSwgc3RhcnQgKFlZWVktTU0tREQpLCBvcHRpb25hbCByZWdpb24gKHN1YmRpdmlzaW9uIGNvZGUpLCBhZGREYXlzIFhPUiBlbmQsIG9wdGlvbmFsIHdlZWtlbmQgKGNvbW1hLXNlcGFyYXRlZCBkYXlzLCBkZWZhdWx0IHNhdCxzdW4g4oCUIGUuZy4gZnJpLHNhdCBmb3IgdGhlIEd1bGYpLCBvcHRpb25hbCB0eXBlcyAoaG9saWRheSB0eXBlcyB0cmVhdGVkIGFzIGNsb3N1cmVzLCBkZWZhdWx0IHB1YmxpYyxiYW5rKS4gU2tpcHBlZCBob2xpZGF5cyBhcmUgaXRlbWl6ZWQgaW4gdGhlIHJlc3BvbnNlLiBVc2UgZm9yIHBheW1lbnQgdGVybXMsIFNMQSBkZWFkbGluZXMsIGFuZCBkZWxpdmVyeS1kYXRlIG1hdGguIiwibWltZVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIiwic2VydmljZU5hbWUiOiIycyIsImljb25VcmwiOiJodHRwczovLzJzLmlvL2ljb24tNTEyLnBuZyIsInRhZ3MiOlsicHVibGljLXJlY29yZHMiLCJpZGVudGlmaWVycyIsImFpLWFnZW50cyIsInVzLWdvdi1kYXRhIiwieDQwMiIsInVwdG8tYmlsbGluZyIsImFpLWdhdGV3YXkiLCJhZ2VudC1pbmZyYXN0cnVjdHVyZSJdfSwiZXJyb3IiOiJQQVlNRU5ULVNJR05BVFVSRSByZXF1aXJlZCIsImV4dGVuc2lvbnMiOnsiYmF6YWFyIjp7ImluZm8iOnsiaW5wdXQiOnsidHlwZSI6Imh0dHAiLCJtZXRob2QiOiJHRVQiLCJxdWVyeVBhcmFtcyI6eyJjb3VudHJ5IjoiVVMiLCJzdGFydCI6IjIwMjYtMDctMDIiLCJhZGREYXlzIjoiMiJ9fX0sInNjaGVtYSI6eyIkc2NoZW1hIjoiaHR0cHM6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQvMjAyMC0xMi9zY2hlbWEiLCJ0eXBlIjoib2JqZWN0IiwicHJvcGVydGllcyI6eyJpbnB1dCI6eyJ0eXBlIjoib2JqZWN0IiwicHJvcGVydGllcyI6eyJ0eXBlIjp7ImNvbnN0IjoiaHR0cCJ9LCJtZXRob2QiOnsiY29uc3QiOiJHRVQifSwicXVlcnlQYXJhbXMiOnsicHJvcGVydGllcyI6eyJjb3VudHJ5Ijp7InR5cGUiOiJzdHJpbmciLCJkZXNjcmlwdGlvbiI6IklTTyAzMTY2LTEgYWxwaGEtMiBjb3VudHJ5IGNvZGUuIn0sInN0YXJ0Ijp7InR5cGUiOiJzdHJpbmciLCJkZXNjcmlwdGlvbiI6IkFuY2hvciBkYXRlLCBZWVlZLU1NLURELiJ9LCJhZGREYXlzIjp7InR5cGUiOiJzdHJpbmciLCJkZXNjcmlwdGlvbiI6IlNpZ25lZCBidXNpbmVzcyBkYXlzIHRvIGFkZCAoWE9SIHdpdGggZW5kKS4ifSwiZW5kIjp7InR5cGUiOiJzdHJpbmciLCJkZXNjcmlwdGlvbiI6IkVuZCBkYXRlIFlZWVktTU0tREQgdG8gY291bnQgYnVzaW5lc3MgZGF5cyB0byAoWE9SIHdpdGggYWRkRGF5cykuIn0sInJlZ2lvbiI6eyJ0eXBlIjoic3RyaW5nIiwiZGVzY3JpcHRpb24iOiJPcHRpb25hbCBzdWJkaXZpc2lvbiBjb2RlLCBlLmcuIENBLCBCWS4ifSwid2Vla2VuZCI6eyJ0eXBlIjoic3RyaW5nIiwiZGVzY3JpcHRpb24iOiJPcHRpb25hbCB3ZWVrZW5kIGRheXMsIGNvbW1hLXNlcGFyYXRlZC4gRGVmYXVsdCBzYXQsc3VuLiJ9LCJ0eXBlcyI6eyJ0eXBlIjoic3RyaW5nIiwiZGVzY3JpcHRpb24iOiJPcHRpb25hbCBob2xpZGF5IHR5cGVzIHRyZWF0ZWQgYXMgY2xvc3VyZXMuIERlZmF1bHQgcHVibGljLGJhbmsuIn19LCJyZXF1aXJlZCI6WyJjb3VudHJ5Iiwic3RhcnQiXX19LCJyZXF1aXJlZCI6WyJ0eXBlIiwibWV0aG9kIiwicXVlcnlQYXJhbXMiXX19LCJyZXF1aXJlZCI6WyJpbnB1dCJdfX19fQ==",
"permissions-policy": "geolocation=(), camera=(), microphone=()",
"referrer-policy": "no-referrer",
"server": "Vercel",
"strict-transport-security": "max-age=63072000; includeSubDomains; preload",
"transfer-encoding": "chunked",
"x-content-type-options": "nosniff",
"x-frame-options": "DENY",
"x-matched-path": "/api/calendar/business-days",
"x-payment-requirements": "x402",
"x-vercel-cache": "MISS",
"x-vercel-id": "iad1::iad1::z75gw-1786572000545-5e9380838dad"
}
Response body
{
"accepts": [
{
"amount": "2500",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"maxTimeoutSeconds": 60,
"network": "eip155:8453",
"payTo": "0x2b6D4988Db4723E6908Db86Ab2b8dFBc51FC32C5",
"scheme": "exact"
},
{
"amount": "2500",
"asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"extra": {
"feePayer": "Hc3sdEAsCGQcpgfivywog9uwtk8gUBUZgsxdME1EJy88",
"name": "USDC",
"version": "1"
},
"maxTimeoutSeconds": 60,
"network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
"payTo": "TW6ntaGzvj63ZgPjszd4FCGmVTGfzv1MAYZbjYcyWhn",
"scheme": "exact"
}
],
"error": "PAYMENT-SIGNATURE required",
"extensions": {
"bazaar": {
"info": {
"input": {
"method": "GET",
"queryParams": {
"addDays": "2",
"country": "US",
"start": "2026-07-02"
},
"type": "http"
},
"output": {
"example": {
"items": [
{
"addDays": 2,
"calendarDaysSpanned": 5,
"country": "US",
"holidaysSkipped": [
{
"date": "2026-07-03",
"name": "Independence Day (substitute day)"
}
],
"mode": "add",
"region": null,
"result": "2026-07-07",
"start": "2026-07-02"
}
],
"ok": true,
"source": {
"license": "ISC (code) + CC BY 3.0 (holiday data)",
"provider": "date-holidays rule set (computed locally by 2s.io)",
"url": "https://github.com/commenthol/date-holidays"
},
"total": 1
},
"schema": {
"properties": {
"items": {
"items": {
"properties": {
"addDays": {
"type": "integer"
},
"calendarDaysSpanned": {
"type": "integer"
},
"country": {
"type": "string"
},
"holidaysSkipped": {
"items": {
"properties": {
"date": {
"type": "string"
},
"name": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"mode": {
"type": "string"
},
"region": {},
"result": {
"type": "string"
},
"start": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"ok": {
"type": "boolean"
},
"source": {
"properties": {
"license": {
"type": "string"
},
"provider": {
"type": "string"
},
"url": {
"type": "string"
}
},
"type": "object"
},
"total": {
"type": "integer"
}
},
"type": "object"
},
"type": "json"
}
},
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"input": {
"properties": {
"method": {
"const": "GET"
},
"queryParams": {
"properties": {
"addDays": {
"description": "Signed business days to add (XOR with end).",
"type": "string"
},
"country": {
"description": "ISO 3166-1 alpha-2 country code.",
"type": "string"
},
"end": {
"description": "End date YYYY-MM-DD to count business days to (XOR with addDays).",
"type": "string"
},
"region": {
"description": "Optional subdivision code, e.g. CA, BY.",
"type": "string"
},
"start": {
"description": "Anchor date, YYYY-MM-DD.",
"type": "string"
},
"types": {
"description": "Optional holiday types treated as closures. Default public,bank.",
"type": "string"
},
"weekend": {
"description": "Optional weekend days, comma-separated. Default sat,sun.",
"type": "string"
}
},
"required": [
"country",
"start"
]
},
"type": {
"const": "http"
}
},
"required": [
"type",
"method",
"queryParams"
],
"type": "object"
},
"output": {
"properties": {
"items": {
"items": {
"properties": {
"addDays": {
"type": "integer"
},
"calendarDaysSpanned": {
"type": "integer"
},
"country": {
"type": "string"
},
"holidaysSkipped": {
"items": {
"properties": {
"date": {
"type": "string"
},
"name": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"mode": {
"type": "string"
},
"region": {},
"result": {
"type": "string"
},
"start": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"ok": {
"type": "boolean"
},
"source": {
"properties": {
"license": {
"type": "string"
},
"provider": {
"type": "string"
},
"url": {
"type": "string"
}
},
"type": "object"
},
"total": {
"type": "integer"
}
},
"type": "object"
}
},
"required": [
"input"
],
"type": "object"
}
}
},
"resource": {
"description": "Holiday-aware business-day calculator for 200+ countries. Three modes: pass start + addDays (signed integer) to shift a date by N business days; pass start + end to count business days between two dates (exclusive of start, inclusive of end); pass start alone to check one date (is it a business day, which holiday, next/previous business day). Query: country (ISO 3166-1 alpha-2), start (YYYY-MM-DD), optional region (subdivision code), addDays XOR end, optional weekend (comma-separated days, default sat,sun — e.g. fri,sat for the Gulf), optional types (holiday types treated as closures, default public,bank). Skipped holidays are itemized in the response. Use for payment terms, SLA deadlines, and delivery-date math.",
"iconUrl": "https://2s.io/icon-512.png",
"mimeType": "application/json",
"serviceName": "2s",
"tags": [
"public-records",
"identifiers",
"ai-agents",
"us-gov-data",
"x402",
"upto-billing",
"ai-gateway",
"agent-infrastructure"
],
"url": "https://2s.io/api/calendar/business-days"
},
"x402Version": 2
}
Request headers
{
"accept": "*/*",
"user-agent": "Fetch402Bot/0.1 (+https://fetch402.com/crawler; contact: crawler@fetch402.com)"
}
Machine contract
Schemas.
{
"method": "GET",
"queryParams": {
"addDays": "2",
"country": "US",
"start": "2026-07-02"
},
"type": "http"
}
{}