Authorization: Basic base64(applicationToken:applicationSecret)
{ "username": "string", "password": "string" }
{ "token": "0123456789abcdef01234567" }
Authorization: Token 0123456789abcdef01234567
π To extend token validity (without generating a new one):
GET /api/1.0.0/user/whoami Authorization: Token 0123456789abcdef01234567
| Function | ShootID | ID360 |
|---|---|---|
| Method | HTTP Basic Auth | Login with username/password β Token |
| Endpoint | N/A (included in each request) | POST /user/login/ |
| Authentication format | Authorization: Basic β¦ | Authorization: Token <token> |
| Token validity | Long term (no expiration) | Expires after 15 min of inactivity |
| Token refresh | N/A | GET /user/whoami recommended every 13 minutes |
{ "transactionId": "2c95841e45404f7e0145405da33f0009", "qrCode": "https://www.contralia.fr/shootid/api/v2/picture?pictureId=2c95841e45404f7e0145405" }
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" }'
| Function | ShootID | ID360 |
|---|---|---|
| Request type | `GET /api/v2/init` | `POST /api/1.0.0/process/{id}/enrollment` |
| Response | `transactionId`, `qrCode` | `id` (dossier), `url`, `api_key`, `status` |
| Process configuration | Implicit | Explicit via `{id}` of the process configured in the admin console |
| Technical callbacks | N/A | `callback_url` (backend) + `browser_callback_url` (frontend) |
| Custom tracking | No | `client_reference` available |
| Authentication | Basic Auth in each request | Token-based (`Authorization: Token β¦`) |
In some ID360 processes, multiple identification methods can be proposed to the user, such as:
π In this process, only the Custom Online Process is used, which means that the ID360 platform requires the integrator to explicitly select this route among the available options.
π This selection ensures that the user will follow the correct identification scenario, according to the business configuration set in the admin console.
Associate a specific route with a user dossier (enrollment) using its `api_key`, in order to lock the identification method to follow.
Preprod:
curl -X 'GET' \ 'https://preprod.id360docaposte.com/api/1.0.0/enrollment/flow/enrollment_info/' \ -H 'accept: application/json' \ -H 'x-api-key: {DOSSIER_API_KEY}'
Prod:
curl -X 'GET' \ 'https://id360docaposte.com/api/1.0.0/enrollment/flow/enrollment_info/' \ -H 'accept: application/json' \ -H 'x-api-key: {DOSSIER_API_KEY}'
Sample response:
{ "routes": [ { "id": 275128 } ] }
The field `routes[0].id` contains the ID of the route to use.
Preprod:
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: {DOSSIER_API_KEY}' \ -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: {DOSSIER_API_KEY}' \ -H 'Content-Type: text/plain'
Expected response:
HTTP 204 No Content
{ "transactionId": "2c95841e45404f7e0145405da33f0009", "qrCode": "https://www.contralia.fr/shootid/api/v2/picture?pictureId=2c95841e45404f7e0145405da35c000a", "documents": [{ "status": "READY_TO_BE_SCANNED", "declaredType": "IDENTITY", "documentId": 0 }] }
https://preprod.id360docaposte.com/api/1.0.0/enrollment/flow/document/id_document_image/?total_pages=2&uploaded_page=0
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: {DOSSIER_API_KEY}' \ -H 'Content-Type: application/octet-stream' \ --data-binary '@CNIRecto.PNG'
| Parameter | Description |
|---|---|
| `total_pages` | Total number of pages to upload for the document (e.g., `2` for front/back of ID) |
| `uploaded_page` | Index of the uploaded page (starts at `0`) |
| Element | ShootID | ID360 |
|---|---|---|
| Endpoint | `POST /api/v2/add` | `POST /enrollment/flow/document/id_document_image/` |
| Authentication | `Authorization: Basic` + `transactionId` | `x-api-key` |
| Upload format | `multipart/form-data` | `application/octet-stream` (pure binary) |
| Document parameters | `type`, `documentId`, `page`, etc. | `total_pages`, `uploaded_page` in the URL |
| File field | `file` | raw content via `βdata-binary` |
| Response | JSON with `status`, `documentId`, etc. | No detailed response (silent success) or `204` expected |
| Optional processing | Yes (binarization, OCR, cropping, etc.) | Managed upstream in the process configuration |
| Supported document types | Enum: `IDENTITY`, `RIB`, `CHECK`, `CAR_REGISTRATION`, etc. | Fixed: `id_document_image` (for this specific step) |
In some ID360 processes, especially those requiring an address block or bank identity, it is necessary to upload additional documents in addition to the ID document:
POST /api/1.0.0/enrollment/flow/document/bank_details_image/
curl -X 'POST' \ 'https://preprod.id360docaposte.com/api/1.0.0/enrollment/flow/document/bank_details_image/' \ -H 'accept: */*' \ -H 'x-api-key: {DOSSIER_API_KEY}' \ -H 'Content-Type: application/octet-stream' \ --data-binary '@rib.jpg'
β This document feeds the bank block (IBAN, account holder).
POST /api/1.0.0/enrollment/flow/document/proof_of_address_image/
curl -X 'POST' \ 'https://preprod.id360docaposte.com/api/1.0.0/enrollment/flow/document/proof_of_address_image/' \ -H 'accept: */*' \ -H 'x-api-key: {DOSSIER_API_KEY}' \ -H 'Content-Type: application/octet-stream' \ --data-binary '@electricity_bill.pdf'
β This document feeds the address block, which can be cross-verified with the ID document.
| Document Type | ID360 Endpoint URL Path |
|---|---|
| Identity document | `/enrollment/flow/document/id_document_image/` |
| Proof of address | `/enrollment/flow/document/proof_of_address_image/` |
| Bank details (RIB) | `/enrollment/flow/document/bank_details_image/` |
curl -X GET \ "https://preprod.id360docaposte.com/api/1.0.0/enrollment/{id}/report" \ -H "accept: application/json" \ -H "Authorization: Token 0123456789abcdef01234567"
{
"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"
}
]
}
}
β Always wait for the *final callback* on your `callback_url` before calling the report endpoint.
| Function | ShootID | ID360 |
|---|---|---|
| Endpoint | `GET /result` | `GET /enrollment/{id}/report` |
| Authentication | Basic Auth | `Authorization: Token β¦` |
| When to call | After document upload | After final callback is received |
| Response structure | Per document (`documents[]`) | Per block (`blocks.identity`, `blocks.address`, etc.) |
| Technical results | MRZ / OCR details | Aggregated based on process configuration |