ID Mobile — Faire correspondre une identité sans OTP

Support DQE
Support DQE
  • Mise à jour
Matching without OTP - API ID Mobile

Utilisez cet endpoint pour comparer les données soumises par l'utilisateur aux données de l'opérateur, sans nécessiter le consentement de l'utilisateur (OTP). Renvoie un score de similarité pour chaque champ.

Documentation ID Mobile associée :

Matching without OTP

Requête

Les méthodes GET et POST sont toutes deux prises en charge. Il s'agit d'un appel en une seule étape — le résultat de la comparaison est renvoyé directement dans la réponse, aucune page de consentement ni étape de récupération n'est nécessaire.

{SERVER_ADDRESS} et {LICENCE_CODE} sont fournis par DQE à la création du compte. {TOKEN} est le jeton d'accès obtenu via l'endpoint Access Token d'ID Mobile. Contactez votre chargé de compte DQE pour obtenir l'adresse du serveur et le code de licence.
GEThttps://{SERVER_ADDRESS}/IDMOBILE/?number={NUM}&token={TOKEN}&mode={MODE}&name={NAME}&code_name={CODE_NAME}&licence={LICENCE_CODE}&user_infos={INFORMATION}&scope=matching_notp&redirect_uri={URL_REDIRECT}&country={COUNTRY}&format={FORMAT}&period={PERIOD}

Remplacez les valeurs entre accolades par vos propres informations — voir le tableau des paramètres ci-dessous.

Exemples de code

Comparez les données d'identité soumises à celles de l'opérateur — user_infos est représenté ici par le placeholder {INFORMATION} ; voir l'exemple détaillé sous le tableau des paramètres pour sa véritable structure JSON.

curl "https://{SERVER_ADDRESS}/IDMOBILE/?number=33612345678&token={TOKEN}&mode=2&name=MYCOMPANY&licence={LICENCE_CODE}&user_infos={INFORMATION}&scope=matching_notp"
fetch("https://{SERVER_ADDRESS}/IDMOBILE/?" + new URLSearchParams({ number: "33612345678", token: "{TOKEN}", mode: "2", name: "MYCOMPANY", licence: "{LICENCE_CODE}", user_infos: "{INFORMATION}", scope: "matching_notp" })) .then(r => r.json()) .then(data => console.log(data));
import requests response = requests.get( "https://{SERVER_ADDRESS}/IDMOBILE/", params={ "number": "33612345678", "token": "{TOKEN}", "mode": "2", "name": "MYCOMPANY", "licence": "{LICENCE_CODE}", "user_infos": "{INFORMATION}", "scope": "matching_notp", }, ) print(response.json())
<?php $params = http_build_query([ 'number' => '33612345678', 'token' => '{TOKEN}', 'mode' => '2', 'name' => 'MYCOMPANY', 'licence' => '{LICENCE_CODE}', 'user_infos' => '{INFORMATION}', 'scope' => 'matching_notp', ]); $ch = curl_init("https://{SERVER_ADDRESS}/IDMOBILE/?{$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}/IDMOBILE/', { params: { number: '33612345678', token: '{TOKEN}', mode: '2', name: 'MYCOMPANY', licence: '{LICENCE_CODE}', user_infos: '{INFORMATION}', scope: 'matching_notp' } }) .then(response => console.log(response.data));
HttpClient client = HttpClient.newHttpClient(); String url = "https://{SERVER_ADDRESS}/IDMOBILE/" + "?number=33612345678&token={TOKEN}&mode=2&name=MYCOMPANY&licence={LICENCE_CODE}&user_infos={INFORMATION}&scope=matching_notp"; 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}/IDMOBILE/" + "?number=33612345678&token={TOKEN}&mode=2&name=MYCOMPANY&licence={LICENCE_CODE}&user_infos={INFORMATION}&scope=matching_notp"; 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}/IDMOBILE/" + "?number=33612345678&token={TOKEN}&mode=2&name=MYCOMPANY&licence={LICENCE_CODE}&user_infos={INFORMATION}&scope=matching_notp" 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}/IDMOBILE/

Ajoutez les paramètres suivants dans le corps de la requête au format Content-Type: application/x-www-form-urlencoded :

Exemples de code

Comparez les données d'identité soumises à celles de l'opérateur

curl -X POST "https://{SERVER_ADDRESS}/IDMOBILE/" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "licence={LICENCE_CODE}" \ -d "number=33612345678" \ -d "token={TOKEN}" \ -d "mode=2" \ -d "name=MYCOMPANY" \ -d "user_infos={INFORMATION}" \ -d "scope=matching_notp"
fetch("https://{SERVER_ADDRESS}/IDMOBILE/", { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded" }, body: new URLSearchParams({ licence: "{LICENCE_CODE}", number: "33612345678", token: "{TOKEN}", mode: "2", name: "MYCOMPANY", user_infos: "{INFORMATION}", scope: "matching_notp" }) }) .then(r => r.json()) .then(data => console.log(data));
import requests response = requests.post( "https://{SERVER_ADDRESS}/IDMOBILE/", data={ "licence": "{LICENCE_CODE}", "number": "33612345678", "token": "{TOKEN}", "mode": "2", "name": "MYCOMPANY", "user_infos": "{INFORMATION}", "scope": "matching_notp", }, ) print(response.json())
<?php $ch = curl_init("https://{SERVER_ADDRESS}/IDMOBILE/"); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([ 'licence' => '{LICENCE_CODE}', 'number' => '33612345678', 'token' => '{TOKEN}', 'mode' => '2', 'name' => 'MYCOMPANY', 'user_infos' => '{INFORMATION}', 'scope' => 'matching_notp', ])); 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}/IDMOBILE/', qs.stringify({ licence: '{LICENCE_CODE}', number: '33612345678', token: '{TOKEN}', mode: '2', name: 'MYCOMPANY', user_infos: '{INFORMATION}', scope: 'matching_notp' })) .then(response => console.log(response.data));
HttpClient client = HttpClient.newHttpClient(); String form = "licence={LICENCE_CODE}&number=33612345678&token={TOKEN}&mode=2&name=MYCOMPANY&user_infos={INFORMATION}&scope=matching_notp"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://{SERVER_ADDRESS}/IDMOBILE/")) .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}", ["number"] = "33612345678", ["token"] = "{TOKEN}", ["mode"] = "2", ["name"] = "MYCOMPANY", ["user_infos"] = "{INFORMATION}", ["scope"] = "matching_notp" }; var response = await client.PostAsync( "https://{SERVER_ADDRESS}/IDMOBILE/", 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("number", "33612345678") form.Set("token", "{TOKEN}") form.Set("mode", "2") form.Set("name", "MYCOMPANY") form.Set("user_infos", "{INFORMATION}") form.Set("scope", "matching_notp") resp, err := http.PostForm("https://{SERVER_ADDRESS}/IDMOBILE/", form) if err != nil { panic(err) } defer resp.Body.Close() body, _ := io.ReadAll(resp.Body) fmt.Println(string(body)) }

Paramètres

Parameter Description Obl / Opt
SERVER_ADDRESS Adresse du serveur DQE qui traitera les données. Obligatoire
licence Numéro qui vous a été attribué comme code de licence. Obligatoire
number Numéro de téléphone. Obligatoire
token Jeton récupéré lors de l'authentification. Obligatoire
mode 2 : authentification par code. Obligatoire
name Nom du partenaire dans la base de données DQE Software, généralement le nom de votre société. Obligatoire
code_name Champ optionnel contenant un code associé à name. Optionnel
user_infos Objet JSON contenant les informations client à comparer. Voir le tableau des clés user_infos ci-dessous. Obligatoire si le scope est matching_notp. Optionnel
scope Valeur statique. Doit être matching_notp pour ce scope. Obligatoire
redirect_uri URL de redirection. DQE ajoute le jeton de session et le statut à la redirection. Optionnel
country À utiliser uniquement pour Matching without OTP à l'international. Valeur attendue : code pays ISO à 2 lettres. Optionnel
format Code de format de numéro de téléphone (voir la documentation de l'API Phone de DQE) utilisé pour reformater le numéro. Optionnel
period Fenêtre de validité du contrôle de changement de SIM, en heures (0 à 72). Pertinent uniquement lorsque le scope simswap est combiné — voir la remarque ci-dessous. Optionnel
Combinaison de scopes — matching_notp peut être combiné avec simswap (prévention de la fraude) en une seule requête, par ex. scope=matching_notp,simswap, et avec info (intelligence sur le numéro de téléphone) dans n'importe quelle combinaison, par ex. scope=matching_notp,info. Le paramètre format est utilisé lorsque le scope info est combiné, et period devient pertinent lorsque le scope simswap est combiné. Voir les champs info ci-dessous. Contactez votre chargé de compte DQE pour plus d'informations sur la forme complète de la réponse combinée matching_notp+simswap.

Champs additionnels info — renvoyés en complément des champs propres à cet endpoint lorsque info est inclus dans scope :

Champ Description Exemple
telorigine Numéro de téléphone de la requête. 0600000000
tel Numéro de téléphone, formaté. +33600000000
geolocation Situation géographique du numéro de téléphone. FRANCE
operator Opérateur actuel du numéro de téléphone, si souscrit. ORANGE
oldoperator Opérateur précédent du numéro de téléphone. SFR
ported Indique si le numéro de téléphone a été porté, si souscrit. Y
type Type du numéro de téléphone. MOBILE
iderror Code d'erreur du contrôle (0 ou 1). 1

Clés de user_infos — chaque clé doit être présente, même si aucune valeur n'est fournie :

Key Description
street_address Type et nom de la voie.
postal_code Code postal.
locality Ville.
country Nom complet du pays.
birthdate Date de naissance au format YYYY-MM-DD.
email Adresse e-mail.
lastname Nom de famille.
maiden_name Nom de jeune fille.
gender Genre : M ou F.
firstname Prénom.
phone Numéro de téléphone.
number Numéro de rue. Cette clé doit être présente dans le payload JSON, mais n'a pas besoin d'être renseignée.

Exemple de valeur user_infos (toutes les clés présentes, vides si inconnues)

{ "street_address": "", "postal_code": "", "locality": "", "country": "", "birthdate": "", "email": "", "lastname": "", "maiden_name": "", "gender": "", "firstname": "", "phone": "", "number": "" }

Réponse

L'API renvoie un objet JSON avec un score de similarité pour chaque champ :

Clé Description Type
family_name Score de similarité pour le nom de famille. Number
gender Score de similarité pour la civilité. Number
birthdate Score de similarité pour la date de naissance. Number
given_name Score de similarité pour le prénom. Number
address Objet contenant les scores de similarité de l'adresse. Clés : country, postal_code, street_address, locality. Object
email Score de similarité pour l'adresse e-mail. Number

Exemple de réponse

Exemple de réponse réussie
{ "family_name": 1.0, "gender": "", "birthdate": 1.0, "given_name": 1.0, "address": { "country": 1.0, "postal_code": 0.78, "street_address": 0.56, "locality": 0.44 }, "email": 1.0 }

Erreurs

L'API renvoie un objet JSON contenant status, error_type et error_id en cas d'échec :

ID d'erreur Type d'erreur Exemple de requête Réponse
01 invalid request https://{SERVER_ADDRESS}/IDMOBILE/?token={TOKEN}&mode=2&name={NAME}&licence={LICENCE_CODE}&user_infos={INFORMATION}&scope=matching_notp
Exemple : paramètre number manquant.
{"status": "error", "error_type": "invalid request", "error_id": "01"}
02 invalid licence key https://{SERVER_ADDRESS}/IDMOBILE/?number={NUM}&token={TOKEN}&mode=2&name={NAME}&licence={INCORRECT_LICENCE_CODE}&user_infos={INFORMATION}&scope=matching_notp
{"status": "error", "error_type": "invalid licence key", "error_id": "02"}
04 invalid scope https://{SERVER_ADDRESS}/IDMOBILE/?number={NUM}&token={TOKEN}&mode=2&name={NAME}&licence={LICENCE_CODE}&user_infos={INFORMATION}&scope=wrongScope
{"status": "error", "error_type": "invalid scope", "error_id": "04"}
05 missing or empty parameter (user_infos) for this scope https://{SERVER_ADDRESS}/IDMOBILE/?number={NUM}&token={TOKEN}&mode=2&name={NAME}&licence={LICENCE_CODE}&scope=matching_notp
Exemple : paramètre user_infos manquant.
{"status": "error", "error_type": "missing or empty parameter (user_infos) for this scope", "error_id": "05"}
06 bad parameter format (user_infos) is not a valid JSON https://{SERVER_ADDRESS}/IDMOBILE/?number={NUM}&token={TOKEN}&mode=2&name={NAME}&licence={LICENCE_CODE}&user_infos=not-valid-json&scope=matching_notp
{"status": "error", "error_type": "bad parameter format (user_infos) is not a valid JSON", "error_id": "06"}
07 missing mandatory key in user informations (phone) https://{SERVER_ADDRESS}/IDMOBILE/?number={NUM}&token={TOKEN}&mode=2&name={NAME}&licence={LICENCE_CODE}&user_infos=%7B...no+phone+key...%7D&scope=matching_notp
Exemple : l'objet JSON user_infos n'a pas sa clé phone.
{"status": "error", "error_type": "missing mandatory key in user informations (phone)", "error_id": "07"}
09 ineligible phone number https://{SERVER_ADDRESS}/IDMOBILE/?number={INELIGIBLE_NUMBER}&token={TOKEN}&mode=2&name={NAME}&licence={LICENCE_CODE}&user_infos={INFORMATION}&scope=matching_notp
{"status": "error", "error_type": "ineligible phone number", "error_id": "09"}
10 invalid phone number https://{SERVER_ADDRESS}/IDMOBILE/?number={INVALID_NUMBER}&token={TOKEN}&mode=2&name={NAME}&licence={LICENCE_CODE}&user_infos={INFORMATION}&scope=matching_notp
{"status": "error", "error_type": "invalid phone number", "error_id": "10"}
11 phone number is empty https://{SERVER_ADDRESS}/IDMOBILE/?number=&token={TOKEN}&mode=2&name={NAME}&licence={LICENCE_CODE}&user_infos={INFORMATION}&scope=matching_notp
{"status": "error", "error_type": "phone number is empty", "error_id": "11"}
12 phone check failed https://{SERVER_ADDRESS}/IDMOBILE/?number={NUM}&token={TOKEN}&mode=2&name={NAME}&licence={LICENCE_CODE}&user_infos={INFORMATION}&scope=matching_notp
Condition côté opérateur — une requête syntaxiquement valide peut tout de même échouer ici.
{"status": "error", "error_type": "phone check failed", "error_id": "12"}
13 operator [Operator Name] not found https://{SERVER_ADDRESS}/IDMOBILE/?number={NUM}&token={TOKEN}&mode=2&name={NAME}&licence={LICENCE_CODE}&user_infos={INFORMATION}&scope=matching_notp
Condition côté opérateur.
{"status": "error", "error_type": "operator [Operator Name] not found", "error_id": "13"}
14 operator [Operator Name] not authorized for this licence https://{SERVER_ADDRESS}/IDMOBILE/?number={NUM}&token={TOKEN}&mode=2&name={NAME}&licence={LICENCE_CODE}&user_infos={INFORMATION}&scope=matching_notp
Condition côté opérateur — votre licence n'est pas autorisée pour cet opérateur.
{"status": "error", "error_type": "operator [Operator Name] not authorized for this licence", "error_id": "14"}
15 operator [Operator Name] not supported yet https://{SERVER_ADDRESS}/IDMOBILE/?number={NUM}&token={TOKEN}&mode=2&name={NAME}&licence={LICENCE_CODE}&user_infos={INFORMATION}&scope=matching_notp
Condition côté opérateur.
{"status": "error", "error_type": "operator [Operator Name] not supported yet", "error_id": "15"}
16 operator [Operator Name] unreachable https://{SERVER_ADDRESS}/IDMOBILE/?number={NUM}&token={TOKEN}&mode=2&name={NAME}&licence={LICENCE_CODE}&user_infos={INFORMATION}&scope=matching_notp
Condition côté opérateur.
{"status": "error", "error_type": "operator [Operator Name] unreachable", "error_id": "16"}
17 scope not supported by this operator [Operator Name] yet https://{SERVER_ADDRESS}/IDMOBILE/?number={NUM}&token={TOKEN}&mode=2&name={NAME}&licence={LICENCE_CODE}&user_infos={INFORMATION}&scope=matching_notp
Condition côté opérateur.
{"status": "error", "error_type": "scope not supported by this operator [Operator Name] yet", "error_id": "17"}
30 invalid or expired token https://{SERVER_ADDRESS}/IDMOBILE/?number={NUM}&token={EXPIRED_TOKEN}&mode=2&name={NAME}&licence={LICENCE_CODE}&user_infos={INFORMATION}&scope=matching_notp
{"status": "error", "error_type": "invalid or expired token", "error_id": "30"}
Exemple de réponse d'erreur
{ "status": "error", "error_type": "invalid phone number", "error_id": "10" }

Tester l'API

Cliquez sur le bouton ci-dessous pour tester cet endpoint en direct dans votre navigateur.

Ouvrir la console

Voir aussi

Cet article vous a-t-il été utile ?

Utilisateurs qui ont trouvé cela utile : 0 sur 0