2s.io
https://2s.io/api/calendar/business-daysShares a payout wallet with 441 other endpoints — its adoption is attributed from that shared wallet's traffic, not earned exclusively.
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.
Reliability & health
Uptime and response time from our own unpaid probes, plus the reliability score built from them.
Uptime
100.0% avgResponse time
p50 55ms · p95 192msData table
| Bucket | Uptime | Probes | Response time |
|---|---|---|---|
| 8/13/2026, 6:00:00 PM | 100% | 1 | 48ms |
| 8/13/2026, 7:00:00 PM | 100% | 1 | 69ms |
| 8/13/2026, 8:00:00 PM | 100% | 1 | 48ms |
| 8/13/2026, 9:00:00 PM | 100% | 1 | 53ms |
| 8/13/2026, 10:00:00 PM | 100% | 1 | 46ms |
| 8/13/2026, 11:00:00 PM | 100% | 1 | 47ms |
| 8/14/2026, 1:00:00 AM | 100% | 1 | 49ms |
| 8/14/2026, 2:00:00 AM | 100% | 1 | 63ms |
| 8/14/2026, 3:00:00 AM | 100% | 1 | 228ms |
| 8/14/2026, 4:00:00 AM | 100% | 1 | 48ms |
| 8/14/2026, 5:00:00 AM | 100% | 1 | 78ms |
| 8/14/2026, 6:00:00 AM | 100% | 1 | 47ms |
| 8/14/2026, 8:00:00 AM | 100% | 1 | 47ms |
| 8/14/2026, 9:00:00 AM | 100% | 1 | 52ms |
| 8/14/2026, 10:00:00 AM | 100% | 1 | 191ms |
| 8/14/2026, 11:00:00 AM | 100% | 1 | 48ms |
| 8/14/2026, 12:00:00 PM | 100% | 1 | 59ms |
| 8/14/2026, 2:00:00 PM | 100% | 1 | 53ms |
| 8/14/2026, 3:00:00 PM | 100% | 1 | 258ms |
| 8/14/2026, 4:00:00 PM | 100% | 1 | 44ms |
| 8/14/2026, 5:00:00 PM | 100% | 1 | 60ms |
| 8/14/2026, 6:00:00 PM | 100% | 1 | 45ms |
| 8/14/2026, 8:00:00 PM | 100% | 1 | 43ms |
| 8/14/2026, 9:00:00 PM | 100% | 1 | 51ms |
| 8/14/2026, 10:00:00 PM | 100% | 1 | 72ms |
| 8/14/2026, 11:00:00 PM | 100% | 1 | 47ms |
| 8/15/2026, 12:00:00 AM | 100% | 1 | 49ms |
| 8/15/2026, 1:00:00 AM | 100% | 1 | 56ms |
| 8/15/2026, 2:00:00 AM | 100% | 1 | 53ms |
| 8/15/2026, 3:00:00 AM | 100% | 1 | 55ms |
| 8/15/2026, 5:00:00 AM | 100% | 1 | 55ms |
| 8/15/2026, 6:00:00 AM | 100% | 1 | 192ms |
| 8/15/2026, 7:00:00 AM | 100% | 1 | 80ms |
| 8/15/2026, 8:00:00 AM | 100% | 1 | 164ms |
| 8/15/2026, 9:00:00 AM | 100% | 1 | 45ms |
| 8/15/2026, 10:00:00 AM | 100% | 1 | 63ms |
| 8/15/2026, 11:00:00 AM | 100% | 1 | 113ms |
| 8/15/2026, 1:00:00 PM | 100% | 1 | 55ms |
| 8/15/2026, 2:00:00 PM | 100% | 1 | 98ms |
| 8/15/2026, 3:00:00 PM | 100% | 1 | 55ms |
| 8/15/2026, 4:00:00 PM | 100% | 1 | 65ms |
| 8/15/2026, 5:00:00 PM | 100% | 1 | 230ms |
| 8/15/2026, 6:00:00 PM | 100% | 1 | 53ms |
| 8/15/2026, 8:00:00 PM | 100% | 1 | 54ms |
| 8/15/2026, 9:00:00 PM | 100% | 1 | 64ms |
| 8/15/2026, 10:00:00 PM | 100% | 1 | 47ms |
| 8/15/2026, 11:00:00 PM | 100% | 1 | 46ms |
| 8/16/2026, 12:00:00 AM | 100% | 1 | 76ms |
| 8/16/2026, 1:00:00 AM | 100% | 1 | 63ms |
| 8/16/2026, 3:00:00 AM | 100% | 1 | 51ms |
| 8/16/2026, 4:00:00 AM | 100% | 1 | 45ms |
| 8/16/2026, 5:00:00 AM | 100% | 1 | 77ms |
| 8/16/2026, 6:00:00 AM | 100% | 1 | 53ms |
| 8/16/2026, 7:00:00 AM | 100% | 1 | 43ms |
| 8/16/2026, 8:00:00 AM | 100% | 1 | 48ms |
| 8/16/2026, 10:00:00 AM | 100% | 1 | 52ms |
| 8/16/2026, 11:00:00 AM | 100% | 1 | 146ms |
| 8/16/2026, 12:00:00 PM | 100% | 1 | 56ms |
| 8/16/2026, 1:00:00 PM | 100% | 1 | 46ms |
| 8/16/2026, 2:00:00 PM | 100% | 1 | 124ms |
| 8/16/2026, 3:00:00 PM | 100% | 1 | 210ms |
| 8/16/2026, 5:00:00 PM | 100% | 1 | 59ms |
| 8/16/2026, 6:00:00 PM | 100% | 1 | 148ms |
| 8/16/2026, 7:00:00 PM | 100% | 1 | 42ms |
| 8/16/2026, 8:00:00 PM | 100% | 1 | 192ms |
| 8/16/2026, 9:00:00 PM | 100% | 1 | 48ms |
| 8/16/2026, 10:00:00 PM | 100% | 1 | 52ms |
| 8/17/2026, 12:00:00 AM | 100% | 1 | 71ms |
| 8/17/2026, 1:00:00 AM | 100% | 1 | 61ms |
| 8/17/2026, 2:00:00 AM | 100% | 1 | 54ms |
| 8/17/2026, 3:00:00 AM | 100% | 1 | 220ms |
| 8/17/2026, 4:00:00 AM | 100% | 1 | 56ms |
| 8/17/2026, 5:00:00 AM | 100% | 1 | 43ms |
| 8/17/2026, 7:00:00 AM | 100% | 1 | 48ms |
| 8/17/2026, 8:00:00 AM | 100% | 1 | 51ms |
| 8/17/2026, 9:00:00 AM | 100% | 1 | 48ms |
| 8/17/2026, 10:00:00 AM | 100% | 1 | 50ms |
| 8/17/2026, 11:00:00 AM | 100% | 1 | 166ms |
| 8/17/2026, 12:00:00 PM | 100% | 1 | 53ms |
| 8/17/2026, 2:00:00 PM | 100% | 1 | 62ms |
| 8/17/2026, 3:00:00 PM | 100% | 1 | 51ms |
| 8/17/2026, 4:00:00 PM | 100% | 1 | 50ms |
| 8/17/2026, 5:00:00 PM | 100% | 1 | 46ms |
| 8/17/2026, 6:00:00 PM | 100% | 1 | 58ms |
| 8/17/2026, 7:00:00 PM | 100% | 1 | 46ms |
| 8/17/2026, 9:00:00 PM | 100% | 1 | 56ms |
| 8/17/2026, 10:00:00 PM | 100% | 1 | 59ms |
| 8/17/2026, 11:00:00 PM | 100% | 1 | 51ms |
| 8/18/2026, 12:00:00 AM | 100% | 1 | 71ms |
| 8/18/2026, 1:00:00 AM | 100% | 1 | 56ms |
| 8/18/2026, 2:00:00 AM | 100% | 1 | 58ms |
| 8/18/2026, 4:00:00 AM | 100% | 1 | 49ms |
| 8/18/2026, 5:00:00 AM | 100% | 1 | 53ms |
| 8/18/2026, 6:00:00 AM | 100% | 1 | 48ms |
| 8/18/2026, 7:00:00 AM | 100% | 1 | 47ms |
| 8/18/2026, 8:00:00 AM | 100% | 1 | 61ms |
| 8/18/2026, 9:00:00 AM | 100% | 1 | 120ms |
| 8/18/2026, 11:00:00 AM | 100% | 1 | 59ms |
| 8/18/2026, 12:00:00 PM | 100% | 1 | 62ms |
| 8/18/2026, 1:00:00 PM | 100% | 1 | 51ms |
| 8/18/2026, 2:00:00 PM | 100% | 1 | 52ms |
| 8/18/2026, 3:00:00 PM | 100% | 1 | 59ms |
| 8/18/2026, 4:00:00 PM | 100% | 1 | 51ms |
| 8/18/2026, 6:00:00 PM | 100% | 1 | 49ms |
| 8/18/2026, 7:00:00 PM | 100% | 1 | 50ms |
| 8/18/2026, 8:00:00 PM | 100% | 1 | 68ms |
| 8/18/2026, 9:00:00 PM | 100% | 1 | 61ms |
| 8/18/2026, 10:00:00 PM | 100% | 1 | 51ms |
| 8/18/2026, 11:00:00 PM | 100% | 1 | 48ms |
| 8/19/2026, 1:00:00 AM | 100% | 1 | 71ms |
| 8/19/2026, 2:00:00 AM | 100% | 1 | 83ms |
| 8/19/2026, 3:00:00 AM | 100% | 1 | 59ms |
| 8/19/2026, 4:00:00 AM | 100% | 1 | 63ms |
| 8/19/2026, 5:00:00 AM | 100% | 1 | 55ms |
| 8/19/2026, 6:00:00 AM | 100% | 1 | 51ms |
| 8/19/2026, 8:00:00 AM | 100% | 1 | 58ms |
| 8/19/2026, 9:00:00 AM | 100% | 1 | 47ms |
| 8/19/2026, 10:00:00 AM | 100% | 1 | 273ms |
| 8/19/2026, 11:00:00 AM | 100% | 1 | 57ms |
| 8/19/2026, 12:00:00 PM | 100% | 1 | 47ms |
| 8/19/2026, 1:00:00 PM | 100% | 1 | 60ms |
| 8/19/2026, 3:00:00 PM | 100% | 1 | 90ms |
| 8/19/2026, 4:00:00 PM | 100% | 1 | 83ms |
| 8/19/2026, 5:00:00 PM | 100% | 1 | 55ms |
| 8/19/2026, 6:00:00 PM | 100% | 1 | 56ms |
| 8/19/2026, 7:00:00 PM | 100% | 1 | 54ms |
| 8/19/2026, 8:00:00 PM | 100% | 1 | 52ms |
| 8/19/2026, 9:00:00 PM | 100% | 1 | 56ms |
| 8/19/2026, 11:00:00 PM | 100% | 1 | 45ms |
| 8/20/2026, 12:00:00 AM | 100% | 1 | 49ms |
| 8/20/2026, 1:00:00 AM | 100% | 1 | 50ms |
| 8/20/2026, 2:00:00 AM | 100% | 1 | 74ms |
| 8/20/2026, 3:00:00 AM | 100% | 1 | 334ms |
| 8/20/2026, 4:00:00 AM | 100% | 1 | 52ms |
| 8/20/2026, 6:00:00 AM | 100% | 1 | 62ms |
| 8/20/2026, 7:00:00 AM | 100% | 1 | 47ms |
| 8/20/2026, 8:00:00 AM | 100% | 1 | 57ms |
| 8/20/2026, 9:00:00 AM | 100% | 1 | 55ms |
| 8/20/2026, 10:00:00 AM | 100% | 1 | 49ms |
| 8/20/2026, 11:00:00 AM | 100% | 1 | 45ms |
| 8/20/2026, 1:00:00 PM | 100% | 1 | 57ms |
| 8/20/2026, 2:00:00 PM | 100% | 1 | 84ms |
| 8/20/2026, 3:00:00 PM | 100% | 1 | 48ms |
- Availability
- 100
- Latency
- 100
- Security
- 100
- Transparency
- 61
- Activity
- 4
How often it was reachable when we probed it (weight 35%).
How quickly it answers when it is up — fast scores high (weight 20%).
Whether it serves over working TLS / https (weight 15%).
Whether the operator disclosed what it does — description, schema, identity (weight 15%).
Observed on-chain payments to this endpoint's wallet — transactions, volume, and distinct paying wallets over the last month (weight 15%; not yet measured when we have not seen its wallet settle).
Confidence 100% — how much probe evidence backs this score. A thin history is flagged, not hidden.
See the scoring methodology for exactly how each number is computed.
Payment
- Currencies
- USDC
- Networks
- base, solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp
- Facilitator
- unknown
- SDK
- unknown
Operator
- Company
- inferred — unknown
- Jurisdiction
- —
- Registrar
- —
- Domain registered
- —
- Hosting network
- VERCEL-09
- Hosting country
- —
Operator context is derived from public RDAP/TLS records and unverified. Company and country are only available for endpoints that publish them (an OV/EV TLS certificate or a non-redacted domain record); most endpoints are CDN-fronted and disclose neither.
On-chain activity (base)
Payments per day
last payment 8/20/2026Data table
| Day | Payments | Volume (USD) | Paying wallets |
|---|---|---|---|
| 7/22/2026 | 984 | 2.17 | 102 |
| 7/23/2026 | 629 | 1.66 | 89 |
| 7/24/2026 | 1,232 | 2.49 | 117 |
| 7/25/2026 | 1,341 | 2.61 | 128 |
| 7/26/2026 | 915 | 1.98 | 107 |
| 7/27/2026 | 1,175 | 2.1 | 107 |
| 7/28/2026 | 762 | 1.71 | 86 |
| 7/29/2026 | 852 | 1.67 | 97 |
| 7/30/2026 | 818 | 1.74 | 97 |
| 7/31/2026 | 882 | 1.7 | 94 |
| 8/1/2026 | 633 | 1.24 | 82 |
| 8/2/2026 | 604 | 1.12 | 76 |
| 8/3/2026 | 358 | 1.6 | 47 |
| 8/4/2026 | 530 | 3.35 | 70 |
| 8/5/2026 | 408 | 2.76 | 42 |
| 8/6/2026 | 272 | 2.14 | 32 |
| 8/7/2026 | 164 | 1.37 | 23 |
| 8/8/2026 | 127 | 1.51 | 17 |
| 8/9/2026 | 60 | 0.33 | 10 |
| 8/10/2026 | 109 | 0.36 | 8 |
| 8/11/2026 | 84 | 0.25 | 8 |
| 8/12/2026 | 84 | 0.25 | 6 |
| 8/13/2026 | 73 | 0.21 | 6 |
| 8/14/2026 | 167 | 1.05 | 6 |
| 8/15/2026 | 24 | 0.1 | 4 |
| 8/16/2026 | 338 | 0.86 | 2 |
| 8/17/2026 | 63 | 0.18 | 3 |
| 8/18/2026 | 55 | 0.16 | 2 |
| 8/19/2026 | 84 | 0.23 | 3 |
| 8/20/2026 | 18 | 0.1 | 5 |
This payout wallet is shared: figures cover all 442 endpoints paid at it, since payments cannot be attributed to one of them. Only payments settled on chains and facilitators we index.
Linked by wallet — likely same operator
On-chain agent identity and the x402 endpoint that shares its settlement wallet.
Response schema
{
"properties": {
"data": {
"additionalProperties": false,
"properties": {
"items": {
"items": {
"additionalProperties": false,
"properties": {
"addDays": {
"description": "add mode: the requested shift.",
"type": "integer"
},
"businessDays": {
"description": "between mode: business days after start through end.",
"type": "integer"
},
"calendarDays": {
"description": "between mode: calendar days between start and end.",
"type": "integer"
},
"calendarDaysSpanned": {
"description": "add mode: calendar days between start and result.",
"type": "integer"
},
"country": {
"description": "Resolved ISO country code.",
"type": "string"
},
"end": {
"description": "between mode: echoed end date.",
"type": "string"
},
"holidayNames": {
"description": "check mode: names of holidays on start, if any.",
"items": {
"type": "string"
},
"type": "array"
},
"holidaysInRange": {
"description": "between mode: weekday holidays inside the range.",
"items": {
"additionalProperties": false,
"properties": {
"date": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": [
"date",
"name"
],
"type": "object"
},
"type": "array"
},
"holidaysSkipped": {
"description": "add mode: weekday holidays skipped along the way.",
"items": {
"additionalProperties": false,
"properties": {
"date": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": [
"date",
"name"
],
"type": "object"
},
"type": "array"
},
"isBusinessDay": {
"description": "check mode: true when start is neither weekend nor closure holiday.",
"type": "boolean"
},
"isHoliday": {
"description": "check mode: start is a closure holiday.",
"type": "boolean"
},
"isWeekend": {
"description": "check mode: start falls on a configured weekend day.",
"type": "boolean"
},
"mode": {
"description": "check | add | between — which calculation ran, inferred from the params.",
"type": "string"
},
"nextBusinessDay": {
"description": "check mode: first business day after start.",
"type": "string"
},
"previousBusinessDay": {
"description": "check mode: last business day before start.",
"type": "string"
},
"region": {
"description": "Resolved subdivision code, or null.",
"nullable": true,
"type": "string"
},
"result": {
"description": "add mode: the resulting business date, YYYY-MM-DD.",
"type": "string"
},
"start": {
"description": "Echoed anchor date.",
"type": "string"
}
},
"required": [
"mode",
"country",
"region",
"start"
],
"type": "object"
},
"type": "array"
},
"ok": {
"enum": [
true
],
"type": "boolean"
},
"source": {
"$ref": "#/components/schemas/Source"
},
"total": {
"description": "Total matching rows upstream; null when unknown.",
"nullable": true,
"type": "integer"
}
},
"required": [
"ok",
"items",
"total",
"source"
],
"type": "object"
},
"meta": {
"$ref": "#/components/schemas/CallMeta"
}
},
"required": [
"data",
"meta"
],
"type": "object"
}