payment-ready until 2026-10-11
33 small deterministic data utilities for agents and developers, each a plain GET at $0.05 paid over x402 (USDC on Base). Identifier check digits (national IDs, IBAN, GS1, ISIN/CUSIP/SEDOL/FIGI), dates, calendars and time zones, text and Unicode, URL/IDN/semver/hash/JWT parsing, geohash and plus codes, geodesic distance, blockchain address and selector primitives, reference tables (NUTS, airports, currencies, countries), number words, statistics and allocation. No account, no API key.
Pay from $0.05 per request in USDC on Base, settled onchain via the x402 protocol, no signup, no API key needed.
listed 2026-10-04 · no on-chain settlement recorded yet
VERDICT
ranking generation 3solid 83/100 #160 of 346 in Data by measured score
What the score read on this service: status online, 100% uptime, latest daily rollup (no 30d window yet), 118ms response p95, x402 compliance 14 of 14, $0.05 price against the category, on-chain traction measured. Each of those is measured, and each is published in full below.
The score comes from our own monitoring, never from reviews, operator claims, or a language model: reliability, x402 compliance, price against the category, a deterministic risk flag, and a small on-chain traction term, weighted by ranking generation 3. It is not placement anyone can buy: the paid verify tier is reported beside it and is not one of its inputs. Every component below stays published and read-only.
It is a score inside Data, and only there: price and speed are scored against the whole category field, every listing in it that carries no danger flag, the scored service included, which here means 346 listings, this one among them. That set is wider than the 346 the position above is counted against, because a listing we have measured too little of to rank still sits in the field the price and the speed are normalized over. The same service in a different field would read differently. The same engine answers GET /api/v1/best, and asked for a different pool (the whole directory, or another filter) it returns a different number for this service under this same ranking generation. Neither is more correct: they answer different questions, and the methodology states which is which.
Bands on the 0 to 100 measured score: strong at 93 and above, solid from 75, mixed from 55, weak below 55. Price and speed are scored against the whole category field, every listing in it that carries no danger flag, the scored service included, so the score places a service in its own field.
ALTERNATIVES IN DATA
Other Data services in this directory, ordered by the same measured score. The figures are ours: 30-day uptime from our own probes, 30-day settlement volume read on-chain (a conservative undercount, and null where we cannot measure it, never a zero).
| SERVICE | BAND | SCORE | UPTIME 30D | VOL 30D |
|---|---|---|---|---|
| SniperX•x402 | strong | 96 | 99.9% | $322.77 |
| glim.sh | strong | 94 | 100% | $20.60 |
| cn402 | solid | 93 | 100% | $36.26 |
| x402node | solid | 92 | 100% | $36.26 |
| twit.sh | solid | 92 | 100% | $32.64 |
ASSESSMENT
updated 1h agoThe parts the verdict above is computed from, each with its proof. Click any chip. Measured values stay read-only; unknown is honest, and an unknown is never counted as a zero.
reliability 100%
- uptime · latest daily rollup
- -
- uptime 7d
- -
- uptime 30d
- -
- uptime 90d
- -
- response p95
- 118ms
- avg response
- 118ms
- total checks
- 1
Measured on the unpaid 402 handshake, not the paid call. A service can 402 correctly and still fail after payment.
compliance A (14/14)
14 of 14 x402 conformance checks pass. Full checklist below.
price $0.05 (p87 in Data)
- price (min)
- $0.05
- category percentile (min)
- p87 in Data
- endpoints / prices
- 33 / 1
- model
- flat
- stability
- 100%
risk clean
No deterministic risk flag. Risk fires only on an exact blocklist match, or a reserved-brand name with a mismatched verified payTo. Never from low uptime, a high price, or a model guess.
- domain age
- 2166d
- registrar
- Key-Systems GmbH
- hosting
- custom
- domain created
- 2020-10-29
Identity facts, not a risk score.
traction $0.00 30d · 0 buyers
- volume 30d
- $0.00
- buyers 30d
- 0
- settlements 30d
- 0
- measured since
- --- (start of our harvest window)
- last settlement
- ---
- top buyer share
- -
- trend 7d vs 30d
- -
- networks
- eip155:8453
- volume all-time
- $0
- settlements all-time
- 0
- median settlement 30d
- -
- max settlement 30d
- -
- settled via
- -
Conservative undercount: only USDC settlements via facilitators we measure are counted. A measured floor, not an estimate.
Top buyer share is part of the ranking score: a higher share lowers the traction part of the score, by up to half when one address holds all 30d volume.
WHAT IT DOES
ai-derivedNo AI synthesis has been produced for this service yet.
ENDPOINTS
| METHOD | PATH | DESCRIPTION | PRICE | NETWORK | ASSET | 402 CHANNEL |
|---|---|---|---|---|---|---|
| GET | /v1/chain/address | $0.05 | Base | USDC | header | |
| GET | /v1/chain/selector | $0.05 | Base | USDC | header | |
| GET | /v1/code/hash | $0.05 | Base | USDC | header | |
| GET | /v1/code/idn | $0.05 | Base | USDC | header | |
| GET | /v1/code/jwt | $0.05 | Base | USDC | header | |
| GET | /v1/code/semver | $0.05 | Base | USDC | header | |
| GET | /v1/code/url | $0.05 | Base | USDC | header | |
| GET | /v1/geo/distance | $0.05 | Base | USDC | header | |
| GET | /v1/geo/geohash | $0.05 | Base | USDC | header | |
| GET | /v1/geo/pluscode | $0.05 | Base | USDC | header | |
| GET | /v1/geo/polygon | $0.05 | Base | USDC | header | |
| GET | /v1/id/gs1 | $0.05 | Base | USDC | header | |
| GET | /v1/id/iban | $0.05 | Base | USDC | header | |
| GET | /v1/id/iban-build | $0.05 | Base | USDC | header | |
| GET | /v1/id/national | $0.05 | Base | USDC | header | |
| GET | /v1/id/security | $0.05 | Base | USDC | header | |
| GET | /v1/num/allocate | $0.05 | Base | USDC | header | |
| GET | /v1/num/radix | $0.05 | Base | USDC | header | |
| GET | /v1/num/stats | $0.05 | Base | USDC | header | |
| GET | /v1/num/words | $0.05 | Base | USDC | header | |
| GET | /v1/ref/airport | $0.05 | Base | USDC | header | |
| GET | /v1/ref/country | $0.05 | Base | USDC | header | |
| GET | /v1/ref/currency | $0.05 | Base | USDC | header | |
| GET | /v1/ref/nuts | $0.05 | Base | USDC | header | |
| GET | /v1/text/similarity | $0.05 | Base | USDC | header | |
| GET | /v1/text/slug | $0.05 | Base | USDC | header | |
| GET | /v1/text/transliterate | $0.05 | Base | USDC | header | |
| GET | /v1/text/unicode | $0.05 | Base | USDC | header | |
| GET | /v1/time/business-days | $0.05 | Base | USDC | header | |
| GET | /v1/time/calendar | $0.05 | Base | USDC | header | |
| GET | /v1/time/dst | $0.05 | Base | USDC | header | |
| GET | /v1/time/rrule | $0.05 | Base | USDC | header | |
| GET | /v1/time/zone | $0.05 | Base | USDC | header |
REQUEST / RESPONSE EXAMPLE
An unpaid request to GET /v1/chain/address returns HTTP 402 with the payment terms. Settle onchain via your facilitator, then retry with the X-Payment header.
curl -i 'https://api.duoleads.com/v1/chain/address'
// 402 response (captured by monitor) · 33 payloads · click to expand
[
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://api.duoleads.com/v1/time/calendar",
"tags": [
"deterministic",
"no-api-key",
"time",
"calendar"
],
"iconUrl": "https://api.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Convert a Gregorian date to other calendar systems: Islamic (both the tabular civil calendar and the Umm al-Qura variant), Hebrew, Japanese imperial era, Republic of China, Buddhist and Persian. Also computes Easter Sunday for a year in both the Gregorian and Julian reckonings. Uses the calendar support built into the runtime, with the algorithm named in every response.",
"serviceName": "Duo Data Utilities"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"to": "islamic,hebrew,japanese",
"date": "2026-09-28"
}
},
"output": {
"type": "json",
"example": {
"ok": true,
"data": {
"calendars": {
"hebrew": {
"day": 17,
"era": "AM",
"year": 5787,
"month": 1,
"algorithm": "Hebrew calendar (months numbered from Tishri = 1)",
"formatted": "17 Tishri 5787",
"month_name": "Tishri"
},
"islamic": {
"day": 15,
"era": "AH",
"year": 1448,
"month": 4,
"algorithm": "tabular civil (islamic-civil)",
"formatted": "Rabiʻ II 15, 1448 AH",
"month_name": "Rabiʻ II"
},
"japanese": {
"day": 28,
"era": "Reiwa",
"year": 8,
"month": 9,
"algorithm": "Japanese imperial eras on the Gregorian calendar",
"formatted": "September 28, 8 Reiwa",
"month_name": "September"
}
},
"gregorian": "2026-09-28"
},
"meta": {
"price_usd": "0.05",
"disclaimer": "Factual output of a deterministic computation over public data. Provided as is, with no warranty of accuracy, completeness or availability. Not investment, financial, legal, tax, medical or any other professional advice, and not a recommendation. Verify before relying on it. Terms: https://api.duoleads.com/terms",
"request_id": "01K6B7Q4ZC8H3F2M9WXR5TYN0D",
"computed_at": "2026-09-28T12:00:00.000Z",
"deterministic": true
},
"route": "/v1/time/calendar",
"version": "1.0.0"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [],
"properties": {
"op": {
"enum": [
"convert",
"easter"
],
"type": "string",
"default": "convert",
"maxLength": 64,
"description": "convert (default) a Gregorian date, or easter for a year."
},
"to": {
"type": "string",
"maxLength": 256,
"description": "Comma-separated calendar ids: islamic, islamic-umalqura, hebrew, japanese, roc, buddhist, persian. Default all."
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"maxLength": 32,
"description": "Gregorian date YYYY-MM-DD. Required when op=convert."
},
"rite": {
"enum": [
"western",
"eastern"
],
"type": "string",
"default": "western",
"maxLength": 64,
"description": "Easter reckoning: western (default) or eastern."
},
"year": {
"type": "string",
"pattern": "^[+-]?\\d+$",
"maxLength": 64,
"description": "Year for op=easter, 326-9999."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"required": [
"ok",
"route",
"version",
"data",
"meta"
],
"properties": {
"ok": {
"const": true
},
"data": {
"type": "object",
"properties": {
"date": {
"type": "string"
},
"rite": {
"type": "string"
},
"year": {
"type": "integer"
},
"algorithm": {
"type": "string"
},
"calendars": {
"type": "object",
"description": "keyed by caller-chosen names",
"additionalProperties": {
"type": "object",
"required": [
"year",
"month",
"month_name",
"day",
"era",
"formatted",
"algorithm"
],
"properties": {
"day": {
"type": "integer"
},
"era": {
"type": "string"
},
"year": {
"type": "integer"
},
"month": {
"type": "integer"
},
"algorithm": {
"type": "string"
},
"formatted": {
"type": "string"
},
"month_name": {
"type": "string"
}
}
}
},
"gregorian": {
"type": "string"
},
"julian_date": {
"type": "string"
},
"unavailable": {
"type": "object",
"description": "keyed by caller-chosen names",
"additionalProperties": {
"type": "string"
}
},
"gregorian_date": {
"type": "string"
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"computed_at",
"price_usd",
"deterministic",
"disclaimer"
],
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"version",
"published"
]
}
},
"price_usd": {
"type": "string"
},
"disclaimer": {
"type": "string"
},
"request_id": {
"type": "string"
},
"computed_at": {
"type": "string",
"description": "RFC 3339 UTC with milliseconds"
},
"deterministic": {
"type": "boolean"
}
}
},
"route": {
"const": "/v1/time/calendar"
},
"version": {
"type": "string"
}
}
}
}
}
}
}
}
},
"x402Version": 2
},
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://api.duoleads.com/v1/time/rrule",
"tags": [
"deterministic",
"no-api-key",
"time",
"calendar",
"recurrence"
],
"iconUrl": "https://api.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Expand an RFC 5545 recurrence rule into concrete occurrence timestamps. Accepts an RRULE string with DTSTART, an IANA time zone, and optional EXDATE and RDATE lists, and returns up to 200 occurrences as both local wall-clock times and UTC instants. Supports FREQ, INTERVAL, COUNT, UNTIL, BYDAY, BYMONTHDAY, BYMONTH, BYSETPOS and WKST. Occurrences moved by a DST gap carry gap: true. Rules needing over 50,000 candidate evaluations are rejected.",
"serviceName": "Duo Data Utilities"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"zone": "Europe/Amsterdam",
"rrule": "FREQ=MONTHLY;BYDAY=-1FR;COUNT=3",
"dtstart": "2026-01-01T09:00:00"
}
},
"output": {
"type": "json",
"example": {
"ok": true,
"data": {
"rule": {
"freq": "MONTHLY",
"wkst": "MO",
"byday": [
"-1FR"
],
"count": 3,
"interval": 1
},
"zone": "Europe/Amsterdam",
"count": 3,
"truncated": false,
"occurrences": [
{
"dst": false,
"local": "2026-01-30T09:00:00",
"offset": "+01:00",
"instant": "2026-01-30T08:00:00.000Z",
"epoch_ms": 1769760000000
},
{
"dst": false,
"local": "2026-02-27T09:00:00",
"offset": "+01:00",
"instant": "2026-02-27T08:00:00.000Z",
"epoch_ms": 1772179200000
},
{
"dst": false,
"local": "2026-03-27T09:00:00",
"offset": "+01:00",
"instant": "2026-03-27T08:00:00.000Z",
"epoch_ms": 1774598400000
}
]
},
"meta": {
"price_usd": "0.05",
"disclaimer": "Factual output of a deterministic computation over public data. Provided as is, with no warranty of accuracy, completeness or availability. Not investment, financial, legal, tax, medical or any other professional advice, and not a recommendation. Verify before relying on it. Terms: https://api.duoleads.com/terms",
"request_id": "01K6B7Q4ZC8H3F2M9WXR5TYN0D",
"computed_at": "2026-09-28T12:00:00.000Z",
"deterministic": true
},
"route": "/v1/time/rrule",
"version": "1.0.0"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [
"rrule",
"dtstart",
"zone"
],
"properties": {
"zone": {
"type": "string",
"maxLength": 64,
"description": "IANA time zone id."
},
"after": {
"type": "string",
"maxLength": 64,
"description": "RFC 3339 instant; skip occurrences before it."
},
"count": {
"type": "string",
"default": "20",
"pattern": "^[+-]?\\d+$",
"maxLength": 64,
"description": "Maximum occurrences to return, 1-200. Default 20."
},
"rdate": {
"type": "string",
"maxLength": 1024,
"description": "Comma-separated local datetimes to add."
},
"rrule": {
"type": "string",
"maxLength": 512,
"description": "RFC 5545 RRULE, e.g. FREQ=MONTHLY;BYDAY=-1FR;COUNT=6."
},
"exdate": {
"type": "string",
"maxLength": 1024,
"description": "Comma-separated local datetimes to exclude."
},
"dtstart": {
"type": "string",
"maxLength": 32,
"description": "First occurrence, YYYY-MM-DDTHH:MM:SS local to zone."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"required": [
"ok",
"route",
"version",
"data",
"meta"
],
"properties": {
"ok": {
"const": true
},
"data": {
"type": "object",
"required": [
"occurrences",
"count",
"truncated",
"rule",
"zone"
],
"properties": {
"rule": {
"type": "object",
"required": [
"freq",
"interval",
"wkst"
],
"properties": {
"freq": {
"type": "string"
},
"wkst": {
"type": "string"
},
"byday": {
"type": "array",
"items": {
"type": "string"
}
},
"count": {
"type": "integer"
},
"until": {
"type": "string"
},
"byhour": {
"type": "array",
"items": {
"type": "integer"
}
},
"bymonth": {
"type": "array",
"items": {
"type": "integer"
}
},
"byminute": {
"type": "array",
"items": {
"type": "integer"
}
},
"bysecond": {
"type": "array",
"items": {
"type": "integer"
}
},
"bysetpos": {
"type": "array",
"items": {
"type": "integer"
}
},
"interval": {
"type": "integer"
},
"bymonthday": {
"type": "array",
"items": {
"type": "integer"
}
}
}
},
"zone": {
"type": "string"
},
"count": {
"type": "integer"
},
"truncated": {
"type": "boolean"
},
"occurrences": {
"type": "array",
"items": {
"type": "object",
"required": [
"local",
"instant",
"epoch_ms",
"offset",
"dst"
],
"properties": {
"dst": {
"type": "boolean"
},
"gap": {
"type": "boolean"
},
"local": {
"type": "string"
},
"offset": {
"type": "string"
},
"instant": {
"type": "string"
},
"epoch_ms": {
"type": "integer"
}
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"computed_at",
"price_usd",
"deterministic",
"disclaimer"
],
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"version",
"published"
]
}
},
"price_usd": {
"type": "string"
},
"disclaimer": {
"type": "string"
},
"request_id": {
"type": "string"
},
"computed_at": {
"type": "string",
"description": "RFC 3339 UTC with milliseconds"
},
"deterministic": {
"type": "boolean"
}
}
},
"route": {
"const": "/v1/time/rrule"
},
"version": {
"type": "string"
}
}
}
}
}
}
}
}
},
"x402Version": 2
},
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://api.duoleads.com/v1/time/dst",
"tags": [
"no-api-key",
"time",
"timezones",
"dst"
],
"iconUrl": "https://api.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "List the daylight-saving transitions for an IANA time zone over a date range: the exact instant of each shift, the offset before and after, and whether local clocks jump forward or back. Returns the current offset and DST state, and the next transition from a given instant. Zones without DST return an empty transition list rather than an error.",
"serviceName": "Duo Data Utilities"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"from": "2026-01-01",
"zone": "Europe/Amsterdam",
"years": "1"
}
},
"output": {
"type": "json",
"example": {
"ok": true,
"data": {
"next": {
"at": "2026-03-29T01:00:00.000Z",
"direction": "forward",
"local_after": "2026-03-29T03:00:00",
"local_before": "2026-03-29T01:59:59",
"offset_after": "+02:00",
"delta_seconds": 3600,
"offset_before": "+01:00",
"abbreviation_after": "GMT+2",
"abbreviation_before": "GMT+1"
},
"zone": "Europe/Amsterdam",
"current": {
"dst": false,
"offset": "+01:00",
"abbreviation": "GMT+1",
"offset_seconds": 3600
},
"transitions": [
{
"at": "2026-03-29T01:00:00.000Z",
"direction": "forward",
"local_after": "2026-03-29T03:00:00",
"local_before": "2026-03-29T01:59:59",
"offset_after": "+02:00",
"delta_seconds": 3600,
"offset_before": "+01:00",
"abbreviation_after": "GMT+2",
"abbreviation_before": "GMT+1"
},
{
"at": "2026-10-25T01:00:00.000Z",
"direction": "back",
"local_after": "2026-10-25T02:00:00",
"local_before": "2026-10-25T02:59:59",
"offset_after": "+01:00",
"delta_seconds": -3600,
"offset_before": "+02:00",
"abbreviation_after": "GMT+1",
"abbreviation_before": "GMT+2"
}
],
"observes_dst": true
},
"meta": {
"price_usd": "0.05",
"disclaimer": "Factual output of a deterministic computation over public data. Provided as is, with no warranty of accuracy, completeness or availability. Not investment, financial, legal, tax, medical or any other professional advice, and not a recommendation. Verify before relying on it. Terms: https://api.duoleads.com/terms",
"request_id": "01K6B7Q4ZC8H3F2M9WXR5TYN0D",
"computed_at": "2026-09-28T12:00:00.000Z",
"deterministic": true
},
"route": "/v1/time/dst",
"version": "1.0.0"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [
"zone"
],
"properties": {
"from": {
"type": "string",
"maxLength": 64,
"description": "Start of the range: RFC 3339 or YYYY-MM-DD. Default now."
},
"zone": {
"type": "string",
"maxLength": 64,
"description": "IANA time zone id."
},
"years": {
"type": "string",
"default": "2",
"pattern": "^[+-]?\\d+$",
"maxLength": 64,
"description": "Length of the range in years, 1-10. Default 2."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"required": [
"ok",
"route",
"version",
"data",
"meta"
],
"properties": {
"ok": {
"const": true
},
"data": {
"type": "object",
"required": [
"zone",
"observes_dst",
"current",
"next",
"transitions"
],
"properties": {
"next": {
"type": [
"object",
"null"
],
"required": [
"at",
"local_before",
"local_after",
"offset_before",
"offset_after",
"delta_seconds",
"direction",
"abbreviation_before",
"abbreviation_after"
],
"properties": {
"at": {
"type": "string"
},
"direction": {
"type": "string"
},
"local_after": {
"type": "string"
},
"local_before": {
"type": "string"
},
"offset_after": {
"type": "string"
},
"delta_seconds": {
"type": "integer"
},
"offset_before": {
"type": "string"
},
"abbreviation_after": {
"type": "string"
},
"abbreviation_before": {
"type": "string"
}
}
},
"zone": {
"type": "string"
},
"current": {
"type": "object",
"required": [
"offset",
"offset_seconds",
"abbreviation",
"dst"
],
"properties": {
"dst": {
"type": "boolean"
},
"offset": {
"type": "string"
},
"abbreviation": {
"type": "string"
},
"offset_seconds": {
"type": "integer"
}
}
},
"transitions": {
"type": "array",
"items": {
"type": "object",
"required": [
"at",
"local_before",
"local_after",
"offset_before",
"offset_after",
"delta_seconds",
"direction",
"abbreviation_before",
"abbreviation_after"
],
"properties": {
"at": {
"type": "string"
},
"direction": {
"type": "string"
},
"local_after": {
"type": "string"
},
"local_before": {
"type": "string"
},
"offset_after": {
"type": "string"
},
"delta_seconds": {
"type": "integer"
},
"offset_before": {
"type": "string"
},
"abbreviation_after": {
"type": "string"
},
"abbreviation_before": {
"type": "string"
}
}
}
},
"observes_dst": {
"type": "boolean"
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"computed_at",
"price_usd",
"deterministic",
"disclaimer"
],
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"version",
"published"
]
}
},
"price_usd": {
"type": "string"
},
"disclaimer": {
"type": "string"
},
"request_id": {
"type": "string"
},
"computed_at": {
"type": "string",
"description": "RFC 3339 UTC with milliseconds"
},
"deterministic": {
"type": "boolean"
}
}
},
"route": {
"const": "/v1/time/dst"
},
"version": {
"type": "string"
}
}
}
}
}
}
}
}
},
"x402Version": 2
},
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://api.duoleads.com/v1/id/national",
"tags": [
"deterministic",
"no-api-key",
"id",
"identifiers",
"validation"
],
"iconUrl": "https://api.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Validate a national identity, tax or company registration number against its country's official checksum rule. Covers 23 countries including NL BSN, ES NIF/NIE/CIF, IT codice fiscale, FR SIREN/SIRET, DE Steuer-ID, BE/PL/CZ national numbers, SE/NO/DK/FI personal numbers, BR CPF/CNPJ, AU ABN/TFN, UK NINo, IE PPS, US NPI/EIN. Structure and check digit only — no registry lookup; the number itself is never stored (logs keep only its length and character types).",
"serviceName": "Duo Data Utilities"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"kind": "bsn",
"value": "111222333",
"country": "NL"
}
},
"output": {
"type": "json",
"example": {
"ok": true,
"data": {
"kind": "bsn",
"valid": true,
"reason": null,
"country": "NL",
"derived": {},
"algorithm": "elfproef-11",
"formatted": "111.222.333",
"normalised": "111222333"
},
"meta": {
"price_usd": "0.05",
"disclaimer": "Factual output of a deterministic computation over public data. Provided as is, with no warranty of accuracy, completeness or availability. Not investment, financial, legal, tax, medical or any other professional advice, and not a recommendation. Verify before relying on it. Terms: https://api.duoleads.com/terms",
"request_id": "01K6B7Q4ZC8H3F2M9WXR5TYN0D",
"computed_at": "2026-09-28T12:00:00.000Z",
"deterministic": true
},
"route": "/v1/id/national",
"version": "1.0.0"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [
"country",
"kind",
"value"
],
"properties": {
"kind": {
"type": "string",
"maxLength": 32,
"description": "Identifier type for that country, e.g. bsn, nif, cf, cpf."
},
"value": {
"type": "string",
"maxLength": 64,
"description": "The identifier. Separators (space . - /) are stripped before checking."
},
"country": {
"type": "string",
"maxLength": 16,
"description": "ISO 3166-1 alpha-2 country code, case-insensitive. One of the 23 supported countries; the United Kingdom is accepted as UK or GB (the response echoes what you sent)."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"required": [
"ok",
"route",
"version",
"data",
"meta"
],
"properties": {
"ok": {
"const": true
},
"data": {
"type": "object",
"required": [
"valid",
"country",
"kind",
"algorithm",
"normalised",
"formatted",
"reason",
"derived"
],
"properties": {
"kind": {
"type": "string"
},
"valid": {
"type": "boolean"
},
"reason": {
"type": [
"string",
"null"
]
},
"country": {
"type": "string"
},
"derived": {
"type": "object",
"properties": {
"sex": {
"type": "string"
},
"birth_date": {
"type": "string"
},
"birth_month": {
"type": [
"number",
"null"
]
},
"birth_year_yy": {
"type": "string"
},
"birthplace_code": {
"type": "string"
},
"century_assumed": {
"type": "boolean"
},
"department_code": {
"type": "string"
}
}
},
"algorithm": {
"type": "string"
},
"formatted": {
"type": [
"string",
"null"
]
},
"normalised": {
"type": [
"string",
"null"
]
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"computed_at",
"price_usd",
"deterministic",
"disclaimer"
],
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"version",
"published"
]
}
},
"price_usd": {
"type": "string"
},
"disclaimer": {
"type": "string"
},
"request_id": {
"type": "string"
},
"computed_at": {
"type": "string",
"description": "RFC 3339 UTC with milliseconds"
},
"deterministic": {
"type": "boolean"
}
}
},
"route": {
"const": "/v1/id/national"
},
"version": {
"type": "string"
}
}
}
}
}
}
}
}
},
"x402Version": 2
},
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://api.duoleads.com/v1/id/iban",
"tags": [
"deterministic",
"no-api-key",
"id",
"identifiers",
"banking"
],
"iconUrl": "https://api.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Validate an IBAN: length for its country, permitted character classes per field, and the ISO 7064 mod-97-10 check digits. Returns the verdict with a specific failure reason, the electronic and print formats, and the decomposed bank code, branch code and account number according to that country's registered layout. Covers the 89 countries of the SWIFT IBAN registry. Structure and checksum only, it does not confirm the account exists.",
"serviceName": "Duo Data Utilities"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"iban": "NL91 ABNA 0417 1643 00"
}
},
"output": {
"type": "json",
"example": {
"ok": true,
"data": {
"bban": "ABNA0417164300",
"iban": "NL91ABNA0417164300",
"parts": {
"bank": "ABNA",
"branch": null,
"account": "0417164300"
},
"valid": true,
"length": 18,
"reason": null,
"country": "NL",
"algorithm": "mod-97-10",
"iban_print": "NL91 ABNA 0417 1643 00",
"check_digits": "91",
"expected_length": 18
},
"meta": {
"sources": [
{
"id": "iban-registry",
"licence": "MIT",
"version": "ibantools 4.5.4, field layout schwifty 2026.7.3",
"published": "2026-04-10",
"attribution": "IBAN registry via ibantools (MIT); field offsets via schwifty (MIT); underlying data: SWIFT IBAN Registry, public"
}
],
"price_usd": "0.05",
"disclaimer": "Factual output of a deterministic computation over public data. Provided as is, with no warranty of accuracy, completeness or availability. Not investment, financial, legal, tax, medical or any other professional advice, and not a recommendation. Verify before relying on it. Terms: https://api.duoleads.com/terms",
"request_id": "01K6B7Q4ZC8H3F2M9WXR5TYN0D",
"computed_at": "2026-09-28T12:00:00.000Z",
"deterministic": true
},
"route": "/v1/id/iban",
"version": "1.0.0"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [
"iban"
],
"properties": {
"iban": {
"type": "string",
"maxLength": 64,
"description": "The IBAN. Spaces and non-breaking spaces are stripped; lowercase is accepted and uppercased."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"required": [
"ok",
"route",
"version",
"data",
"meta"
],
"properties": {
"ok": {
"const": true
},
"data": {
"type": "object",
"required": [
"valid",
"iban",
"iban_print",
"country",
"check_digits",
"bban",
"parts",
"length",
"expected_length",
"reason",
"algorithm"
],
"properties": {
"bban": {
"type": "string"
},
"iban": {
"type": "string"
},
"parts": {
"type": "object",
"required": [
"bank",
"branch",
"account"
],
"properties": {
"bank": {
"type": [
"string",
"null"
]
},
"branch": {
"type": [
"string",
"null"
]
},
"account": {
"type": [
"string",
"null"
]
}
}
},
"valid": {
"type": "boolean"
},
"length": {
"type": "integer"
},
"reason": {
"type": [
"string",
"null"
]
},
"country": {
"type": "string"
},
"algorithm": {
"type": "string"
},
"iban_print": {
"type": "string"
},
"check_digits": {
"type": "string"
},
"expected_length": {
"type": [
"integer",
"null"
]
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"computed_at",
"price_usd",
"deterministic",
"disclaimer"
],
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"version",
"published"
]
}
},
"price_usd": {
"type": "string"
},
"disclaimer": {
"type": "string"
},
"request_id": {
"type": "string"
},
"computed_at": {
"type": "string",
"description": "RFC 3339 UTC with milliseconds"
},
"deterministic": {
"type": "boolean"
}
}
},
"route": {
"const": "/v1/id/iban"
},
"version": {
"type": "string"
}
}
}
}
}
}
}
}
},
"x402Version": 2
},
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://api.duoleads.com/v1/id/iban-build",
"tags": [
"deterministic",
"no-api-key",
"id",
"identifiers",
"banking"
],
"iconUrl": "https://api.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Construct an IBAN from a country code and the domestic account parts, computing the ISO 7064 mod-97-10 check digits. Takes either a single BBAN string or named parts (bank code, branch code, account number); digit fields are left-padded with zeros to the country's registered widths. Returns the IBAN in electronic and print formats with its bank, branch and account parts. Covers the 89 SWIFT registry countries. Named parts work only where they span the whole BBAN; otherwise pass the BBAN.",
"serviceName": "Duo Data Utilities"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"bank": "ABNA",
"account": "0417164300",
"country": "NL"
}
},
"output": {
"type": "json",
"example": {
"ok": true,
"data": {
"bban": "ABNA0417164300",
"iban": "NL91ABNA0417164300",
"parts": {
"bank": "ABNA",
"branch": null,
"account": "0417164300"
},
"valid": true,
"length": 18,
"country": "NL",
"iban_print": "NL91 ABNA 0417 1643 00",
"check_digits": "91"
},
"meta": {
"sources": [
{
"id": "iban-registry",
"licence": "MIT",
"version": "ibantools 4.5.4, field layout schwifty 2026.7.3",
"published": "2026-04-10",
"attribution": "IBAN registry via ibantools (MIT); field offsets via schwifty (MIT); underlying data: SWIFT IBAN Registry, public"
}
],
"price_usd": "0.05",
"disclaimer": "Factual output of a deterministic computation over public data. Provided as is, with no warranty of accuracy, completeness or availability. Not investment, financial, legal, tax, medical or any other professional advice, and not a recommendation. Verify before relying on it. Terms: https://api.duoleads.com/terms",
"request_id": "01K6B7Q4ZC8H3F2M9WXR5TYN0D",
"computed_at": "2026-09-28T12:00:00.000Z",
"deterministic": true
},
"route": "/v1/id/iban-build",
"version": "1.0.0"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [
"country"
],
"properties": {
"bank": {
"type": "string",
"maxLength": 16,
"description": "Bank code. Requires account."
},
"bban": {
"type": "string",
"maxLength": 34,
"description": "The whole domestic account number (BBAN), alphanumeric. Use this or bank plus account."
},
"branch": {
"type": "string",
"maxLength": 16,
"description": "Branch code, for countries whose layout has a branch field."
},
"account": {
"type": "string",
"maxLength": 32,
"description": "Account number. Requires bank."
},
"country": {
"type": "string",
"maxLength": 16,
"description": "ISO 3166-1 alpha-2 country code in the SWIFT IBAN registry, case-insensitive."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"required": [
"ok",
"route",
"version",
"data",
"meta"
],
"properties": {
"ok": {
"const": true
},
"data": {
"type": "object",
"required": [
"iban",
"iban_print",
"country",
"check_digits",
"bban",
"parts",
"length",
"valid"
],
"properties": {
"bban": {
"type": "string"
},
"iban": {
"type": "string"
},
"parts": {
"type": "object",
"required": [
"bank",
"branch",
"account"
],
"properties": {
"bank": {
"type": [
"string",
"null"
]
},
"branch": {
"type": [
"string",
"null"
]
},
"account": {
"type": [
"string",
"null"
]
}
}
},
"valid": {
"type": "boolean"
},
"length": {
"type": "integer"
},
"country": {
"type": "string"
},
"iban_print": {
"type": "string"
},
"check_digits": {
"type": "string"
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"computed_at",
"price_usd",
"deterministic",
"disclaimer"
],
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"version",
"published"
]
}
},
"price_usd": {
"type": "string"
},
"disclaimer": {
"type": "string"
},
"request_id": {
"type": "string"
},
"computed_at": {
"type": "string",
"description": "RFC 3339 UTC with milliseconds"
},
"deterministic": {
"type": "boolean"
}
}
},
"route": {
"const": "/v1/id/iban-build"
},
"version": {
"type": "string"
}
}
}
}
}
}
}
}
},
"x402Version": 2
},
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://api.duoleads.com/v1/id/gs1",
"tags": [
"deterministic",
"no-api-key",
"id",
"identifiers",
"validation"
],
"iconUrl": "https://api.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Validate and convert GS1 identifiers: GTIN-8, GTIN-12 (UPC-A), GTIN-13 (EAN-13), GTIN-14, GLN and SSCC. Returns the check-digit verdict, the computed correct check digit, the GTIN-14 form with its indicator digit, and conversion between GTIN-8, GTIN-12, GTIN-13 and GTIN-14. No company-prefix split is returned: GS1's prefix-length table is no longer public data. Also computes a missing check digit from a partial code. Structure only, no product database.",
"serviceName": "Duo Data Utilities"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"value": "5901234123457"
}
},
"output": {
"type": "json",
"example": {
"ok": true,
"data": {
"type": "gtin13",
"valid": true,
"gtin14": "05901234123457",
"reason": null,
"indicator": "0",
"normalised": "5901234123457",
"check_digit": "7",
"also_valid_as": [
"gln"
],
"check_digit_ok": true
},
"meta": {
"price_usd": "0.05",
"disclaimer": "Factual output of a deterministic computation over public data. Provided as is, with no warranty of accuracy, completeness or availability. Not investment, financial, legal, tax, medical or any other professional advice, and not a recommendation. Verify before relying on it. Terms: https://api.duoleads.com/terms",
"request_id": "01K6B7Q4ZC8H3F2M9WXR5TYN0D",
"computed_at": "2026-09-28T12:00:00.000Z",
"deterministic": true
},
"route": "/v1/id/gs1",
"version": "1.0.0"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [
"value"
],
"properties": {
"op": {
"enum": [
"validate",
"checkdigit",
"convert"
],
"type": "string",
"default": "validate",
"maxLength": 64,
"description": "validate (default), checkdigit (compute the missing final digit) or convert."
},
"to": {
"enum": [
"gtin8",
"gtin12",
"gtin13",
"gtin14"
],
"type": "string",
"maxLength": 64,
"description": "Target format. Required when op=convert."
},
"value": {
"type": "string",
"maxLength": 32,
"description": "GS1 code, digits with optional spaces or hyphens. For op=checkdigit, omit the final digit."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"required": [
"ok",
"route",
"version",
"data",
"meta"
],
"properties": {
"ok": {
"const": true
},
"data": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"valid": {
"type": "boolean"
},
"gtin14": {
"type": [
"string",
"null"
]
},
"reason": {
"type": [
"string",
"null"
]
},
"converted": {
"type": [
"string",
"null"
]
},
"indicator": {
"type": [
"string",
"null"
]
},
"normalised": {
"type": "string"
},
"check_digit": {
"type": [
"string",
"null"
]
},
"also_valid_as": {
"type": "array",
"items": {
"type": "string"
}
},
"check_digit_ok": {
"type": "boolean"
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"computed_at",
"price_usd",
"deterministic",
"disclaimer"
],
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"version",
"published"
]
}
},
"price_usd": {
"type": "string"
},
"disclaimer": {
"type": "string"
},
"request_id": {
"type": "string"
},
"computed_at": {
"type": "string",
"description": "RFC 3339 UTC with milliseconds"
},
"deterministic": {
"type": "boolean"
}
}
},
"route": {
"const": "/v1/id/gs1"
},
"version": {
"type": "string"
}
}
}
}
}
}
}
}
},
"x402Version": 2
},
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://api.duoleads.com/v1/id/security",
"tags": [
"deterministic",
"no-api-key",
"id",
"identifiers",
"validation"
],
"iconUrl": "https://api.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Validate the check digit of a financial security identifier: ISIN (ISO 6166), CUSIP, SEDOL and FIGI. Returns the verdict, the computed correct check character, and for an ISIN the issuing country prefix and the embedded NSIN. Also builds an ISIN from a country code plus a 9-character NSIN. Format and checksum only, no security master lookup.",
"serviceName": "Duo Data Utilities"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"value": "US0378331005"
}
},
"output": {
"type": "json",
"example": {
"ok": true,
"data": {
"nsin": "037833100",
"type": "isin",
"valid": true,
"reason": null,
"country": "US",
"algorithm": "luhn-mod10-alpha",
"check_char": "5",
"normalised": "US0378331005",
"check_char_ok": true
},
"meta": {
"price_usd": "0.05",
"disclaimer": "Factual output of a deterministic computation over public data. Provided as is, with no warranty of accuracy, completeness or availability. Not investment, financial, legal, tax, medical or any other professional advice, and not a recommendation. Verify before relying on it. Terms: https://api.duoleads.com/terms",
"request_id": "01K6B7Q4ZC8H3F2M9WXR5TYN0D",
"computed_at": "2026-09-28T12:00:00.000Z",
"deterministic": true
},
"route": "/v1/id/security",
"version": "1.0.0"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [],
"properties": {
"op": {
"enum": [
"validate",
"build-isin"
],
"type": "string",
"default": "validate",
"maxLength": 64,
"description": "validate (default) or build-isin."
},
"nsin": {
"type": "string",
"maxLength": 64,
"description": "Exactly 9 alphanumeric characters. Required when op=build-isin."
},
"value": {
"type": "string",
"maxLength": 24,
"description": "ISIN, CUSIP, SEDOL or FIGI to validate. Required when op=validate."
},
"country": {
"type": "string",
"maxLength": 16,
"description": "ISO 3166-1 alpha-2 code or XS. Required when op=build-isin."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"required": [
"ok",
"route",
"version",
"data",
"meta"
],
"properties": {
"ok": {
"const": true
},
"data": {
"type": "object",
"properties": {
"isin": {
"type": "string"
},
"nsin": {
"type": [
"string",
"null"
]
},
"type": {
"type": "string"
},
"valid": {
"type": "boolean"
},
"reason": {
"type": [
"string",
"null"
]
},
"country": {
"type": [
"string",
"null"
]
},
"algorithm": {
"type": [
"string",
"null"
]
},
"check_char": {
"type": [
"string",
"null"
]
},
"normalised": {
"type": "string"
},
"check_char_ok": {
"type": "boolean"
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"computed_at",
"price_usd",
"deterministic",
"disclaimer"
],
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"version",
"published"
]
}
},
"price_usd": {
"type": "string"
},
"disclaimer": {
"type": "string"
},
"request_id": {
"type": "string"
},
"computed_at": {
"type": "string",
"description": "RFC 3339 UTC with milliseconds"
},
"deterministic": {
"type": "boolean"
}
}
},
"route": {
"const": "/v1/id/security"
},
"version": {
"type": "string"
}
}
}
}
}
}
}
}
},
"x402Version": 2
},
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://api.duoleads.com/v1/time/zone",
"tags": [
"no-api-key",
"time",
"timezones"
],
"iconUrl": "https://api.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Convert an instant to wall-clock time in a named IANA time zone, or a wall-clock time in a zone back to an instant. Returns the local date and time, the UTC offset in ±HH:MM and seconds, the zone abbreviation, whether DST is in effect, the ISO week date, and the day of year. Handles the ambiguous and skipped local times at DST boundaries explicitly rather than guessing.",
"serviceName": "Duo Data Utilities"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"zone": "Europe/Amsterdam",
"instant": "2026-10-25T00:30:00Z"
}
},
"output": {
"type": "json",
"example": {
"ok": true,
"data": {
"dst": true,
"gap": false,
"zone": "Europe/Amsterdam",
"local": "2026-10-25T02:30:00",
"offset": "+02:00",
"instant": "2026-10-25T00:30:00.000Z",
"weekday": "sunday",
"epoch_ms": 1792888200000,
"iso_week": {
"week": 43,
"year": 2026,
"weekday": 7
},
"ambiguity": null,
"resolution": null,
"day_of_year": 298,
"abbreviation": "GMT+2",
"offset_seconds": 7200
},
"meta": {
"price_usd": "0.05",
"disclaimer": "Factual output of a deterministic computation over public data. Provided as is, with no warranty of accuracy, completeness or availability. Not investment, financial, legal, tax, medical or any other professional advice, and not a recommendation. Verify before relying on it. Terms: https://api.duoleads.com/terms",
"request_id": "01K6B7Q4ZC8H3F2M9WXR5TYN0D",
"computed_at": "2026-09-28T12:00:00.000Z",
"deterministic": true
},
"route": "/v1/time/zone",
"version": "1.0.0"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [
"zone"
],
"properties": {
"zone": {
"type": "string",
"maxLength": 64,
"description": "IANA time zone id, e.g. Europe/Amsterdam."
},
"local": {
"type": "string",
"maxLength": 64,
"description": "Wall-clock time YYYY-MM-DDTHH:MM[:SS] in zone, converted back to an instant. Mutually exclusive with instant."
},
"instant": {
"type": "string",
"maxLength": 64,
"description": "RFC 3339 timestamp or integer Unix seconds/milliseconds. Defaults to now. Mutually exclusive with local."
},
"ambiguous": {
"enum": [
"earlier",
"later",
"reject"
],
"type": "string",
"maxLength": 64,
"description": "Only with local: which instant a repeated local time maps to. Default earlier."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"required": [
"ok",
"route",
"version",
"data",
"meta"
],
"properties": {
"ok": {
"const": true
},
"data": {
"type": "object",
"required": [
"zone",
"instant",
"epoch_ms",
"local",
"offset",
"offset_seconds",
"abbreviation",
"dst",
"weekday",
"iso_week",
"day_of_year",
"ambiguity",
"resolution"
],
"properties": {
"dst": {
"type": "boolean"
},
"gap": {
"type": "boolean"
},
"zone": {
"type": "string"
},
"local": {
"type": "string"
},
"offset": {
"type": "string"
},
"instant": {
"type": "string"
},
"weekday": {
"type": "string"
},
"epoch_ms": {
"type": "integer"
},
"iso_week": {
"type": "object",
"required": [
"year",
"week",
"weekday"
],
"properties": {
"week": {
"type": "integer"
},
"year": {
"type": "integer"
},
"weekday": {
"type": "integer"
}
}
},
"ambiguity": {
"type": [
"string",
"null"
]
},
"resolution": {
"type": [
"string",
"null"
]
},
"day_of_year": {
"type": "integer"
},
"abbreviation": {
"type": "string"
},
"offset_seconds": {
"type": "integer"
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"computed_at",
"price_usd",
"deterministic",
"disclaimer"
],
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"version",
"published"
]
}
},
"price_usd": {
"type": "string"
},
"disclaimer": {
"type": "string"
},
"request_id": {
"type": "string"
},
"computed_at": {
"type": "string",
"description": "RFC 3339 UTC with milliseconds"
},
"deterministic": {
"type": "boolean"
}
}
},
"route": {
"const": "/v1/time/zone"
},
"version": {
"type": "string"
}
}
}
}
}
}
}
}
},
"x402Version": 2
},
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://api.duoleads.com/v1/time/business-days",
"tags": [
"deterministic",
"no-api-key",
"time",
"calendar",
"business-days"
],
"iconUrl": "https://api.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Business-day arithmetic with a caller-supplied calendar: add or subtract N working days from a date, or count the working days between two dates. The weekend is a weekday mask (Friday-Saturday and Sunday-only weeks work) and holidays are an explicit date list, so nothing depends on a stale holiday table. Returns the result date, the day count and the skipped dates with reasons. The skipped list is capped at 1,000 entries (skipped_truncated flags it); skipped_total is always exact.",
"serviceName": "Duo Data Utilities"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"days": "5",
"from": "2026-12-24",
"holidays": "2026-12-25,2026-12-26,2027-01-01"
}
},
"output": {
"type": "json",
"example": {
"ok": true,
"data": {
"days": 5,
"from": "2026-12-24",
"result": "2027-01-04",
"skipped": [
{
"date": "2026-12-25",
"reason": "holiday",
"weekday": "friday"
},
{
"date": "2026-12-26",
"reason": "weekend",
"weekday": "saturday"
},
{
"date": "2026-12-27",
"reason": "weekend",
"weekday": "sunday"
},
{
"date": "2027-01-01",
"reason": "holiday",
"weekday": "friday"
},
{
"date": "2027-01-02",
"reason": "weekend",
"weekday": "saturday"
},
{
"date": "2027-01-03",
"reason": "weekend",
"weekday": "sunday"
}
],
"skipped_total": 6,
"skipped_truncated": false,
"calendar_days_spanned": 11
},
"meta": {
"price_usd": "0.05",
"disclaimer": "Factual output of a deterministic computation over public data. Provided as is, with no warranty of accuracy, completeness or availability. Not investment, financial, legal, tax, medical or any other professional advice, and not a recommendation. Verify before relying on it. Terms: https://api.duoleads.com/terms",
"request_id": "01K6B7Q4ZC8H3F2M9WXR5TYN0D",
"computed_at": "2026-09-28T12:00:00.000Z",
"deterministic": true
},
"route": "/v1/time/business-days",
"version": "1.0.0"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [
"from"
],
"properties": {
"op": {
"enum": [
"add",
"count"
],
"type": "string",
"default": "add",
"maxLength": 64,
"description": "add (default) N business days to from, or count business days between from and to."
},
"to": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"maxLength": 32,
"description": "End date YYYY-MM-DD, may precede from. Required when op=count."
},
"days": {
"type": "string",
"pattern": "^[+-]?\\d+$",
"maxLength": 64,
"description": "Business days to add, -3650 to 3650. Required when op=add."
},
"from": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"maxLength": 32,
"description": "Start date, YYYY-MM-DD."
},
"weekend": {
"type": "string",
"default": "sat,sun",
"maxLength": 64,
"description": "Comma-separated weekday names or ISO numbers. Default sat,sun. Empty string = no weekend."
},
"holidays": {
"type": "string",
"maxLength": 2048,
"description": "Comma-separated YYYY-MM-DD holiday dates."
},
"inclusive": {
"enum": [
"start",
"both",
"neither"
],
"type": "string",
"default": "start",
"maxLength": 64,
"description": "For op=count: start (default, half-open [from, to)), both or neither."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"required": [
"ok",
"route",
"version",
"data",
"meta"
],
"properties": {
"ok": {
"const": true
},
"data": {
"type": "object",
"properties": {
"days": {
"type": "integer"
},
"from": {
"type": "string"
},
"result": {
"type": "string"
},
"skipped": {
"type": "array",
"items": {
"type": "object",
"required": [
"date",
"reason",
"weekday"
],
"properties": {
"date": {
"type": "string"
},
"reason": {
"type": "string"
},
"weekday": {
"type": "string"
}
}
}
},
"direction": {
"type": "string"
},
"holiday_days": {
"type": "integer"
},
"weekend_days": {
"type": "integer"
},
"business_days": {
"type": "integer"
},
"calendar_days": {
"type": "integer"
},
"skipped_total": {
"type": "integer"
},
"holidays_matched": {
"type": "array",
"items": {
"type": "string"
}
},
"skipped_truncated": {
"type": "boolean"
},
"calendar_days_spanned": {
"type": "integer"
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"computed_at",
"price_usd",
"deterministic",
"disclaimer"
],
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"version",
"published"
]
}
},
"price_usd": {
"type": "string"
},
"disclaimer": {
"type": "string"
},
"request_id": {
"type": "string"
},
"computed_at": {
"type": "string",
"description": "RFC 3339 UTC with milliseconds"
},
"deterministic": {
"type": "boolean"
}
}
},
"route": {
"const": "/v1/time/business-days"
},
"version": {
"type": "string"
}
}
}
}
}
}
}
}
},
"x402Version": 2
},
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://api.duoleads.com/v1/text/slug",
"tags": [
"deterministic",
"no-api-key",
"text",
"unicode",
"slug"
],
"iconUrl": "https://api.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Turn arbitrary text into a URL-safe slug. Decomposes accents, transliterates German umlauts, Scandinavian and Turkish letters, the ligatures that lose meaning under plain NFD, and Cyrillic (Russian, Ukrainian, Belarusian, Bulgarian, Serbian, Macedonian; language from lang or inferred from the letters). Lowercases, collapses separators, truncates on a word boundary. Returns the slug plus what was removed.",
"serviceName": "Duo Data Utilities"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"lang": "de",
"text": "Crème Brûlée — Ærøskøbing, Straße 42"
}
},
"output": {
"type": "json",
"example": {
"ok": true,
"data": {
"slug": "creme-brulee-aeroeskoebing-strasse-42",
"length": 37,
"removed": "—,",
"truncated": false,
"source_length": 36,
"transliterated": [
{
"to": "ae",
"from": "Æ"
},
{
"to": "oe",
"from": "ø"
},
{
"to": "ss",
"from": "ß"
}
]
},
"meta": {
"price_usd": "0.05",
"disclaimer": "Factual output of a deterministic computation over public data. Provided as is, with no warranty of accuracy, completeness or availability. Not investment, financial, legal, tax, medical or any other professional advice, and not a recommendation. Verify before relying on it. Terms: https://api.duoleads.com/terms",
"request_id": "01K6B7Q4ZC8H3F2M9WXR5TYN0D",
"computed_at": "2026-09-28T12:00:00.000Z",
"deterministic": true
},
"route": "/v1/text/slug",
"version": "1.0.0"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [
"text"
],
"properties": {
"max": {
"type": "string",
"default": "96",
"pattern": "^[+-]?\\d+$",
"maxLength": 64,
"description": "Maximum slug length 1-512, default 96. Truncates at the last complete word."
},
"case": {
"enum": [
"lower",
"preserve",
"upper"
],
"type": "string",
"default": "lower",
"maxLength": 64,
"description": "lower (default), preserve or upper."
},
"lang": {
"type": "string",
"maxLength": 16,
"description": "ISO 639-1 code for locale-sensitive folding (de: ü->ue) and the Cyrillic table (ru, uk, be, bg, sr, mk). Default locale-neutral; for Cyrillic the language is then inferred from letters unique to Ukrainian, Belarusian, Serbian or Macedonian, else Russian BGN/PCGN letters with ISO 9 (accents folded) for the rest."
},
"text": {
"type": "string",
"maxLength": 2048,
"description": "Text to slugify, at most 2048 characters."
},
"separator": {
"enum": [
"-",
"_",
".",
""
],
"type": "string",
"default": "-",
"maxLength": 64,
"description": "Separator: - (default), _, . or empty."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"required": [
"ok",
"route",
"version",
"data",
"meta"
],
"properties": {
"ok": {
"const": true
},
"data": {
"type": "object",
"required": [
"slug",
"length",
"truncated",
"source_length",
"transliterated",
"removed"
],
"properties": {
"slug": {
"type": "string"
},
"length": {
"type": "integer"
},
"removed": {
"type": "string"
},
"truncated": {
"type": "boolean"
},
"source_length": {
"type": "integer"
},
"transliterated": {
"type": "array",
"items": {
"type": "object",
"required": [
"from",
"to"
],
"properties": {
"to": {
"type": "string"
},
"from": {
"type": "string"
}
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"computed_at",
"price_usd",
"deterministic",
"disclaimer"
],
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"version",
"published"
]
}
},
"price_usd": {
"type": "string"
},
"disclaimer": {
"type": "string"
},
"request_id": {
"type": "string"
},
"computed_at": {
"type": "string",
"description": "RFC 3339 UTC with milliseconds"
},
"deterministic": {
"type": "boolean"
}
}
},
"route": {
"const": "/v1/text/slug"
},
"version": {
"type": "string"
}
}
}
}
}
}
}
}
},
"x402Version": 2
},
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://api.duoleads.com/v1/text/transliterate",
"tags": [
"deterministic",
"no-api-key",
"text",
"unicode",
"transliteration"
],
"iconUrl": "https://api.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Transliterate Cyrillic text into Latin using a named standard: ISO 9:1995 (one-to-one, with diacritics, covering the full standard: Russian, other Slavic, historic and non-Slavic Cyrillic letters) or BGN/PCGN, which is the Russian system only (Ukrainian, Serbian and other letters are passed through unmapped). Returns the transliteration, the source script, the standard, the mapped fraction and the unmapped characters. Other scripts are rejected with UNSUPPORTED_VALUE.",
"serviceName": "Duo Data Utilities"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"text": "Щука",
"standard": "iso-9"
}
},
"output": {
"type": "json",
"example": {
"ok": true,
"data": {
"result": "Ŝuka",
"coverage": 1,
"standard": "iso-9",
"unmapped": "",
"source_script": "Cyrillic"
},
"meta": {
"sources": [
{
"id": "romanisation-tables",
"licence": "character correspondences (facts); see sources/translit.md",
"version": "ISO 9:1995 (full Cyrillic repertoire) and BGN/PCGN Russian system",
"published": "2026-09-29"
}
],
"price_usd": "0.05",
"disclaimer": "Factual output of a deterministic computation over public data. Provided as is, with no warranty of accuracy, completeness or availability. Not investment, financial, legal, tax, medical or any other professional advice, and not a recommendation. Verify before relying on it. Terms: https://api.duoleads.com/terms",
"request_id": "01K6B7Q4ZC8H3F2M9WXR5TYN0D",
"computed_at": "2026-09-28T12:00:00.000Z",
"deterministic": true
},
"route": "/v1/text/transliterate",
"version": "1.0.0"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [
"text"
],
"properties": {
"case": {
"enum": [
"preserve",
"lower",
"upper"
],
"type": "string",
"default": "preserve",
"maxLength": 64,
"description": "preserve (default), lower or upper."
},
"from": {
"type": "string",
"default": "auto",
"maxLength": 32,
"description": "Source script name (cyrillic), or auto (default)."
},
"text": {
"type": "string",
"maxLength": 2048,
"description": "Text to transliterate, at most 2048 characters."
},
"standard": {
"type": "string",
"maxLength": 32,
"description": "Romanisation standard: iso-9 (default; all ISO 9:1995 Cyrillic letters) or bgn-pcgn (BGN/PCGN Russian system, Russian letters only)."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"required": [
"ok",
"route",
"version",
"data",
"meta"
],
"properties": {
"ok": {
"const": true
},
"data": {
"type": "object",
"required": [
"result",
"source_script",
"standard",
"coverage",
"unmapped"
],
"properties": {
"result": {
"type": "string"
},
"coverage": {
"type": "number"
},
"standard": {
"type": "string"
},
"unmapped": {
"type": "string"
},
"source_script": {
"type": "string"
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"computed_at",
"price_usd",
"deterministic",
"disclaimer"
],
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"version",
"published"
]
}
},
"price_usd": {
"type": "string"
},
"disclaimer": {
"type": "string"
},
"request_id": {
"type": "string"
},
"computed_at": {
"type": "string",
"description": "RFC 3339 UTC with milliseconds"
},
"deterministic": {
"type": "boolean"
}
}
},
"route": {
"const": "/v1/text/transliterate"
},
"version": {
"type": "string"
}
}
}
}
}
}
}
}
},
"x402Version": 2
},
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://api.duoleads.com/v1/text/unicode",
"tags": [
"deterministic",
"no-api-key",
"text",
"unicode",
"security"
],
"iconUrl": "https://api.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Analyse a string at the Unicode level: apply NFC, NFD, NFKC or NFKD, report which forms it is already in, list the scripts present (all Unicode scripts), and flag confusable and homoglyph characters — Cyrillic а in a Latin word, fullwidth or mathematical look-alikes, all-look-alike words — plus zero-width joiners, bidirectional overrides, invisible and blank characters. Returns per-character detail with code points, names and the ASCII character each imitates.",
"serviceName": "Duo Data Utilities"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"form": "nfd",
"text": "café"
}
},
"output": {
"type": "json",
"example": {
"ok": true,
"data": {
"form": "nfd",
"lengths": {
"graphemes": 4,
"utf8_bytes": 6,
"code_points": 5,
"utf16_units": 5
},
"scripts": [
"Latin"
],
"ascii_safe": false,
"normalised": "café",
"suspicious": [],
"mixed_script": false,
"already_normalised": {
"nfc": true,
"nfd": false,
"nfkc": true,
"nfkd": false
}
},
"meta": {
"sources": [
{
"id": "unicode-confusables",
"licence": "Unicode License v3",
"version": "18.0.0",
"published": "2026-08-06",
"attribution": "Unicode confusables.txt (UTS #39), (c) Unicode, Inc."
}
],
"price_usd": "0.05",
"disclaimer": "Factual output of a deterministic computation over public data. Provided as is, with no warranty of accuracy, completeness or availability. Not investment, financial, legal, tax, medical or any other professional advice, and not a recommendation. Verify before relying on it. Terms: https://api.duoleads.com/terms",
"request_id": "01K6B7Q4ZC8H3F2M9WXR5TYN0D",
"computed_at": "2026-09-28T12:00:00.000Z",
"deterministic": true
},
"route": "/v1/text/unicode",
"version": "1.0.0"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [
"text"
],
"properties": {
"form": {
"enum": [
"nfc",
"nfd",
"nfkc",
"nfkd"
],
"type": "string",
"default": "nfc",
"maxLength": 64,
"description": "Normalisation form to apply, default nfc."
},
"text": {
"type": "string",
"maxLength": 1024,
"description": "Text to analyse, at most 1024 characters."
},
"detail": {
"enum": [
"summary",
"full"
],
"type": "string",
"default": "summary",
"maxLength": 64,
"description": "summary (default) or full per-code-point detail (capped at 256 entries)."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"required": [
"ok",
"route",
"version",
"data",
"meta"
],
"properties": {
"ok": {
"const": true
},
"data": {
"type": "object",
"required": [
"normalised",
"form",
"already_normalised",
"lengths",
"scripts",
"mixed_script",
"suspicious",
"ascii_safe"
],
"properties": {
"form": {
"type": "string"
},
"lengths": {
"type": "object",
"required": [
"code_points",
"graphemes",
"utf8_bytes",
"utf16_units"
],
"properties": {
"graphemes": {
"type": "integer"
},
"utf8_bytes": {
"type": "integer"
},
"code_points": {
"type": "integer"
},
"utf16_units": {
"type": "integer"
}
}
},
"scripts": {
"type": "array",
"items": {
"type": "string"
}
},
"ascii_safe": {
"type": "boolean"
},
"characters": {
"type": "array",
"items": {
"type": "object",
"required": [
"index",
"char",
"code_point",
"name",
"category",
"script"
],
"properties": {
"char": {
"type": "string"
},
"name": {
"type": [
"string",
"null"
]
},
"index": {
"type": "integer"
},
"script": {
"type": [
"string",
"null"
]
},
"category": {
"type": "string"
},
"code_point": {
"type": "string"
}
}
}
},
"normalised": {
"type": "string"
},
"suspicious": {
"type": "array",
"items": {
"type": "object",
"required": [
"index",
"char",
"code_point",
"name",
"category",
"kind",
"looks_like"
],
"properties": {
"char": {
"type": "string"
},
"kind": {
"type": "string"
},
"name": {
"type": [
"string",
"null"
]
},
"index": {
"type": "integer"
},
"category": {
"type": "string"
},
"code_point": {
"type": "string"
},
"looks_like": {
"type": [
"string",
"null"
]
}
}
}
},
"mixed_script": {
"type": "boolean"
},
"already_normalised": {
"type": "object",
"required": [
"nfc",
"nfd",
"nfkc",
"nfkd"
],
"properties": {
"nfc": {
"type": "boolean"
},
"nfd": {
"type": "boolean"
},
"nfkc": {
"type": "boolean"
},
"nfkd": {
"type": "boolean"
}
}
},
"characters_truncated": {
"type": "boolean"
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"computed_at",
"price_usd",
"deterministic",
"disclaimer"
],
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"version",
"published"
]
}
},
"price_usd": {
"type": "string"
},
"disclaimer": {
"type": "string"
},
"request_id": {
"type": "string"
},
"computed_at": {
"type": "string",
"description": "RFC 3339 UTC with milliseconds"
},
"deterministic": {
"type": "boolean"
}
}
},
"route": {
"const": "/v1/text/unicode"
},
"version": {
"type": "string"
}
}
}
}
}
}
}
}
},
"x402Version": 2
},
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://api.duoleads.com/v1/text/similarity",
"tags": [
"deterministic",
"no-api-key",
"text",
"similarity",
"phonetic"
],
"iconUrl": "https://api.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Compare two strings and return every standard similarity measure in one call: Levenshtein and Damerau-Levenshtein edit distance, normalised similarity, Jaro and Jaro-Winkler, longest common subsequence, Dice coefficient on character bigrams, and the Soundex, Metaphone and NYSIIS phonetic keys of each string. Optional case folding, accent folding and whitespace normalisation before comparison.",
"serviceName": "Duo Data Utilities"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"a": "kitten",
"b": "sitting"
}
},
"output": {
"type": "json",
"example": {
"ok": true,
"data": {
"dice": 0.36363636363636365,
"jaro": 0.746031746031746,
"folded": {
"a": "kitten",
"b": "sitting"
},
"phonetic": {
"a": {
"nysiis": "CATAN",
"soundex": "K350",
"metaphone": "KTN"
},
"b": {
"nysiis": "SATANG",
"soundex": "S352",
"metaphone": "STNK"
}
},
"lcs_length": 4,
"levenshtein": 3,
"jaro_winkler": 0.746031746031746,
"equal_after_fold": false,
"damerau_levenshtein": 3,
"normalised_similarity": 0.5714285714285714
},
"meta": {
"price_usd": "0.05",
"disclaimer": "Factual output of a deterministic computation over public data. Provided as is, with no warranty of accuracy, completeness or availability. Not investment, financial, legal, tax, medical or any other professional advice, and not a recommendation. Verify before relying on it. Terms: https://api.duoleads.com/terms",
"request_id": "01K6B7Q4ZC8H3F2M9WXR5TYN0D",
"computed_at": "2026-09-28T12:00:00.000Z",
"deterministic": true
},
"route": "/v1/text/similarity",
"version": "1.0.0"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [
"a",
"b"
],
"properties": {
"a": {
"type": "string",
"maxLength": 512,
"description": "First string, at most 512 characters."
},
"b": {
"type": "string",
"maxLength": 512,
"description": "Second string, at most 512 characters."
},
"fold": {
"type": "string",
"default": "case",
"maxLength": 64,
"description": "Comma-separated folds before comparing: case, accents, space, punct. Default case."
},
"only": {
"type": "string",
"maxLength": 256,
"description": "Comma-separated measure names to compute: levenshtein, damerau_levenshtein, normalised_similarity, jaro, jaro_winkler, lcs_length, dice, phonetic (all three keys), soundex, metaphone, nysiis. Default all."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"required": [
"ok",
"route",
"version",
"data",
"meta"
],
"properties": {
"ok": {
"const": true
},
"data": {
"type": "object",
"required": [
"equal_after_fold",
"folded"
],
"properties": {
"dice": {
"type": "number"
},
"jaro": {
"type": "number"
},
"folded": {
"type": "object",
"required": [
"a",
"b"
],
"properties": {
"a": {
"type": "string"
},
"b": {
"type": "string"
}
}
},
"phonetic": {
"type": "object",
"required": [
"a",
"b"
],
"properties": {
"a": {
"type": "object",
"properties": {
"nysiis": {
"type": "string"
},
"soundex": {
"type": "string"
},
"metaphone": {
"type": "string"
}
}
},
"b": {
"type": "object",
"properties": {
"nysiis": {
"type": "string"
},
"soundex": {
"type": "string"
},
"metaphone": {
"type": "string"
}
}
}
}
},
"lcs_length": {
"type": "integer"
},
"levenshtein": {
"type": "number"
},
"jaro_winkler": {
"type": "number"
},
"equal_after_fold": {
"type": "boolean"
},
"damerau_levenshtein": {
"type": "number"
},
"normalised_similarity": {
"type": "number"
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"computed_at",
"price_usd",
"deterministic",
"disclaimer"
],
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"version",
"published"
]
}
},
"price_usd": {
"type": "string"
},
"disclaimer": {
"type": "string"
},
"request_id": {
"type": "string"
},
"computed_at": {
"type": "string",
"description": "RFC 3339 UTC with milliseconds"
},
"deterministic": {
"type": "boolean"
}
}
},
"route": {
"const": "/v1/text/similarity"
},
"version": {
"type": "string"
}
}
}
}
}
}
}
}
},
"x402Version": 2
},
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://api.duoleads.com/v1/code/url",
"tags": [
"deterministic",
"no-api-key",
"code",
"url",
"domains"
],
"iconUrl": "https://api.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Parse and canonicalise a URL, and extract its registrable domain using the Public Suffix List — the part an agent needs to decide whether two URLs belong to the same owner. Returns scheme, host, port, path, decoded query parameters and fragment, the public suffix, the registrable domain (eTLD+1), the subdomain, whether the suffix is an ICANN or a private entry, plus a canonical form with default port, dot-segments and percent-encoding normalised. unicode_host uses WHATWG/UTS 46 (non-strict).",
"serviceName": "Duo Data Utilities"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"url": "https://a.b.example.co.uk:443/x/../y?q=1&q=2#f"
}
},
"output": {
"type": "json",
"example": {
"ok": true,
"data": {
"host": "a.b.example.co.uk",
"path": "/y",
"port": null,
"query": [
{
"key": "q",
"value": "1"
},
{
"key": "q",
"value": "2"
}
],
"scheme": "https",
"fragment": "f",
"username": null,
"canonical": "https://a.b.example.co.uk/y?q=1&q=2#f",
"host_type": "domain",
"subdomain": "a.b",
"unicode_host": null,
"public_suffix": "co.uk",
"suffix_source": "icann",
"registrable_domain": "example.co.uk"
},
"meta": {
"sources": [
{
"id": "public-suffix-list",
"licence": "MPL-2.0",
"version": "a179a48c465e818cfd8d626691cb317985da87fb",
"published": "2026-09-24"
}
],
"price_usd": "0.05",
"disclaimer": "Factual output of a deterministic computation over public data. Provided as is, with no warranty of accuracy, completeness or availability. Not investment, financial, legal, tax, medical or any other professional advice, and not a recommendation. Verify before relying on it. Terms: https://api.duoleads.com/terms",
"request_id": "01K6B7Q4ZC8H3F2M9WXR5TYN0D",
"computed_at": "2026-09-28T12:00:00.000Z",
"deterministic": true
},
"route": "/v1/code/url",
"version": "1.0.0"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"maxLength": 2048,
"description": "Absolute URL, or a bare hostname (https:// assumed)."
},
"base": {
"type": "string",
"maxLength": 2048,
"description": "Base URL to resolve url against as a relative reference."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"required": [
"ok",
"route",
"version",
"data",
"meta"
],
"properties": {
"ok": {
"const": true
},
"data": {
"type": "object",
"required": [
"canonical",
"scheme",
"username",
"host",
"port",
"path",
"fragment",
"query",
"public_suffix",
"registrable_domain",
"subdomain",
"suffix_source",
"host_type",
"unicode_host"
],
"properties": {
"host": {
"type": [
"string",
"null"
]
},
"path": {
"type": "string"
},
"port": {
"type": [
"string",
"null"
]
},
"query": {
"type": "array",
"items": {
"type": "object",
"required": [
"key",
"value"
],
"properties": {
"key": {
"type": "string"
},
"value": {
"type": "string"
}
}
}
},
"scheme": {
"type": "string"
},
"fragment": {
"type": [
"string",
"null"
]
},
"username": {
"type": [
"string",
"null"
]
},
"canonical": {
"type": "string"
},
"host_type": {
"type": [
"string",
"null"
]
},
"subdomain": {
"type": [
"string",
"null"
]
},
"unicode_host": {
"type": [
"string",
"null"
]
},
"public_suffix": {
"type": [
"string",
"null"
]
},
"suffix_source": {
"type": "string"
},
"registrable_domain": {
"type": [
"string",
"null"
]
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"computed_at",
"price_usd",
"deterministic",
"disclaimer"
],
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"version",
"published"
]
}
},
"price_usd": {
"type": "string"
},
"disclaimer": {
"type": "string"
},
"request_id": {
"type": "string"
},
"computed_at": {
"type": "string",
"description": "RFC 3339 UTC with milliseconds"
},
"deterministic": {
"type": "boolean"
}
}
},
"route": {
"const": "/v1/code/url"
},
"version": {
"type": "string"
}
}
}
}
}
}
}
}
},
"x402Version": 2
},
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://api.duoleads.com/v1/code/idn",
"tags": [
"deterministic",
"no-api-key",
"code",
"domains",
"idna"
],
"iconUrl": "https://api.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Convert internationalised domain names between Unicode and ASCII punycode in either direction, label by label, and validate each label against IDNA2008: length, leading and trailing hyphens, the hyphen-hyphen rule at positions 3 and 4, disallowed code points and bidirectional rules. Returns both forms, the per-label breakdown and the first rule violated. Strict mode is IDNA2008 (UTS 46 non-transitional); it may reject names /v1/code/url displays.",
"serviceName": "Duo Data Utilities"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"domain": "bücher.example"
}
},
"output": {
"type": "json",
"example": {
"ok": true,
"data": {
"ascii": "xn--bcher-kva.example",
"valid": true,
"labels": [
{
"ascii": "xn--bcher-kva",
"index": 0,
"valid": true,
"length": 13,
"reason": null,
"unicode": "bücher",
"punycoded": true
},
{
"ascii": "example",
"index": 1,
"valid": true,
"length": 7,
"reason": null,
"unicode": "example",
"punycoded": false
}
],
"reason": null,
"unicode": "bücher.example",
"total_length": 21
},
"meta": {
"sources": [
{
"id": "unicode-idna-tables",
"licence": "Unicode License v3",
"version": "Unicode 17.0.0 (UTS #46 IdnaMappingTable via tr46 6.0.0)",
"published": "2026-09-29",
"attribution": "Unicode IdnaMappingTable via the tr46 package (MIT); (c) Unicode, Inc."
}
],
"price_usd": "0.05",
"disclaimer": "Factual output of a deterministic computation over public data. Provided as is, with no warranty of accuracy, completeness or availability. Not investment, financial, legal, tax, medical or any other professional advice, and not a recommendation. Verify before relying on it. Terms: https://api.duoleads.com/terms",
"request_id": "01K6B7Q4ZC8H3F2M9WXR5TYN0D",
"computed_at": "2026-09-28T12:00:00.000Z",
"deterministic": true
},
"route": "/v1/code/idn",
"version": "1.0.0"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [
"domain"
],
"properties": {
"to": {
"enum": [
"ascii",
"unicode",
"both"
],
"type": "string",
"default": "both",
"maxLength": 64,
"description": "ascii, unicode or both (default). Validated only: the response always carries both forms."
},
"domain": {
"type": "string",
"maxLength": 512,
"description": "Domain name in Unicode or punycode form."
},
"strict": {
"enum": [
"true",
"false"
],
"type": "string",
"default": "true",
"maxLength": 64,
"description": "true (default) applies IDNA2008 strictly; false uses UTS 46 transitional (IDNA2003-compatible) processing, which maps e.g. ß to ss; current browsers and /v1/code/url use non-transitional processing, so its output can differ from them."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"required": [
"ok",
"route",
"version",
"data",
"meta"
],
"properties": {
"ok": {
"const": true
},
"data": {
"type": "object",
"required": [
"ascii",
"unicode",
"valid",
"labels",
"reason",
"total_length"
],
"properties": {
"ascii": {
"type": [
"string",
"null"
]
},
"valid": {
"type": "boolean"
},
"labels": {
"type": "array",
"items": {
"type": "object",
"required": [
"index",
"unicode",
"ascii",
"length",
"punycoded",
"valid",
"reason"
],
"properties": {
"ascii": {
"type": [
"string",
"null"
]
},
"index": {
"type": "integer"
},
"valid": {
"type": "boolean"
},
"length": {
"type": [
"integer",
"null"
]
},
"reason": {
"type": [
"string",
"null"
]
},
"unicode": {
"type": "string"
},
"punycoded": {
"type": "boolean"
}
}
}
},
"reason": {
"type": [
"string",
"null"
]
},
"unicode": {
"type": [
"string",
"null"
]
},
"total_length": {
"type": [
"integer",
"null"
]
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"computed_at",
"price_usd",
"deterministic",
"disclaimer"
],
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"version",
"published"
]
}
},
"price_usd": {
"type": "string"
},
"disclaimer": {
"type": "string"
},
"request_id": {
"type": "string"
},
"computed_at": {
"type": "string",
"description": "RFC 3339 UTC with milliseconds"
},
"deterministic": {
"type": "boolean"
}
}
},
"route": {
"const": "/v1/code/idn"
},
"version": {
"type": "string"
}
}
}
}
}
}
}
}
},
"x402Version": 2
},
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://api.duoleads.com/v1/code/semver",
"tags": [
"deterministic",
"no-api-key",
"code",
"versions",
"semver"
],
"iconUrl": "https://api.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Parse a semantic version into major, minor, patch, prerelease and build parts; compare two versions by precedence including prerelease ordering; or test whether a version satisfies a range expression using caret, tilde, hyphen, x-ranges and comparator sets. Returns the parsed structure, the comparison result and the reason a range did not match.",
"serviceName": "Duo Data Utilities"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"version": "1.2.3-rc.1+build.5"
}
},
"output": {
"type": "json",
"example": {
"ok": true,
"data": {
"build": [
"build",
"5"
],
"major": 1,
"minor": 2,
"patch": 3,
"valid": true,
"reason": null,
"canonical": "1.2.3-rc.1+build.5",
"prerelease": [
"rc",
1
],
"is_prerelease": true
},
"meta": {
"price_usd": "0.05",
"disclaimer": "Factual output of a deterministic computation over public data. Provided as is, with no warranty of accuracy, completeness or availability. Not investment, financial, legal, tax, medical or any other professional advice, and not a recommendation. Verify before relying on it. Terms: https://api.duoleads.com/terms",
"request_id": "01K6B7Q4ZC8H3F2M9WXR5TYN0D",
"computed_at": "2026-09-28T12:00:00.000Z",
"deterministic": true
},
"route": "/v1/code/semver",
"version": "1.0.0"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [],
"properties": {
"a": {
"type": "string",
"maxLength": 256,
"description": "First version for op=compare."
},
"b": {
"type": "string",
"maxLength": 256,
"description": "Second version for op=compare."
},
"op": {
"enum": [
"parse",
"compare",
"satisfies",
"sort"
],
"type": "string",
"default": "parse",
"maxLength": 64,
"description": "parse (default), compare, satisfies or sort."
},
"range": {
"type": "string",
"maxLength": 256,
"description": "Range expression for op=satisfies, e.g. ^1.2.0."
},
"version": {
"type": "string",
"maxLength": 256,
"description": "Version to parse (op=parse) or test (op=satisfies)."
},
"versions": {
"type": "string",
"maxLength": 2048,
"description": "Comma-separated versions for op=sort, at most 100."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"required": [
"ok",
"route",
"version",
"data",
"meta"
],
"properties": {
"ok": {
"const": true
},
"data": {
"type": "object",
"properties": {
"a": {
"type": "string"
},
"b": {
"type": "string"
},
"build": {
"type": "array",
"items": {
"type": "string"
}
},
"major": {
"type": [
"integer",
"null"
]
},
"minor": {
"type": [
"integer",
"null"
]
},
"patch": {
"type": [
"integer",
"null"
]
},
"range": {
"type": "string"
},
"valid": {
"type": "boolean"
},
"reason": {
"type": [
"string",
"null"
]
},
"result": {
"type": "integer"
},
"sorted": {
"type": "array",
"items": {
"type": "string"
}
},
"invalid": {
"type": "array",
"items": {
"type": "string"
}
},
"canonical": {
"type": [
"string",
"null"
]
},
"satisfies": {
"type": "boolean"
},
"prerelease": {
"type": "array",
"items": {
"type": [
"number",
"string"
]
}
},
"comparators": {
"type": "array",
"items": {
"type": "string"
}
},
"is_prerelease": {
"type": "boolean"
},
"precedence_note": {
"type": "string"
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"computed_at",
"price_usd",
"deterministic",
"disclaimer"
],
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"version",
"published"
]
}
},
"price_usd": {
"type": "string"
},
"disclaimer": {
"type": "string"
},
"request_id": {
"type": "string"
},
"computed_at": {
"type": "string",
"description": "RFC 3339 UTC with milliseconds"
},
"deterministic": {
"type": "boolean"
}
}
},
"route": {
"const": "/v1/code/semver"
},
"version": {
"type": "string"
}
}
}
}
}
}
}
}
},
"x402Version": 2
},
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://api.duoleads.com/v1/code/hash",
"tags": [
"deterministic",
"no-api-key",
"code",
"crypto",
"hashing"
],
"iconUrl": "https://api.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Compute a cryptographic digest of supplied data: SHA-256, SHA-384, SHA-512, SHA-1, SHA3-256, SHA3-512, Keccak-256, BLAKE2b-256 and BLAKE2b-512, plus HMAC with any of them. Input is UTF-8 text, base64 or hex bytes; output is hex, base64, base64url or base32. Returns the digest, the byte length of the input, and the exact algorithm identifier used.",
"serviceName": "Duo Data Utilities"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"algo": "sha256",
"data": "hello"
}
},
"output": {
"type": "json",
"example": {
"ok": true,
"data": {
"out": "hex",
"algo": "sha256",
"hmac": false,
"digest": "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824",
"bit_length": 256,
"input_bytes": 5
},
"meta": {
"price_usd": "0.05",
"disclaimer": "Factual output of a deterministic computation over public data. Provided as is, with no warranty of accuracy, completeness or availability. Not investment, financial, legal, tax, medical or any other professional advice, and not a recommendation. Verify before relying on it. Terms: https://api.duoleads.com/terms",
"request_id": "01K6B7Q4ZC8H3F2M9WXR5TYN0D",
"computed_at": "2026-09-28T12:00:00.000Z",
"deterministic": true
},
"route": "/v1/code/hash",
"version": "1.0.0"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [
"algo",
"data"
],
"properties": {
"out": {
"enum": [
"hex",
"base64",
"base64url",
"base32"
],
"type": "string",
"default": "hex",
"maxLength": 64,
"description": "Digest output encoding: hex (default), base64, base64url or base32."
},
"algo": {
"enum": [
"sha256",
"sha384",
"sha512",
"sha1",
"sha3-256",
"sha3-512",
"keccak256",
"blake2b-256",
"blake2b-512"
],
"type": "string",
"maxLength": 64,
"description": "Digest algorithm."
},
"data": {
"type": "string",
"maxLength": 8192,
"description": "Input data, interpreted per encoding. At most 8192 characters. An empty value hashes the empty string."
},
"encoding": {
"enum": [
"utf8",
"base64",
"base64url",
"hex"
],
"type": "string",
"default": "utf8",
"maxLength": 64,
"description": "Encoding of data: utf8 (default), base64, base64url or hex."
},
"hmac_key": {
"type": "string",
"maxLength": 512,
"description": "If present, computes HMAC with this key."
},
"hmac_key_encoding": {
"enum": [
"utf8",
"base64",
"base64url",
"hex"
],
"type": "string",
"default": "utf8",
"maxLength": 64,
"description": "Encoding of hmac_key, as encoding."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"required": [
"ok",
"route",
"version",
"data",
"meta"
],
"properties": {
"ok": {
"const": true
},
"data": {
"type": "object",
"required": [
"digest",
"algo",
"out",
"input_bytes",
"hmac",
"bit_length"
],
"properties": {
"out": {
"type": "string"
},
"algo": {
"type": "string"
},
"hmac": {
"type": "boolean"
},
"digest": {
"type": "string"
},
"bit_length": {
"type": "integer"
},
"input_bytes": {
"type": "integer"
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"computed_at",
"price_usd",
"deterministic",
"disclaimer"
],
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"version",
"published"
]
}
},
"price_usd": {
"type": "string"
},
"disclaimer": {
"type": "string"
},
"request_id": {
"type": "string"
},
"computed_at": {
"type": "string",
"description": "RFC 3339 UTC with milliseconds"
},
"deterministic": {
"type": "boolean"
}
}
},
"route": {
"const": "/v1/code/hash"
},
"version": {
"type": "string"
}
}
}
}
}
}
}
}
},
"x402Version": 2
},
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://api.duoleads.com/v1/code/jwt",
"tags": [
"no-api-key",
"code",
"jwt",
"security"
],
"iconUrl": "https://api.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Decode a JSON Web Token without verifying it: returns the header, the claims, the signature length and algorithm, and a computed view of the time claims — whether exp has passed, whether nbf is in the future, and the remaining lifetime in seconds against a supplied or current instant. Reports structural problems such as a missing part, invalid base64url or an alg of none. It does not and cannot verify the signature; do not use it to decide trust.",
"serviceName": "Duo Data Utilities"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"at": "2026-09-28T00:00:00Z",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
}
},
"output": {
"type": "json",
"example": {
"ok": true,
"data": {
"alg": "HS256",
"kid": null,
"typ": "JWT",
"time": {
"expired": null,
"age_seconds": 274314578,
"evaluated_at": "2026-09-28T00:00:00Z",
"not_yet_valid": null,
"expires_in_seconds": null
},
"parts": 3,
"claims": {
"aud": null,
"exp": null,
"iat": 1516239022,
"iss": null,
"jti": null,
"nbf": null,
"sub": "1234567890"
},
"header": {
"alg": "HS256",
"typ": "JWT"
},
"reason": null,
"payload": {
"iat": 1516239022,
"sub": "1234567890",
"name": "John Doe"
},
"warnings": [],
"signature_bytes": 32,
"valid_structure": true,
"signature_verified": false
},
"meta": {
"price_usd": "0.05",
"disclaimer": "Factual output of a deterministic computation over public data. Provided as is, with no warranty of accuracy, completeness or availability. Not investment, financial, legal, tax, medical or any other professional advice, and not a recommendation. Verify before relying on it. Terms: https://api.duoleads.com/terms",
"request_id": "01K6B7Q4ZC8H3F2M9WXR5TYN0D",
"computed_at": "2026-09-28T12:00:00.000Z",
"deterministic": true
},
"route": "/v1/code/jwt",
"version": "1.0.0"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [
"token"
],
"properties": {
"at": {
"type": "string",
"maxLength": 64,
"description": "Instant to evaluate exp/nbf against: RFC 3339 or epoch seconds. Default now."
},
"token": {
"type": "string",
"maxLength": 8192,
"description": "The JWT to decode (not verified). At most 8192 characters."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"required": [
"ok",
"route",
"version",
"data",
"meta"
],
"properties": {
"ok": {
"const": true
},
"data": {
"type": "object",
"required": [
"valid_structure",
"header",
"payload",
"alg",
"typ",
"kid",
"signature_bytes",
"parts",
"claims",
"time",
"signature_verified",
"warnings",
"reason"
],
"properties": {
"alg": {
"type": [
"string",
"null"
]
},
"kid": {
"type": [
"string",
"null"
]
},
"typ": {
"type": [
"string",
"null"
]
},
"time": {
"type": "object",
"required": [
"evaluated_at",
"expired",
"not_yet_valid",
"expires_in_seconds",
"age_seconds"
],
"properties": {
"expired": {
"type": [
"boolean",
"null"
]
},
"age_seconds": {
"type": [
"integer",
"null"
]
},
"evaluated_at": {
"type": "string"
},
"not_yet_valid": {
"type": [
"boolean",
"null"
]
},
"expires_in_seconds": {
"type": [
"integer",
"null"
]
}
}
},
"parts": {
"type": "integer"
},
"claims": {
"type": "object",
"required": [
"iss",
"sub",
"aud",
"exp",
"nbf",
"iat",
"jti"
],
"properties": {
"aud": {
"type": [
"string",
"array",
"null"
],
"items": {
"type": "string"
},
"description": "RFC 7519 4.1.3: string or array of strings; null when absent"
},
"exp": {
"type": [
"number",
"null"
]
},
"iat": {
"type": [
"number",
"null"
]
},
"iss": {
"type": [
"string",
"null"
]
},
"jti": {
"type": [
"string",
"null"
]
},
"nbf": {
"type": [
"number",
"null"
]
},
"sub": {
"type": [
"string",
"null"
]
}
}
},
"header": {
"type": [
"object",
"null"
],
"description": "caller-supplied content echoed exactly as decoded: members are not typed"
},
"reason": {
"type": [
"string",
"null"
]
},
"payload": {
"type": [
"object",
"null"
],
"description": "caller-supplied content echoed exactly as decoded: members are not typed"
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"claim_errors": {
"type": "array",
"items": {
"type": "object",
"required": [
"claim",
"reason"
],
"properties": {
"claim": {
"type": "string"
},
"reason": {
"type": "string"
}
}
}
},
"signature_bytes": {
"type": "integer"
},
"valid_structure": {
"type": "boolean"
},
"signature_verified": {
"type": "boolean"
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"computed_at",
"price_usd",
"deterministic",
"disclaimer"
],
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"version",
"published"
]
}
},
"price_usd": {
"type": "string"
},
"disclaimer": {
"type": "string"
},
"request_id": {
"type": "string"
},
"computed_at": {
"type": "string",
"description": "RFC 3339 UTC with milliseconds"
},
"deterministic": {
"type": "boolean"
}
}
},
"route": {
"const": "/v1/code/jwt"
},
"version": {
"type": "string"
}
}
}
}
}
}
}
}
},
"x402Version": 2
},
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://api.duoleads.com/v1/geo/geohash",
"tags": [
"deterministic",
"no-api-key",
"geo",
"geohash"
],
"iconUrl": "https://api.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Encode a WGS-84 latitude and longitude to a geohash at a chosen precision, or decode a geohash back to its bounding box, centre point and error bounds in metres. Encoding also returns the eight neighbouring cells, which is what a caller needs to do proximity search over a geohash-indexed store without a spatial database.",
"serviceName": "Duo Data Utilities"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"op": "encode",
"lat": "52.3728",
"lon": "4.8936",
"precision": "9"
}
},
"output": {
"type": "json",
"example": {
"ok": true,
"data": {
"bbox": {
"max_lat": 52.37281322479248,
"max_lon": 4.893636703491211,
"min_lat": 52.37277030944824,
"min_lon": 4.893593788146973
},
"center": {
"lat": 52.37279176712036,
"lon": 4.893615245819092
},
"error_m": {
"lat": 2.39,
"lon": 1.46
},
"geohash": "u173zq5mt",
"precision": 9,
"neighbours": {
"e": "u173zq5mw",
"n": "u173zq5mv",
"s": "u173zq5mm",
"w": "u173zq5ms",
"ne": "u173zq5my",
"nw": "u173zq5mu",
"se": "u173zq5mq",
"sw": "u173zq5mk"
}
},
"meta": {
"price_usd": "0.05",
"disclaimer": "Factual output of a deterministic computation over public data. Provided as is, with no warranty of accuracy, completeness or availability. Not investment, financial, legal, tax, medical or any other professional advice, and not a recommendation. Verify before relying on it. Terms: https://api.duoleads.com/terms",
"request_id": "01K6B7Q4ZC8H3F2M9WXR5TYN0D",
"computed_at": "2026-09-28T12:00:00.000Z",
"deterministic": true
},
"route": "/v1/geo/geohash",
"version": "1.0.0"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [],
"properties": {
"op": {
"enum": [
"encode",
"decode"
],
"type": "string",
"default": "encode",
"maxLength": 64,
"description": "encode (default): lat/lon to geohash. decode: geohash to bounding box."
},
"lat": {
"type": "string",
"pattern": "^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?$",
"maxLength": 64,
"description": "WGS-84 latitude, -90 to 90. Required when op=encode."
},
"lon": {
"type": "string",
"pattern": "^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?$",
"maxLength": 64,
"description": "WGS-84 longitude, -180 to 180. Required when op=encode."
},
"geohash": {
"type": "string",
"pattern": "^[0-9bcdefghjkmnpqrstuvwxyz]{1,12}$",
"maxLength": 64,
"description": "Geohash to decode, 1-12 characters. Required when op=decode."
},
"precision": {
"type": "string",
"default": "9",
"pattern": "^[+-]?\\d+$",
"maxLength": 64,
"description": "Geohash length 1-12, default 9 (about 4.8 m)."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"required": [
"ok",
"route",
"version",
"data",
"meta"
],
"properties": {
"ok": {
"const": true
},
"data": {
"type": "object",
"required": [
"geohash",
"precision",
"bbox",
"center",
"error_m"
],
"properties": {
"bbox": {
"type": "object",
"required": [
"min_lat",
"min_lon",
"max_lat",
"max_lon"
],
"properties": {
"max_lat": {
"type": "number"
},
"max_lon": {
"type": "number"
},
"min_lat": {
"type": "number"
},
"min_lon": {
"type": "number"
}
}
},
"center": {
"type": "object",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"type": "number"
},
"lon": {
"type": "number"
}
}
},
"error_m": {
"type": "object",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"type": "number"
},
"lon": {
"type": "number"
}
}
},
"geohash": {
"type": "string"
},
"precision": {
"type": "integer"
},
"neighbours": {
"type": "object",
"required": [
"n",
"ne",
"e",
"se",
"s",
"sw",
"w",
"nw"
],
"properties": {
"e": {
"type": [
"string",
"null"
]
},
"n": {
"type": [
"string",
"null"
]
},
"s": {
"type": [
"string",
"null"
]
},
"w": {
"type": [
"string",
"null"
]
},
"ne": {
"type": [
"string",
"null"
]
},
"nw": {
"type": [
"string",
"null"
]
},
"se": {
"type": [
"string",
"null"
]
},
"sw": {
"type": [
"string",
"null"
]
}
}
},
"cell_width_m": {
"type": "number"
},
"cell_height_m": {
"type": "number"
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"computed_at",
"price_usd",
"deterministic",
"disclaimer"
],
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"version",
"published"
]
}
},
"price_usd": {
"type": "string"
},
"disclaimer": {
"type": "string"
},
"request_id": {
"type": "string"
},
"computed_at": {
"type": "string",
"description": "RFC 3339 UTC with milliseconds"
},
"deterministic": {
"type": "boolean"
}
}
},
"route": {
"const": "/v1/geo/geohash"
},
"version": {
"type": "string"
}
}
}
}
}
}
}
}
},
"x402Version": 2
},
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://api.duoleads.com/v1/geo/pluscode",
"tags": [
"deterministic",
"no-api-key",
"geo",
"pluscode"
],
"iconUrl": "https://api.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Encode coordinates as an Open Location Code (plus code) at a chosen length, or decode a full code back to its bounding box and centre. Also shortens a full code against a reference coordinate and recovers a shortened code given a reference, which is how plus codes are normally exchanged in text. Returns code length, precision in metres and validity.",
"serviceName": "Duo Data Utilities"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"lat": "52.3728",
"lon": "4.8936"
}
},
"output": {
"type": "json",
"example": {
"ok": true,
"data": {
"bbox": {
"max_lat": 52.372875,
"max_lon": 4.893625,
"min_lat": 52.37275,
"min_lon": 4.8935
},
"code": "9F469VFV+4C",
"valid": true,
"center": {
"lat": 52.3728125,
"lon": 4.8935625
},
"length": 10,
"reason": null,
"is_full": true,
"is_short": false,
"precision_m": 13.9
},
"meta": {
"price_usd": "0.05",
"disclaimer": "Factual output of a deterministic computation over public data. Provided as is, with no warranty of accuracy, completeness or availability. Not investment, financial, legal, tax, medical or any other professional advice, and not a recommendation. Verify before relying on it. Terms: https://api.duoleads.com/terms",
"request_id": "01K6B7Q4ZC8H3F2M9WXR5TYN0D",
"computed_at": "2026-09-28T12:00:00.000Z",
"deterministic": true
},
"route": "/v1/geo/pluscode",
"version": "1.0.0"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [],
"properties": {
"op": {
"enum": [
"encode",
"decode",
"shorten",
"recover"
],
"type": "string",
"default": "encode",
"maxLength": 64,
"description": "encode (default), decode, shorten or recover."
},
"lat": {
"type": "string",
"pattern": "^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?$",
"maxLength": 64,
"description": "Latitude for op=encode."
},
"lon": {
"type": "string",
"pattern": "^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?$",
"maxLength": 64,
"description": "Longitude for op=encode."
},
"code": {
"type": "string",
"maxLength": 20,
"description": "Plus code for decode, shorten or recover."
},
"length": {
"type": "string",
"default": "10",
"pattern": "^[+-]?\\d+$",
"maxLength": 64,
"description": "Integer code length for op=encode: one of 2,4,6,8,10 (default),11,12,13,14,15. Other integers in 2-15 are 400 UNSUPPORTED_VALUE."
},
"ref_lat": {
"type": "string",
"pattern": "^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?$",
"maxLength": 64,
"description": "Reference latitude for op=shorten/recover."
},
"ref_lon": {
"type": "string",
"pattern": "^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?$",
"maxLength": 64,
"description": "Reference longitude for op=shorten/recover."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"required": [
"ok",
"route",
"version",
"data",
"meta"
],
"properties": {
"ok": {
"const": true
},
"data": {
"type": "object",
"required": [
"code",
"length",
"is_full",
"is_short",
"valid"
],
"properties": {
"bbox": {
"type": "object",
"required": [
"min_lat",
"min_lon",
"max_lat",
"max_lon"
],
"properties": {
"max_lat": {
"type": "number"
},
"max_lon": {
"type": "number"
},
"min_lat": {
"type": "number"
},
"min_lon": {
"type": "number"
}
}
},
"code": {
"type": "string"
},
"valid": {
"type": "boolean"
},
"center": {
"type": "object",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"type": "number"
},
"lon": {
"type": "number"
}
}
},
"length": {
"type": [
"integer",
"null"
]
},
"reason": {
"type": [
"string",
"null"
]
},
"is_full": {
"type": "boolean"
},
"is_short": {
"type": "boolean"
},
"full_code": {
"type": "string"
},
"precision_m": {
"type": "number"
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"computed_at",
"price_usd",
"deterministic",
"disclaimer"
],
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"version",
"published"
]
}
},
"price_usd": {
"type": "string"
},
"disclaimer": {
"type": "string"
},
"request_id": {
"type": "string"
},
"computed_at": {
"type": "string",
"description": "RFC 3339 UTC with milliseconds"
},
"deterministic": {
"type": "boolean"
}
}
},
"route": {
"const": "/v1/geo/pluscode"
},
"version": {
"type": "string"
}
}
}
}
}
}
}
}
},
"x402Version": 2
},
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://api.duoleads.com/v1/geo/polygon",
"tags": [
"deterministic",
"no-api-key",
"geo",
"geojson",
"geometry"
],
"iconUrl": "https://api.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Geometric predicates on a GeoJSON geometry supplied in the request: point-in-polygon with correct hole handling, bounding box, centroid, signed area in square metres, perimeter length, and ring winding order. Accepts Polygon and MultiPolygon, and a GeoJSON Feature wrapping either. Area and length are geodesic on the WGS-84 ellipsoid, correct at any latitude; containment is planar in lon/lat.",
"serviceName": "Duo Data Utilities"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"lat": "52.3728",
"lon": "4.8936",
"geometry": "{\"type\":\"Polygon\",\"coordinates\":[[[4.85,52.35],[4.95,52.35],[4.95,52.40],[4.85,52.40],[4.85,52.35]]]}"
}
},
"output": {
"type": "json",
"example": {
"ok": true,
"data": {
"bbox": [
4.85,
52.35,
4.95,
52.4
],
"rings": 1,
"area_m2": 37890432.411,
"winding": [
"ccw"
],
"centroid": {
"lat": 52.37500000001563,
"lon": 4.900000000001667
},
"contains": true,
"vertices": 4,
"on_boundary": false,
"perimeter_m": 24747.979
},
"meta": {
"price_usd": "0.05",
"disclaimer": "Factual output of a deterministic computation over public data. Provided as is, with no warranty of accuracy, completeness or availability. Not investment, financial, legal, tax, medical or any other professional advice, and not a recommendation. Verify before relying on it. Terms: https://api.duoleads.com/terms",
"request_id": "01K6B7Q4ZC8H3F2M9WXR5TYN0D",
"computed_at": "2026-09-28T12:00:00.000Z",
"deterministic": true
},
"route": "/v1/geo/polygon",
"version": "1.0.0"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [
"geometry"
],
"properties": {
"lat": {
"type": "string",
"pattern": "^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?$",
"maxLength": 64,
"description": "Point latitude; with lon, runs the containment test."
},
"lon": {
"type": "string",
"pattern": "^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?$",
"maxLength": 64,
"description": "Point longitude; with lat, runs the containment test."
},
"ops": {
"type": "string",
"maxLength": 128,
"description": "Comma-separated subset of contains,bbox,centroid,area,perimeter,winding. Default all."
},
"geometry": {
"type": "string",
"maxLength": 3072,
"description": "URL-encoded GeoJSON Polygon, MultiPolygon or a Feature wrapping one. At most 3072 characters and 2000 coordinate pairs."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"required": [
"ok",
"route",
"version",
"data",
"meta"
],
"properties": {
"ok": {
"const": true
},
"data": {
"type": "object",
"required": [
"rings",
"vertices"
],
"properties": {
"bbox": {
"type": "array",
"items": {
"type": "number"
}
},
"rings": {
"type": "integer"
},
"area_m2": {
"type": "number"
},
"winding": {
"type": "array",
"items": {
"type": "string"
}
},
"centroid": {
"type": "object",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"type": "number"
},
"lon": {
"type": "number"
}
}
},
"contains": {
"type": [
"boolean",
"null"
]
},
"vertices": {
"type": "integer"
},
"on_boundary": {
"type": [
"boolean",
"null"
]
},
"perimeter_m": {
"type": "number"
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"computed_at",
"price_usd",
"deterministic",
"disclaimer"
],
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"version",
"published"
]
}
},
"price_usd": {
"type": "string"
},
"disclaimer": {
"type": "string"
},
"request_id": {
"type": "string"
},
"computed_at": {
"type": "string",
"description": "RFC 3339 UTC with milliseconds"
},
"deterministic": {
"type": "boolean"
}
}
},
"route": {
"const": "/v1/geo/polygon"
},
"version": {
"type": "string"
}
}
}
}
}
}
}
}
},
"x402Version": 2
},
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://api.duoleads.com/v1/geo/distance",
"tags": [
"deterministic",
"no-api-key",
"geo",
"geodesy",
"distance"
],
"iconUrl": "https://api.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Distance and direction between WGS-84 coordinates: geodesic distance by Vincenty with a haversine fallback, initial and final bearing, the midpoint, and the destination point reached from a start point on a given bearing and distance. Also computes the cumulative length of a supplied coordinate path. Results in metres, kilometres, nautical miles and miles.",
"serviceName": "Duo Data Utilities"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"lat1": "52.3728",
"lat2": "40.7128",
"lon1": "4.8936",
"lon2": "-74.0060"
}
},
"output": {
"type": "json",
"example": {
"ok": true,
"data": {
"method": "vincenty",
"distance": {
"m": 5878232.354,
"km": 5878.232354,
"mi": 3652.564246,
"nmi": 3173.991552
},
"midpoint": {
"lat": 53.7242681,
"lon": -39.60892324
},
"converged": true,
"bearing_final": 228.8713,
"bearing_initial": 290.8461
},
"meta": {
"price_usd": "0.05",
"disclaimer": "Factual output of a deterministic computation over public data. Provided as is, with no warranty of accuracy, completeness or availability. Not investment, financial, legal, tax, medical or any other professional advice, and not a recommendation. Verify before relying on it. Terms: https://api.duoleads.com/terms",
"request_id": "01K6B7Q4ZC8H3F2M9WXR5TYN0D",
"computed_at": "2026-09-28T12:00:00.000Z",
"deterministic": true
},
"route": "/v1/geo/distance",
"version": "1.0.0"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [],
"properties": {
"op": {
"enum": [
"distance",
"destination",
"midpoint",
"path"
],
"type": "string",
"default": "distance",
"maxLength": 64,
"description": "distance (default), destination, midpoint or path."
},
"lat1": {
"type": "string",
"pattern": "^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?$",
"maxLength": 64,
"description": "Start latitude."
},
"lat2": {
"type": "string",
"pattern": "^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?$",
"maxLength": 64,
"description": "End latitude."
},
"lon1": {
"type": "string",
"pattern": "^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?$",
"maxLength": 64,
"description": "Start longitude."
},
"lon2": {
"type": "string",
"pattern": "^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?$",
"maxLength": 64,
"description": "End longitude."
},
"path": {
"type": "string",
"maxLength": 2048,
"description": "Comma-separated lat,lon pairs for op=path, at most 200 points."
},
"method": {
"enum": [
"vincenty",
"haversine"
],
"type": "string",
"default": "vincenty",
"maxLength": 64,
"description": "vincenty (default, WGS-84) or haversine."
},
"bearing": {
"type": "string",
"pattern": "^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?$",
"maxLength": 64,
"description": "Initial bearing in degrees for op=destination."
},
"distance_m": {
"type": "string",
"pattern": "^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?$",
"maxLength": 64,
"description": "Distance in metres for op=destination, 0 to 1e9 (about 25 Earth circumferences); larger values are 400 INVALID_PARAM."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"required": [
"ok",
"route",
"version",
"data",
"meta"
],
"properties": {
"ok": {
"const": true
},
"data": {
"type": "object",
"required": [
"method",
"converged"
],
"properties": {
"legs": {
"type": "integer"
},
"method": {
"type": "string"
},
"points": {
"type": "integer"
},
"distance": {
"type": "object",
"required": [
"m",
"km",
"nmi",
"mi"
],
"properties": {
"m": {
"type": "number"
},
"km": {
"type": "number"
},
"mi": {
"type": "number"
},
"nmi": {
"type": "number"
}
}
},
"midpoint": {
"type": "object",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"type": "number"
},
"lon": {
"type": "number"
}
}
},
"converged": {
"type": "boolean"
},
"destination": {
"type": "object",
"required": [
"lat",
"lon"
],
"properties": {
"lat": {
"type": "number"
},
"lon": {
"type": "number"
}
}
},
"bearing_final": {
"type": "number"
},
"bearing_initial": {
"type": "number"
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"computed_at",
"price_usd",
"deterministic",
"disclaimer"
],
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"version",
"published"
]
}
},
"price_usd": {
"type": "string"
},
"disclaimer": {
"type": "string"
},
"request_id": {
"type": "string"
},
"computed_at": {
"type": "string",
"description": "RFC 3339 UTC with milliseconds"
},
"deterministic": {
"type": "boolean"
}
}
},
"route": {
"const": "/v1/geo/distance"
},
"version": {
"type": "string"
}
}
}
}
}
}
}
}
},
"x402Version": 2
},
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://api.duoleads.com/v1/chain/address",
"tags": [
"deterministic",
"no-api-key",
"chain",
"blockchain",
"addresses"
],
"iconUrl": "https://api.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Identify which blockchain an address belongs to and validate its encoding: EVM EIP-55 checksum, Bitcoin base58check and bech32/bech32m with witness version, Solana base58 and on-curve check, Cosmos bech32 with its HRP, Tron, XRP, Litecoin, Dogecoin, Cardano, Polkadot SS58 and Algorand. Returns every chain the address is valid for (ambiguous when several match), the checksummed form for EVM addresses, and the reason a check failed, including unrecognised_format.",
"serviceName": "Duo Data Utilities"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"address": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045"
}
},
"output": {
"type": "json",
"example": {
"ok": true,
"data": {
"valid": true,
"matches": [
{
"chain": "evm",
"valid": true,
"detail": {},
"format": "hex20",
"reason": "no_checksum"
}
],
"checksum": {
"input_form": "lowercase",
"checksummed": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
"checksum_valid": true,
"eip1191_applied": false
},
"ambiguous": false
},
"meta": {
"price_usd": "0.05",
"disclaimer": "Factual output of a deterministic computation over public data. Provided as is, with no warranty of accuracy, completeness or availability. Not investment, financial, legal, tax, medical or any other professional advice, and not a recommendation. Verify before relying on it. Terms: https://api.duoleads.com/terms",
"request_id": "01K6B7Q4ZC8H3F2M9WXR5TYN0D",
"computed_at": "2026-09-28T12:00:00.000Z",
"deterministic": true
},
"route": "/v1/chain/address",
"version": "1.0.0"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [
"address"
],
"properties": {
"expect": {
"enum": [
"evm",
"bitcoin",
"solana",
"cosmos",
"tron",
"xrp",
"cardano",
"polkadot",
"algorand",
"litecoin",
"dogecoin"
],
"type": "string",
"maxLength": 64,
"description": "Restrict the check to one chain id."
},
"address": {
"type": "string",
"maxLength": 128,
"description": "Address to identify and validate."
},
"chain_id": {
"type": "string",
"pattern": "^[+-]?\\d+$",
"maxLength": 64,
"description": "EVM chain id; enables EIP-1191 chain-salted checksum validation."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"required": [
"ok",
"route",
"version",
"data",
"meta"
],
"properties": {
"ok": {
"const": true
},
"data": {
"type": "object",
"required": [
"valid",
"matches",
"checksum",
"ambiguous"
],
"properties": {
"valid": {
"type": "boolean"
},
"reason": {
"type": "string"
},
"matches": {
"type": "array",
"items": {
"type": "object",
"required": [
"chain",
"format",
"valid",
"reason",
"detail"
],
"properties": {
"chain": {
"type": "string"
},
"valid": {
"type": "boolean"
},
"detail": {
"type": "object",
"properties": {
"hrp": {
"type": "string"
},
"bytes": {
"type": "integer"
},
"network": {
"type": "string"
},
"purpose": {
"type": "string"
},
"encoding": {
"type": "string"
},
"on_curve": {
"type": "boolean"
},
"header_type": {
"type": "integer"
},
"address_type": {
"type": "string"
},
"version_byte": {
"type": "integer"
},
"network_prefix": {
"type": "integer"
},
"witness_version": {
"type": "integer"
}
}
},
"format": {
"type": [
"string",
"null"
]
},
"reason": {
"type": [
"string",
"null"
]
}
}
}
},
"checksum": {
"type": [
"object",
"null"
],
"required": [
"input_form",
"checksummed",
"checksum_valid",
"eip1191_applied"
],
"properties": {
"input_form": {
"type": "string"
},
"checksummed": {
"type": "string"
},
"checksum_valid": {
"type": "boolean"
},
"eip1191_applied": {
"type": "boolean"
}
}
},
"ambiguous": {
"type": "boolean"
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"computed_at",
"price_usd",
"deterministic",
"disclaimer"
],
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"version",
"published"
]
}
},
"price_usd": {
"type": "string"
},
"disclaimer": {
"type": "string"
},
"request_id": {
"type": "string"
},
"computed_at": {
"type": "string",
"description": "RFC 3339 UTC with milliseconds"
},
"deterministic": {
"type": "boolean"
}
}
},
"route": {
"const": "/v1/chain/address"
},
"version": {
"type": "string"
}
}
}
}
}
}
}
}
},
"x402Version": 2
},
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://api.duoleads.com/v1/chain/selector",
"tags": [
"deterministic",
"no-api-key",
"chain",
"blockchain",
"solidity"
],
"iconUrl": "https://api.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Compute the Keccak-256 hash of a Solidity function or event signature and derive the 4-byte function selector and the 32-byte event topic. Normalises the signature first — strips parameter names, expands uint to uint256 and the other aliases, flattens tuples — so a signature copied from source code produces the same selector as the canonical form. Also hashes arbitrary text or hex bytes with Keccak-256.",
"serviceName": "Duo Data Utilities"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"signature": "transfer(address,uint256)"
}
},
"output": {
"type": "json",
"example": {
"ok": true,
"data": {
"inputs": [
"address",
"uint256"
],
"topic0": null,
"selector": "0xa9059cbb",
"canonical": "transfer(address,uint256)",
"keccak256": "0xa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b",
"normalisations": []
},
"meta": {
"price_usd": "0.05",
"disclaimer": "Factual output of a deterministic computation over public data. Provided as is, with no warranty of accuracy, completeness or availability. Not investment, financial, legal, tax, medical or any other professional advice, and not a recommendation. Verify before relying on it. Terms: https://api.duoleads.com/terms",
"request_id": "01K6B7Q4ZC8H3F2M9WXR5TYN0D",
"computed_at": "2026-09-28T12:00:00.000Z",
"deterministic": true
},
"route": "/v1/chain/selector",
"version": "1.0.0"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [],
"properties": {
"data": {
"type": "string",
"maxLength": 8192,
"description": "Alternative to signature: raw data to Keccak-256 hash."
},
"kind": {
"enum": [
"function",
"event",
"error"
],
"type": "string",
"default": "function",
"maxLength": 64,
"description": "function (default), event or error."
},
"encoding": {
"enum": [
"utf8",
"hex"
],
"type": "string",
"default": "utf8",
"maxLength": 64,
"description": "Encoding of data: utf8 (default) or hex."
},
"signature": {
"type": "string",
"maxLength": 1024,
"description": "Solidity function, event or error signature, e.g. transfer(address to, uint amount)."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"required": [
"ok",
"route",
"version",
"data",
"meta"
],
"properties": {
"ok": {
"const": true
},
"data": {
"type": "object",
"required": [
"canonical",
"keccak256",
"selector",
"topic0",
"inputs",
"normalisations"
],
"properties": {
"inputs": {
"type": [
"array",
"null"
],
"items": {
"type": "string"
}
},
"topic0": {
"type": [
"string",
"null"
]
},
"encoding": {
"type": "string"
},
"selector": {
"type": [
"string",
"null"
]
},
"canonical": {
"type": [
"string",
"null"
]
},
"keccak256": {
"type": "string"
},
"input_bytes": {
"type": "integer"
},
"normalisations": {
"type": "array",
"items": {
"type": "object",
"required": [
"from",
"to"
],
"properties": {
"to": {
"type": "string"
},
"from": {
"type": "string"
}
}
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"computed_at",
"price_usd",
"deterministic",
"disclaimer"
],
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"version",
"published"
]
}
},
"price_usd": {
"type": "string"
},
"disclaimer": {
"type": "string"
},
"request_id": {
"type": "string"
},
"computed_at": {
"type": "string",
"description": "RFC 3339 UTC with milliseconds"
},
"deterministic": {
"type": "boolean"
}
}
},
"route": {
"const": "/v1/chain/selector"
},
"version": {
"type": "string"
}
}
}
}
}
}
}
}
},
"x402Version": 2
},
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://api.duoleads.com/v1/ref/nuts",
"tags": [
"deterministic",
"no-api-key",
"ref",
"eu",
"statistics"
],
"iconUrl": "https://api.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Look up a NUTS statistical region of the European Union: resolve a NUTS code to its name, country and level, walk up to its parents or down to its children, or search regions by name. Covers all four levels (country, major region, basic region, small region) for the 27 member states and 12 further reporting countries, from the NUTS 2024 classification. Returns the Latin-script and local-language names plus the urbanisation, coastal and mountain typologies.",
"serviceName": "Duo Data Utilities"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"code": "NL32B",
"include": "parents,typology"
}
},
"output": {
"type": "json",
"example": {
"ok": true,
"data": {
"code": "NL32B",
"found": true,
"level": 3,
"country": "NL",
"parents": [
{
"code": "NL",
"level": 0,
"name_latn": "Nederland"
},
{
"code": "NL3",
"level": 1,
"name_latn": "West-Nederland"
},
{
"code": "NL32",
"level": 2,
"name_latn": "Noord-Holland"
}
],
"typology": {
"urban": "1",
"coastal": "1",
"mountain": "4",
"urban_label": "predominantly urban",
"coastal_label": "coastal",
"mountain_label": "non-mountain region"
},
"name_latn": "Groot-Amsterdam",
"name_local": "Groot-Amsterdam",
"canonical_country": "NL"
},
"meta": {
"sources": [
{
"id": "eurostat-nuts",
"licence": "CC BY 4.0",
"version": "NUTS 2024",
"published": "2026-09-28",
"attribution": "© European Union, Eurostat/GISCO"
}
],
"price_usd": "0.05",
"disclaimer": "Factual output of a deterministic computation over public data. Provided as is, with no warranty of accuracy, completeness or availability. Not investment, financial, legal, tax, medical or any other professional advice, and not a recommendation. Verify before relying on it. Terms: https://api.duoleads.com/terms",
"request_id": "01K6B7Q4ZC8H3F2M9WXR5TYN0D",
"computed_at": "2026-09-28T12:00:00.000Z",
"deterministic": true
},
"route": "/v1/ref/nuts",
"version": "1.0.0"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [],
"properties": {
"code": {
"type": "string",
"pattern": "^[A-Za-z]{2}[0-9A-Za-z]{0,3}$",
"maxLength": 16,
"description": "NUTS code, 2-5 characters, case-insensitive (level-3 codes may contain letters, e.g. NL32B). A GR or GB prefix is accepted for EL or UK."
},
"name": {
"type": "string",
"maxLength": 128,
"description": "Substring search on region names, case- and accent-insensitive. Up to 25 matches."
},
"level": {
"type": "string",
"pattern": "^[+-]?\\d+$",
"maxLength": 64,
"description": "Restrict a name search to one level, 0-3."
},
"country": {
"type": "string",
"maxLength": 16,
"description": "ISO 3166-1 alpha-2 country filter (UK/GB and EL/GR both accepted)."
},
"include": {
"type": "string",
"default": "parents,typology",
"maxLength": 64,
"description": "Comma-separated: parents, children, typology. Default parents,typology."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"required": [
"ok",
"route",
"version",
"data",
"meta"
],
"properties": {
"ok": {
"const": true
},
"data": {
"type": "object",
"required": [
"found"
],
"properties": {
"code": {
"type": "string"
},
"found": {
"type": "boolean"
},
"level": {
"type": "integer"
},
"country": {
"type": "string"
},
"matches": {
"type": "array",
"items": {
"type": "object",
"required": [
"code",
"level",
"country",
"name_latn",
"name_local"
],
"properties": {
"code": {
"type": "string"
},
"level": {
"type": "integer"
},
"country": {
"type": "string"
},
"name_latn": {
"type": "string"
},
"name_local": {
"type": "string"
}
}
}
},
"parents": {
"type": "array",
"items": {
"type": "object",
"required": [
"code",
"level",
"name_latn"
],
"properties": {
"code": {
"type": "string"
},
"level": {
"type": "integer"
},
"name_latn": {
"type": "string"
}
}
}
},
"children": {
"type": "array",
"items": {
"type": "object",
"required": [
"code",
"level",
"name_latn"
],
"properties": {
"code": {
"type": "string"
},
"level": {
"type": "integer"
},
"name_latn": {
"type": "string"
}
}
}
},
"typology": {
"type": "object",
"required": [
"urban",
"urban_label",
"coastal",
"coastal_label",
"mountain",
"mountain_label"
],
"properties": {
"urban": {
"type": [
"string",
"null"
]
},
"coastal": {
"type": [
"string",
"null"
]
},
"mountain": {
"type": [
"string",
"null"
]
},
"urban_label": {
"type": [
"string",
"null"
]
},
"coastal_label": {
"type": [
"string",
"null"
]
},
"mountain_label": {
"type": [
"string",
"null"
]
}
}
},
"name_latn": {
"type": "string"
},
"input_code": {
"type": "string"
},
"name_local": {
"type": "string"
},
"total_matches": {
"type": "integer"
},
"canonical_country": {
"type": "string"
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"computed_at",
"price_usd",
"deterministic",
"disclaimer"
],
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"version",
"published"
]
}
},
"price_usd": {
"type": "string"
},
"disclaimer": {
"type": "string"
},
"request_id": {
"type": "string"
},
"computed_at": {
"type": "string",
"description": "RFC 3339 UTC with milliseconds"
},
"deterministic": {
"type": "boolean"
}
}
},
"route": {
"const": "/v1/ref/nuts"
},
"version": {
"type": "string"
}
}
}
}
}
}
}
}
},
"x402Version": 2
},
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://api.duoleads.com/v1/ref/airport",
"tags": [
"deterministic",
"no-api-key",
"ref",
"travel",
"airports"
],
"iconUrl": "https://api.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Look up an airport by IATA or ICAO code and get its name, city, country, ISO 3166-2 region code, WGS-84 coordinates, elevation and IANA time zone, or find the nearest airports to a coordinate within a radius. Covers every airport worldwide that holds a three-letter IATA code and scheduled service. Returns the code type that matched and the distance in kilometres for proximity results.",
"serviceName": "Duo Data Utilities"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"code": "AMS"
}
},
"output": {
"type": "json",
"example": {
"ok": true,
"data": {
"found": true,
"airport": {
"lat": 52.3086,
"lon": 4.76389,
"iata": "AMS",
"icao": "EHAM",
"name": "Amsterdam Airport Schiphol",
"type": "large_airport",
"region": "NL-NH",
"country": "NL",
"timezone": "Europe/Amsterdam",
"elevation_ft": -11,
"municipality": "Amsterdam"
},
"matched_on": "iata"
},
"meta": {
"sources": [
{
"id": "ourairports",
"licence": "Public Domain",
"version": "2026-09-28 extract",
"published": "2026-09-28",
"attribution": "OurAirports (public domain)"
},
{
"id": "timezone-boundary-builder",
"licence": "ODbL-1.0",
"version": "2026d",
"published": "2026-09-29",
"attribution": "Time zones derived from timezone-boundary-builder data (https://github.com/evansiroky/timezone-boundary-builder), (c) contributors, ODbL 1.0, via timezonefinder 9.0.0"
}
],
"price_usd": "0.05",
"disclaimer": "Factual output of a deterministic computation over public data. Provided as is, with no warranty of accuracy, completeness or availability. Not investment, financial, legal, tax, medical or any other professional advice, and not a recommendation. Verify before relying on it. Terms: https://api.duoleads.com/terms",
"request_id": "01K6B7Q4ZC8H3F2M9WXR5TYN0D",
"computed_at": "2026-09-28T12:00:00.000Z",
"deterministic": true
},
"route": "/v1/ref/airport",
"version": "1.0.0"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [],
"properties": {
"code": {
"type": "string",
"maxLength": 16,
"description": "3-letter IATA or 4-letter ICAO code, case-insensitive."
},
"near": {
"type": "string",
"maxLength": 64,
"description": "lat,lon to search around."
},
"limit": {
"type": "string",
"default": "5",
"pattern": "^[+-]?\\d+$",
"maxLength": 64,
"description": "Maximum results 1-25, default 5. Only with near."
},
"country": {
"type": "string",
"maxLength": 16,
"description": "ISO 3166-1 alpha-2 filter."
},
"radius_km": {
"type": "string",
"default": "100",
"pattern": "^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?$",
"maxLength": 64,
"description": "Search radius in km, 1-1000, default 100. Only with near."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"required": [
"ok",
"route",
"version",
"data",
"meta"
],
"properties": {
"ok": {
"const": true
},
"data": {
"type": "object",
"required": [
"found"
],
"properties": {
"found": {
"type": "boolean"
},
"nearby": {
"type": "array",
"items": {
"type": "object",
"required": [
"iata",
"icao",
"name",
"municipality",
"country",
"region",
"lat",
"lon",
"elevation_ft",
"type",
"timezone",
"distance_km",
"bearing_deg"
],
"properties": {
"lat": {
"type": "number"
},
"lon": {
"type": "number"
},
"iata": {
"type": "string"
},
"icao": {
"type": "string"
},
"name": {
"type": "string"
},
"type": {
"type": "string"
},
"region": {
"type": "string"
},
"country": {
"type": "string"
},
"timezone": {
"type": "string"
},
"bearing_deg": {
"type": "number"
},
"distance_km": {
"type": "number"
},
"elevation_ft": {
"type": [
"number",
"null"
]
},
"municipality": {
"type": "string"
}
}
}
},
"airport": {
"type": "object",
"required": [
"iata",
"icao",
"name",
"municipality",
"country",
"region",
"lat",
"lon",
"elevation_ft",
"type",
"timezone"
],
"properties": {
"lat": {
"type": "number"
},
"lon": {
"type": "number"
},
"iata": {
"type": "string"
},
"icao": {
"type": "string"
},
"name": {
"type": "string"
},
"type": {
"type": "string"
},
"region": {
"type": "string"
},
"country": {
"type": "string"
},
"timezone": {
"type": "string"
},
"elevation_ft": {
"type": [
"number",
"null"
]
},
"municipality": {
"type": "string"
}
}
},
"matched_on": {
"type": "string"
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"computed_at",
"price_usd",
"deterministic",
"disclaimer"
],
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"version",
"published"
]
}
},
"price_usd": {
"type": "string"
},
"disclaimer": {
"type": "string"
},
"request_id": {
"type": "string"
},
"computed_at": {
"type": "string",
"description": "RFC 3339 UTC with milliseconds"
},
"deterministic": {
"type": "boolean"
}
}
},
"route": {
"const": "/v1/ref/airport"
},
"version": {
"type": "string"
}
}
}
}
}
}
}
}
},
"x402Version": 2
},
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://api.duoleads.com/v1/ref/currency",
"tags": [
"deterministic",
"no-api-key",
"ref",
"finance",
"currency"
],
"iconUrl": "https://api.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Look up a currency by its ISO 4217 alphabetic or numeric code: the official English name, minor-unit exponent, fund flag, the smallest cash denomination where it differs from the minor unit, the territories that use it, and historic codes on request. Returns the correct rounding increment for cash amounts, which is what a caller needs to render or settle a price. This route returns currency facts only and never an exchange rate.",
"serviceName": "Duo Data Utilities"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"code": "EUR",
"include": "territories"
}
},
"output": {
"type": "json",
"example": {
"ok": true,
"data": {
"code": "EUR",
"name": "Euro",
"found": true,
"status": "current",
"is_fund": false,
"numeric": "978",
"minor_units": 2,
"territories": [
"AD",
"AT",
"AX",
"BE",
"BG",
"BL",
"CY",
"DE",
"EE",
"ES",
"FI",
"FR",
"GF",
"GP",
"GR",
"HR",
"IE",
"IT",
"LT",
"LU",
"LV",
"MC",
"ME",
"MF",
"MQ",
"MT",
"NL",
"PM",
"PT",
"RE",
"SI",
"SK",
"SM",
"TF",
"VA",
"YT"
],
"cash_rounding": null,
"cash_minor_units": 2
},
"meta": {
"sources": [
{
"id": "iso-4217",
"licence": "Public data (owner decision 2026-09-29)",
"version": "SIX list one 2026-09-17, list three 2026-01-01",
"published": "2026-09-17",
"attribution": "ISO 4217 currency and funds code lists, published by SIX Group as secretariat of the ISO 4217 Maintenance Agency (public data)"
},
{
"id": "cldr-currency-data",
"licence": "Unicode-3.0",
"version": "48.2.2",
"published": "2026-09-28",
"attribution": "Unicode CLDR, © Unicode, Inc."
}
],
"price_usd": "0.05",
"disclaimer": "Factual output of a deterministic computation over public data. Provided as is, with no warranty of accuracy, completeness or availability. Not investment, financial, legal, tax, medical or any other professional advice, and not a recommendation. Verify before relying on it. Terms: https://api.duoleads.com/terms",
"request_id": "01K6B7Q4ZC8H3F2M9WXR5TYN0D",
"computed_at": "2026-09-28T12:00:00.000Z",
"deterministic": true
},
"route": "/v1/ref/currency",
"version": "1.0.0"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [],
"properties": {
"code": {
"type": "string",
"maxLength": 16,
"description": "ISO 4217 alpha-3 or 3-digit numeric code."
},
"country": {
"type": "string",
"maxLength": 16,
"description": "ISO 3166-1 alpha-2; returns the currencies in use there."
},
"include": {
"type": "string",
"maxLength": 64,
"description": "Comma-separated: territories, historic. Default none."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"required": [
"ok",
"route",
"version",
"data",
"meta"
],
"properties": {
"ok": {
"const": true
},
"data": {
"type": "object",
"required": [
"found"
],
"properties": {
"code": {
"type": "string"
},
"name": {
"type": "string"
},
"found": {
"type": "boolean"
},
"status": {
"type": "string"
},
"country": {
"type": "string"
},
"is_fund": {
"type": "boolean"
},
"numeric": {
"type": [
"string",
"null"
]
},
"withdrawn": {
"type": "string"
},
"currencies": {
"type": "array",
"items": {
"type": "object",
"required": [
"code",
"numeric",
"name",
"minor_units",
"cash_minor_units",
"cash_rounding",
"is_fund",
"status"
],
"properties": {
"code": {
"type": "string"
},
"name": {
"type": "string"
},
"status": {
"type": "string"
},
"is_fund": {
"type": "boolean"
},
"numeric": {
"type": [
"string",
"null"
]
},
"minor_units": {
"type": [
"integer",
"null"
]
},
"territories": {
"type": "array",
"items": {
"type": "string"
}
},
"cash_rounding": {
"type": [
"number",
"null"
]
},
"cash_minor_units": {
"type": [
"integer",
"null"
]
}
}
}
},
"minor_units": {
"type": [
"integer",
"null"
]
},
"territories": {
"type": "array",
"items": {
"type": "string"
}
},
"cash_rounding": {
"type": [
"number",
"null"
]
},
"cash_minor_units": {
"type": [
"integer",
"null"
]
},
"numeric_shared_with": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"computed_at",
"price_usd",
"deterministic",
"disclaimer"
],
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"version",
"published"
]
}
},
"price_usd": {
"type": "string"
},
"disclaimer": {
"type": "string"
},
"request_id": {
"type": "string"
},
"computed_at": {
"type": "string",
"description": "RFC 3339 UTC with milliseconds"
},
"deterministic": {
"type": "boolean"
}
}
},
"route": {
"const": "/v1/ref/currency"
},
"version": {
"type": "string"
}
}
}
}
}
}
}
}
},
"x402Version": 2
},
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://api.duoleads.com/v1/ref/country",
"tags": [
"deterministic",
"no-api-key",
"ref",
"countries",
"iso-3166"
],
"iconUrl": "https://api.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Look up a country or territory by ISO 3166-1 alpha-2, alpha-3 or numeric code, or by name, and get the other codes, the official and common English names, the UN M49 region and sub-region, the currencies in use, the country-code top-level domain, and optionally the full ISO 3166-2 subdivision list with each subdivision's type. Also resolves an ISO 3166-2 subdivision code such as NL-NH directly. Names are matched case- and accent-insensitively.",
"serviceName": "Duo Data Utilities"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"code": "NL"
}
},
"output": {
"type": "json",
"example": {
"ok": true,
"data": {
"m49": {
"region": "150",
"subregion": "155",
"region_name": "Europe",
"intermediate": null,
"subregion_name": "Western Europe",
"intermediate_name": null
},
"tld": [
".nl"
],
"kind": "country",
"name": "Netherlands",
"found": true,
"alpha_2": "NL",
"alpha_3": "NLD",
"numeric": "528",
"currencies": [
"EUR"
],
"official_name": "Kingdom of the Netherlands",
"subdivision_count": 18
},
"meta": {
"sources": [
{
"id": "iso-codes",
"licence": "LGPL-2.1-or-later",
"version": "Debian iso-codes data/iso_3166-1.json (official_name) and data/iso_3166-2.json, retrieved 2026-09-28",
"published": "2026-09-28",
"attribution": "ISO 3166-1 official names and ISO 3166-2 subdivision data from Debian iso-codes (https://salsa.debian.org/iso-codes-team/iso-codes), (c) 2016 Dr. Tobias Quathamer, LGPL-2.1-or-later"
},
{
"id": "country-codes",
"licence": "PDDL-1.0",
"version": "datasets/country-codes, retrieved 2026-09-28",
"published": "2026-09-28",
"attribution": "Open Knowledge Foundation datasets/country-codes (ISO 3166-1 codes)"
},
{
"id": "cldr",
"licence": "Unicode-3.0",
"version": "48.2.2",
"published": "2026-09-28",
"attribution": "Unicode CLDR, © Unicode, Inc."
}
],
"price_usd": "0.05",
"disclaimer": "Factual output of a deterministic computation over public data. Provided as is, with no warranty of accuracy, completeness or availability. Not investment, financial, legal, tax, medical or any other professional advice, and not a recommendation. Verify before relying on it. Terms: https://api.duoleads.com/terms",
"request_id": "01K6B7Q4ZC8H3F2M9WXR5TYN0D",
"computed_at": "2026-09-28T12:00:00.000Z",
"deterministic": true
},
"route": "/v1/ref/country",
"version": "1.0.0"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [],
"properties": {
"code": {
"type": "string",
"maxLength": 16,
"description": "ISO 3166-1 alpha-2, alpha-3 or numeric code, or an ISO 3166-2 subdivision code such as NL-NH."
},
"name": {
"type": "string",
"maxLength": 128,
"description": "Substring search on country names, case- and accent-insensitive."
},
"include": {
"type": "string",
"default": "m49,currency,tld",
"maxLength": 64,
"description": "Comma-separated: subdivisions, m49, currency, tld. Default m49,currency,tld."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"required": [
"ok",
"route",
"version",
"data",
"meta"
],
"properties": {
"ok": {
"const": true
},
"data": {
"type": "object",
"required": [
"found"
],
"properties": {
"m49": {
"type": "object",
"required": [
"region",
"region_name",
"subregion",
"subregion_name",
"intermediate",
"intermediate_name"
],
"properties": {
"region": {
"type": [
"string",
"null"
]
},
"subregion": {
"type": [
"string",
"null"
]
},
"region_name": {
"type": [
"string",
"null"
]
},
"intermediate": {
"type": [
"string",
"null"
]
},
"subregion_name": {
"type": [
"string",
"null"
]
},
"intermediate_name": {
"type": [
"string",
"null"
]
}
}
},
"tld": {
"type": "array",
"items": {
"type": "string"
}
},
"kind": {
"type": "string"
},
"name": {
"type": "string"
},
"found": {
"type": "boolean"
},
"alpha_2": {
"type": "string"
},
"alpha_3": {
"type": "string"
},
"matches": {
"type": "array",
"items": {
"type": "object",
"required": [
"alpha_2",
"alpha_3",
"numeric",
"name"
],
"properties": {
"name": {
"type": "string"
},
"alpha_2": {
"type": "string"
},
"alpha_3": {
"type": "string"
},
"numeric": {
"type": "string"
}
}
}
},
"numeric": {
"type": "string"
},
"currencies": {
"type": "array",
"items": {
"type": "string"
}
},
"subdivision": {
"type": "object",
"required": [
"code",
"name",
"type",
"parent"
],
"properties": {
"code": {
"type": "string"
},
"name": {
"type": "string"
},
"type": {
"type": "string"
},
"parent": {
"type": [
"string",
"null"
]
}
}
},
"subdivisions": {
"type": "array",
"items": {
"type": "object",
"required": [
"code",
"name",
"type",
"parent"
],
"properties": {
"code": {
"type": "string"
},
"name": {
"type": "string"
},
"type": {
"type": "string"
},
"parent": {
"type": [
"string",
"null"
]
}
}
}
},
"official_name": {
"type": "string"
},
"total_matches": {
"type": "integer"
},
"subdivision_count": {
"type": "integer"
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"computed_at",
"price_usd",
"deterministic",
"disclaimer"
],
"properties": {
"sources": {
"type": "array"
},
"price_usd": {
"type": "string"
},
"disclaimer": {
"type": "string"
},
"request_id": {
"type": "string"
},
"computed_at": {
"type": "string"
},
"deterministic": {
"type": "boolean"
}
}
},
"route": {
"const": "/v1/ref/country"
},
"version": {
"type": "string"
}
}
}
}
}
}
}
}
},
"x402Version": 2
},
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://api.duoleads.com/v1/num/radix",
"tags": [
"deterministic",
"no-api-key",
"num",
"numbers",
"conversion"
],
"iconUrl": "https://api.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Convert an integer between any two numeric bases from 2 to 36, with arbitrary precision so values far beyond 2^53 are exact. Accepts an optional sign and common prefixes (0x, 0b, 0o), validates every digit against the source base, and returns the value in the target base, in decimal, and as its bit length and digit count.",
"serviceName": "Duo Data Utilities"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"to": "10",
"value": "0xdeadbeef"
}
},
"output": {
"type": "json",
"example": {
"ok": true,
"data": {
"to": 10,
"from": 16,
"exact": true,
"digits": 10,
"result": "3735928559",
"decimal": "3735928559",
"negative": false,
"bit_length": 32
},
"meta": {
"price_usd": "0.05",
"disclaimer": "Factual output of a deterministic computation over public data. Provided as is, with no warranty of accuracy, completeness or availability. Not investment, financial, legal, tax, medical or any other professional advice, and not a recommendation. Verify before relying on it. Terms: https://api.duoleads.com/terms",
"request_id": "01K6B7Q4ZC8H3F2M9WXR5TYN0D",
"computed_at": "2026-09-28T12:00:00.000Z",
"deterministic": true
},
"route": "/v1/num/radix",
"version": "1.0.0"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [
"value"
],
"properties": {
"to": {
"type": "string",
"default": "10",
"pattern": "^[+-]?\\d+$",
"maxLength": 64,
"description": "Target base 2-36, default 10."
},
"case": {
"enum": [
"lower",
"upper"
],
"type": "string",
"default": "lower",
"maxLength": 64,
"description": "Digit case for bases above 10: lower (default) or upper."
},
"from": {
"type": "string",
"default": "auto",
"maxLength": 8,
"description": "Source base 2-36, or auto (default) to read a 0x/0b/0o prefix."
},
"value": {
"type": "string",
"maxLength": 1024,
"description": "Integer to convert; optional sign and 0x/0b/0o prefix."
},
"prefix": {
"enum": [
"true",
"false"
],
"type": "string",
"default": "false",
"maxLength": 64,
"description": "Emit 0x/0b/0o where conventional. Default false."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"required": [
"ok",
"route",
"version",
"data",
"meta"
],
"properties": {
"ok": {
"const": true
},
"data": {
"type": "object",
"required": [
"result",
"decimal",
"from",
"to",
"negative",
"digits",
"bit_length",
"exact"
],
"properties": {
"to": {
"type": "integer"
},
"from": {
"type": "integer"
},
"exact": {
"type": "boolean"
},
"digits": {
"type": "integer"
},
"result": {
"type": "string"
},
"decimal": {
"type": "string"
},
"negative": {
"type": "boolean"
},
"bit_length": {
"type": "integer"
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"computed_at",
"price_usd",
"deterministic",
"disclaimer"
],
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"version",
"published"
]
}
},
"price_usd": {
"type": "string"
},
"disclaimer": {
"type": "string"
},
"request_id": {
"type": "string"
},
"computed_at": {
"type": "string",
"description": "RFC 3339 UTC with milliseconds"
},
"deterministic": {
"type": "boolean"
}
}
},
"route": {
"const": "/v1/num/radix"
},
"version": {
"type": "string"
}
}
}
}
}
}
}
}
},
"x402Version": 2
},
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://api.duoleads.com/v1/num/words",
"tags": [
"deterministic",
"no-api-key",
"num",
"numbers",
"localisation"
],
"iconUrl": "https://api.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Spell a number out in words in English, Dutch, German, French, Spanish, Italian, Portuguese, Polish, Russian, Turkish, Swedish or Japanese, in cardinal, ordinal or currency form. Currency form agrees the number with the currency noun and gives real minor-unit names for 19 currencies (EUR, USD, GBP, CHF, SEK, NOK, DKK, PLN, RUB, TRY, CNY, INR, BRL, MXN, CAD, AUD, NZD, CZK, HUF); any other ISO 4217 code uses a fraction such as 56/100. Values up to 10^15.",
"serviceName": "Duo Data Utilities"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"lang": "nl",
"value": "1234"
}
},
"output": {
"type": "json",
"example": {
"ok": true,
"data": {
"form": "cardinal",
"lang": "nl",
"parts": null,
"value": "1234",
"words": "duizend tweehonderdvierendertig",
"currency": null
},
"meta": {
"price_usd": "0.05",
"disclaimer": "Factual output of a deterministic computation over public data. Provided as is, with no warranty of accuracy, completeness or availability. Not investment, financial, legal, tax, medical or any other professional advice, and not a recommendation. Verify before relying on it. Terms: https://api.duoleads.com/terms",
"request_id": "01K6B7Q4ZC8H3F2M9WXR5TYN0D",
"computed_at": "2026-09-28T12:00:00.000Z",
"deterministic": true
},
"route": "/v1/num/words",
"version": "1.0.0"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [
"value"
],
"properties": {
"case": {
"enum": [
"lower",
"sentence",
"title"
],
"type": "string",
"default": "lower",
"maxLength": 64,
"description": "lower (default), sentence or title."
},
"form": {
"enum": [
"cardinal",
"ordinal",
"currency",
"year"
],
"type": "string",
"default": "cardinal",
"maxLength": 64,
"description": "cardinal (default), ordinal, currency or year."
},
"lang": {
"enum": [
"en",
"nl",
"de",
"fr",
"es",
"it",
"pt",
"pl",
"ru",
"tr",
"sv",
"ja"
],
"type": "string",
"default": "en",
"maxLength": 64,
"description": "Language, ISO 639-1. Default en."
},
"value": {
"type": "string",
"maxLength": 32,
"description": "Integer or decimal, absolute value below 1e15."
},
"currency": {
"type": "string",
"maxLength": 16,
"description": "ISO 4217 code. Required when form=currency, rejected otherwise."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"required": [
"ok",
"route",
"version",
"data",
"meta"
],
"properties": {
"ok": {
"const": true
},
"data": {
"type": "object",
"required": [
"words",
"value",
"lang",
"form",
"currency"
],
"properties": {
"form": {
"type": "string"
},
"lang": {
"type": "string"
},
"parts": {
"type": [
"object",
"null"
],
"required": [
"integer_words",
"minor_words"
],
"properties": {
"minor_words": {
"type": [
"string",
"null"
]
},
"integer_words": {
"type": "string"
}
}
},
"value": {
"type": "string"
},
"words": {
"type": "string"
},
"currency": {
"type": [
"object",
"null"
],
"required": [
"code",
"unit_singular",
"unit_plural",
"minor_singular",
"minor_plural",
"minor_units"
],
"properties": {
"code": {
"type": "string"
},
"minor_units": {
"type": "integer"
},
"unit_plural": {
"type": "string"
},
"minor_plural": {
"type": [
"string",
"null"
]
},
"unit_singular": {
"type": "string"
},
"minor_singular": {
"type": [
"string",
"null"
]
}
}
},
"rounding_applied": {
"type": "boolean"
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"computed_at",
"price_usd",
"deterministic",
"disclaimer"
],
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"version",
"published"
]
}
},
"price_usd": {
"type": "string"
},
"disclaimer": {
"type": "string"
},
"request_id": {
"type": "string"
},
"computed_at": {
"type": "string",
"description": "RFC 3339 UTC with milliseconds"
},
"deterministic": {
"type": "boolean"
}
}
},
"route": {
"const": "/v1/num/words"
},
"version": {
"type": "string"
}
}
}
}
}
}
}
}
},
"x402Version": 2
},
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://api.duoleads.com/v1/num/stats",
"tags": [
"deterministic",
"no-api-key",
"num",
"numbers",
"statistics"
],
"iconUrl": "https://api.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Descriptive statistics for a supplied numeric array in one call: count, sum, mean, median, mode, variance and standard deviation with variance and standard deviation honouring ddof (default 1, the sample form; 0 gives the population form) and always-population *_population fields, min, max, range, the quartiles and interquartile range, skewness, kurtosis, and any requested percentiles. Percentiles use a named interpolation method so the result is reproducible rather than implementation-defined.",
"serviceName": "Duo Data Utilities"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"values": "1,2,3,4,5"
}
},
"output": {
"type": "json",
"example": {
"ok": true,
"data": {
"n": 5,
"q1": 2,
"q3": 4,
"iqr": 2,
"max": 5,
"min": 1,
"sum": 15,
"ddof": 1,
"mean": 3,
"mode": null,
"range": 4,
"stdev": 1.5811388300841898,
"median": 3,
"method": "linear",
"skewness": 0,
"variance": 2.5,
"percentiles": {
"25": 2,
"50": 3,
"75": 4
},
"outliers_tukey": [],
"kurtosis_excess": -1.1999999999999993,
"stdev_population": 1.4142135623730951,
"variance_population": 2
},
"meta": {
"price_usd": "0.05",
"disclaimer": "Factual output of a deterministic computation over public data. Provided as is, with no warranty of accuracy, completeness or availability. Not investment, financial, legal, tax, medical or any other professional advice, and not a recommendation. Verify before relying on it. Terms: https://api.duoleads.com/terms",
"request_id": "01K6B7Q4ZC8H3F2M9WXR5TYN0D",
"computed_at": "2026-09-28T12:00:00.000Z",
"deterministic": true
},
"route": "/v1/num/stats",
"version": "1.0.0"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [
"values"
],
"properties": {
"ddof": {
"type": "string",
"default": "1",
"pattern": "^[+-]?\\d+$",
"maxLength": 64,
"description": "Delta degrees of freedom for variance/stdev: 1 (default, sample, n-1) or 0 (population, n). The *_population fields are always population."
},
"method": {
"enum": [
"linear",
"nearest",
"lower",
"higher",
"midpoint"
],
"type": "string",
"default": "linear",
"maxLength": 64,
"description": "Percentile interpolation (NumPy/R names): linear (default), nearest, lower, higher, midpoint."
},
"values": {
"type": "string",
"maxLength": 4096,
"description": "Comma-separated finite numbers, at most 500 values."
},
"percentiles": {
"type": "string",
"default": "25,50,75",
"maxLength": 256,
"description": "Comma-separated percentiles 0-100, at most 20. Default 25,50,75."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"required": [
"ok",
"route",
"version",
"data",
"meta"
],
"properties": {
"ok": {
"const": true
},
"data": {
"type": "object",
"required": [
"n",
"sum",
"mean",
"median",
"mode",
"ddof",
"variance",
"stdev",
"variance_population",
"stdev_population",
"min",
"max",
"range",
"q1",
"q3",
"iqr",
"skewness",
"kurtosis_excess",
"percentiles",
"method",
"outliers_tukey"
],
"properties": {
"n": {
"type": "integer"
},
"q1": {
"type": [
"number",
"null"
]
},
"q3": {
"type": [
"number",
"null"
]
},
"iqr": {
"type": [
"number",
"null"
]
},
"max": {
"type": "number"
},
"min": {
"type": "number"
},
"sum": {
"type": [
"number",
"null"
]
},
"ddof": {
"type": "integer"
},
"mean": {
"type": [
"number",
"null"
]
},
"mode": {
"type": [
"array",
"null"
],
"items": {
"type": "number"
}
},
"range": {
"type": [
"number",
"null"
]
},
"stdev": {
"type": [
"number",
"null"
]
},
"median": {
"type": [
"number",
"null"
]
},
"method": {
"type": "string"
},
"skewness": {
"type": [
"number",
"null"
]
},
"variance": {
"type": [
"number",
"null"
]
},
"percentiles": {
"type": "object",
"description": "keyed by caller-chosen names",
"additionalProperties": {
"type": [
"number",
"null"
]
}
},
"outliers_tukey": {
"type": "array",
"items": {
"type": "number"
}
},
"kurtosis_excess": {
"type": [
"number",
"null"
]
},
"stdev_population": {
"type": [
"number",
"null"
]
},
"variance_population": {
"type": [
"number",
"null"
]
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"computed_at",
"price_usd",
"deterministic",
"disclaimer"
],
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"version",
"published"
]
}
},
"price_usd": {
"type": "string"
},
"disclaimer": {
"type": "string"
},
"request_id": {
"type": "string"
},
"computed_at": {
"type": "string",
"description": "RFC 3339 UTC with milliseconds"
},
"deterministic": {
"type": "boolean"
}
}
},
"route": {
"const": "/v1/num/stats"
},
"version": {
"type": "string"
}
}
}
}
}
}
}
}
},
"x402Version": 2
},
{
"error": "Payment required",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0xCD673f7e1daD254347AEab6be0DEFe8b9C6b3A39",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 120
}
],
"resource": {
"url": "https://api.duoleads.com/v1/num/allocate",
"tags": [
"deterministic",
"no-api-key",
"num",
"finance",
"money"
],
"iconUrl": "https://api.duoleads.com/logo.png",
"mimeType": "application/json",
"description": "Split a money amount into shares without losing or inventing a cent. Divide evenly into N parts, or by a list of ratios, and the remainder is distributed one minor unit at a time by a named, deterministic rule — largest-remainder, first-wins or last-wins — so the parts always sum exactly to the original. Uses the ISO 4217 minor-unit exponent of the currency, so zero- and three-decimal currencies work (JPY 0, KWD 3); metals and XXX are rejected.",
"serviceName": "Duo Data Utilities"
},
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"parts": "3",
"amount": "100.00",
"currency": "EUR"
}
},
"output": {
"type": "json",
"example": {
"ok": true,
"data": {
"rule": "largest-remainder",
"total": "100.00",
"shares": [
"33.34",
"33.33",
"33.33"
],
"currency": "EUR",
"minor_units": 2,
"shares_minor": [
3334,
3333,
3333
],
"remainder_distributed": 1
},
"meta": {
"sources": [
{
"id": "iso-4217",
"licence": "Public data (owner decision 2026-09-29)",
"version": "SIX list one 2026-09-17, list three 2026-01-01",
"published": "2026-09-17",
"attribution": "ISO 4217 currency and funds code lists, published by SIX Group as secretariat of the ISO 4217 Maintenance Agency (public data)"
}
],
"price_usd": "0.05",
"disclaimer": "Factual output of a deterministic computation over public data. Provided as is, with no warranty of accuracy, completeness or availability. Not investment, financial, legal, tax, medical or any other professional advice, and not a recommendation. Verify before relying on it. Terms: https://api.duoleads.com/terms",
"request_id": "01K6B7Q4ZC8H3F2M9WXR5TYN0D",
"computed_at": "2026-09-28T12:00:00.000Z",
"deterministic": true
},
"route": "/v1/num/allocate",
"version": "1.0.0"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"type": "object",
"required": [
"amount",
"currency"
],
"properties": {
"rule": {
"enum": [
"largest-remainder",
"first",
"last",
"round-robin"
],
"type": "string",
"default": "largest-remainder",
"maxLength": 64,
"description": "Remainder rule: largest-remainder (default), first, last or round-robin."
},
"parts": {
"type": "string",
"pattern": "^[+-]?\\d+$",
"maxLength": 64,
"description": "Number of equal parts, 1-1000. One of parts or ratios."
},
"amount": {
"type": "string",
"maxLength": 24,
"description": "Decimal amount, absolute value below 1e12."
},
"ratios": {
"type": "string",
"maxLength": 4096,
"description": "Comma-separated non-negative ratios, at most 1000, each with at most 15 integer digits and 15 decimal places. One of parts or ratios."
},
"currency": {
"type": "string",
"maxLength": 16,
"description": "ISO 4217 alpha-3 code."
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"required": [
"ok",
"route",
"version",
"data",
"meta"
],
"properties": {
"ok": {
"const": true
},
"data": {
"type": "object",
"required": [
"shares",
"shares_minor",
"total",
"currency",
"minor_units",
"remainder_distributed",
"rule"
],
"properties": {
"rule": {
"type": "string"
},
"total": {
"type": "string"
},
"shares": {
"type": "array",
"items": {
"type": "string"
}
},
"currency": {
"type": "string"
},
"minor_units": {
"type": "integer"
},
"shares_minor": {
"type": "array",
"items": {
"type": "integer"
}
},
"remainder_distributed": {
"type": "integer"
}
}
},
"meta": {
"type": "object",
"required": [
"request_id",
"computed_at",
"price_usd",
"deterministic",
"disclaimer"
],
"properties": {
"sources": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"version",
"published"
]
}
},
"price_usd": {
"type": "string"
},
"disclaimer": {
"type": "string"
},
"request_id": {
"type": "string"
},
"computed_at": {
"type": "string",
"description": "RFC 3339 UTC with milliseconds"
},
"deterministic": {
"type": "boolean"
}
}
},
"route": {
"const": "/v1/num/allocate"
},
"version": {
"type": "string"
}
}
}
}
}
}
}
}
},
"x402Version": 2
}
] OVER TIME
All charts use the 30d selector; each series spans only the dates it has data for. Every series is also served as JSON at /api/v1/services/duo-data-utilities/price, /scores, /volume and /buyers. On-chain volume and distinct buyers are measured over the service's settlement address and are a conservative undercount (only settlements that reach a measured facilitator are counted). The on-chain series roll up hourly, so the latest day can be up to about an hour behind; distinct buyers are counted per payout address, so a service that settles to more than one address is an upper bound.
Median across 33 endpoints. Use the selector to isolate one.
checklist grew 11->14 on 2026-07-28; a step here is a metric change, not a regression
COMPLIANCE
14/14 checks pass · grade Alast 402 captured 2026-10-04 · last up 2026-10-04
- 402 payload captured
- accepts[] array present
- payTo address recoverable
- payTo at accepts[0].payTo (conformant shape)
- payTo is a valid on-chain address
- atomic price declared
- atomic price in a sane range
- asset (token) address declared
- network resolves to CAIP-2
- payment scheme declared
- served over HTTPS
- declares the current x402 version (2)
- EIP-712 domain parameters present on every EVM entry
- x402 v2 envelope delivered in the payment-required header
SITE PILLARS
- homepage reachable
- openapi doc
- pricing page
- llms.txt
- robots.txt
- terms page
recent checks (7) live · click to expand
EMBED THIS BADGE
<a href="https://x402-list.com/services/duo-data-utilities?utm_source=badge&utm_medium=referral&utm_campaign=embed"> <img src="https://x402-list.com/badge/duo-data-utilities.svg" alt="Duo Data Utilities listed on x402-list" height="28"> </a>
[](https://x402-list.com/services/duo-data-utilities?utm_source=badge&utm_medium=referral&utm_campaign=embed)
<a href="https://x402-list.com/services/duo-data-utilities?utm_source=badge&utm_medium=referral&utm_campaign=embed"> <img src="https://x402-list.com/badge/duo-data-utilities.svg?data=uptime" alt="Duo Data Utilities uptime on x402-list" height="28"> </a>