ID Check API — Verify an identity document

Support DQE
Support DQE
  • Updated
ID Check API - Verify an identity document

Use this endpoint to verify a person's identity by cross-checking their address, name, date of birth, email, and phone number against the DQE database.

Related ID Check documentation - For a service overview, see ID Check introduction →
For the batch-processing output file reference, see ID Check Plus output columns →

/SEARCH/

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}/SEARCH/?Address={ADDRESS}&PostalCode={POSTAL_CODE}&City={CITY}&LastName={NAME}&FirstName={FIRST_NAME}&BirthDate={DATE}&Email={EMAIL}&Phone={PHONE}&Licence={LICENCE_CODE}&Version=2

Code examples

Full identity check

curl "https://{SERVER_ADDRESS}/SEARCH/?Address=12%20Rue%20de%20la%20Paix&PostalCode=75002&City=Paris&LastName=Dupont&FirstName=Jean&BirthDate=1980-05-15&Email=jean.dupont%40example.com&Phone=0606060606&Licence={LICENCE_CODE}"
fetch("https://{SERVER_ADDRESS}/SEARCH/?" + new URLSearchParams({ Address: "12 Rue de la Paix", PostalCode: "75002", City: "Paris", LastName: "Dupont", FirstName: "Jean", BirthDate: "1980-05-15", Email: "jean.dupont@example.com", Phone: "0606060606", Licence: "{LICENCE_CODE}" })) .then(r => r.json()) .then(data => console.log(data));
import requests response = requests.get( "https://{SERVER_ADDRESS}/SEARCH/", params={ "Address": "12 Rue de la Paix", "PostalCode": "75002", "City": "Paris", "LastName": "Dupont", "FirstName": "Jean", "BirthDate": "1980-05-15", "Email": "jean.dupont@example.com", "Phone": "0606060606", "Licence": "{LICENCE_CODE}", }, ) print(response.json())
<?php $params = http_build_query([ 'Address' => '12 Rue de la Paix', 'PostalCode' => '75002', 'City' => 'Paris', 'LastName' => 'Dupont', 'FirstName' => 'Jean', 'BirthDate' => '1980-05-15', 'Email' => 'jean.dupont@example.com', 'Phone' => '0606060606', 'Licence' => '{LICENCE_CODE}', ]); $ch = curl_init("https://{SERVER_ADDRESS}/SEARCH/?{$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}/SEARCH/', { params: { Address: '12 Rue de la Paix', PostalCode: '75002', City: 'Paris', LastName: 'Dupont', FirstName: 'Jean', BirthDate: '1980-05-15', Email: 'jean.dupont@example.com', Phone: '0606060606', Licence: '{LICENCE_CODE}' } }) .then(response => console.log(response.data));
HttpClient client = HttpClient.newHttpClient(); String url = "https://{SERVER_ADDRESS}/SEARCH/" + "?Address=12%20Rue%20de%20la%20Paix&PostalCode=75002&City=Paris" + "&LastName=Dupont&FirstName=Jean&BirthDate=1980-05-15" + "&Email=jean.dupont%40example.com&Phone=0606060606&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}/SEARCH/" + "?Address=12%20Rue%20de%20la%20Paix&PostalCode=75002&City=Paris" + "&LastName=Dupont&FirstName=Jean&BirthDate=1980-05-15" + "&Email=jean.dupont%40example.com&Phone=0606060606&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}/SEARCH/" + "?Address=12%20Rue%20de%20la%20Paix&PostalCode=75002&City=Paris" + "&LastName=Dupont&FirstName=Jean&BirthDate=1980-05-15" + "&Email=jean.dupont%40example.com&Phone=0606060606&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}/SEARCH/

Send all parameters in the request body using Content-Type: application/x-www-form-urlencoded. The server address remains in the URL.

Code examples

Full identity check

curl -X POST "https://{SERVER_ADDRESS}/SEARCH/" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "Licence={LICENCE_CODE}" \ -d "Address=12 Rue de la Paix" \ -d "PostalCode=75002" \ -d "City=Paris" \ -d "LastName=Dupont" \ -d "FirstName=Jean" \ -d "BirthDate=1980-05-15" \ -d "Email=jean.dupont@example.com" \ -d "Phone=0606060606"
fetch("https://{SERVER_ADDRESS}/SEARCH/", { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded" }, body: new URLSearchParams({ Licence: "{LICENCE_CODE}", Address: "12 Rue de la Paix", PostalCode: "75002", City: "Paris", LastName: "Dupont", FirstName: "Jean", BirthDate: "1980-05-15", Email: "jean.dupont@example.com", Phone: "0606060606" }) }) .then(r => r.json()) .then(data => console.log(data));
import requests response = requests.post( "https://{SERVER_ADDRESS}/SEARCH/", data={ "Licence": "{LICENCE_CODE}", "Address": "12 Rue de la Paix", "PostalCode": "75002", "City": "Paris", "LastName": "Dupont", "FirstName": "Jean", "BirthDate": "1980-05-15", "Email": "jean.dupont@example.com", "Phone": "0606060606", }, ) print(response.json())
<?php $ch = curl_init("https://{SERVER_ADDRESS}/SEARCH/"); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([ 'Licence' => '{LICENCE_CODE}', 'Address' => '12 Rue de la Paix', 'PostalCode' => '75002', 'City' => 'Paris', 'LastName' => 'Dupont', 'FirstName' => 'Jean', 'BirthDate' => '1980-05-15', 'Email' => 'jean.dupont@example.com', 'Phone' => '0606060606', ])); 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}/SEARCH/', qs.stringify({ Licence: '{LICENCE_CODE}', Address: '12 Rue de la Paix', PostalCode: '75002', City: 'Paris', LastName: 'Dupont', FirstName: 'Jean', BirthDate: '1980-05-15', Email: 'jean.dupont@example.com', Phone: '0606060606' })) .then(response => console.log(response.data));
HttpClient client = HttpClient.newHttpClient(); String form = "Licence={LICENCE_CODE}&Address=12%20Rue%20de%20la%20Paix&PostalCode=75002" + "&City=Paris&LastName=Dupont&FirstName=Jean&BirthDate=1980-05-15" + "&Email=jean.dupont%40example.com&Phone=0606060606"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://{SERVER_ADDRESS}/SEARCH/")) .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> { ["Licence"] = "{LICENCE_CODE}", ["Address"] = "12 Rue de la Paix", ["PostalCode"] = "75002", ["City"] = "Paris", ["LastName"] = "Dupont", ["FirstName"] = "Jean", ["BirthDate"] = "1980-05-15", ["Email"] = "jean.dupont@example.com", ["Phone"] = "0606060606" }; var response = await client.PostAsync( "https://{SERVER_ADDRESS}/SEARCH/", 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("Licence", "{LICENCE_CODE}") form.Set("Address", "12 Rue de la Paix") form.Set("PostalCode", "75002") form.Set("City", "Paris") form.Set("LastName", "Dupont") form.Set("FirstName", "Jean") form.Set("BirthDate", "1980-05-15") form.Set("Email", "jean.dupont@example.com") form.Set("Phone", "0606060606") resp, err := http.PostForm("https://{SERVER_ADDRESS}/SEARCH/", form) if err != nil { panic(err) } defer resp.Body.Close() body, _ := io.ReadAll(resp.Body) fmt.Println(string(body)) }

Parameters

Parameter Description Mand / Opt
Licence Your DQE licence code. Mandatory
Address Street number and street name. Mandatory
PostalCode Postal code. Mandatory
City City name. Mandatory
LastName Last name of the person to verify. Mandatory
FirstName First name of the person to verify. Mandatory
BirthDate Date of birth in YYYY-MM-DD format. Mandatory
Email Email address to verify. Mandatory
Phone Phone number to verify. Mandatory
Version Returns licence status information when set to 2. Optional

Response

On success, the API returns a JSON object containing a single DATA1 object with the following keys.

Key Possible values Description Type
Check_FirstName E, S, P, D, ? First name verification result. STRING(1)
Check_BirthDate See birthdate codes below. Date of birth verification result. STRING(3)
Check_Number True, False Indicates whether the street number matches the database. STRING(5)
HOUSEHOLDID — Unique identifier in the database. STRING(30)
FirstName_Dist — Number of different characters between the submitted first name and the database value. STRING(2)
LastName_Dist — Number of different characters between the submitted last name and the database value. STRING(2)
Result FOUND, NOT FOUND Indicates whether the household was found based on address, email, or phone data. STRING(9)
Check_Email E, D, ? Email verification result. STRING(1)
Check_LastName E, S, P, D, ? Last name verification result. STRING(1)
Check_City E, S, P, N, D, ? City verification result. STRING(1)
Check_PostalCode E, N, D, ? Postal code verification result. STRING(1)
Check_Phone E, D, ? Phone verification result. STRING(1)
Check_Address E, S, P, N, D, ? Address verification result. STRING(1)

Comparison code values

Generic comparison code values, used by Check_FirstName, Check_LastName, Check_City, Check_PostalCode, Check_Phone, Check_Email, and Check_Address:

Code Description
? The field was not provided, is not available, or the subscribed product does not allow this check.
E The value in the database is strictly identical to the value provided in the request.
S The value in the database is close to the value provided in the request, up to 10% difference.
P The value in the database is quite far from the value provided in the request, up to 25% difference.
N For address and city: the value is far from the request value, up to 35% difference. For postal code: the first 3 digits match.
D The value in the database is completely different from the value provided in the request.

Birthdate comparison codes

Specific comparison codes used by Check_BirthDate:

Code Description
000 Year, month, and day are identical.
001 Year and month are identical, but the day is different.
010 Year and day are identical, but the month is different.
100 Month and day are identical, but the year is different.
011 Year is identical, but month and day are different.
101 Month is identical, but year and day are different.
110 Day is identical, but year and month are different.
111 Year, month, and day are different.
--- No date is available in the database.

Response example

Household found

{
  "DATA1": {
    "Check_FirstName": "E",
    "Check_BirthDate": "000",
    "Check_Number": "True",
    "HOUSEHOLDID": "3678263863104901575",
    "FirstName_Dist": "0",
    "LastName_Dist": "0",
    "Result": "FOUND",
    "Check_Email": "D",
    "Check_LastName": "E",
    "Check_City": "E",
    "Check_Address": "E",
    "Check_PostalCode": "E",
    "Check_Phone": "D"
  }
}

Errors

HTTP Error type Response body
400 Missing or empty mandatory parameter (e.g. Address, PostalCode, LastName, or any other required field)
{"status": 400, "message": "Missing parameters", "details": "Address", "error": "bad request"}
401 Missing, empty, or incorrect licence key
{"status": 401, "message": "Your licence is not allowed to cover this functionality", "details": "deded", "error": "unauthorized_client"}

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