Email Normalizer
Normalize email addresses to their canonical form. Strips plus tags, removes provider-specific dots, lowercases, trims whitespace, and resolves alias domains (e.g. googlemail.com β gmail.com). Returns the normalized address, its parts, and a list of every change applied.
Overview
Use Cases
- De-duplicate user accounts that share the same canonical mailbox
- Store a consistent canonical address alongside the original
- Detect plus-tag abuse during registration
- Normalize emails before look-up queries or comparisons
Features
Lowercases the full address
Trims leading and trailing whitespace
Removes dots from Gmail local parts (te.st β test)
Strips plus tags for supported providers (user+tag β user)
Resolves alias domains to canonical form (googlemail.com β gmail.com)
Returns a structured list of every change applied
Splits normalized address into local part and domain
API Endpoints
Normalize Email
Normalizes a single email address and returns the canonical form together with a breakdown of all transformations applied.
POST
https://api.requiems.xyz/v1/email/normalize
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
string |
Required | The email address to normalize. Must be a syntactically valid address. |
Try it out
Live DemoRequest
The email address to normalize. Must be a syntactically valid address.
Sending request...
Response Fields
| Field | Type | Description |
|---|---|---|
| original | string |
The email address exactly as supplied in the request body |
| normalized | string |
The canonical form of the address after all transformations |
| local | string |
The local part (before @) of the normalized address |
| domain | string |
The domain part (after @) of the normalized address |
| changes | array |
Ordered list of transformations applied. Possible values: lowercased, trimmed_whitespace, removed_dots, removed_plus_tag, canonicalised_domain. Empty array when no changes were needed. |
Code Examples
curl -X POST https://api.requiems.xyz/v1/email/normalize \
-H "requiems-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"email": "[email protected]"}'
import requests
url = "https://api.requiems.xyz/v1/email/normalize"
headers = {
"requiems-api-key": "YOUR_API_KEY",
"Content-Type": "application/json"
}
payload = {"email": "[email protected]"}
response = requests.post(url, headers=headers, json=payload)
data = response.json()
print(data["data"]["normalized"]) # [email protected]
const response = await fetch('https://api.requiems.xyz/v1/email/normalize', {
method: 'POST',
headers: {
'requiems-api-key': 'YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({ email: '[email protected]' })
});
const { data } = await response.json();
console.log(data.normalized); // [email protected]
console.log(data.changes); // ["lowercased", "removed_dots", ...]
require 'net/http'
require 'json'
uri = URI('https://api.requiems.xyz/v1/email/normalize')
request = Net::HTTP::Post.new(uri)
request['requiems-api-key'] = 'YOUR_API_KEY'
request['Content-Type'] = 'application/json'
request.body = { email: '[email protected]' }.to_json
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(request)
end
data = JSON.parse(response.body)
puts data['data']['normalized'] # [email protected]
Error Responses
validation_failed
The email field is missing or not a valid email address format.
bad_request
The request body is missing, not valid JSON, or contains unknown fields.
internal_error
Unexpected server error.
Frequently Asked Questions
Gmail and Googlemail have dots removed from the local part and plus tags stripped. Googlemail.com is also resolved to its canonical gmail.com domain. Other providers receive only the universal normalizations (lowercase, whitespace trimming).
No. If the input is already in canonical form (e.g. [email protected]), the normalized field equals the original and the changes array is empty.
Yes. Store both the original address the user typed and the normalized form. Compare normalized values to identify accounts that map to the same mailbox.
No. This endpoint only applies deterministic text transformations. It does not perform DNS lookups or mailbox-existence checks. Use the Disposable Email API to check whether a domain is temporary.