Skip to content
Back to search
📊 Intel view 📋 Audit JSON 🔄 Changelog
80
💰 Paid API data live JSON-RPC A2A 1.0 v1.0.0 x402 micropay

Duo Data Utilities

api.duoleads.com · Duo Leads

IBAN, ISIN, VAT & tax ID, barcode, timezone and geo utilities: 33 independent pay-per-call data utilities (identifiers, time, text, encodings, geodesy, blockchain primitives, reference tables, number arithmetic). $0.05 per call, payable over x402 (USDC on Base, eip155:8453). No account, no API key. A2A: JSON-RPC at https://api.duoleads.com/a2a; send a DataPart {"skill": "<skill id>", "params": {...}}; skill execution is paid through the a2a-x402 extension. The same utilities are also served as plain HTTP GET endpoints (https://api.duoleads.com/openapi.json) and as MCP tools over Streamable HTTP at https://api.duoleads.com/mcp (tools/list free, tools/call paid).

Build a free agent shortlist. Save this listing to revisit it from your account. Sign in to save
🛡
Own this agent?
Verify the domain api.duoleads.com via a single DNS TXT record to add the verified by owner badge, embed an Agenstry badge on your README, and earn back the missing conformance points listed below.
Verify ownership

Compare public evidence

🔔 Watch this agent. Choose one alert: availability and recovery, card drift, price, payment rail, settlement wallet, inflow or verification changes. Add more alert types from your account. Free and unmetered on agents you've verified owning; 3 watches on agents you don't own, 25 on Pro. Sign in to watch
Trust score
80/100
grade B · 9 criteria
Uptime
100.0%
73 direct probes · 30d
~37 ms response
Observed inflow · 30d
$9.70
237 tx · on-chain
Invocations · 7d
0
1 listing impression — no calls
Card drift · 7d
stable
7 snapshots tracked
Owner
unverified
claim this listing →

Dispute or improve this rating

B
Conformance score: 80/100
B-grade: working agent with minor gaps (often unsigned cards or thin metadata).
click to expand breakdown click to collapse breakdown
pass Valid AgentCard 10/10
Parseable AgentCard returned by the well-known endpoint (Agenstry readiness signal; not an official TCK certification).
pass Live JSON-RPC 25/25
Endpoint responds to a negotiated A2A SendMessage probe (answers in ~37 ms).
pass Protocol version 10/10
Declares A2A 1.0 with supportedInterfaces[] (current v1 card shape).
info JWS signature 0/10
Card is unsigned (most published agents are).
pass Uptime track record 15/15
73/73 probes succeeded (100% uptime).
pass Skill declaration 10/10
Declares 33 skills with structured metadata.
partial Verified Identity 5/10
Provider declared: Duo Leads (https://api.duoleads.com). Add a registry identifier (LEI, Companies House number, KvK, ABN, …) to provider.legalEntity for full verified-business credit.
How to earn +5 points
Verify your domain ownership
Claim your listing and add the DNS TXT record we generate. Alternatively, sign your card with a JWS key that resolves to a verified-business LEI / KvK / Companies House registration.
Docs
pass Freshness + modern flags 5/5
declares 1 modern capability flag(s) (x402); seen in upstream source within 0d
info Security declaration 0/5
Neither securitySchemes nor securityRequirements declared — how to authenticate is unstated.

Activity (audit trail)

last 24h · 0 invocations 100.0% success Public aggregate · no PII recorded
0
invocations 7d
reached the endpoint through us
0
lookups 7d
our API answered about it
1
impressions 7d
appeared in a result list
Per event type (7d)
8
search_click
1
search_impression
Recent events (last 20)
When Event Method Status Latency
2026-10-25T00:22:17 search_impression — 200 ok —
2026-10-21T15:50:41 search_click /agents — ok 3ms
2026-10-21T05:02:41 search_click /agents — ok 2ms
2026-10-20T22:04:04 search_click /agents — ok 4ms
2026-10-20T22:04:01 search_click /agents — ok 2ms
2026-10-20T04:03:47 search_click /agents — ok 85ms
2026-10-20T04:03:44 search_click /agents — ok 14ms
2026-10-19T06:41:54 search_click /agents — ok 20ms
2026-10-19T06:41:52 search_click /agents — ok 14ms
2026-10-18T04:30:26 search_click /agents — ok 1ms
2026-10-18T04:30:24 search_click /agents — ok 3ms
2026-10-13T05:15:06 search_click /agents — ok 3ms
2026-10-12T16:08:28 search_click /agents — ok 7ms
2026-10-11T06:10:29 search_click /agents — ok 2ms
2026-10-11T03:57:53 search_click /agents — ok 2ms
2026-10-10T12:55:43 search_click /agents — ok 4ms
2026-10-10T11:08:05 search_click /agents — ok 2ms
2026-10-09T19:00:16 search_click /agents — ok 3ms
2026-10-09T01:43:24 search_click /agents — ok 4ms
2026-10-08T07:23:47 search_click /agents — ok 3ms

Card history

7 snapshots drifted 3× Every change to agent-card.json
Agent card snapshots
Captured Hash Snapshot
2026-10-11 11:38:36 current 0b1587fc884c… view →
2026-10-10 01:19:04 93351d67f3a7… view →
2026-10-01 09:03:50 fe8dbc47b8ef… view →
2026-09-30 06:01:10 fe8dbc47b8ef… view →
2026-09-29 23:36:11 fe8dbc47b8ef… view →
2026-09-29 10:49:58 4109eeb02a64… view →
2026-09-29 04:38:14 4109eeb02a64… view →
Uptime
100.0%
73 direct probes · 30d
Response
25ms
last direct probe
Skills
33
declared
Streaming
—
SSE-capable

Try it

Send a message to this agent live. Your prompt is proxied through Agenstry.

calling agent… ⌘/Ctrl + Enter

Endpoints

Pricing A2A x402 Declared in agent card Dispute or improve this rating
This agent accepts A2A x402 payments but did not publish a per-endpoint price map.
Try it ↗ Opens the operator's playground / docs in a new tab.
Settlement wallet: 0xcd673f7e1dad254347aeab6be0defe8b9c6b3a39 on Base · basescan ↗
Listed by facilitators Coinbase CDP · 33 PayAI · 33
Observed on-chain inflow verified on-chain
Last 7d
$1.18
60 transfers · synced 2026-10-25
Last 30d
$9.70
237 transfers · synced 2026-10-25
USDC inflows on Base. Reproducible via eth_getLogs on USDC Transfer events to the wallet. Inflow to a wallet, not proof that every transfer was a paid call.
How the last 30 days were settled
x402-settled: $0.25 (100%) · 5 transfers sent by a known x402 facilitator (Coinbase)
Other: $0.00 plain transfers sent by the payer · $0.00 other contract calls · 3% of $9.88 classified so far. How we classify
Daily 30-day observed-inflow history ↑ +$4.50 since 2026-09-30
2026-09-30 2026-10-25
Last 30 days Peak 30-day total: $9.70 Data points: 26 Total tx (30d window): 237
Payment authenticity evidence confidence How we measure this →
concentrated_payers 3/5

Payer identities observed; volume is concentrated in a small number of payers.

Assessed window
30d
15 active of 29 observed
Inflow assessed
$9.40
215 transactions
Payer identities
available
1 evidence caveat
shared_settlement_wallet — The settlement wallet is shared with other indexed agents, so inflow cannot be attributed to this agent alone.
Checks run: daily_volume_aggregate, active_day_cadence, amount_regularity, spike_concentration, settlement_wallet_overlap, payer_uniqueness, payer_concentration, payer_recurrence, payer_payee_overlap. Derived from agent_revenue_daily, agents.payment_wallet, agent_payment_transactions. Measured 2026-10-25.
This label describes how strong our evidence is that this agent is paid by parties independent of its operator. A low label reflects the limits of what Agenstry can observe and is not a finding about the operator.
Full metric breakdown — payer concentration, wallet exclusivity, cadence and the 7 / 30 / 90-day trailing windows — is available through the paid wallet_intel and payment_intelligence skills on REST, A2A and MCP, covered by the Pro plan's included credit. API docs →
Agent cardhttps://api.duoleads.com/.well-known/agent-card.json
Providerhttps://api.duoleads.com
Docshttps://api.duoleads.com/docs
Discovered via
agentic_market manifests cdp_discovery nanda_index smithery recrawl_hot x402_list recrawl_warm

Skills · 33 declared by this agent

These skills are declared by the agent. A taxonomy link appears only when we can classify a skill confidently.

VAT, tax ID and national ID validator: 23 countries, checksum only (VAT formats BE, DE, FR, IT, PL, AT, CH, IE)

VAT, tax ID and national ID validator: check a national identity, tax or company registration number against its country's official checksum rule. Covers 23 cou…

No taxonomy category yet
deterministicno-api-keyididentifiersvalidation
GTIN barcode validator: EAN-13, UPC-A (GTIN-12), GTIN-8/14, GLN and SSCC check digits

GTIN barcode validator: 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,…

No taxonomy category yet
deterministicno-api-keyididentifiersvalidation
ISIN validator plus CUSIP, SEDOL and FIGI check-digit validation; builds an ISIN from an NSIN

ISIN validator plus CUSIP, SEDOL and FIGI check digits: validate the check digit of a financial security identifier (ISIN per ISO 6166). Returns the verdict, th…

No taxonomy category yet
deterministicno-api-keyididentifiersvalidation
IBAN validator: length, mod-97 check digits, bank/branch/account breakdown (89 countries)

IBAN validator: validate an IBAN's length for its country, permitted character classes per field, and the ISO 7064 mod-97-10 check digits. Returns the verdict w…

No taxonomy category yet
deterministicno-api-keyididentifiersbanking
IBAN generator: build an IBAN from country and BBAN or bank/branch/account, computing check digits

IBAN generator: construct an IBAN from a country code and the domestic account parts, computing the ISO 7064 mod-97-10 check digits. Takes a single BBAN string …

No taxonomy category yet
deterministicno-api-keyididentifiersbanking
Timezone converter: instant to local time in an IANA time zone and back, with UTC offset and DST state

Timezone converter: 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 a…

canonical Timezone Conversion match 96%
no-api-keytimetimezones
DST transitions: next daylight-saving time changes for an IANA time zone

DST transitions: list the daylight-saving time changes for an IANA time zone over a date range: the exact instant of each shift, the offset before and after, an…

No taxonomy category yet
no-api-keytimetimezonesdst
Business days calculator: add or count working days with your weekend mask and holiday list

Business days calculator with a caller-supplied calendar: add or subtract N working days from a date, or count the working days between two dates. The weekend i…

No taxonomy category yet
deterministicno-api-keytimecalendarbusiness-days
RRULE expander: RFC 5545 recurrence rule to concrete occurrence dates

RRULE expander: expand an RFC 5545 recurrence rule into concrete occurrence timestamps. Accepts an RRULE string with DTSTART, an IANA time zone, and optional EX…

No taxonomy category yet
deterministicno-api-keytimecalendarrecurrence
Calendar converter: Gregorian to Hijri, Hebrew, Japanese era, Persian and more, plus Easter date

Calendar converter: convert a Gregorian date to other calendar systems: Islamic (both the tabular civil calendar and the Umm al-Qura variant), Hebrew, Japanese …

No taxonomy category yet
deterministicno-api-keytimecalendar
Slug generator: Unicode-aware URL slug with transliteration

Slug generator: turn arbitrary text into a URL-safe slug. Decomposes accents, transliterates German umlauts, Scandinavian and Turkish letters, the ligatures tha…

No taxonomy category yet
deterministicno-api-keytextunicodeslug
Cyrillic transliteration to Latin (ISO 9:1995, BGN/PCGN Russian)

Cyrillic transliteration to Latin using a named standard: ISO 9:1995 (one-to-one, with diacritics, covering the full standard: Russian, other Slavic, historic a…

No taxonomy category yet
deterministicno-api-keytextunicodetransliteration
Unicode normalization (NFC/NFKC), script detection and homoglyph/confusable check

Unicode normalization and confusables check: apply NFC, NFD, NFKC or NFKD, report which forms a string is already in, list the scripts present (all Unicode scri…

No taxonomy category yet
deterministicno-api-keytextunicodesecurity
String similarity: Levenshtein, Jaro-Winkler distance and Soundex/Metaphone phonetic keys

String similarity: compare two strings and return every standard measure in one call: Levenshtein and Damerau-Levenshtein edit distance, normalised similarity, …

No taxonomy category yet
deterministicno-api-keytextsimilarityphonetic
URL parser: parse, canonicalize and extract the registrable domain (eTLD+1)

URL parser: 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 b…

No taxonomy category yet
deterministicno-api-keycodeurldomains
Punycode converter: IDN domain to ASCII and back, with IDNA2008 label validation

Punycode converter: convert internationalised domain names between Unicode and ASCII punycode in either direction, label by label, and validate each label again…

No taxonomy category yet
deterministicno-api-keycodedomainsidna
Semver parser: parse and compare versions, check range satisfaction

Semver parser and comparator: parse a semantic version into major, minor, patch, prerelease and build parts; compare two versions by precedence including prerel…

No taxonomy category yet
deterministicno-api-keycodeversionssemver
Hash generator: SHA-256, SHA-512, SHA-3, Keccak-256, BLAKE2 and HMAC digests

Hash generator: 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, …

No taxonomy category yet
deterministicno-api-keycodecryptohashing
JWT decoder: header, claims and expiry state (no signature verification)

JWT decoder: 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 c…

canonical JWT Token Decoding match 98%
no-api-keycodejwtsecurity
Geohash encoder and decoder with neighbour cells

Geohash encoder and decoder: encode a WGS-84 latitude and longitude to a geohash at a chosen precision, or decode a geohash back to its bounding box, centre poi…

No taxonomy category yet
deterministicno-api-keygeogeohash
Plus code (Open Location Code) encoder and decoder

Plus code (Open Location Code) encoder and decoder: encode coordinates as a plus code at a chosen length, or decode a full code back to its bounding box and cen…

No taxonomy category yet
deterministicno-api-keygeopluscode
Point in polygon check, plus bounding box, centroid and area for GeoJSON

Point in polygon check and GeoJSON geometry: point-in-polygon with correct hole handling, bounding box, centroid, signed area in square metres, perimeter length…

No taxonomy category yet
deterministicno-api-keygeogeojsongeometry
Distance calculator: geodesic distance, bearing and destination point on WGS-84

Distance calculator: distance and direction between WGS-84 coordinates: geodesic distance by Vincenty with a haversine fallback, initial and final bearing, the …

No taxonomy category yet
deterministicno-api-keygeogeodesydistance
Crypto address validator: detect the blockchain and verify the checksum (EVM, Bitcoin, Solana and more)

Crypto address validator: identify which blockchain an address belongs to and validate its encoding: EVM EIP-55 checksum, Bitcoin base58check and bech32/bech32m…

No taxonomy category yet
deterministicno-api-keychainblockchainaddresses
Solidity function selector: Keccak-256, 4-byte selector and event topic from a signature

Solidity function selector and event topic: compute the Keccak-256 hash of a function or event signature and derive the 4-byte selector and the 32-byte topic. N…

No taxonomy category yet
deterministicno-api-keychainblockchainsolidity
NUTS region lookup: EU statistical region codes, names and hierarchy

NUTS region lookup (EU statistical regions): resolve a NUTS code to its name, country and level, walk up to its parents or down to its children, or search regio…

No taxonomy category yet
deterministicno-api-keyrefeustatistics
Airport lookup by IATA or ICAO code: name, coordinates, elevation, time zone; nearest airports

Airport lookup by IATA or ICAO code: get the airport's name, city, country, ISO 3166-2 region code, WGS-84 coordinates, elevation and IANA time zone, or find th…

No taxonomy category yet
deterministicno-api-keyreftravelairports
Currency lookup: ISO 4217 codes, names, minor units and cash rounding

Currency lookup by ISO 4217 alphabetic or numeric code: the official English name, minor-unit exponent, fund flag, the smallest cash denomination where it diffe…

No taxonomy category yet
deterministicno-api-keyreffinancecurrency
Country lookup: ISO 3166 codes, currency, TLD, UN region and ISO 3166-2 subdivisions

Country lookup: find 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…

No taxonomy category yet
deterministicno-api-keyrefcountriesiso-3166
Base converter: integers between number bases 2 to 36 (hex, binary, octal)

Base converter: convert an integer between any two numeric bases from 2 to 36 (hex, binary, octal and more), with arbitrary precision so values far beyond 2^53 …

No taxonomy category yet
deterministicno-api-keynumnumbersconversion
Number to words in 12 languages, with ordinal and currency forms

Number to words: spell a number out in English, Dutch, German, French, Spanish, Italian, Portuguese, Polish, Russian, Turkish, Swedish or Japanese, in cardinal,…

No taxonomy category yet
deterministicno-api-keynumnumberslocalisation
Statistics calculator: mean, median, standard deviation, quartiles and percentiles

Statistics calculator for a numeric array in one call: count, sum, mean, median, mode, variance and standard deviation honouring ddof (default 1, the sample for…

No taxonomy category yet
deterministicno-api-keynumnumbersstatistics
Money split: allocate an amount into shares with no rounding loss

Money split: 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 distr…

No taxonomy category yet
deterministicno-api-keynumfinancemoney

Health · last 30 probes

When HTTP Live JSON-RPC Latency
2026-10-25 08:03:33 200 ✓ 25ms
2026-10-25 00:11:22 200 ✓ 40ms
2026-10-24 12:52:26 200 ✓ 49ms
2026-10-24 05:51:16 200 ✓ 46ms
2026-10-24 01:06:44 200 ✓ 28ms
2026-10-23 12:11:52 200 ✓ 45ms
2026-10-23 05:14:39 200 ✓ 23ms
2026-10-22 21:50:52 200 ✓ 35ms
2026-10-22 10:38:53 200 ✓ 54ms
2026-10-21 21:19:49 200 ✓ 27ms

Who's calling this agent 30d

21 interactions captured (impressions + lookups + A2A calls)

By AI host (caller_kind) · top 3
MJ12bot / Majestic (SEO tool) 16 (76%)
BaiduSpider 4 (19%)
Web browser 1 (5%)
Caller geography · top 3
FR 13
CN 4
UA 2
Via which API surface · top 3
web 20
rest 1

Public view: top 3 per dimension. Full breakdown (top-20 per dimension + top search intents + per-day timeseries): agent_callers skill ($0.05/call, $0 on Enterprise). Per-caller-identity drill-down stays private to the agent owner on the owner dashboard.

Similar agents embedding-nearest

x402 Format Checker live
Format and checksum validation for IBAN, EU VAT, Polish NIP/REGON/PESEL and email, pay-per-call via x402. Only $0.001 (0.1 cent) per check,
Crew of the Captain · q 100%
x402 Format Checker
Format and checksum validation for IBAN, EU VAT, Polish NIP/REGON/PESEL and email, pay-per-call via x402. Only $0.001 (0.1 cent) per check,
Crew of the Captain · q 0%
Sirenic live
Pay-per-call French & European company data (official registers: INSEE Sirene and INPI RNE for France, the national company registers of BE,
Sirenic · q 100%
x402-endpoints
Paid x402 API tools for AI agents (USDC on Base). Official EU/global registries (GLEIF LEI, VIES VAT, Companies House, INSEE, EUR-Lex, ECB,
x402-endpoints · q 78%
toolcall.click
Keyless pay-per-call APIs for AI agents: 30 tools across compliance (sanctions/AML, HS codes, company/VAT), safety (chemical, FDA drug/devic
toolcall.click · q 100%
DPU-10060 — Digital Proof Unit
Proof survives execution. DPU-10060 is the canonical reference for Digital Proof Units — structured batch-level proof records under Standard
Agentic KG Holdings · q 78%

Embed your Agenstry badge

Paste any of these into your README, agent card, or marketing page. Each badge auto-updates and links back to this page.

Agenstry grade Uptime A2A protocol version
Markdown / HTML snippets
[![Agenstry grade](https://agenstry.com/badge/api.duoleads.com.svg)](https://agenstry.com/agents/api.duoleads.com)
[![Verified Business](https://agenstry.com/badge/api.duoleads.com/identity.svg)](https://agenstry.com/agents/api.duoleads.com)
[![Uptime](https://agenstry.com/badge/api.duoleads.com/uptime.svg)](https://agenstry.com/agents/api.duoleads.com)
[![A2A version](https://agenstry.com/badge/api.duoleads.com/protocol.svg)](https://agenstry.com/agents/api.duoleads.com)

Audit-grade evidence bundle

JSON snapshot for vendor-review files. Add ?sign=true for a JWS-signed envelope verifiable against our JWKS. See the methodology.

audit.json audit.json (JWS-signed) verification history
Raw agent card JSON
{
  "name": "Duo Data Utilities",
  "description": "IBAN, ISIN, VAT & tax ID, barcode, timezone and geo utilities: 33 independent pay-per-call data utilities (identifiers, time, text, encodings, geodesy, blockchain primitives, reference tables, number arithmetic). $0.05 per call, payable over x402 (USDC on Base, eip155:8453). No account, no API key. A2A: JSON-RPC at https://api.duoleads.com/a2a; send a DataPart {\"skill\": \"<skill id>\", \"params\": {...}}; skill execution is paid through the a2a-x402 extension. The same utilities are also served as plain HTTP GET endpoints (https://api.duoleads.com/openapi.json) and as MCP tools over Streamable HTTP at https://api.duoleads.com/mcp (tools/list free, tools/call paid).",
  "supportedInterfaces": [
    {
      "url": "https://api.duoleads.com/a2a",
      "protocolBinding": "JSONRPC",
      "protocolVersion": "1.0"
    },
    {
      "url": "https://api.duoleads.com/a2a",
      "protocolBinding": "JSONRPC",
      "protocolVersion": "0.3"
    }
  ],
  "provider": {
    "organization": "Duo Leads",
    "url": "https://api.duoleads.com"
  },
  "version": "1.0.0",
  "documentationUrl": "https://api.duoleads.com/docs",
  "capabilities": {
    "streaming": false,
    "pushNotifications": false,
    "extensions": [
      {
        "uri": "https://github.com/google-agentic-commerce/a2a-x402/blob/main/spec/v0.2",
        "description": "Payment required per skill invocation: $0.05 in USDC on Base (eip155:8453), x402 v2, Standalone Flow. Required for skill execution (A2A-Extensions header); a message without a skill is answered for free.",
        "required": true
      }
    ]
  },
  "defaultInputModes": [
    "application/json"
  ],
  "defaultOutputModes": [
    "application/json"
  ],
  "skills": [
    {
      "id": "id.national",
      "name": "VAT, tax ID and national ID validator: 23 countries, checksum only (VAT formats BE, DE, FR, IT, PL, AT, CH, IE)",
      "description": "VAT, tax ID and national ID validator: check 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 is never stored (logs keep only its length and character types). Price: $0.05 per call. Also GET /v1/id/national.",
      "tags": [
        "deterministic",
        "no-api-key",
        "id",
        "identifiers",
        "validation",
        "checksum"
      ],
      "examples": [
        "{\"skill\":\"id.national\",\"params\":{\"country\":\"NL\",\"kind\":\"bsn\",\"value\":\"111222333\"}}",
        "https://api.duoleads.com/v1/id/national?country=NL&kind=bsn&value=111222333"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "id.gs1",
      "name": "GTIN barcode validator: EAN-13, UPC-A (GTIN-12), GTIN-8/14, GLN and SSCC check digits",
      "description": "GTIN barcode validator: 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, -12, -13 and -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. Price: $0.05 per call. Also GET /v1/id/gs1.",
      "tags": [
        "deterministic",
        "no-api-key",
        "id",
        "identifiers",
        "validation",
        "barcodes"
      ],
      "examples": [
        "{\"skill\":\"id.gs1\",\"params\":{\"value\":\"5901234123457\"}}",
        "https://api.duoleads.com/v1/id/gs1?value=5901234123457"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "id.security",
      "name": "ISIN validator plus CUSIP, SEDOL and FIGI check-digit validation; builds an ISIN from an NSIN",
      "description": "ISIN validator plus CUSIP, SEDOL and FIGI check digits: validate the check digit of a financial security identifier (ISIN per ISO 6166). 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. Price: $0.05 per call. Also GET /v1/id/security.",
      "tags": [
        "deterministic",
        "no-api-key",
        "id",
        "identifiers",
        "validation",
        "finance"
      ],
      "examples": [
        "{\"skill\":\"id.security\",\"params\":{\"value\":\"US0378331005\"}}",
        "https://api.duoleads.com/v1/id/security?value=US0378331005"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "id.iban",
      "name": "IBAN validator: length, mod-97 check digits, bank/branch/account breakdown (89 countries)",
      "description": "IBAN validator: validate an IBAN's 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. Price: $0.05 per call. Also GET /v1/id/iban.",
      "tags": [
        "deterministic",
        "no-api-key",
        "id",
        "identifiers",
        "banking",
        "validation"
      ],
      "examples": [
        "{\"skill\":\"id.iban\",\"params\":{\"iban\":\"NL91 ABNA 0417 1643 00\"}}",
        "https://api.duoleads.com/v1/id/iban?iban=NL91+ABNA+0417+1643+00"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "id.iban-build",
      "name": "IBAN generator: build an IBAN from country and BBAN or bank/branch/account, computing check digits",
      "description": "IBAN generator: construct an IBAN from a country code and the domestic account parts, computing the ISO 7064 mod-97-10 check digits. Takes 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; else pass the BBAN. Price: $0.05 per call. Also GET /v1/id/iban-build.",
      "tags": [
        "deterministic",
        "no-api-key",
        "id",
        "identifiers",
        "banking",
        "checksum"
      ],
      "examples": [
        "{\"skill\":\"id.iban-build\",\"params\":{\"country\":\"NL\",\"bank\":\"ABNA\",\"account\":\"0417164300\"}}",
        "https://api.duoleads.com/v1/id/iban-build?country=NL&bank=ABNA&account=0417164300"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "time.zone",
      "name": "Timezone converter: instant to local time in an IANA time zone and back, with UTC offset and DST state",
      "description": "Timezone converter: 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 \u00b1HH: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. Price: $0.05 per call. Also GET /v1/time/zone.",
      "tags": [
        "no-api-key",
        "time",
        "timezones"
      ],
      "examples": [
        "{\"skill\":\"time.zone\",\"params\":{\"zone\":\"Europe/Amsterdam\",\"instant\":\"2026-10-25T00:30:00Z\"}}",
        "https://api.duoleads.com/v1/time/zone?zone=Europe%2FAmsterdam&instant=2026-10-25T00%3A30%3A00Z"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "time.dst",
      "name": "DST transitions: next daylight-saving time changes for an IANA time zone",
      "description": "DST transitions: list the daylight-saving time changes 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. Price: $0.05 per call. Also GET /v1/time/dst.",
      "tags": [
        "no-api-key",
        "time",
        "timezones",
        "dst"
      ],
      "examples": [
        "{\"skill\":\"time.dst\",\"params\":{\"zone\":\"Europe/Amsterdam\",\"from\":\"2026-01-01\",\"years\":\"1\"}}",
        "https://api.duoleads.com/v1/time/dst?zone=Europe%2FAmsterdam&from=2026-01-01&years=1"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "time.business-days",
      "name": "Business days calculator: add or count working days with your weekend mask and holiday list",
      "description": "Business days calculator 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. Price: $0.05 per call. Also GET /v1/time/business-days.",
      "tags": [
        "deterministic",
        "no-api-key",
        "time",
        "calendar",
        "business-days"
      ],
      "examples": [
        "{\"skill\":\"time.business-days\",\"params\":{\"from\":\"2026-12-24\",\"days\":\"5\",\"holidays\":\"2026-12-25,2026-12-26,2027-01-01\"}}",
        "https://api.duoleads.com/v1/time/business-days?from=2026-12-24&days=5&holidays=2026-12-25%2C2026-12-26%2C2027-01-01"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "time.rrule",
      "name": "RRULE expander: RFC 5545 recurrence rule to concrete occurrence dates",
      "description": "RRULE expander: 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. Price: $0.05 per call. Also GET /v1/time/rrule.",
      "tags": [
        "deterministic",
        "no-api-key",
        "time",
        "calendar",
        "recurrence"
      ],
      "examples": [
        "{\"skill\":\"time.rrule\",\"params\":{\"rrule\":\"FREQ=MONTHLY;BYDAY=-1FR;COUNT=3\",\"dtstart\":\"2026-01-01T09:00:00\",\"zone\":\"Europe/Amsterdam\"}}",
        "https://api.duoleads.com/v1/time/rrule?rrule=FREQ%3DMONTHLY%3BBYDAY%3D-1FR%3BCOUNT%3D3&dtstart=2026-01-01T09%3A00%3A00&zone=Europe%2FAmsterdam"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "time.calendar",
      "name": "Calendar converter: Gregorian to Hijri, Hebrew, Japanese era, Persian and more, plus Easter date",
      "description": "Calendar converter: 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. Price: $0.05 per call. Also GET /v1/time/calendar.",
      "tags": [
        "deterministic",
        "no-api-key",
        "time",
        "calendar"
      ],
      "examples": [
        "{\"skill\":\"time.calendar\",\"params\":{\"date\":\"2026-09-28\",\"to\":\"islamic,hebrew,japanese\"}}",
        "https://api.duoleads.com/v1/time/calendar?date=2026-09-28&to=islamic%2Chebrew%2Cjapanese"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "text.slug",
      "name": "Slug generator: Unicode-aware URL slug with transliteration",
      "description": "Slug generator: 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. Price: $0.05 per call. Also GET /v1/text/slug.",
      "tags": [
        "deterministic",
        "no-api-key",
        "text",
        "unicode",
        "slug"
      ],
      "examples": [
        "{\"skill\":\"text.slug\",\"params\":{\"text\":\"Cr\u00e8me Br\u00fbl\u00e9e \u2014 \u00c6r\u00f8sk\u00f8bing, Stra\u00dfe 42\",\"lang\":\"de\"}}",
        "https://api.duoleads.com/v1/text/slug?text=Cr%C3%A8me+Br%C3%BBl%C3%A9e+%E2%80%94+%C3%86r%C3%B8sk%C3%B8bing%2C+Stra%C3%9Fe+42&lang=de"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "text.transliterate",
      "name": "Cyrillic transliteration to Latin (ISO 9:1995, BGN/PCGN Russian)",
      "description": "Cyrillic transliteration to 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. Price: $0.05 per call. Also GET /v1/text/transliterate.",
      "tags": [
        "deterministic",
        "no-api-key",
        "text",
        "unicode",
        "transliteration"
      ],
      "examples": [
        "{\"skill\":\"text.transliterate\",\"params\":{\"text\":\"\u0429\u0443\u043a\u0430\",\"standard\":\"iso-9\"}}",
        "https://api.duoleads.com/v1/text/transliterate?text=%D0%A9%D1%83%D0%BA%D0%B0&standard=iso-9"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "text.unicode",
      "name": "Unicode normalization (NFC/NFKC), script detection and homoglyph/confusable check",
      "description": "Unicode normalization and confusables check: apply NFC, NFD, NFKC or NFKD, report which forms a string is already in, list the scripts present (all Unicode scripts), and flag confusable and homoglyph characters \u2014 Cyrillic \u0430 in a Latin word, fullwidth or mathematical look-alikes, all-look-alike words \u2014 plus zero-width joiners, bidirectional overrides, invisible and blank characters. Returns per-character detail with code points, names and the ASCII character each imitates. Price: $0.05 per call. Also GET /v1/text/unicode.",
      "tags": [
        "deterministic",
        "no-api-key",
        "text",
        "unicode",
        "security"
      ],
      "examples": [
        "{\"skill\":\"text.unicode\",\"params\":{\"text\":\"caf\u00e9\",\"form\":\"nfd\"}}",
        "https://api.duoleads.com/v1/text/unicode?text=caf%C3%A9&form=nfd"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "text.similarity",
      "name": "String similarity: Levenshtein, Jaro-Winkler distance and Soundex/Metaphone phonetic keys",
      "description": "String similarity: compare two strings and return every standard 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. Price: $0.05 per call. Also GET /v1/text/similarity.",
      "tags": [
        "deterministic",
        "no-api-key",
        "text",
        "similarity",
        "phonetic"
      ],
      "examples": [
        "{\"skill\":\"text.similarity\",\"params\":{\"a\":\"kitten\",\"b\":\"sitting\"}}",
        "https://api.duoleads.com/v1/text/similarity?a=kitten&b=sitting"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "code.url",
      "name": "URL parser: parse, canonicalize and extract the registrable domain (eTLD+1)",
      "description": "URL parser: parse and canonicalise a URL, and extract its registrable domain using the Public Suffix List \u2014 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 ICANN or private, plus a canonical form with default port, dot-segments and percent-encoding normalised. unicode_host uses WHATWG/UTS 46 (non-strict). Price: $0.05 per call. Also GET /v1/code/url.",
      "tags": [
        "deterministic",
        "no-api-key",
        "code",
        "url",
        "domains",
        "psl"
      ],
      "examples": [
        "{\"skill\":\"code.url\",\"params\":{\"url\":\"https://a.b.example.co.uk:443/x/../y?q=1&q=2#f\"}}",
        "https://api.duoleads.com/v1/code/url?url=https%3A%2F%2Fa.b.example.co.uk%3A443%2Fx%2F..%2Fy%3Fq%3D1%26q%3D2%23f"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "code.idn",
      "name": "Punycode converter: IDN domain to ASCII and back, with IDNA2008 label validation",
      "description": "Punycode converter: 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. Price: $0.05 per call. Also GET /v1/code/idn.",
      "tags": [
        "deterministic",
        "no-api-key",
        "code",
        "domains",
        "idna",
        "punycode"
      ],
      "examples": [
        "{\"skill\":\"code.idn\",\"params\":{\"domain\":\"b\u00fccher.example\"}}",
        "https://api.duoleads.com/v1/code/idn?domain=b%C3%BCcher.example"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "code.semver",
      "name": "Semver parser: parse and compare versions, check range satisfaction",
      "description": "Semver parser and comparator: 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. Price: $0.05 per call. Also GET /v1/code/semver.",
      "tags": [
        "deterministic",
        "no-api-key",
        "code",
        "versions",
        "semver"
      ],
      "examples": [
        "{\"skill\":\"code.semver\",\"params\":{\"version\":\"1.2.3-rc.1+build.5\"}}",
        "https://api.duoleads.com/v1/code/semver?version=1.2.3-rc.1%2Bbuild.5"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "code.hash",
      "name": "Hash generator: SHA-256, SHA-512, SHA-3, Keccak-256, BLAKE2 and HMAC digests",
      "description": "Hash generator: 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. Price: $0.05 per call. Also GET /v1/code/hash.",
      "tags": [
        "deterministic",
        "no-api-key",
        "code",
        "crypto",
        "hashing"
      ],
      "examples": [
        "{\"skill\":\"code.hash\",\"params\":{\"algo\":\"sha256\",\"data\":\"hello\"}}",
        "https://api.duoleads.com/v1/code/hash?algo=sha256&data=hello"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "code.jwt",
      "name": "JWT decoder: header, claims and expiry state (no signature verification)",
      "description": "JWT decoder: 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 \u2014 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. Price: $0.05 per call. Also GET /v1/code/jwt.",
      "tags": [
        "no-api-key",
        "code",
        "jwt",
        "security"
      ],
      "examples": [
        "{\"skill\":\"code.jwt\",\"params\":{\"token\":\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c\",\"at\":\"2026-09-28T00:00:00Z\"}}",
        "https://api.duoleads.com/v1/code/jwt?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c&at=2026-09-28T00%3A00%3A00Z"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "geo.geohash",
      "name": "Geohash encoder and decoder with neighbour cells",
      "description": "Geohash encoder and decoder: 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. Price: $0.05 per call. Also GET /v1/geo/geohash.",
      "tags": [
        "deterministic",
        "no-api-key",
        "geo",
        "geohash"
      ],
      "examples": [
        "{\"skill\":\"geo.geohash\",\"params\":{\"op\":\"encode\",\"lat\":\"52.3728\",\"lon\":\"4.8936\",\"precision\":\"9\"}}",
        "https://api.duoleads.com/v1/geo/geohash?op=encode&lat=52.3728&lon=4.8936&precision=9"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "geo.pluscode",
      "name": "Plus code (Open Location Code) encoder and decoder",
      "description": "Plus code (Open Location Code) encoder and decoder: encode coordinates as a 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. Price: $0.05 per call. Also GET /v1/geo/pluscode.",
      "tags": [
        "deterministic",
        "no-api-key",
        "geo",
        "pluscode"
      ],
      "examples": [
        "{\"skill\":\"geo.pluscode\",\"params\":{\"lat\":\"52.3728\",\"lon\":\"4.8936\"}}",
        "https://api.duoleads.com/v1/geo/pluscode?lat=52.3728&lon=4.8936"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "geo.polygon",
      "name": "Point in polygon check, plus bounding box, centroid and area for GeoJSON",
      "description": "Point in polygon check and GeoJSON geometry: point-in-polygon with correct hole handling, bounding box, centroid, signed area in square metres, perimeter length, and ring winding order for a geometry supplied in the request. 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. Price: $0.05 per call. Also GET /v1/geo/polygon.",
      "tags": [
        "deterministic",
        "no-api-key",
        "geo",
        "geojson",
        "geometry"
      ],
      "examples": [
        "{\"skill\":\"geo.polygon\",\"params\":{\"geometry\":\"{\\\"type\\\":\\\"Polygon\\\",\\\"coordinates\\\":[[[4.85,52.35],[4.95,52.35],[4.95,52.40],[4.85,52.40],[4.85,52.35]]]}\",\"lat\":\"52.3728\",\"lon\":\"4.8936\"}}",
        "https://api.duoleads.com/v1/geo/polygon?geometry=%7B%22type%22%3A%22Polygon%22%2C%22coordinates%22%3A%5B%5B%5B4.85%2C52.35%5D%2C%5B4.95%2C52.35%5D%2C%5B4.95%2C52.40%5D%2C%5B4.85%2C52.40%5D%2C%5B4.85%2C52.35%5D%5D%5D%7D&lat=52.3728&lon=4.8936"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "geo.distance",
      "name": "Distance calculator: geodesic distance, bearing and destination point on WGS-84",
      "description": "Distance calculator: 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. Price: $0.05 per call. Also GET /v1/geo/distance.",
      "tags": [
        "deterministic",
        "no-api-key",
        "geo",
        "geodesy",
        "distance"
      ],
      "examples": [
        "{\"skill\":\"geo.distance\",\"params\":{\"lat1\":\"52.3728\",\"lon1\":\"4.8936\",\"lat2\":\"40.7128\",\"lon2\":\"-74.0060\"}}",
        "https://api.duoleads.com/v1/geo/distance?lat1=52.3728&lon1=4.8936&lat2=40.7128&lon2=-74.0060"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "chain.address",
      "name": "Crypto address validator: detect the blockchain and verify the checksum (EVM, Bitcoin, Solana and more)",
      "description": "Crypto address validator: 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. Price: $0.05 per call. Also GET /v1/chain/address.",
      "tags": [
        "deterministic",
        "no-api-key",
        "chain",
        "blockchain",
        "addresses",
        "validation"
      ],
      "examples": [
        "{\"skill\":\"chain.address\",\"params\":{\"address\":\"0xd8da6bf26964af9d7eed9e03e53415d37aa96045\"}}",
        "https://api.duoleads.com/v1/chain/address?address=0xd8da6bf26964af9d7eed9e03e53415d37aa96045"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "chain.selector",
      "name": "Solidity function selector: Keccak-256, 4-byte selector and event topic from a signature",
      "description": "Solidity function selector and event topic: compute the Keccak-256 hash of a function or event signature and derive the 4-byte selector and the 32-byte topic. Normalises the signature first \u2014 strips parameter names, expands uint to uint256 and the other aliases, flattens tuples \u2014 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. Price: $0.05 per call. Also GET /v1/chain/selector.",
      "tags": [
        "deterministic",
        "no-api-key",
        "chain",
        "blockchain",
        "solidity",
        "keccak"
      ],
      "examples": [
        "{\"skill\":\"chain.selector\",\"params\":{\"signature\":\"transfer(address,uint256)\"}}",
        "https://api.duoleads.com/v1/chain/selector?signature=transfer%28address%2Cuint256%29"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "ref.nuts",
      "name": "NUTS region lookup: EU statistical region codes, names and hierarchy",
      "description": "NUTS region lookup (EU statistical regions): 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. Price: $0.05 per call. Also GET /v1/ref/nuts.",
      "tags": [
        "deterministic",
        "no-api-key",
        "ref",
        "eu",
        "statistics",
        "regions"
      ],
      "examples": [
        "{\"skill\":\"ref.nuts\",\"params\":{\"code\":\"NL32B\",\"include\":\"parents,typology\"}}",
        "https://api.duoleads.com/v1/ref/nuts?code=NL32B&include=parents%2Ctypology"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "ref.airport",
      "name": "Airport lookup by IATA or ICAO code: name, coordinates, elevation, time zone; nearest airports",
      "description": "Airport lookup by IATA or ICAO code: get the airport's 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. Price: $0.05 per call. Also GET /v1/ref/airport.",
      "tags": [
        "deterministic",
        "no-api-key",
        "ref",
        "travel",
        "airports"
      ],
      "examples": [
        "{\"skill\":\"ref.airport\",\"params\":{\"code\":\"AMS\"}}",
        "https://api.duoleads.com/v1/ref/airport?code=AMS"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "ref.currency",
      "name": "Currency lookup: ISO 4217 codes, names, minor units and cash rounding",
      "description": "Currency lookup by 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. Price: $0.05 per call. Also GET /v1/ref/currency.",
      "tags": [
        "deterministic",
        "no-api-key",
        "ref",
        "finance",
        "currency",
        "iso-4217"
      ],
      "examples": [
        "{\"skill\":\"ref.currency\",\"params\":{\"code\":\"EUR\",\"include\":\"territories\"}}",
        "https://api.duoleads.com/v1/ref/currency?code=EUR&include=territories"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "ref.country",
      "name": "Country lookup: ISO 3166 codes, currency, TLD, UN region and ISO 3166-2 subdivisions",
      "description": "Country lookup: find 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 TLD, 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. Price: $0.05 per call. Also GET /v1/ref/country.",
      "tags": [
        "deterministic",
        "no-api-key",
        "ref",
        "countries",
        "iso-3166"
      ],
      "examples": [
        "{\"skill\":\"ref.country\",\"params\":{\"code\":\"NL\"}}",
        "https://api.duoleads.com/v1/ref/country?code=NL"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "num.radix",
      "name": "Base converter: integers between number bases 2 to 36 (hex, binary, octal)",
      "description": "Base converter: convert an integer between any two numeric bases from 2 to 36 (hex, binary, octal and more), 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. Price: $0.05 per call. Also GET /v1/num/radix.",
      "tags": [
        "deterministic",
        "no-api-key",
        "num",
        "numbers",
        "conversion"
      ],
      "examples": [
        "{\"skill\":\"num.radix\",\"params\":{\"value\":\"0xdeadbeef\",\"to\":\"10\"}}",
        "https://api.duoleads.com/v1/num/radix?value=0xdeadbeef&to=10"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "num.words",
      "name": "Number to words in 12 languages, with ordinal and currency forms",
      "description": "Number to words: spell a number out 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. Price: $0.05 per call. Also GET /v1/num/words.",
      "tags": [
        "deterministic",
        "no-api-key",
        "num",
        "numbers",
        "localisation"
      ],
      "examples": [
        "{\"skill\":\"num.words\",\"params\":{\"value\":\"1234\",\"lang\":\"nl\"}}",
        "https://api.duoleads.com/v1/num/words?value=1234&lang=nl"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "num.stats",
      "name": "Statistics calculator: mean, median, standard deviation, quartiles and percentiles",
      "description": "Statistics calculator for a numeric array in one call: count, sum, mean, median, mode, variance and standard deviation honouring ddof (default 1, the sample form; 0 gives the population form) plus 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. Price: $0.05 per call. Also GET /v1/num/stats.",
      "tags": [
        "deterministic",
        "no-api-key",
        "num",
        "numbers",
        "statistics"
      ],
      "examples": [
        "{\"skill\":\"num.stats\",\"params\":{\"values\":\"1,2,3,4,5\"}}",
        "https://api.duoleads.com/v1/num/stats?values=1%2C2%2C3%2C4%2C5"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    },
    {
      "id": "num.allocate",
      "name": "Money split: allocate an amount into shares with no rounding loss",
      "description": "Money split: 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 \u2014 largest-remainder, first-wins or last-wins \u2014 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. Price: $0.05 per call. Also GET /v1/num/allocate.",
      "tags": [
        "deterministic",
        "no-api-key",
        "num",
        "finance",
        "money",
        "allocation"
      ],
      "examples": [
        "{\"skill\":\"num.allocate\",\"params\":{\"amount\":\"100.00\",\"currency\":\"EUR\",\"parts\":\"3\"}}",
        "https://api.duoleads.com/v1/num/allocate?amount=100.00&currency=EUR&parts=3"
      ],
      "inputModes": [
        "application/json"
      ],
      "outputModes": [
        "application/json"
      ]
    }
  ]
}