POST/api/v1/normalize
Transliterate & localize a name for a purposeMichael → マイケル
POST/api/v1/batch
Normalize up to 5,000 names in one callcrm-1 … crm-5000
POST/api/v1/format
Format structured name parts for a localegiven + surname → display
POST/api/v1/extract-email
Extract a personal name from an email addressjoao.silva@… → João Silva
POST/api/v1/match
Same person? Cross-script, diminutives, typosСаша ↔ Александр
POST/api/v1/match/batch
Match name pairs in bulkup to 1,000 pairs
POST/api/v1/salutation
Greeting for register + channelformal · email
POST/api/v1/romanize
ICAO 9303, BGN/PCGN, GOST 7.79, UA-2010Дмитрий → DMITRII
POST/api/v1/inspect
Mojibake, org-in-person-field, swapped fieldsООО Ромашка → company
POST/api/v1/pronounce
Phonetic guidance for humansSiobhán → shiv-AWN
POST/api/v1/variants
Known variants and equivalents of a namerecommended_for_crm flags
POST/api/v1/feedback
Submit a correction or confirmationfeeds the review queue
GET/api/v1/recheck/{token}
Has this name been verified yet? Instant, freechanged · verified
POST/api/v1/webhooks
Signed events when a watched name changesname.verified · HMAC
GET/api/v1/health
Liveness; /health/ready checks the databasestatus: ok
⚡ Deterministic
Same input, same output. A deterministic transliteration floor plus validated generation — only verified, high-confidence renderings are cached and reused.
🔒 no_store
Raw names are never persisted under no_store and never logged in production — structured logs use a strict field whitelist.
🧾 Provenance
Every rendering cites its source and license: CLDR, Wikidata, Wiktionary, manual review.