⚙ Development environment — API behavior and data may change.

Product

Identity first. Always.

For a real person, Normatico preserves identity by default: Иван → Ivan for CRM and email. It returns a traditional equivalent like Иван → John only when you explicitly ask. Uncertainty is never hidden.

// every response, always
"result": { "output": "Ivan", "display": "Ivan",
            "greeting": "Dear Ivan,",
            "sort_key": null, "monogram": "I" },
"quality": { "confidence": 0.99, "level": "human_verified",
             "method": "verified_dictionary",
             "needs_review": false, "graph_status": null },
"warnings": [],
"provenance": [{ "source": "name_graph", "license": "internal" }],
"cache": { "status": "hit" }

Seven things it does well.

/api/v1/normalize🔤
Normalize

Transliterate and localize a name for a target locale and purpose — CRM display, greeting, passport, matching.

Michael → マイケル (0.98)
/api/v1/extract-email📧
Email → name

Extract a human name from an email address and render it for your locale.

joao.silva@acme.pt → João Silva
/api/v1/match🔎
Match

Decide whether two spellings are the same person — across scripts, diminutives, and typos.

Иван Петров ↔ Ivan Petrov · likely_same 0.95
/api/v1/salutation👋
Salutation

Build a culturally correct greeting: register (formal/informal), channel (email, letter, SMS).

Sehr geehrter Herr Müller,
/api/v1/romanize🛂
Romanize

Standards-compliant romanization: ICAO 9303, BGN/PCGN, GOST 7.79, Ukrainian 2010.

Дмитрий → DMITRII (ICAO)
/api/v1/inspect🩺
Inspect

Detect broken encodings, company names in person fields, swapped given/surname.

Иван → mojibake detected
/api/v1/pronounce🔊
Pronounce

Phonetic guidance so your team says the name right on the first call.

Siobhán → shiv-AWN

Six levels of trust.

Every rendering carries a quality level. Machine guesses are served with needs_review until independently verified, and low-confidence answers are flagged — not presented as truth.

person_preferred
A specific customer's confirmed preference. Wins for that customer only.
Highest
human_verified
Reviewed and approved by an editor. Highest general trust.
Verified
statistically_accepted
Rule-based transliteration for a clear locale/script pair.
Accepted
imported_source
Imported from Wikidata/Wiktionary — pending review.
Pending
machine_candidate
Machine-generated, awaiting verification. Served with needs_review until verified.
Needs review
raw_observation
Unresolved, lowest confidence. Flagged for review.
Flagged

What it does not do.

Honesty is a feature. These are hard guarantees, not fine print.

It is not a general translator: it won't rename a real person to a cultural equivalent (Иван → John) unless you explicitly ask.

It does not present unverified guesses as truth — new renderings carry needs_review until independently verified.

It does not claim full CLDR compliance — CLDR is a locale and formatting layer, used as a practical subset, never as a name dictionary.

It never stores raw names under no_store, and never logs raw names in production — structured logs use a strict field whitelist.

It never caches low-trust answers as truth: the deterministic floor never guesses, and only verified, high-confidence renderings enter the cache.

It does not guarantee correctness for unseen names — it returns an honest confidence and flags low-confidence answers with needs_review instead of hiding them.

See the full response anatomy in the API docs.

For developers For business →