Email API — Validate an email address

Support DQE
Support DQE
  • Updated
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 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
eMail 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

Was this article helpful?

0 out of 0 found this helpful