Table des matières

Français | English


Developer Guide – ID360 Service

🎯 The ID360 solution allows you to:


🔗 Swagger Access


🔧 Key API Operations

Here are the main steps to implement in your integration:

  1. API Login: This call provides a token valid for 15 minutes, which grants access to the various API methods.
  2. Creating a user enrollment: When creating a user enrollment, you will receive an enrollment ID and an API key (api_key), which will be essential for the rest of the process.
  3. Route selection: The api_key obtained in the previous step allows you to retrieve the identifier of the “route” to be executed. In your use case, there will be only one route available – the customizable online process by Docaposte.
  4. Acceptance of Terms & Conditions: This method allows you to update the fields `accept_cgu` and `accept_biometry` within the enrollment.
  5. Data comparison (optional): It is also possible to compare expected data with information extracted from the identity document.
  6. Identity document upload: Upload of the ID document is performed at this step.
  7. Selfie upload (optional): A selfie image can also be uploaded to enable biometric facial comparison with the ID document.
  8. Finalizing the enrollment: Finalizes the user enrollment.
  9. Retrieving the report: You can retrieve the user enrollment report using the enrollment ID obtained in step two. The report includes the status of the enrollment, technical information, and details of the verification steps.
  10. Retrieving the idClaim (optional): Only in the case of advanced electronic signature, returns an ASIC-E.

📘 To continue reading this guide, you must have already created at least one route and one application.

If you haven't done so yet, we recommend starting with the first section of this guide: Getting Started with ID360

1. API Login

1.1 API Login: Authentication

See method in Swagger


🔧 Requête CURL – Production

curl -X POST "https://id360docaposte.com/api/1.0.0/user/login/" \
  -H "accept: application/json" \
  -d '{ "username": "string", "password": "string", "token": "string" }'

🔧 Requête CURL – Préproduction

curl -X POST "https://preprod.id360docaposte.com/api/1.0.0/user/login/" \
  -H "accept: application/json" \
  -d '{ "username": "string", "password": "string", "token": "string" }'

📥 Required Parameters

Parameter Required Details
username Yes Login identifier
password Yes Password
token No (except for admin) Unnecessary for `application` accounts. Required only for `admin` accounts with two-factor authentication

📤 Expected Result (example)

HTTP Status: `200 OK`

Response Body:

{
  "token": "0123456789abcdef01234567"
}

💬 Notes


1.2 Headers for your API Requests

Headers example

Essential header for your API calls:

`Authorization` → must contain:

Example:

Authorization: Token 0123456789abcdef01234567

Testing via Swagger

To test calls in Swagger:

  1. Click “Try it out” (top right)
  2. Enter the token in this format: `Token 0123456789abcdef01234567`
  3. Then click “Authorize”

You will then be authenticated to run API calls directly from Swagger.


⚠️ 1.3 Token lifespan and refresh – MUST BE IMPLEMENTED ⚠️

The login token is valid for 15 minutes, and its lifespan is reset with every call using the token (*except `logIn` itself*).

If you are not connected or the token is expired, you will receive a 401 Unauthorized for any operation requiring authentication.


🔁 Extending Token Validity

To extend token lifespan, you may call this method every 13 minutes: `/api/1.0.0/user/whoami`

This method:

Authorization: Token 0123456789abcdef01234567

✅ Validity Check

ℹ️ Reminder: integrate this call automatically into your process to avoid repeatedly calling the logIn method, as this may be interpreted by ID360 as abnormal or aggressive behavior.

2. Creating a User Enrollment

See the method in Swagger


🔧 CURL Request – Production

curl -X POST \
  "https://id360docaposte.com/api/1.0.0/process/{id}/enrollment" \
  -H "Authorization: Token 0123456789abcdef01234567"

🔧 CURL Request – Preproduction

curl -X POST \
  "https://preprod.id360docaposte.com/api/1.0.0/process/{id}/enrollment" \
  -H "Authorization: Token 0123456789abcdef01234567"

🛠 URL Notes

Replace the {id} part with the UUID of a process. Process objects are configurable through the admin UI (their UUID is displayed there).


📥 Expected Body

{
  "browser_callback_url": "https://www.example.com/browser_callback_url",
  "client_reference": "any_string", 
  "callback_endpoints": [{
    "url": "https://www.example.com/callback_url1",
    "on": ["E","F","C"],
    "headers": [{"name": "string", "value": "string"}]
    },{
    "url": "https://www.example.com/callback_url2",
    "on": [],
    "headers": [{"name": "string", "value": "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",
  "group": "string"
}

📝 Field Details

For more details on callback_endpoints, refer to this dedicated guide.

📤 Expected Response (example)

HTTP Status: 200 OK

{
  "url": "https://www.id360docaposte.com/api/1.0.0/enrollment/{id}",
  "id": "{id}",
  "process": 1,
  "api_key": "0123456789abcdef0123456789abcde",
  "browser_callback_url": "yyy",
  "client_reference": "any_string",
  "status": "NEW",
  "reason": null,
  "creation_time": "2021-12-17T15:01:49.013906",
  "starting_time": null,
  "finished_time": null;
  "callback_endpoints": [{
            "url": "https://dev.webhook.id360docaposte.com/66b905f6-ac91-4a2c-8b1b-752d2393ac3b",
            "on": ["E","F","C"],
            "headers": [{"name": "string"}]
        },{
            "url": "https://dev.webhook.id360docaposte.com/66b905f6-ac91-4a2c-8b1b-752d2393ac3b",
            "on": [],
            "headers": [{"name": "string"}]
  }]
}

💬 Notes

3. Route Selection

In some processes, two identification methods may be offered to the end user, such as:

In our specific process, only the Docaposte Customizable Online Process has been selected, offering a single authentication channel.

This guide outlines the steps to retrieve the route identifier and select it within this process.

3.1 Retrieving the Route Identifier

See the method in Swagger


🔧 CURL Request – Production

curl -X GET \
  "https://id360docaposte.com/api/1.0.0/enrollment/flow/enrollment_info/" \
  -H "accept: application/json" \
  -H "x-api-key: <your_api_key>"

🔧 CURL Request – Preproduction

curl -X GET \
  "https://preprod.id360docaposte.com/api/1.0.0/enrollment/flow/enrollment_info/" \
  -H "accept: application/json" \
  -H "x-api-key: <your_api_key>"

📝 Notes


📤 Expected Result (JSON excerpt)

"routes": [
  {
    "id": 275128
  }
]

💬 Comment

3.2 Route Selection

See the method in Swagger


🔧 CURL Request – Production

curl -X POST \
  "https://id360docaposte.com/api/1.0.0/enrollment/flow/route/{route_id}/select/" \
  -H "accept: application/json" \
  -H "x-api-key: <your_api_key>" \
  -H "Content-Type: text/plain"

🔧 CURL Request – Preproduction

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: <your_api_key>" \
  -H "Content-Type: text/plain"

📝 Notes


📤 Expected Result

HTTP Status: `204 No Content`


💬 Comment

4. Acceptance of Terms & Conditions

See the method in Swagger

🔧 CURL Request – Production

curl -X POST \
  "https://id360docaposte.com/api/1.0.0/enrollment/flow/consent/?accepted_cgu=true&accepted_biometry=true" \
  -H "accept: */*" \
  -H "x-api-key: <your_api_key>" \
  -d ''

🔧 CURL Request – Preproduction

curl -X POST \
  "https://preprod.id360docaposte.com/api/1.0.0/enrollment/flow/consent/?accepted_cgu=true&accepted_biometry=true" \
  -H "accept: */*" \
  -H "x-api-key: <your_api_key>" \
  -d ''

📤 Expected Result

HTTP Status: `204 No Content`


💬 Notes

5. Data Comparison (optional)

In the process configuration, it is mandatory to select at least one data field to compare. To do so, go to the Information Entry block and choose the elements to compare.

See the method in Swagger


🔧 CURL Request – Production

curl -X POST \
  "https://id360docaposte.com/api/1.0.0/enrollment/{id}/control/data/{data_name}/?locked=true" \
  -H "accept: text/plain" \
  -H "Authorization: Token 0123456789abcdef01234567"

🔧 CURL Request – Preproduction

curl -X POST \
  "https://preprod.id360docaposte.com/api/1.0.0/enrollment/{id}/control/data/{data_name}/?locked=true" \
  -H "accept: text/plain" \
  -H "Authorization: Token 0123456789abcdef01234567"

🛠 Technical Information

https://preprod.id360docaposte.com/api/1.0.0/enrollment/flow/enrollment_info


📥 Parameters

Parameter Value Description
locked true Locks the data once submitted (prevents further modification)

📤 Expected Body

The body must contain only the value to be checked, in raw format (plain text or simple value).


✅ Expected Result

HTTP Status: 204 No Content This indicates that the comparison was successfully processed and no response body is returned.

6. Identity Document Upload

See the method in Swagger


🔧 CURL Request – Production

curl -X POST \
  "https://id360docaposte.com/api/1.0.0/enrollment/flow/document/id_document_image/?total_pages=2&uploaded_page=0" \
  -H "accept: */*" \
  -H "x-api-key: <your_api_key>" \
  --data-binary "@CNIRecto.PNG"

🔧 CURL Request – Preproduction

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: <your_api_key>" \
  --data-binary "@CNIRecto.PNG"

📝 Notes


📤 Expected Result

HTTP Status: `204 No Content`


💬 Notes

7. Selfie Upload (optional)

See the method in Swagger


🔧 CURL Request – Production

curl -X POST \
  "https://id360docaposte.com/api/1.0.0/enrollment/flow/document/selfie_image_upload/?total_pages=1&uploaded_page=0" \
  -H "accept: */*" \
  -H "x-api-key: <your_api_key>" \
  --data-binary "@selfie.PNG"

🔧 CURL Request – Preproduction

curl -X POST \
  "https://preprod.id360docaposte.com/api/1.0.0/enrollment/flow/document/selfie_image_upload/?total_pages=1&uploaded_page=0" \
  -H "accept: */*" \
  -H "x-api-key: <your_api_key>" \
  --data-binary "@selfie.PNG"

📝 Notes


📤 Expected Result

HTTP Status: `204 No Content`


💬 Notes

8. Finalizing the Enrollment – ⚠️ MANDATORY

See the method in Swagger


🔧 CURL Request – Production

curl -X POST \
  "https://id360docaposte.com/api/1.0.0/enrollment/flow/finalize_enrollment" \
  -H "accept: application/json" \
  -H "x-api-key: <your_api_key>"

🔧 CURL Request – Preproduction

curl -X POST \
  "https://preprod.id360docaposte.com/api/1.0.0/enrollment/flow/finalize_enrollment" \
  -H "accept: application/json" \
  -H "x-api-key: <your_api_key>"

📝 Notes


📤 Expected Result

HTTP Status: `204 No Content`


💬 Comment

9. Retrieving the Report

9.1 Retrieving the Report via API

See the method in Swagger


🔧 CURL Request – Production

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

🔧 CURL Request – Preproduction

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

🛠 Technical Information


✅ Expected Result

HTTP Status: 200 OK

Response format: JSON


💬 Comments

9.2 Retrieving the Report from the Admin Platform

The report is also accessible from the console, under the “User Enrollments” tab, for a duration of two months. The identifier corresponds to the enrollment ID generated at the end of step 2. By selecting “View Details,” you can view the identification report and download the evidence file in JSON format at the bottom of the page.

9.3 Specificities


📄 A Temporary Report

A temporary report is available before the final report is issued. This report can be retrieved using the allow_draft = true parameter, but must not be used in production.

⚠️ The report can only be retrieved after receiving the callback_url notifying you of the enrollment's processing completion.

Warning: Calling a temporary report may cause slowdowns or blockages for your users.


📄 A Report Issued Less Than 7 Days Ago

Applications and users can retrieve all evidence files using the report method.

- An enrollment with the status:

  1. NEW
  2. STARTED
  3. CANCELED

will return a temporary evidence file if draft = true is added to the request.

See in Swagger


📄 A Report Issued More Than 7 Days and Less Than 2 Months Ago

Users can retrieve all finalized evidence files (with a verdict OK or KO) using the report method.


📄 A Report Issued More Than 2 Months Ago and Before the Archiving Expiration

Only users can access archived reports using the report/archive method.


👥 Definition: Application vs User

▶️ Retrieval via an application: Login using your *application credentials* (application ID + password set at creation).

▶️ Retrieval via a user: Login using your *user credentials*:

  1. Email address
  2. Personal password
  3. Two-factor authentication token (2FA)

📄 Retrieving the PDF Report

See the dedicated method: Download the PDF report

10. Retrieving the idClaim

See the method in Swagger


🔧 CURL Request – Production

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

🔧 CURL Request – Preproduction

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

🛠 Technical information


✅ Expected result

HTTP Status : 200 OK

Response format : ASIC-E


💬 Notes

Authorization: Token token_returned_by_login