Email Validation - Classic API
The DQEEMAILLOOKUP endpoint validates an email address and reports its syntax and domain existence, with an optional corrected suggestion and activity status.
When to use this endpoint - Call
DQEEMAILLOOKUP once the user has entered (or left) a complete email address, to confirm it is valid and deliverable before storing it. To suggest completions while the user is still typing, see Email API — Email address suggestions →
DQEEMAILLOOKUP
Request
Both GET and POST are supported.
{SERVER_ADDRESS} and {LICENCE_CODE} are provided by DQE upon account creation. Contact your DQE account manager to obtain these credentials.
GEThttps://{SERVER_ADDRESS}/DQEEMAILLOOKUP/?Email={EMAIL}&Licence={LICENCE_CODE}&Rectify={RECTIFY}&extendedsyntax={SYNTAX}&checkuser={CHECKUSER}&TimeOut={TIME}
Code examples
Valid address, no correction applied
curl "https://{SERVER_ADDRESS}/DQEEMAILLOOKUP/?Email=test%40tesdedet.com&Licence={LICENCE_CODE}"
fetch("https://{SERVER_ADDRESS}/DQEEMAILLOOKUP/?" + new URLSearchParams({
Email: "test@tesdedet.com",
Licence: "{LICENCE_CODE}"
}))
.then(r => r.json())
.then(data => console.log(data));
import requests
response = requests.get(
"https://{SERVER_ADDRESS}/DQEEMAILLOOKUP/",
params={
"Email": "test@tesdedet.com",
"Licence": "{LICENCE_CODE}",
},
)
print(response.json())
<?php
$params = http_build_query([
'Email' => 'test@tesdedet.com',
'Licence' => '{LICENCE_CODE}',
]);
$ch = curl_init("https://{SERVER_ADDRESS}/DQEEMAILLOOKUP/?{$params}");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
const axios = require('axios');
axios.get('https://{SERVER_ADDRESS}/DQEEMAILLOOKUP/', {
params: {
Email: 'test@tesdedet.com',
Licence: '{LICENCE_CODE}'
}
})
.then(response => console.log(response.data));
HttpClient client = HttpClient.newHttpClient();
String url = "https://{SERVER_ADDRESS}/DQEEMAILLOOKUP/"
+ "?Email=test%40tesdedet.com&Licence={LICENCE_CODE}";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
using var client = new HttpClient();
var url = "https://{SERVER_ADDRESS}/DQEEMAILLOOKUP/" +
"?Email=test%40tesdedet.com&Licence={LICENCE_CODE}";
var response = await client.GetAsync(url);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://{SERVER_ADDRESS}/DQEEMAILLOOKUP/" +
"?Email=test%40tesdedet.com&Licence={LICENCE_CODE}"
resp, err := http.Get(url)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
POSThttps://{SERVER_ADDRESS}/DQEEMAILLOOKUP/
Send all parameters in the request body using Content-Type: application/x-www-form-urlencoded. The server address remains in the URL.
Code examples
Valid address, no correction applied
curl -X POST "https://{SERVER_ADDRESS}/DQEEMAILLOOKUP/" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "Email=test@tesdedet.com" \
-d "Licence={LICENCE_CODE}"
fetch("https://{SERVER_ADDRESS}/DQEEMAILLOOKUP/", {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: new URLSearchParams({
Email: "test@tesdedet.com",
Licence: "{LICENCE_CODE}"
})
})
.then(r => r.json())
.then(data => console.log(data));
import requests
response = requests.post(
"https://{SERVER_ADDRESS}/DQEEMAILLOOKUP/",
data={
"Email": "test@tesdedet.com",
"Licence": "{LICENCE_CODE}",
},
)
print(response.json())
<?php
$ch = curl_init("https://{SERVER_ADDRESS}/DQEEMAILLOOKUP/");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([
'Email' => 'test@tesdedet.com',
'Licence' => '{LICENCE_CODE}',
]));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
const axios = require('axios');
const qs = require('querystring');
axios.post('https://{SERVER_ADDRESS}/DQEEMAILLOOKUP/', qs.stringify({
Email: 'test@tesdedet.com',
Licence: '{LICENCE_CODE}'
}))
.then(response => console.log(response.data));
HttpClient client = HttpClient.newHttpClient();
String form = "Email=test%40tesdedet.com&Licence={LICENCE_CODE}";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://{SERVER_ADDRESS}/DQEEMAILLOOKUP/"))
.header("Content-Type", "application/x-www-form-urlencoded")
.POST(HttpRequest.BodyPublishers.ofString(form))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
using var client = new HttpClient();
var form = new Dictionary<string, string> {
["Email"] = "test@tesdedet.com",
["Licence"] = "{LICENCE_CODE}"
};
var response = await client.PostAsync(
"https://{SERVER_ADDRESS}/DQEEMAILLOOKUP/",
new FormUrlEncodedContent(form));
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
form := url.Values{}
form.Set("Email", "test@tesdedet.com")
form.Set("Licence", "{LICENCE_CODE}")
resp, err := http.PostForm("https://{SERVER_ADDRESS}/DQEEMAILLOOKUP/", form)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
Parameters
| Parameter | Description | Mand / Opt |
|---|---|---|
| Email address to validate. | Mandatory | |
| Licence | Your DQE licence key. Contact support if you do not yet have one. | Mandatory |
| Rectify |
y to propose a domain correction when the entered domain is unknown; n otherwise.Default:
n
|
Optional |
| extendedsyntax |
y to accept email addresses with extended syntax; n to limit checks to standard email addresses.Default:
n
|
Optional |
| checkuser |
y to check the part before the @ sign; n to check only the domain.Default:
y
|
Optional |
| TimeOut | Maximum query time for data verification, in seconds. Example: 0.5 for 500 ms.Default:
6
|
Optional |
Response
On success, the API returns a JSON object with a single key "1" — a legacy artifact of this endpoint's implementation — wrapping the actual result fields below.
Level 1 vs Level 2 -
Redressement, eMailOrigine, IdError, and eMail are always returned (Level 1 verification: domain existence and syntax). CodeActivite is only added when your licence includes activity-status checking (Level 2 verification) — it is omitted entirely from the response when not entitled, rather than returned empty.| Key | Description | Type |
|---|---|---|
| Redressement |
1 if the domain was corrected; 0 if not. |
Integer |
| eMailOrigine | Email address as entered by the user. | String |
| IdError | Validation return code. See the IdError codes below. | String |
Corrected email address, when Redressement=1. |
String | |
| CodeActivite | Activity status of the email address — only present with Level 2 verification. See the CodeActivite codes below. | String |
Response example
Level 1 (standard)
{
"1": {
"Redressement": 0,
"eMailOrigine": "test@tesdedet.com",
"IdError": "92",
"eMail": "test@tesdedet.com"
}
}
Level 2 (with activity status)
{
"1": {
"Redressement": 0,
"eMailOrigine": "test@tesdedet.com",
"IdError": "92",
"eMail": "test@tesdedet.com",
"CodeActivite": "200"
}
}
Response codes
IdError codes
| Code | Description | Suggested UI message |
|---|---|---|
00 |
Valid email. | Valid email |
01 |
Correct email but name could not be checked. | Valid email |
02 |
Email address not found for this domain. | Please check your email address |
03 |
Inbox is full (soft bounce). | Please check your email address |
04 |
Empty email. | Please check your email address |
91 |
Syntax error. | Please check your email address |
92 |
Unknown domain. | Please check your email address |
93 |
Blacklisted email or domain. | Please check your email address |
94 |
Unauthorized username. | Please check your email address |
95 |
Disposable temporary email address. | Please check your email address |
99 |
Service unavailable. | Valid email |
CodeActivite codes
Consider M as the current month.
| Code | Description |
|---|---|
100 |
The email was delivered once. |
200 |
The email is valid. |
201 |
Email was active last month. |
202 |
Email was active between M-1 and M-2. |
203 |
Email was active between M-2 and M-3. |
204 |
Email was active between M-3 and M-4. |
206 |
Email was active between M-4 and M-6. |
209 |
Email was active between M-6 and M-9. |
212 |
Email was active between M-9 and M-12. |
300 |
Inactive email. |
Errors
| Error type | Response |
|---|---|
Missing Licence parameter |
** LICENCE KO ** |
Empty Licence parameter |
** LICENCE KO ** |
| Incorrect licence number | unauthorized_client |
Missing or empty Email parameter |
Normal 200 response with IdError = 04
|
| Parameter typo | Normal 200 response with IdError = 04
|
Test the API
Click the button below to test this endpoint live in your browser.
Open console
See also
Related to