Table des matières

FranΓ§ais | English


Migration Guide : ShootID to ID360

πŸ”‘ STEP 1 – AUTHENTICATION

πŸ”Ή ShootID

Authorization: Basic base64(applicationToken:applicationSecret)
    

πŸ”Έ ID360

{
  "username": "string",
  "password": "string"
}
 
{
  "token": "0123456789abcdef01234567"
}
 
Authorization: Token 0123456789abcdef01234567
    

πŸ• Token lifespan & renewal (ID360)

πŸ”„ To extend token validity (without generating a new one):

GET /api/1.0.0/user/whoami
Authorization: Token 0123456789abcdef01234567

βœ… Authentication Summary Table

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

🧩 STEP 2 – INITIALIZE A TRANSACTION / START A PROCESS

πŸ”Ή ShootID

{
  "transactionId": "2c95841e45404f7e0145405da33f0009",
  "qrCode": "https://www.contralia.fr/shootid/api/v2/picture?pictureId=2c95841e45404f7e0145405"
}
 

πŸ”Έ ID360

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"
}'
 

🧾 Parameter details


βœ… Summary table – Process initialization

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 …`)

πŸ”€ STEP 2B – SELECTING THE ROUTE (ID360)

🧭 Why this step is required

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.

🎯 Goal

Associate a specific route with a user dossier (enrollment) using its `api_key`, in order to lock the identification method to follow.


1. πŸ“₯ Retrieve the list of available routes

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.

2. βœ… Select the route

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

πŸ“ Key notes


πŸͺͺ STEP 3 – ADD AN IDENTITY DOCUMENT

πŸ”Ή ShootID

{
  "transactionId": "2c95841e45404f7e0145405da33f0009",
  "qrCode": "https://www.contralia.fr/shootid/api/v2/picture?pictureId=2c95841e45404f7e0145405da35c000a",
  "documents": [{
    "status": "READY_TO_BE_SCANNED",
    "declaredType": "IDENTITY",
    "documentId": 0
  }]
}

πŸ”Έ ID360

https://preprod.id360docaposte.com/api/1.0.0/enrollment/flow/document/id_document_image/?total_pages=2&uploaded_page=0

➀ cURL (preprod)

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'

➀ URL Parameters

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`)

βœ… Comparison Table – Upload Document

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)

πŸ“„ STEP 4 – ADD OTHER DOCUMENTS (RIB, Proof of Address, etc.)

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:


πŸ”Ή ShootID


πŸ”Έ ID360

🏦 1. Upload RIB

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).


🏠 2. Upload Proof of Address

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.


βœ… Summary of ID360 Document Upload Endpoints

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/`

πŸ“₯ STEP 5 – RETRIEVING THE FINAL RESULT

πŸ”Ή ShootID

Sample response


πŸ”Έ ID360

Report Retrieval Request

Example cURL request

curl -X GET \
  "https://preprod.id360docaposte.com/api/1.0.0/enrollment/{id}/report" \
  -H "accept: application/json" \
  -H "Authorization: Token 0123456789abcdef01234567"

Sample response

{
  "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"
      }
    ]
  }
}

⚠️ Warning: do not call the report endpoint too early

β†’ Always wait for the *final callback* on your `callback_url` before calling the report endpoint.


ShootID / ID360 Comparison Table

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