{"openapi":"3.1.0","info":{"title":"Email Normalize API","version":"1.0.0","description":"Canonicalize email addresses so you can deduplicate accounts and catch different aliases of the same inbox. The normalize endpoint lower-cases the address and applies provider-aware rules: it strips the dots from Gmail and Googlemail local parts (because Gmail ignores them) and maps googlemail.com to gmail.com, removes +tag sub-addressing for Gmail and the many providers that support it — Outlook, Hotmail, Live, iCloud, Fastmail, Proton, Yandex, Zoho, GMX and more — and, by default, for every domain so duplicates never slip through, while reporting exactly which changes it made and which provider it detected. The compare endpoint normalizes two addresses and tells you whether they resolve to the same mailbox. Everything is computed locally and deterministically, with no DNS or network calls, so it is instant and private. Ideal for sign-up and registration dedup, fraud and abuse prevention (one person, many aliases), CRM and mailing-list hygiene, and merging customer records. Pure local computation — no key, no third-party service, instant. Live, nothing stored. 3 endpoints. This normalizes addresses for comparison; to verify that an address actually exists and can receive mail (MX, disposable, role accounts) use an email-verification API.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/emailnormalize-api","description":"oanor gateway"}],"tags":[{"name":"Email"},{"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":["Email"],"summary":"Compare two emails","description":"","parameters":[{"name":"a","in":"query","required":true,"description":"First email","schema":{"type":"string"},"example":"John.Doe@gmail.com"},{"name":"b","in":"query","required":true,"description":"Second email","schema":{"type":"string"},"example":"johndoe+spam@googlemail.com"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"a":{"input":"John.Doe@gmail.com","normalized":"johndoe@gmail.com"},"b":{"input":"johndoe+spam@googlemail.com","normalized":"johndoe@gmail.com"},"same":true},"meta":{"timestamp":"2026-06-03T09:24:58.673Z","request_id":"6c74db27-d604-4301-9117-fc19ebdb5bb0"},"status":"ok","message":"Compare two emails","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":["Email"],"summary":"Normalize an email","description":"","parameters":[{"name":"email","in":"query","required":true,"description":"The email address","schema":{"type":"string"},"example":"John.Doe+news@Gmail.com"},{"name":"gmail_dots","in":"query","required":false,"description":"Strip dots for Gmail (default true)","schema":{"type":"string"}},{"name":"plus_tags","in":"query","required":false,"description":"Strip +tag sub-addressing (default true)","schema":{"type":"string"}},{"name":"plus_all","in":"query","required":false,"description":"Apply +tag stripping to all domains (default true)","schema":{"type":"string"}},{"name":"lowercase","in":"query","required":false,"description":"Lower-case the local part (default true)","schema":{"type":"string"}}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"input":"John.Doe+news@Gmail.com","local":"johndoe","domain":"gmail.com","changed":true,"changes":["lowercased domain","lowercased local part","removed +tag","removed dots (Gmail)"],"provider":"gmail","normalized":"johndoe@gmail.com"},"meta":{"timestamp":"2026-06-03T09:24:58.769Z","request_id":"9951d01a-9886-4787-96d5-65f52cbbf9ac"},"status":"ok","message":"Normalize an email","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":"Email Normalize API","notes":"Strictly, the local part is case-sensitive per RFC 5321, but virtually all providers treat it case-insensitively — lowercasing is on by default for deduplication and can be turned off. Gmail dot-stripping applies only to gmail.com/googlemail.com. This normalizes for comparison; to verify deliverability (MX, disposable) use an email-verification API. Nothing is stored.","version":"v1","endpoints":[{"path":"/v1/normalize","params":{"email":"the email address (required)","plus_all":"apply +tag stripping to all domains, not just known ones (default true)","lowercase":"lower-case the local part too (default true)","plus_tags":"strip +tag sub-addressing (default true)","gmail_dots":"strip dots for Gmail (default true)"},"returns":"the normalized address, the provider and the changes made"},{"path":"/v1/compare","params":{"a":"first email (required)","b":"second email (required)","…options":"same options as normalize"},"returns":"whether a and b are the same inbox, with both normalized forms"},{"path":"/v1/meta","params":[],"returns":"this document"}],"description":"Canonicalize email addresses so you can deduplicate accounts and catch aliases of the same inbox. The normalize endpoint lower-cases the address, applies provider-aware rules — strips the dots from Gmail/Googlemail local parts and maps googlemail.com to gmail.com, removes +tag sub-addressing for Gmail and the many providers that support it (Outlook, iCloud, Fastmail, Proton, Yandex, Zoho and more), and optionally for all domains — and tells you exactly which changes it made. The compare endpoint normalizes two addresses and tells you whether they resolve to the same inbox. Everything is computed locally and deterministically, with no DNS or network calls. Pure local, no key."},"meta":{"timestamp":"2026-06-03T09:24:58.859Z","request_id":"adaf0de7-a020-490f-8b69-532723b1150d"},"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":3935,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":545,"monthly_call_quota":13450,"rps_limit":8,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":2535,"monthly_call_quota":185500,"rps_limit":20,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":6335,"monthly_call_quota":970000,"rps_limit":50,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/emailnormalize-api"}