{"service":"Name-Safety Checker (IDN / homograph / registrability)","operator":"Oddments","version":"1.0.0","public_base":"https://s5.oddments.ai","also_served_at":["https://oddments-s5.exe.xyz"],"summary":"Check whether a candidate name or domain label is VALID, SAFELY DISTINGUISHABLE from look-alikes, and legal under a TLD's syntax rules -- computed offline from public Unicode and IANA tables. Returns: Unicode normalization (NFC/NFD/NFKC/NFKD and whether NFKC folding changes the label), a per-character breakdown with codepoint, name, script and general category, UTS #39 single-script/mixed-script analysis, HOMOGRAPH AND CONFUSABLE DETECTION against the Unicode confusables table with the offending characters named as witnesses, the UTS #39 skeleton and any ASCII string the label visually imitates, a same-script confusable neighbourhood of near-identical variants an attacker could register against you, IDNA2008 validity, punycode A-label encoding with a decode round-trip, and per-TLD checks: presence in the IANA root zone, 1-63 octet label length, LDH, leading/trailing hyphen, the reserved hyphen-3-4 rule with its xn-- carve-out, all-numeric labels, 255-octet FQDN length, and RFC 2606/6761 reserved names. EVERY RESPONSE REPORTS THE VERSION AND DATE OF EVERY TABLE CONSULTED -- Unicode UCD version, Scripts.txt version, confusables revision and date, IANA TLD list version and date -- because reference-data currency is the whole point: confusable tables and the root zone change, and a sealed sandbox cannot refresh them. Every response also carries an Ed25519-signed reproducibility receipt (input hash, output hash, table versions, timestamp). Free preview at /v1/preview: one name, same response shape, same signed receipt, no payment. THIS SERVICE DOES NOT TELL YOU WHETHER A NAME IS AVAILABLE OR REGISTERED. It performs no RDAP, WHOIS, DNS or registry lookup of any kind. It tells you whether a name is VALID, whether it is SAFELY DISTINGUISHABLE from look-alikes, and whether it satisfies the syntax and reserved-label rules of the TLD you name -- all computed offline from public Unicode and IANA tables. A name can pass every check here and already be registered. WHAT ELSE THIS DOES NOT DO, stated up front: (1) No registry, DNS, RDAP or WHOIS query is made at any point, so nothing here reflects who owns what. (2) It applies no trademark, brand or legal analysis -- a name can be technically safe and still infringe. (3) Confusability is judged against the Unicode confusables table, which is a published approximation of human visual confusion, not a rendering test in your font. (4) The same-script neighbourhood is capped and is a sample of nearby variants, never an exhaustive enumeration. (5) Registry-specific policies (per-TLD allowed script sets, premium or blocked lists, local presence rules) are NOT encoded -- only the syntax and reserved-label rules named above. (6) The signature proves origin and integrity, not correctness. (7) Answers are only as current as the table versions reported in every response.","availability_disclaimer":"THIS SERVICE DOES NOT TELL YOU WHETHER A NAME IS AVAILABLE OR REGISTERED. It performs no RDAP, WHOIS, DNS or registry lookup of any kind. It tells you whether a name is VALID, whether it is SAFELY DISTINGUISHABLE from look-alikes, and whether it satisfies the syntax and reserved-label rules of the TLD you name -- all computed offline from public Unicode and IANA tables. A name can pass every check here and already be registered.","reference_data":{"unicode_version":"15.0.0","unicode_source":"python unicodedata (UCD 15.0.0)","confusables_revision":"17.0.0","confusables_date":"2025-07-22, 05:49:37 GMT","confusables_source":"UTS #39 confusables.txt, unicode.org/Public/security/latest","confusables_entries":6565,"scripts_txt_version":"15.1.0","scripts_source":"/usr/share/unicode/Scripts.txt","iana_tld_list_version":"2026080600","iana_tld_list_date":"Thu Aug  6 07:07:01 2026 UTC","iana_tld_count":1438,"iana_source":"data.iana.org/TLD/tlds-alpha-by-domain.txt","idna_library":"python idna (IDNA2008/UTS46)","no_registry_data":"No RDAP, WHOIS, DNS or availability source is consulted by this service, ever. Every field above is a static public table evaluated offline."},"endpoints":{"paid":{"method":"POST","path":"/v1/check","price":"$0.03","protocol":"x402","network":"eip155:8453","asset":"USDC","pay_to":"0xf29Cc4af14aB4E4e17C320a8C8fB9AC4D476d935","caps":{"max_names":50,"max_name_length":63,"neighbourhood_limit":200,"wall_seconds":10.0,"cpu_seconds":10,"max_memory_mb":512,"max_request_bytes":64000}},"free_preview":{"method":"POST","path":"/v1/preview","price":"free","caps":{"max_names":1,"max_name_length":63,"neighbourhood_limit":25,"wall_seconds":5.0,"cpu_seconds":5,"max_memory_mb":512,"max_request_bytes":8000}},"errors":"/v1/errors","metrics":"/v1/metrics","openapi":"/openapi.json","receipt_public_key":"/.well-known/oddments-receipts.json","receipt_verifier":"/verify_receipt.py"},"example_request":{"names":["аpple","my-name","раypal"],"tld":"com"},"input_schema":{"type":"object","title":"NameCheckRequest","properties":{"name":{"type":"string","description":"a single candidate label; shorthand for names:[name]"},"names":{"type":"array","minItems":1,"maxItems":50,"items":{"type":"string","maxLength":63},"description":"candidate labels. A LABEL, not a full domain -- 'example', not 'example.com'."},"tld":{"type":"string","description":"optional TLD, e.g. 'com' or 'xn--p1ai'. Supplying it enables the IANA-root, FQDN-length and reserved-label checks."}},"anyOf":[{"required":["name"]},{"required":["names"]}]},"output_schema":{"type":"object","title":"NameCheckResponse","properties":{"results":{"type":"array","items":{"type":"object","properties":{"input":{"type":"string"},"verdict":{"type":"string","enum":["safe","caution","unsafe"]},"normalization":{"type":"object"},"characters":{"type":"array","items":{"type":"object"}},"scripts":{"type":"array","items":{"type":"string"}},"mixed_script":{"type":"boolean"},"skeleton":{"type":"string","description":"UTS #39 skeleton"},"confusable_characters":{"type":"array","items":{"type":"object"}},"confusable_neighbourhood":{"type":"array","items":{"type":"object"}},"idna":{"type":"object"},"checks":{"type":"array","items":{"type":"object"}},"summary":{"type":"object"}}}},"availability_disclaimer":{"type":"string"},"reference_data":{"type":"object","description":"version and date of EVERY table consulted"},"receipt":{"type":"object"}}},"metadata_floor":{"serviceName":"Name-Safety Checker (IDN / homograph / registrability)","description":"present","tags":["unicode","idn","homograph","confusable","punycode","idna2008","domain","naming","phishing","spoofing","security","validation","signed-receipt"],"inputSchema":"/openapi.json","outputSchema":"/openapi.json","exampleInput":"GET / -> example_request","exampleOutput":"/openapi.json","price":"$0.03","errorTaxonomy":"/v1/errors"},"engine":{"name":"oddments-name-safety","version":"1.0.0","method":"offline table evaluation, no network I/O at request time","tables":{"unicode_version":"15.0.0","unicode_source":"python unicodedata (UCD 15.0.0)","confusables_revision":"17.0.0","confusables_date":"2025-07-22, 05:49:37 GMT","confusables_source":"UTS #39 confusables.txt, unicode.org/Public/security/latest","confusables_entries":6565,"scripts_txt_version":"15.1.0","scripts_source":"/usr/share/unicode/Scripts.txt","iana_tld_list_version":"2026080600","iana_tld_list_date":"Thu Aug  6 07:07:01 2026 UTC","iana_tld_count":1438,"iana_source":"data.iana.org/TLD/tlds-alpha-by-domain.txt","idna_library":"python idna (IDNA2008/UTS46)","no_registry_data":"No RDAP, WHOIS, DNS or availability source is consulted by this service, ever. Every field above is a static public table evaluated offline."}}}