{"openapi":"3.1.0","info":{"title":"Unicode Normalize API","version":"1.0.0","description":"Normalize and fold Unicode text. Convert any string to one of the four Unicode normalization forms — NFC, NFD, NFKC, NFKD — so that visually identical text with different code-point compositions (é as one code point vs e + a combining accent) compares and stores consistently. Fold diacritics and special letters to plain ASCII (café → cafe, Straße → Strasse, Ångström → Angstrom, Łódź → Lodz) for slugs, search keys and filenames; the ﬁ ligature and similar compatibility characters are expanded under NFKC/NFKD. And compare two strings for equality after normalization, optionally case-insensitively. Perfect for deduplication, search and indexing, username and identifier checks, and defending against look-alike (homoglyph) input. Pure local computation — no key, no third-party service, instant. Live, nothing stored. 4 endpoints. Distinct from Unicode character-database lookups and from text segmentation.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/normalize-api","description":"oanor gateway"}],"tags":[{"name":"Normalize"},{"name":"Meta"}],"components":{"securitySchemes":{"oanorKey":{"type":"apiKey","in":"header","name":"x-oanor-key","description":"Get your key at https://www.oanor.com/developer/keys"}}},"security":[{"oanorKey":[]}],"paths":{"/v1/compare":{"get":{"operationId":"get_v1_compare","tags":["Normalize"],"summary":"Compare after normalization","description":"","parameters":[{"name":"a","in":"query","required":true,"description":"First string","schema":{"type":"string"},"example":"café"},{"name":"b","in":"query","required":true,"description":"Second string","schema":{"type":"string"},"example":"café"},{"name":"form","in":"query","required":false,"description":"Normalization form","schema":{"type":"string"},"example":"NFC"},{"name":"case_insensitive","in":"query","required":false,"description":"true/false","schema":{"type":"string"}}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"form":"NFC","equal":true,"case_insensitive":false},"meta":{"timestamp":"2026-06-03T01:09:48.038Z","request_id":"c4f58157-6cc8-4e36-8026-f57d6a8e47d5"},"status":"ok","message":"Compare after normalization","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/fold":{"get":{"operationId":"get_v1_fold","tags":["Normalize"],"summary":"Fold diacritics to ASCII","description":"","parameters":[{"name":"text","in":"query","required":true,"description":"Input text","schema":{"type":"string"},"example":"Ångström"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"folded":"Angstrom","changed":true,"ascii_only":true},"meta":{"timestamp":"2026-06-03T01:09:48.132Z","request_id":"38cd4179-333e-400f-9aee-20b94cc24ddf"},"status":"ok","message":"Fold diacritics to ASCII","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/normalize":{"get":{"operationId":"get_v1_normalize","tags":["Normalize"],"summary":"Normalize Unicode text","description":"","parameters":[{"name":"text","in":"query","required":true,"description":"Input text","schema":{"type":"string"},"example":"café"},{"name":"form","in":"query","required":false,"description":"NFC|NFD|NFKC|NFKD (default NFC)","schema":{"type":"string"},"example":"NFC"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"form":"NFC","changed":false,"normalized":"café","input_code_points":4,"output_code_points":4},"meta":{"timestamp":"2026-06-03T01:09:48.222Z","request_id":"5396ed9e-9993-4225-ac14-cedc1e4946d3"},"status":"ok","message":"Normalize Unicode text","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/meta":{"get":{"operationId":"get_v1_meta","tags":["Meta"],"summary":"Spec","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"name":"Unicode Normalize API","notes":"Normalization fixes look-alike strings that differ only in code-point composition (e.g. é as one code point vs e + combining accent). Folding also handles non-decomposing letters like ß, ø, æ, ł. Nothing is stored.","version":"v1","endpoints":[{"path":"/v1/normalize","params":{"form":"NFC|NFD|NFKC|NFKD (default NFC)","text":"input (required)"},"returns":"normalized text + whether it changed + code-point counts"},{"path":"/v1/fold","params":{"text":"input (required)"},"returns":"diacritic-folded, mostly-ASCII text"},{"path":"/v1/compare","params":{"a":"required","b":"required","form":"default NFC","case_insensitive":"true/false"},"returns":"whether they are equal after normalization"},{"path":"/v1/meta","params":[],"returns":"this document"}],"description":"Normalize Unicode text to NFC, NFD, NFKC or NFKD; fold diacritics and special letters to ASCII (café → cafe, Straße → Strasse); and compare two strings for equality after normalization. Pure local, no key."},"meta":{"timestamp":"2026-06-03T01:09:48.315Z","request_id":"8c73fb34-691a-4462-8c08-f9483f399906"},"status":"ok","message":"Meta","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}}},"x-oanor-pricing":[{"slug":"free","name":"Free","price_cents_month":0,"monthly_call_quota":660,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":60,"monthly_call_quota":5100,"rps_limit":8,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":1800,"monthly_call_quota":120000,"rps_limit":20,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":5400,"monthly_call_quota":620000,"rps_limit":50,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/normalize-api"}