curl --request POST \
--url https://pro.resocom.com/api/v1/analyses \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"document": "<string>",
"documentVerso": "<string>",
"externalRef": "<string>",
"agencyPostalCode": "<string>",
"includeCertificate": false
}
'import requests
url = "https://pro.resocom.com/api/v1/analyses"
payload = {
"document": "<string>",
"documentVerso": "<string>",
"externalRef": "<string>",
"agencyPostalCode": "<string>",
"includeCertificate": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
document: '<string>',
documentVerso: '<string>',
externalRef: '<string>',
agencyPostalCode: '<string>',
includeCertificate: false
})
};
fetch('https://pro.resocom.com/api/v1/analyses', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://pro.resocom.com/api/v1/analyses",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'document' => '<string>',
'documentVerso' => '<string>',
'externalRef' => '<string>',
'agencyPostalCode' => '<string>',
'includeCertificate' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://pro.resocom.com/api/v1/analyses"
payload := strings.NewReader("{\n \"document\": \"<string>\",\n \"documentVerso\": \"<string>\",\n \"externalRef\": \"<string>\",\n \"agencyPostalCode\": \"<string>\",\n \"includeCertificate\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://pro.resocom.com/api/v1/analyses")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"document\": \"<string>\",\n \"documentVerso\": \"<string>\",\n \"externalRef\": \"<string>\",\n \"agencyPostalCode\": \"<string>\",\n \"includeCertificate\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://pro.resocom.com/api/v1/analyses")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"document\": \"<string>\",\n \"documentVerso\": \"<string>\",\n \"externalRef\": \"<string>\",\n \"agencyPostalCode\": \"<string>\",\n \"includeCertificate\": false\n}"
response = http.request(request)
puts response.read_body{
"id": "CSL-20260717-3F2A91",
"externalRef": "DOSSIER-88412",
"workflowId": "WFL-20260706-BEF798",
"documentCategory": "identite",
"documentType": "CNI",
"documentCountry": "FRA",
"verdict": "conforme",
"decision": "conforme",
"reviewStatus": "pending",
"anomalyCount": 123,
"hasRejectAnomaly": true,
"anomalies": [
{
"code": "selfie_mismatch",
"severity": "reject",
"message": "<string>"
}
],
"twoDDoc": {
"present": true,
"trusted": true,
"signatureVerified": true,
"signatureStatus": "<string>",
"dataMatches": true,
"readStatus": "read",
"readStatusMessage": "2D-Doc présent mais non lu : qualité d'image insuffisante."
},
"analyzedAt": "2023-11-07T05:31:56Z",
"createdAt": "2023-11-07T05:31:56Z",
"certificate": "<string>",
"certificateUrl": "<string>"
}{
"error": "invalid_api_key"
}{
"error": "invalid_api_key"
}{
"error": "invalid_api_key"
}{
"error": "invalid_api_key"
}{
"error": "invalid_api_key"
}{
"error": "invalid_api_key"
}{
"error": "invalid_api_key"
}{
"error": "invalid_api_key"
}{
"error": "invalid_api_key"
}{
"error": "invalid_api_key"
}Analyser un document
Analyse immédiate d’un document que votre système détient déjà — tunnel web, application, agence, GED — sans parcours à faire suivre. La réponse synchrone porte le résultat complet, au même format que la lecture. « Analyse impossible » est un RÉSULTAT (201), enregistré et relisible : les erreurs HTTP ne parlent que de la requête ou de la disponibilité du service. Débit dédié : 20 analyses par minute et par clé. En-tête optionnel Idempotency-Key (≤ 255 caractères, fenêtre 24 h) : un retry réseau avec la même clé rend le même résultat — jamais une seconde analyse. La réponse rejouée porte l’en-tête Idempotency-Replayed: true.
curl --request POST \
--url https://pro.resocom.com/api/v1/analyses \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"document": "<string>",
"documentVerso": "<string>",
"externalRef": "<string>",
"agencyPostalCode": "<string>",
"includeCertificate": false
}
'import requests
url = "https://pro.resocom.com/api/v1/analyses"
payload = {
"document": "<string>",
"documentVerso": "<string>",
"externalRef": "<string>",
"agencyPostalCode": "<string>",
"includeCertificate": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
document: '<string>',
documentVerso: '<string>',
externalRef: '<string>',
agencyPostalCode: '<string>',
includeCertificate: false
})
};
fetch('https://pro.resocom.com/api/v1/analyses', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://pro.resocom.com/api/v1/analyses",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'document' => '<string>',
'documentVerso' => '<string>',
'externalRef' => '<string>',
'agencyPostalCode' => '<string>',
'includeCertificate' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://pro.resocom.com/api/v1/analyses"
payload := strings.NewReader("{\n \"document\": \"<string>\",\n \"documentVerso\": \"<string>\",\n \"externalRef\": \"<string>\",\n \"agencyPostalCode\": \"<string>\",\n \"includeCertificate\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://pro.resocom.com/api/v1/analyses")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"document\": \"<string>\",\n \"documentVerso\": \"<string>\",\n \"externalRef\": \"<string>\",\n \"agencyPostalCode\": \"<string>\",\n \"includeCertificate\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://pro.resocom.com/api/v1/analyses")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"document\": \"<string>\",\n \"documentVerso\": \"<string>\",\n \"externalRef\": \"<string>\",\n \"agencyPostalCode\": \"<string>\",\n \"includeCertificate\": false\n}"
response = http.request(request)
puts response.read_body{
"id": "CSL-20260717-3F2A91",
"externalRef": "DOSSIER-88412",
"workflowId": "WFL-20260706-BEF798",
"documentCategory": "identite",
"documentType": "CNI",
"documentCountry": "FRA",
"verdict": "conforme",
"decision": "conforme",
"reviewStatus": "pending",
"anomalyCount": 123,
"hasRejectAnomaly": true,
"anomalies": [
{
"code": "selfie_mismatch",
"severity": "reject",
"message": "<string>"
}
],
"twoDDoc": {
"present": true,
"trusted": true,
"signatureVerified": true,
"signatureStatus": "<string>",
"dataMatches": true,
"readStatus": "read",
"readStatusMessage": "2D-Doc présent mais non lu : qualité d'image insuffisante."
},
"analyzedAt": "2023-11-07T05:31:56Z",
"createdAt": "2023-11-07T05:31:56Z",
"certificate": "<string>",
"certificateUrl": "<string>"
}{
"error": "invalid_api_key"
}{
"error": "invalid_api_key"
}{
"error": "invalid_api_key"
}{
"error": "invalid_api_key"
}{
"error": "invalid_api_key"
}{
"error": "invalid_api_key"
}{
"error": "invalid_api_key"
}{
"error": "invalid_api_key"
}{
"error": "invalid_api_key"
}{
"error": "invalid_api_key"
}Authorizations
Clé API créée dans Administration → Développeurs → Clés API (licence Groupe). Une clé en lecture seule ne peut appeler que les opérations GET.
Headers
Même clé dans les 24 h → même résultat, pas de second acte.
255Body
Nature du document transmis.
identite, administratif Le document en base64 (préfixe data URL et retours à la ligne tolérés). Identité : image JPEG, PNG ou WebP (le recto). Administratif : PDF, JPEG, PNG, WebP ou TIFF d'une seule page, fichier unique. 10 Mo maximum.
Verso de la pièce d'identité (base64, optionnel). Refusé pour un document administratif.
Votre référence de dossier — renvoyée dans le résultat et filtrable en lecture.
255Code postal de la commune de l'agence qui contrôle (optionnel, France). Pour une pièce d'identité, il place son passage sur la carte du parcours du document, au centre de la commune ; un code partagé par plusieurs communes désigne la plus peuplée. Un code qu'aucune commune ne porte (CEDEX, faute de frappe) est refusé en 400 invalid_request, avant toute analyse.
^\d{5}$Demande le certificat PDF dans la réponse. Si sa génération est temporairement saturée, le résultat reste créé et certificateUrl permet de le retélécharger.
Response
Le résultat de l'analyse — même forme que la lecture. Si le certificat demandé ne peut pas être généré immédiatement, certificateUrl reste présent et certificate est omis.
Résultat d'une vérification.
Identifiant unique du résultat.
"CSL-20260717-3F2A91"
Votre référence de dossier, renvoyée telle quelle.
"DOSSIER-88412"
Workflow qui a évalué le document.
"WFL-20260706-BEF798"
Catégorie du document contrôlé.
identite, administratif Type de document détecté.
"CNI"
Pays émetteur (ISO 3166-1 alpha-3).
"FRA"
Constat de l'analyse du document, que la revue ne modifie jamais. Les règles de votre workflow n'y touchent pas : leur résultat est dans decision (un document conforme peut être refusé pour l'âge du porteur ou sa connexion). sans_anomalie ne concerne que les pièces administratives : émetteur confirmé dans un registre officiel, rien de relevé, sans cachet 2D-Doc vérifié.
conforme, sans_anomalie, non_conforme, suspect, analyse_impossible Décision du workflow selon vos règles.
conforme, a_verifier, refuse, null Décision de traitement de votre équipe (revue humaine).
pending, accepted, rejected, null Nombre de points d'attention relevés.
Au moins un point d'attention bloquant.
Points d'attention relevés par l'analyse.
Show child attributes
Show child attributes
Cachet électronique 2D-Doc du document (null si aucun 2D-Doc et rien à signaler).
Show child attributes
Show child attributes
Date de l'analyse.
Date d'enregistrement.
Certificat PDF en base64 — présent si demandé et générable immédiatement.
Adresse de téléchargement du certificat — présente dès qu'il est demandé.

