api.duoleads.com
https://api.duoleads.com/v1/id/nationalShares a payout wallet with 32 other endpoints — its adoption is attributed from that shared wallet's traffic, not earned exclusively.
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, no personal data stored.
Reliability & health
Uptime and response time from our own unpaid probes, plus the reliability score built from them.
Uptime
100.0% avgResponse time
p50 8ms · p95 13msData table
| Bucket | Uptime | Probes | Response time |
|---|---|---|---|
| 9/29/2026, 12:00:00 AM | 100% | 8 | 7ms |
| 9/30/2026, 12:00:00 AM | 100% | 12 | 8ms |
| 10/1/2026, 12:00:00 AM | 100% | 12 | 9ms |
| 10/2/2026, 12:00:00 AM | 100% | 12 | 9ms |
| 10/3/2026, 12:00:00 AM | 100% | 13 | 8ms |
| 10/4/2026, 12:00:00 AM | 100% | 10 | 7ms |
| 10/5/2026, 12:00:00 AM | 100% | 6 | 8ms |
- Availability
- 100
- Latency
- 100
- Security
- 100
- Transparency
- 61
- Activity
- 1
How often it was reachable when we probed it (weight 35%).
How quickly it answers when it is up — fast scores high (weight 20%).
Whether it serves over working TLS / https (weight 15%).
Whether the operator disclosed what it does — description, schema, identity (weight 15%).
Observed on-chain payments to this endpoint's wallet — transactions, volume, and distinct paying wallets over the last month (weight 15%; not yet measured when we have not seen its wallet settle).
Confidence 100% — how much probe evidence backs this score. A thin history is flagged, not hidden.
See the scoring methodology for exactly how each number is computed.
Payment
- Currencies
- USDC
- Networks
- base
- Facilitator
- unknown
- SDK
- unknown
Operator
- Company
- inferred — unknown
- Jurisdiction
- —
- Registrar
- Key-Systems GmbH
- Domain registered
- 2020-10-29
- Hosting network
- CLOUDFLARENET
- Hosting country
- —
Operator context is derived from public RDAP/TLS records and unverified. Company and country are only available for endpoints that publish them (an OV/EV TLS certificate or a non-redacted domain record); most endpoints are CDN-fronted and disclose neither.
On-chain activity (base)
Payments per day
last payment 10/2/2026Data table
| Day | Payments | Volume (USD) | Paying wallets |
|---|---|---|---|
| 9/28/2026 | 49 | 2.45 | 1 |
| 9/29/2026 | 55 | 2.75 | 1 |
| 10/1/2026 | 33 | 1.65 | 1 |
| 10/2/2026 | 1 | 0.05 | 1 |
This payout wallet is shared: figures cover all 33 endpoints paid at it, since payments cannot be attributed to one of them. Only payments settled on chains and facilitators we index.
Linked by wallet — likely same operator
On-chain agent identity and the x402 endpoint that shares its settlement wallet.
Response schema
{
"properties": {
"data": {
"description": "valid (boolean), country, kind, normalised (string|null), formatted (string|null), reason (null | length | charset | checksum | structure | reserved_range: a number in a range the issuer reserves or never assigned, e.g. CA SIN starting 0 or 8, UK NINO prefixes BG GB KN NK NT TN ZZ, US EIN unassigned prefixes, NZ IRD outside 10,000,000-150,000,000), algorithm (e.g. elfproef-11, mod-97-10, luhn), derived (object of facts the number encodes, {} when none: birth_date (YYYY-MM-DD) and sex (M|F) for IT cf, SE personnummer, PL pesel, BE rrn, NO fodselsnummer, DK cpr, FI hetu, CZ rc and SK rc; birthplace_code for IT cf; century_assumed (boolean) for SE personnummer, true when a 10-digit form forced the century to be inferred; for BE, NO, DK, FI, CZ and SK the number itself fixes the century (BE by the check digits, NO by the individual number, DK by the sequence digit, FI by the century sign, CZ/SK by the digit count). birth_date is omitted when the encoded date is not a real date, and for NO FH-numbers). FR nir carries no day and no century, so its derived holds sex, birth_year_yy (2 digits), birth_month (1-12, or null for special codes) and department_code instead of birth_date. normalised is the number without separators (SE personnummer keeps a 12-digit input's century and a + sign).",
"properties": {
"algorithm": {
"type": "string"
},
"country": {
"type": "string"
},
"derived": {
"properties": {
"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"
},
"sex": {
"type": "string"
}
},
"type": "object"
},
"formatted": {
"type": [
"string",
"null"
]
},
"kind": {
"type": "string"
},
"normalised": {
"type": [
"string",
"null"
]
},
"reason": {
"type": [
"string",
"null"
]
},
"valid": {
"type": "boolean"
}
},
"required": [
"valid",
"country",
"kind",
"algorithm",
"normalised",
"formatted",
"reason",
"derived"
],
"type": "object"
},
"meta": {
"$ref": "#/components/schemas/Meta"
},
"ok": {
"const": true
},
"route": {
"const": "/v1/id/national"
},
"version": {
"const": "1.0.0"
}
},
"required": [
"ok",
"route",
"version",
"data",
"meta"
],
"type": "object"
}