Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| en:guide_du_developpeur_service [2025/08/06 16:11] – admin | en:guide_du_developpeur_service [2026/01/16 17:09] (Version actuelle) – admin | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | ~~NOTOC~~ | ||
| [[: | [[: | ||
| ---- | ---- | ||
| - | ====== Developer Guide – ID360 Service ====== | + | ===== 🔗 DOCUMENTATION URL CHANGE |
| - | === 🎯 The ID360 solution allows you to: === | + | The ID360 documentation |
| - | * ✅ Manage user **identification** and **authentication** for your business service. | + | |
| - | * 🗂️ (Optional) **Collect**, | + | |
| - | * 🎨 Customize a **user interface** according to your needs. | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 🔗 Swagger Access === | + | |
| - | * **[[https:// | + | |
| - | * **[[https:// | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 🔧 Key API Operations === | + | |
| - | + | ||
| - | Here are the main steps to implement in your integration: | + | |
| - | + | ||
| - | - **API Login**: This call provides a token valid for 15 minutes, which grants access to the various API methods. | + | |
| - | - **Creating a user enrollment**: | + | |
| - | - **Route selection**: | + | |
| - | - **Acceptance of Terms & Conditions**: | + | |
| - | - **Data comparison (optional)**: | + | |
| - | - **Identity document upload**: Upload of the ID document is performed at this step. | + | |
| - | - **Selfie upload (optional)**: | + | |
| - | - **Finalizing the enrollment**: | + | |
| - | - **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, | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | 📘 **To continue reading this guide, you must have already created at least one route and one application.** | + | |
| - | + | ||
| - | If you haven' | + | |
| - | + | ||
| - | ===== 1.2 Headers for Your Upcoming Requests ===== | + | |
| - | + | ||
| - | {{: | + | |
| - | + | ||
| - | The key header to include in your API requests is: | + | |
| - | + | ||
| - | **'' | + | |
| - | * the **'' | + | |
| - | * a space | + | |
| - | * the **token value** obtained during the API login | + | |
| - | + | ||
| - | **Example**: | + | |
| - | < | + | |
| - | Authorization: | + | |
| - | </ | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === Testing via Swagger === | + | |
| - | + | ||
| - | To test the API calls in Swagger: | + | |
| - | - Click on the **'' | + | |
| - | - Enter the token using the format: Token 0123456789abcdef01234567 | + | |
| - | - Then click on **'' | + | |
| - | + | ||
| - | You will then be authenticated to perform API calls directly from Swagger. | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | ===== 1.3 ⚠️ Token Lifetime and Renewal – MUST BE IMPLEMENTED ⚠️ ===== | + | |
| - | + | ||
| - | **The authentication token is valid for 15 minutes.** | + | |
| - | This duration is **reset with every API call that uses the token** (*except for the '' | + | |
| - | + | ||
| - | If you're not authenticated or your token has expired, you will receive a **401 Unauthorized** error for any request that requires authentication. | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 🔁 Extending the Token Lifetime === | + | |
| - | + | ||
| - | To extend your token' | + | |
| - | + | ||
| - | **''/ | + | |
| - | + | ||
| - | This method: | + | |
| - | * Requires **no parameters** | + | |
| - | * Requires an **Authorization header** in the following format: | + | |
| - | + | ||
| - | < | + | |
| - | Authorization: | + | |
| - | </ | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === ✅ Validity Check === | + | |
| - | + | ||
| - | * If this method returns a **200 status code**, your token is still valid. | + | |
| - | * Otherwise, you will need to generate a **new token** using the **'' | + | |
| - | + | ||
| - | **ℹ️ 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 ====== | + | |
| - | + | ||
| - | [[https:// | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 🔧 CURL Request – Production === | + | |
| - | <code javascript> | + | |
| - | curl -X POST \ | + | |
| - | " | + | |
| - | -H " | + | |
| - | </ | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 🔧 CURL Request – Preproduction === | + | |
| - | <code javascript> | + | |
| - | curl -X POST \ | + | |
| - | " | + | |
| - | -H " | + | |
| - | </ | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 🛠 URL Notes === | + | |
| - | + | ||
| - | Replace the '' | + | |
| - | Process objects are configurable through the admin UI (their UUID is displayed there). | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 📥 Expected Body === | + | |
| - | + | ||
| - | <code json> | + | |
| - | { | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | },{ | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | }], | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | }, | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | } | + | |
| - | </ | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 📝 Field Details === | + | |
| - | + | ||
| - | * **'' | + | |
| - | * **'' | + | |
| - | * **'' | + | |
| - | * **'' | + | |
| - | * **'' | + | |
| - | + | ||
| - | > For more details on callback_endpoints, | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 📤 Expected Response (example) === | + | |
| - | + | ||
| - | **HTTP Status**: '' | + | |
| - | + | ||
| - | <code json> | + | |
| - | { | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | },{ | + | |
| - | " | + | |
| - | " | + | |
| - | " | + | |
| - | }] | + | |
| - | } | + | |
| - | </ | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 💬 Notes === | + | |
| - | + | ||
| - | * This call **must be made server-side**, | + | |
| - | * ⚠️ **It is essential to store the enrollment '' | + | |
| - | + | ||
| - | ====== 3. Route Selection ====== | + | |
| - | + | ||
| - | In some processes, two identification methods may be offered to the end user, such as: | + | |
| - | + | ||
| - | * Identification via La Poste’s Digital Identity; | + | |
| - | * Identification through Docaposte’s Customizable Online Process. | + | |
| - | + | ||
| - | In our specific process, only the Docaposte Customizable Online Process | + | |
| - | + | ||
| - | This guide outlines the steps to retrieve the route identifier and select it within this process. | + | |
| - | + | ||
| - | ===== 3.1 Retrieving the Route Identifier ===== | + | |
| - | + | ||
| - | [[https:// | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 🔧 CURL Request – Production === | + | |
| - | + | ||
| - | <code bash> | + | |
| - | curl -X GET \ | + | |
| - | " | + | |
| - | -H " | + | |
| - | -H " | + | |
| - | </ | + | |
| - | + | ||
| - | === 🔧 CURL Request – Preproduction === | + | |
| - | + | ||
| - | <code bash> | + | |
| - | curl -X GET \ | + | |
| - | " | + | |
| - | -H " | + | |
| - | -H " | + | |
| - | </ | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 📝 Notes === | + | |
| - | + | ||
| - | * **`x-api-key`**: | + | |
| - | * 📭 **No body** is expected in this request (the body must remain empty). | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 📤 Expected Result (JSON excerpt) === | + | |
| - | + | ||
| - | <code json> | + | |
| - | " | + | |
| - | { | + | |
| - | " | + | |
| - | } | + | |
| - | ] | + | |
| - | </ | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 💬 Comment === | + | |
| - | + | ||
| - | * The **route identifier** to be used for the next step in the process is found in the `id` field. | + | |
| - | + | ||
| - | ===== 3.2 Route Selection ===== | + | |
| - | + | ||
| - | [[https:// | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 🔧 CURL Request – Production === | + | |
| - | + | ||
| - | <code bash> | + | |
| - | curl -X POST \ | + | |
| - | " | + | |
| - | -H " | + | |
| - | -H " | + | |
| - | -H " | + | |
| - | </ | + | |
| - | + | ||
| - | === 🔧 CURL Request – Preproduction === | + | |
| - | + | ||
| - | <code bash> | + | |
| - | curl -X POST \ | + | |
| - | " | + | |
| - | -H " | + | |
| - | -H " | + | |
| - | -H " | + | |
| - | </ | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 📝 Notes === | + | |
| - | + | ||
| - | * Replace **`< | + | |
| - | * Replace **`{route_id}`** in the URL with the **route identifier** retrieved in the previous step. | + | |
| - | * 📭 No body is expected in the request. | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 📤 Expected Result === | + | |
| - | + | ||
| - | **HTTP Status**: `204 No Content` | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 💬 Comment === | + | |
| - | + | ||
| - | * The selected route is now **linked to the API key** used in the request. | + | |
| - | + | ||
| - | ====== 4. Acceptance of Terms & Conditions ====== | + | |
| - | + | ||
| - | [[https:// | + | |
| - | + | ||
| - | === 🔧 CURL Request – Production === | + | |
| - | + | ||
| - | <code bash> | + | |
| - | curl -X POST \ | + | |
| - | " | + | |
| - | -H " | + | |
| - | -H " | + | |
| - | -d '' | + | |
| - | </ | + | |
| - | + | ||
| - | === 🔧 CURL Request – Preproduction === | + | |
| - | + | ||
| - | <code bash> | + | |
| - | curl -X POST \ | + | |
| - | " | + | |
| - | -H " | + | |
| - | -H " | + | |
| - | -d '' | + | |
| - | </ | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 📤 Expected Result === | + | |
| - | + | ||
| - | **HTTP Status**: `204 No Content` | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 💬 Notes === | + | |
| - | + | ||
| - | * ✅ If you are only uploading an **identity or supporting document**, use `accepted_cgu=true` only. | + | |
| - | * ✅ If you are also uploading a **selfie**, make sure to add `accepted_biometry=true` in the URL. | + | |
| - | + | ||
| - | ====== 5. Data Comparison (optional) ====== | + | |
| - | + | ||
| - | In the process configuration, | + | |
| - | To do so, go to the **'' | + | |
| - | + | ||
| - | [[https:// | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 🔧 CURL Request – Production === | + | |
| - | <code javascript> | + | |
| - | curl -X POST \ | + | |
| - | " | + | |
| - | -H " | + | |
| - | -H " | + | |
| - | </ | + | |
| - | + | ||
| - | === 🔧 CURL Request – Preproduction === | + | |
| - | <code javascript> | + | |
| - | curl -X POST \ | + | |
| - | " | + | |
| - | -H " | + | |
| - | -H " | + | |
| - | </ | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 🛠 Technical Information === | + | |
| - | + | ||
| - | * **'' | + | |
| - | * **'' | + | |
| - | - Examples: | + | |
| - | - '' | + | |
| - | - '' | + | |
| - | - '' | + | |
| - | * To view the expected data fields, you can query: | + | |
| - | [[https:// | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 📥 Parameters === | + | |
| - | + | ||
| - | ^ Parameter ^ Value ^ Description ^ | + | |
| - | | '' | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 📤 Expected Body === | + | |
| - | + | ||
| - | The body must contain **only the value to be checked**, in raw format (plain text or simple value). | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === ✅ Expected Result === | + | |
| - | + | ||
| - | **HTTP Status**: '' | + | |
| - | This indicates that the comparison was successfully processed **and no response body is returned**. | + | |
| - | + | ||
| - | ====== 6. Identity Document Upload ====== | + | |
| - | + | ||
| - | [[https:// | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 🔧 CURL Request – Production === | + | |
| - | + | ||
| - | <code bash> | + | |
| - | curl -X POST \ | + | |
| - | " | + | |
| - | -H " | + | |
| - | -H " | + | |
| - | --data-binary " | + | |
| - | </ | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 🔧 CURL Request – Preproduction === | + | |
| - | + | ||
| - | <code bash> | + | |
| - | curl -X POST \ | + | |
| - | " | + | |
| - | -H " | + | |
| - | -H " | + | |
| - | --data-binary " | + | |
| - | </ | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 📝 Notes === | + | |
| - | + | ||
| - | * **`x-api-key`**: | + | |
| - | * **`@CNIRecto.PNG`**: | + | |
| - | * **`total_pages`**: | + | |
| - | * **`uploaded_page`**: | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 📤 Expected Result === | + | |
| - | + | ||
| - | **HTTP Status**: `204 No Content` | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 💬 Notes === | + | |
| - | + | ||
| - | * This step must be repeated for **each page of the document** to be uploaded. | + | |
| - | * A separate request must be made **for each page**, using the correct `uploaded_page` index and corresponding file. | + | |
| - | + | ||
| - | ====== 7. Selfie Upload (optional) ====== | + | |
| - | + | ||
| - | [[https:// | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 🔧 CURL Request – Production === | + | |
| - | + | ||
| - | <code bash> | + | |
| - | curl -X POST \ | + | |
| - | " | + | |
| - | -H " | + | |
| - | -H " | + | |
| - | --data-binary " | + | |
| - | </ | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 🔧 CURL Request – Preproduction === | + | |
| - | + | ||
| - | <code bash> | + | |
| - | curl -X POST \ | + | |
| - | " | + | |
| - | -H " | + | |
| - | -H " | + | |
| - | --data-binary " | + | |
| - | </ | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 📝 Notes === | + | |
| - | + | ||
| - | * **`x-api-key`**: | + | |
| - | * **`@selfie.PNG`**: | + | |
| - | * **`total_pages`**: | + | |
| - | * **`uploaded_page=0`**: | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 📤 Expected Result === | + | |
| - | + | ||
| - | **HTTP Status**: `204 No Content` | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 💬 Notes === | + | |
| - | + | ||
| - | * Uploading a selfie is **optional**, | + | |
| - | * Make sure the parameter `accepted_biometry=true` was set during the acceptance of Terms & Conditions if a selfie is submitted. | + | |
| - | + | ||
| - | ====== 8. Finalizing the Enrollment – ⚠️ MANDATORY ====== | + | |
| - | + | ||
| - | [[https:// | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 🔧 CURL Request – Production === | + | |
| - | + | ||
| - | <code bash> | + | |
| - | curl -X POST \ | + | |
| - | " | + | |
| - | -H " | + | |
| - | -H " | + | |
| - | </ | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 🔧 CURL Request – Preproduction === | + | |
| - | + | ||
| - | <code bash> | + | |
| - | curl -X POST \ | + | |
| - | " | + | |
| - | -H " | + | |
| - | -H " | + | |
| - | </ | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 📝 Notes === | + | |
| - | + | ||
| - | * Replace **`< | + | |
| - | * 📭 No parameters are expected in the request body. | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 📤 Expected Result === | + | |
| - | + | ||
| - | **HTTP Status**: `204 No Content` | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 💬 Comment === | + | |
| - | + | ||
| - | * This step is **mandatory** to ensure the enrollment is **processed immediately by the verification engines**. | + | |
| - | + | ||
| - | ====== 9. Retrieving the Report ====== | + | |
| - | + | ||
| - | ===== 9.1 Retrieving the Report via API ===== | + | |
| - | + | ||
| - | [[https:// | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 🔧 CURL Request – Production === | + | |
| - | <code javascript> | + | |
| - | curl -X GET \ | + | |
| - | " | + | |
| - | -H " | + | |
| - | -H " | + | |
| - | </ | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 🔧 CURL Request – Preproduction === | + | |
| - | <code javascript> | + | |
| - | curl -X GET \ | + | |
| - | " | + | |
| - | -H " | + | |
| - | -H " | + | |
| - | </ | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 🛠 Technical Information === | + | |
| - | + | ||
| - | * **'' | + | |
| - | * **Parameters**: | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === ✅ Expected Result === | + | |
| - | + | ||
| - | **HTTP Status**: '' | + | |
| - | **Response format**: JSON | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 💬 Comments === | + | |
| - | + | ||
| - | * This call must be made **from your server**, **never from the user's browser**. | + | |
| - | * The connection token is **valid for 15 minutes**, renewed with each API call using that token. | + | |
| - | * If the token is expired or missing, you will receive a **401 Unauthorized** error. | + | |
| - | * As long as your token is valid, **you must not reuse the '' | + | |
| - | * The token should be used in the* | + | |
| - | + | ||
| - | ===== 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 **'' | + | |
| - | + | ||
| - | ⚠️ The report can only be retrieved **after receiving the '' | + | |
| - | + | ||
| - | **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 '' | + | |
| - | + | ||
| - | - An enrollment with the status: | + | |
| - | - '' | + | |
| - | - '' | + | |
| - | - '' | + | |
| - | will return a **temporary** evidence file if **'' | + | |
| - | + | ||
| - | → [[https:// | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 📄 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 '' | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 📄 A Report Issued More Than 2 Months Ago and Before the Archiving Expiration === | + | |
| - | + | ||
| - | Only **users** can access **archived reports** using the '' | + | |
| - | + | ||
| - | * An enrollment with a status of **CANCELED** or **FAILED** **is not archived**. | + | |
| - | * A **DELETED** enrollment (older than 2 months) is archived **only** if it had a final status of **OK** or **KO**. | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 👥 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*: | + | |
| - | - Email address | + | |
| - | - Personal password | + | |
| - | - Two-factor authentication token (2FA) | + | |
| - | + | ||
| - | ---- | + | |
| - | + | ||
| - | === 📄 Retrieving the PDF Report === | + | |
| - | + | ||
| - | See the dedicated method: | + | |
| - | [[https:// | + | |
| + | 👉 **New address: | ||
| + | https:// | ||
| + | Please update your bookmarks and internal links accordingly. | ||
| + | Feel free to reach out if you have any questions 😊 | ||