Guide de migration ShootID vers ID360
🔑 ETAPE 1 – AUTHENTIFICATION
🔹 ShootID
- Méthode : Authentification via HTTP Basic Auth
- Header utilisé dans toutes les requêtes :
Authorization: Basic base64(applicationToken:applicationSecret)
- Durée de validité : Permanente (ou jusqu’à révocation manuelle)
🔸 ID360
- Méthode : POST /api/1.0.0/user/login/
- URL :
- Payload JSON :
{ "username": "string", "password": "string" }
- Réponse :
{ "token": "0123456789abcdef01234567" }
- Header à inclure ensuite dans chaque appel API :
Authorization: Token 0123456789abcdef01234567
🕐 Durée de vie & renouvellement du token (ID360)
- Durée de validité : 15 minutes
- Renouvellement automatique : à chaque appel API utilisant ce token
- Exception : L’appel `/user/login/` ne renouvelle pas la durée
- Erreur en cas d’expiration : HTTP 401 Unauthorized
🔄 Pour prolonger la validité du token (sans générer un nouveau token) :
GET /api/1.0.0/user/whoami Authorization: Token 0123456789abcdef01234567
- Fréquence recommandée : toutes les 13 minutes
- Réponse attendue : HTTP 200 si le token est toujours valide
✅ Tableau de correspondance : Authentification
| Fonction | ShootID | ID360 |
|---|---|---|
| Méthode | HTTP Basic Auth | Login avec username/password → Token |
| Endpoint | N/A (inclus dans chaque appel) | POST /user/login/ |
| Format d’authentification | Authorization: Basic … | Authorization: Token <jeton> |
| Validité du token | Long terme (pas d’expiration) | expiré au delà de 15 min d'inactivité |
| Prolongation du token | N/A | GET /user/whoami recommandé toutes les 13 min |
🧩 ÉTAPE 2 – INITIALISER UNE TRANSACTION / DÉMARRER UN PARCOURS
🔹 ShootID
- Méthode : `GET`
- Réponse :
{ "transactionId": "2c95841e45404f7e0145405da33f0009", "qrCode": "https://www.contralia.fr/shootid/api/v2/picture?pictureId=2c95841e45404f7e0145405" }
🔸 ID360
- Méthode : `POST`
- URL PROD : `https://id360docaposte.com/api/1.0.0/process/{UUID}/enrollment`
- URL PREPROD : `https://preprod.id360docaposte.com/api/1.0.0/process/{UUID}/enrollment`
- Requête (cURL) :
curl -X POST \ "https://id360docaposte.com/api/1.0.0/process/{UUID}/enrollment" \ -H "accept: application/json" \ -H "Authorization: Token 0123456789abcdef01234567" \ -d '{ "callback_url": "https://www.example.com/callback_url", "browser_callback_url": "https://www.example.com/browser_callback_url", "client_reference": "any_string", "callback_headers": { "header_name_1": "header_value_1", "header_name_2": "header_value_2" }, "last_name": "Users last name", "first_name": "Users first name", "email": "Users email", "address_line_1": "Users address line 1", "address_line_2": "Users address line 2", "address_line_3": "Users address line 3", "zip_code": "Users zip code", "city": "Users city", "country": "Users country", "phone_number": "Users phone number" }'
🧾 Précisions sur les paramètres
- Dans l'url, l'UUID correspond à l'ID du parcours
- `callback_url` (obligatoire) : URL backend qui recevra en POST le résultat complet du parcours ID360
- `browser_callback_url` (obligatoire) : URL vers laquelle l’utilisateur est redirigé côté navigateur
- `callback_headers` : headers personnalisés pour l’appel vers votre backend (auth, identifiant, etc.)
- `client_reference` : identifiant de dossier interne à votre SI (pour faire le lien avec vos données)
- Champs utilisateurs (`last_name`, `email`, etc.) : purement informatifs, non utilisés pour des contrôles
- `email` : obligatoire uniquement si parcours PVID
✅ Tableau de correspondance : Initialisation de parcours
| Fonction | ShootID | ID360 |
|---|---|---|
| Type d’appel | `GET /api/v2/init` | `POST /api/1.0.0/process/{id}/enrollment` |
| Retour | `transactionId`, `qrCode` | `id` (dossier), `url`, `api_key`, `status` |
| Paramétrage du parcours | Implicite | Explicite via `{id}` du process configuré dans l’IHM |
| Callback technique | N\A | `callback_url` (backend) + `browser_callback_url` (front) |
| Suivi personnalisé | Non | `client_reference` possible |
| Authentification | Via Basic dans chaque appel | Via token (`Authorization: Token …`) |
🔀 ÉTAPE 2B – CHOIX & SÉLECTION DE LA ROUTE (ID360)
🧭 Pourquoi cette étape est nécessaire
Dans certains parcours ID360, plusieurs méthodes d’identification peuvent être proposées à l’utilisateur final, telles que :
- L’identification via l’Identité Numérique de La Poste
- L’identification via un Parcours en Ligne Personnalisable de Docaposte
👉 Dans le cadre du présent parcours, seul le canal du Parcours Personnalisable Docaposte est utilisé, ce qui implique que la plateforme ID360 demande explicitement à l’intégrateur de sélectionner cette route parmi les options disponibles.
🔐 Cette sélection garantit que l’utilisateur suivra le bon scénario d’identification, sans ambiguïté, en accord avec le paramétrage métier prévu dans la console d’administration.
🎯 Objectif
Associer une route spécifique à un dossier utilisateur (enrollment) via son `api_key`, afin de verrouiller le mode d’identification à suivre.
1. 📥 Récupération de la liste des routes
- Endpoint : `GET /api/1.0.0/enrollment/flow/enrollment_info/`
Préprod :
curl -X 'GET' \ 'https://preprod.id360docaposte.com/api/1.0.0/enrollment/flow/enrollment_info/' \ -H 'accept: application/json' \ -H 'x-api-key: {API_KEY_DOSSIER}'
Prod :
curl -X 'GET' \ 'https://id360docaposte.com/api/1.0.0/enrollment/flow/enrollment_info/' \ -H 'accept: application/json' \ -H 'x-api-key: {API_KEY_DOSSIER}'
Réponse (extrait) :
{ "routes": [ { "id": 275128 } ] }
Le champ `routes[0].id` contient l’identifiant de la route à utiliser.
2. ✅ Sélection de la route
- Endpoint : `POST /api/1.0.0/enrollment/flow/route/{route_id}/select/`
Préprod :
curl -X 'POST' \ 'https://preprod.id360docaposte.com/api/1.0.0/enrollment/flow/route/{route_id}/select/' \ -H 'accept: application/json' \ -H 'x-api-key: {API_KEY_DOSSIER}' \ -H 'Content-Type: text/plain'
Prod :
curl -X 'POST' \ 'https://id360docaposte.com/api/1.0.0/enrollment/flow/route/{route_id}/select/' \ -H 'accept: application/json' \ -H 'x-api-key: {API_KEY_DOSSIER}' \ -H 'Content-Type: text/plain'
Réponse attendue :
HTTP 204 No Content
📝 Remarques clés
- La clé API du dossier (`api_key`) est obtenue via l’appel `POST /process/{id}/enrollment`
- Le choix de la route est obligatoire dans les parcours multi-canal
- La route sélectionnée est ensuite associée définitivement à ce dossier
- Cette action doit être effectuée avant tout envoi de documents ou d’infos utilisateur
🪪 ÉTAPE 3 – AJOUTER UN DOCUMENT D’IDENTITÉ
🔹 ShootID
- Méthode : `POST`
- Type : `multipart/form-data`
- Champs principaux :
- `transactionId` (string) – identifiant de la transaction (obligatoire)
- `file` (fichier) – image à uploader (obligatoire)
- `type` (enum string) – type de document géré : `Enum : IDENTITY`. (obligatoire)
- `documentId` (integer) – identifiant du document (obligatoire)
- Options avancées : page, géolocalisation, scanProvider, OCR/MRZ, traitement image
- Réponse exemple :
{ "transactionId": "2c95841e45404f7e0145405da33f0009", "qrCode": "https://www.contralia.fr/shootid/api/v2/picture?pictureId=2c95841e45404f7e0145405da35c000a", "documents": [{ "status": "READY_TO_BE_SCANNED", "declaredType": "IDENTITY", "documentId": 0 }] }
🔸 ID360
- Méthode : `POST`
- URL :
https://preprod.id360docaposte.com/api/1.0.0/enrollment/flow/document/id_document_image/?total_pages=2&uploaded_page=0
- Type : `application/octet-stream`
- Authentification : `x-api-key` (obtenue lors de l’enrollment)
- Payload : binaire pur (pas de form-data)
➤ cURL (préprod)
curl -X 'POST' \ 'https://preprod.id360docaposte.com/api/1.0.0/enrollment/flow/document/id_document_image/?total_pages=2&uploaded_page=0' \ -H 'accept: */*' \ -H 'x-api-key: {API_KEY_DOSSIER}' \ -H 'Content-Type: application/octet-stream' \ --data-binary '@CNIRecto.PNG'
➤ Paramètres dans l’URL
| Paramètre | Description |
|---|---|
| `total_pages` | Nombre total de pages à uploader pour le document (ex : `2` pour CNI recto/verso) |
| `uploaded_page` | Index de la page envoyée (commence à `0`) |
✅ Tableau de correspondance – Upload Document
| Élément | ShootID | ID360 |
|---|---|---|
| Endpoint | `POST /api/v2/add` | `POST /enrollment/flow/document/id_document_image/` |
| Authentification | `Authorization: Basic` + `transactionId` | `x-api-key` |
| Format d’envoi | `multipart/form-data` | `application/octet-stream` (binaire pur) |
| Paramètres document | `type`, `documentId`, `page`, etc. | `total_pages`, `uploaded_page` dans l’URL |
| Champ du fichier | `file` | contenu brut via `–data-binary` |
| Réponse | JSON avec `status`, `documentId`, etc. | Réponse non détaillée (succès silencieux) ou `204` attendu |
| Traitements optionnels | Oui (binarisation, OCR, cropping, etc.) | Gérés en amont dans le paramétrage du parcours |
| Type de document géré | Enum : `IDENTITY`, `RIB`, `CHECK`, `CAR_REGISTRATION`, etc. | Fixe : `id_document_image` (pour cette étape spécifique) |
📄 ÉTAPE 4 – AJOUT D’AUTRES DOCUMENTS (RIB, justificatif de domicile, etc.)
Dans certains parcours ID360, notamment ceux nécessitant la constitution du bloc adresse ou de l’identité bancaire, il est indispensable d’ajouter d'autres documents en plus de la pièce d’identité :
- 📄 Justificatif de domicile (facture, quittance, etc.)
- 🏦 RIB (relevé d'identité bancaire)
🔹 ShootID
- Endpoint : `POST /shootid/api/v2/add`
- Champs obligatoires :
- `transactionId`
- `file`
- `type` → `ADDRESS_BLOCK` (justificatif) ou `RIB`
- Champs optionnels : `documentId`, `page`, `scanProvider`, `processCropping`, etc.
- Réponse : confirmation + status `READY_TO_BE_SCANNED`
🔸 ID360
🏦 1. Upload du RIB
- Endpoint :
POST /api/1.0.0/enrollment/flow/document/bank_details_image/
- Exemple cURL :
curl -X 'POST' \ 'https://preprod.id360docaposte.com/api/1.0.0/enrollment/flow/document/bank_details_image/' \ -H 'accept: */*' \ -H 'x-api-key: {API_KEY_DOSSIER}' \ -H 'Content-Type: application/octet-stream' \ --data-binary '@rib.jpg'
→ Ce document alimente le bloc bancaire (IBAN, titulaire du compte).
🏠 2. Upload du justificatif de domicile
- Endpoint :
POST /api/1.0.0/enrollment/flow/document/proof_of_address_image/
- Exemple cURL :
curl -X 'POST' \ 'https://preprod.id360docaposte.com/api/1.0.0/enrollment/flow/document/proof_of_address_image/' \ -H 'accept: */*' \ -H 'x-api-key: {API_KEY_DOSSIER}' \ -H 'Content-Type: application/octet-stream' \ --data-binary '@facture_edf.pdf'
→ Ce document est utilisé pour alimenter le bloc adresse, qui peut être recoupé avec la pièce d’identité.
✅ Résumé des endpoints documentaires ID360
| Type de document | Endpoint ID360 |
|---|---|
| Pièce d'identité | `/enrollment/flow/document/id_document_image/` |
| Justificatif de domicile | `/enrollment/flow/document/proof_of_address_image/` |
| RIB | `/enrollment/flow/document/bank_details_image/` |
📥 ÉTAPE 5 – RECUPERATION DU RESULTAT FINAL
🔹 ShootID
- Méthode : `GET`
- Paramètres :
- `transactionId` (obligatoire)
- `documentId` (optionnel)
- `scanTimeout` (optionnel)
Exemple de réponse
- Statut du scan : `OK`, `KO`, `PROVIDER_COULD_NOT_PROCESS_ERROR`
- Résultats de validation : MRZ, intégrité…
- Données OCR : nom, prénom, date de naissance, sexe, numéro…
- Images générées : `imagePhoto`, `image1Cut`, `image2Cut`, `imageSignature`
- Critères de fraude : `fraudScanTimesCriteria`, `fraudPeriodCriteria`
🔸 ID360
Requête de récupération du rapport
- Méthode : `GET`
- URL PROD : `https://id360docaposte.com/api/1.0.0/enrollment/{id}/report`
- URL PRÉPROD : `https://preprod.id360docaposte.com/api/1.0.0/enrollment/{id}/report`
- Authentification : `Authorization: Token {votre_token}`
Exemple de requête CURL
curl -X GET \ "https://preprod.id360docaposte.com/api/1.0.0/enrollment/{id}/report" \ -H "accept: application/json" \ -H "Authorization: Token 0123456789abcdef01234567"
- Dans l'url {id} : correspond à l'id du dossier
- Paramètres : aucun
- Résultat : Code HTTP 200 + réponse JSON
- Appel à effectuer uniquement côté serveur
Exemple de réponse
{
"status": "OK",
"id": 215416,
"identity": {
"name": "SPECIMEN ABB",
"first_name": "NATACHA",
"birth_date": "1973-07-12",
"gender": "F",
"birth_place": "TOULON",
"nationality": "FRA",
"extra": {
"id_number": "90RF02331",
"expiration_date": "2029-03-03",
"issuer": "Préfecture du Sud",
"address": "102 RUE PRINCIPALE 34700 LODÈVE FRANCE"
}
},
"extracted_data": {
"proof_of_address": [
{
"full_name": "MME SPECIMEN NATACHA",
"address_1": "205 route des lylas",
"address_2": "BT LES OLIVIERS",
"zip_code": "06000",
"city": "Nice",
"date": "2022-04-06"
}
],
"bank_details": [
{
"iban": "FR7630006000011234567890189",
"bic": "CEPAFRPP831",
"full_name": "MLE NATACHA SPECIMEN"
}
]
}
}
⚠️ Attention : ne pas appeler le rapport immédiatement
→ Attendez toujours la réception de la *callback finale* sur votre `callback_url` avant d'appeler la méthode report.
- Cette callback vous informe que le traitement est terminé.
- Une fois reçue, vous pouvez alors appeler `/enrollment/{id}/report`.
- Voir le guide des callbacks ici
Comparatif ShootID / ID360
| Fonction | ShootID | ID360 |
|---|---|---|
| Endpoint | `GET /result` | `GET /enrollment/{id}/report` |
| Authentification | Basic Auth | `Authorization: Token …` |
| Moment d’appel | Après upload des docs | Après réception de la callback finale |
| Structure de réponse | Par document (`documents[]`) | Par bloc (`blocks.identity`, `blocks.address`, etc.) |
| Résultats techniques | Détail MRZ / OCR | Agrégés selon configuration du parcours |