> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# API : liste des remplacements, historique des étapes

> Listez tous les remplacements du statut d'une étape sur une session, du plus récent au plus ancien : appliqué, en attente de l'utilisateur ou annulé. Didit.



Prompt de liste des substitutions de fonctionnalités
        Copier le prompt dans le presse-papiers



      
      

\<pre>

\`List the check (feature) status overrides of a Didit session: the ones that applied, the ones still waiting for the person to finish the flow, and the cancelled ones.

Endpoint:
GET https://verification.didit.me/v3/session/{session_id}/features/overrides/

Authentication:
x-api-key (client API key) or a user-auth token. Privilege: read:sessions. A scoped API key needs read access to decisions.

Path parameter:
\- session_id (UUID): KYC or KYB; Didit resolves it against both session types.

Response (200, not paginated):
\- session_id (UUID).
\- person_in_flow (boolean): true while the person is still in the flow, so a new override with defer_until_flow_finishes=true would wait.
\- flow_finished_at (date-time or null): when the person last finished the flow. null while they are still in it (a resubmission included) and when the session closed before they finished.
\- overrides (array, newest first). Each override:
\- id (UUID): pass it to the cancel endpoint.
\- node_id, feature_type ("" when the request passed none), feature_model (for example "KYC", "Face", "AML").
\- previous_status, new_status.
\- state: "applied", "pending_until_flow_finishes" or "cancelled".
\- forced (boolean): true when it applied at once while the person was still in the flow.
\- reason: the comment sent with the request, or null.
\- requested_by: { email, name, type } with type "CONSOLE_USER", "API_KEY" or "SYSTEM"; or null.
\- requested_at, applied_at (null while waiting or once cancelled), cancelled_at.
\- cancel_reason: null, "cancelled_by_reviewer", "replaced", "check_changed" or "session_closed".

curl example:
curl https://verification.didit.me/v3/session/<SESSION_ID>/features/overrides/ \
-H "x-api-key: <API_KEY>"

Failure modes:
\- 401: the scoped API key has expired.
\- 403: missing credentials (a wrong, revoked or expired key gets 401), the caller lacks read:sessions, a scoped key lacks decisions read, or the session belongs to another application ({ "detail": "You do not have permission to perform this action." }).
\- 404: { "detail": "Not found." } when no session with this session_id exists.

Related: create overrides with PATCH /v3/session/{session_id}/features/{node_id}/update-status/ (see /sessions-api/update-feature-status); cancel a waiting one with POST /v3/session/{session_id}/features/overrides/{override_id}/cancel/ (see /sessions-api/cancel-feature-override).

For end-to-end Didit integration, paste in the full prompt at /integration/integration-prompt.`

\</pre>



      
      

Coller dans

Chaque appel à [Mettre à jour le statut de la fonctionnalité](https://docs.didit.me/fr/sessions-api/update-feature-status.md) enregistre une substitution du statut d'une vérification.
Cet endpoint liste toutes les substitutions d'une même session, de la plus récente à la plus ancienne, sans pagination.## États des substitutions| `state` | Ce que cela signifie |
| - | - |
| `applied` | La vérification a le nouveau statut. `applied_at` indique quand. |
| `pending_until_flow_finishes` | La substitution attend et s'applique lorsque la personne termine le parcours. |
| `cancelled` | La substitution a attendu et ne s'est jamais appliquée. `cancel_reason` indique pourquoi. |Une substitution avec `forced: true` s'est appliquée immédiatement, alors que la personne était encore dans le parcours.## Pourquoi une substitution en attente a été annulée| `cancel_reason` | Ce qui s'est passé |
| - | - |
| `cancelled_by_reviewer` | Quelqu'un l'a annulée avec [Annuler la substitution de fonctionnalité](https://docs.didit.me/fr/sessions-api/cancel-feature-override.md). |
| `replaced` | Une substitution plus récente sur la même vérification l'a remplacée. |
| `check_changed` | La personne a refait la vérification avant de terminer le parcours, donc le résultat dont vous aviez remplacé le statut n'existe plus. |
| `session_closed` | La session a quitté le parcours avant que la personne ne le termine : abandonnée, expirée ou ayant fait l'objet d'une décision en cours de parcours. |## Où se situe la personne dans le parcours`person_in_flow` vaut `true` tant que la session est `Not Started`, `In Progress` ou `Resubmitted` et que la personne n'a pas terminé le parcours.
Tant qu'il vaut `true`, une nouvelle substitution avec `defer_until_flow_finishes: true` attend.
`flow_finished_at` indique la dernière fois que la personne a terminé le parcours.
Il vaut `null` tant qu'elle est encore dans le parcours, resoumission comprise, et lorsque la session s'est fermée avant qu'elle ne le termine.## Ressources connexes- [Mettre à jour le statut de la fonctionnalité](https://docs.didit.me/fr/sessions-api/update-feature-status.md) : substituer le statut d'une étape, immédiatement ou une fois le parcours terminé.
- [Annuler la substitution de fonctionnalité](https://docs.didit.me/fr/sessions-api/cancel-feature-override.md) : empêcher une substitution en attente de s'appliquer.
- [Récupérer la session](https://docs.didit.me/fr/sessions-api/retrieve-session.md) : le `node_id` de chaque fonctionnalité et son statut actuel.


## OpenAPI

````yaml fr/openapi-25.json GET /v3/session/{sessionId}/features/overrides/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API de vérification d'identité. Authentifiez-vous avec l'en-tête x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/session/{sessionId}/features/overrides/:
    get:
      tags:
        - Sessions
      summary: Lister les dérogations aux contrôles d'une session
      description: >-
        Chaque dérogation au statut d'une fonctionnalité individuelle (étape)
        lors d'une session de Vérification des utilisateurs (KYC) ou de
        Vérification d'entreprise (KYB), de la plus récente à la plus ancienne
        et sans pagination : celles appliquées, celles en attente que la
        personne termine le flux (`pending_until_flow_finishes`) et celles
        annulées, chacune indiquant qui l'a demandée, son motif, et si elle
        s'est appliquée alors que la personne était encore dans le flux
        (`forced`).


        `person_in_flow` indique si une nouvelle dérogation avec
        `defer_until_flow_finishes: true` serait mise en attente.
        `flow_finished_at` indique la dernière fois que la personne a terminé le
        flux ; il vaut `null` tant qu'elle y est encore (nouvelle soumission
        comprise) et lorsque la session s'est terminée avant qu'elle n'ait fini.


        Nécessite le privilège `read:sessions` ; une clé API avec restriction de
        portée nécessite un accès en lecture aux décisions.
      operationId: get_v3_session_feature_overrides
      parameters:
        - in: path
          name: sessionId
          required: true
          description: >-
            UUID de la session de vérification. Accepte les identifiants de
            session d'utilisateur (KYC) et d'entreprise (KYB).
          schema:
            type: string
            format: uuid
            example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
      responses:
        '200':
          description: >-
            Les dérogations aux vérifications de la session, de la plus récente
            à la plus ancienne.
          content:
            application/json:
              schema:
                type: object
                required:
                  - session_id
                  - person_in_flow
                  - flow_finished_at
                  - overrides
                properties:
                  session_id:
                    type: string
                    format: uuid
                    example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
                  person_in_flow:
                    type: boolean
                    description: >-
                      Indique si la personne est toujours dans le flux, de sorte
                      qu'une nouvelle dérogation avec
                      `defer_until_flow_finishes: true` se mettrait en attente.
                    example: true
                  flow_finished_at:
                    type: string
                    format: date-time
                    nullable: true
                    description: >-
                      Moment où la personne a terminé le flux pour la dernière
                      fois. `null` tant qu'elle s'y trouve encore (nouvelle
                      soumission incluse) et lorsque la session s'est fermée
                      avant qu'elle n'ait terminé (abandonnée, expirée ou
                      lorsqu'une décision a été prise en cours de flux).
                    example: null
                  overrides:
                    type: array
                    description: >-
                      Chaque dérogation de la session, de la plus récente à la
                      plus ancienne.
                    items:
                      $ref: '#/components/schemas/FeatureStatusOverride'
              examples:
                Overrides:
                  summary: Un override en attente, un override appliqué
                  value:
                    session_id: 3fa85f64-5717-4562-b3fc-2c963f66afa6
                    person_in_flow: true
                    flow_finished_at: null
                    overrides:
                      - id: 9b2f4c1e-8d3a-4e5f-a6b7-c8d9e0f1a2b3
                        node_id: feature_liveness_1
                        feature_type: ''
                        feature_model: Face
                        previous_status: Declined
                        new_status: Approved
                        state: pending_until_flow_finishes
                        forced: false
                        reason: Liveness retried with a reviewer present.
                        requested_by:
                          email: reviewer@example.com
                          name: Alex Reviewer
                          type: CONSOLE_USER
                        requested_at: '2026-10-13T09:15:00Z'
                        applied_at: null
                        cancelled_at: null
                        cancel_reason: null
                      - id: 7c9e6679-7425-40de-944b-e07fc1f90ae7
                        node_id: feature_ocr_1
                        feature_type: ''
                        feature_model: KYC
                        previous_status: In Review
                        new_status: Approved
                        state: applied
                        forced: true
                        reason: Document manually verified by compliance.
                        requested_by:
                          email: reviewer@example.com
                          name: Alex Reviewer
                          type: CONSOLE_USER
                        requested_at: '2026-10-13T09:15:00Z'
                        applied_at: '2026-10-13T09:15:00Z'
                        cancelled_at: null
                        cancel_reason: null
        '401':
          description: La clé API restreinte a expiré.
          content:
            application/json:
              examples:
                Expired API Key:
                  summary: Clé API restreinte ayant dépassé sa date d'expiration
                  value:
                    detail: This API key has expired.
        '403':
          description: >-
            Identifiants manquants, appelant sans le privilège `read:sessions`,
            clé API avec restriction de portée ne disposant pas de l'accès
            requis par cet endpoint, ou un `session_id` qui appartient à une
            autre application.
          content:
            application/json:
              examples:
                Invalid Credentials:
                  summary: x-api-key manquant ou invalide
                  value:
                    detail: >-
                      Authentication credentials were not provided or are
                      invalid.
                Missing Privilege:
                  summary: L'appelant n'a pas read:sessions
                  value:
                    detail: You do not have permission to perform this action.
                Scoped Key Without Access:
                  summary: Clé API restreinte sans cet accès
                  value:
                    detail: This API key has no read access to decisions.
        '404':
          description: Aucune session KYC ou KYB avec ce `session_id` n'existe.
          content:
            application/json:
              examples:
                Not Found:
                  summary: session_id inconnu
                  value:
                    detail: Not found.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: |-
            curl -X GET \
              https://verification.didit.me/v3/session/3fa85f64-5717-4562-b3fc-2c963f66afa6/features/overrides/ \
              -H 'x-api-key: YOUR_API_KEY'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.sessions.list_feature_overrides(
                "3fa85f64-5717-4562-b3fc-2c963f66afa6",
            )
            print(result)
        - lang: javascript
          label: Node.js
          source: >-
            import Didit from "@didit-protocol/sdk-node";


            // Reads DIDIT_API_KEY.

            const didit = new Didit();


            const result = await
            didit.sessions.listFeatureOverrides("3fa85f64-5717-4562-b3fc-2c963f66afa6");

            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.ListFeatureOverrides(ctx, \"3fa85f64-5717-4562-b3fc-2c963f66afa6\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import me.didit.Didit;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.sessions().listFeatureOverrides("3fa85f64-5717-4562-b3fc-2c963f66afa6");

            System.out.println(result);
        - lang: php
          label: PHP
          source: >-
            <?php


            require 'vendor/autoload.php';


            use Didit\DiditClient;


            // Reads DIDIT_API_KEY.

            $didit = new DiditClient();


            $result =
            $didit->sessions->listFeatureOverrides('3fa85f64-5717-4562-b3fc-2c963f66afa6');

            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: >-
            require "didit"


            # Reads DIDIT_API_KEY.

            didit = Didit::Client.new


            result =
            didit.sessions.list_feature_overrides("3fa85f64-5717-4562-b3fc-2c963f66afa6")

            puts result.to_h
        - lang: csharp
          label: .NET
          source: >-
            using System;

            using System.Text.Json;

            using Didit;


            // Reads DIDIT_API_KEY.

            using var client = new DiditClient();


            var result = await
            client.Sessions.ListFeatureOverridesAsync("3fa85f64-5717-4562-b3fc-2c963f66afa6");

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    FeatureStatusOverride:
      type: object
      description: >-
        Une modification manuelle (override) du statut d'une vérification
        (fonctionnalité) effectuée avec `PATCH
        /v3/session/{sessionId}/features/{nodeId}/update-status/` : ce qu'elle
        modifie, si elle a été appliquée ou si elle attend toujours que la
        personne termine le parcours, qui l'a demandée et pourquoi.
      required:
        - id
        - node_id
        - feature_type
        - feature_model
        - previous_status
        - new_status
        - state
        - forced
        - reason
        - requested_by
        - requested_at
        - applied_at
        - cancelled_at
        - cancel_reason
      properties:
        id:
          type: string
          format: uuid
          description: >-
            Identifiant de la dérogation. Transmettez-le à l'endpoint
            d'annulation.
          example: 7c9e6679-7425-40de-944b-e07fc1f90ae7
        node_id:
          type: string
          description: >-
            Le nœud de workflow spécifié dans la requête (`default` pour une
            étape sans nœud).
          example: feature_ocr_1
        feature_type:
          type: string
          description: >-
            Le `feature_type` transmis par la requête, ou une chaîne vide si
            aucun n'a été transmis.
          example: ''
        feature_model:
          type: string
          description: >-
            Le type de vérification qui a été remplacé, par exemple `KYC`,
            `Face`, `AML` ou `GeolocationCheck`.
          example: KYC
        previous_status:
          type: string
          enum:
            - Not Finished
            - Approved
            - Declined
            - In Review
            - Resub Requested
          description: >-
            Le statut de la vérification au moment où la dérogation a été
            demandée.
          example: In Review
        new_status:
          type: string
          enum:
            - Approved
            - Declined
            - In Review
          description: Le statut défini par la dérogation.
          example: Approved
        state:
          type: string
          enum:
            - applied
            - pending_until_flow_finishes
            - cancelled
          description: >-
            `applied` : le contrôle a le nouveau statut.
            `pending_until_flow_finishes` : la dérogation attend et s'applique
            lorsque la personne termine le flux. `cancelled` : elle a attendu et
            ne s'est jamais appliquée (voir `cancel_reason`).
          example: applied
        forced:
          type: boolean
          description: >-
            `true` lorsque la dérogation s'est appliquée immédiatement alors que
            la personne était encore dans le flux.
          example: false
        reason:
          type: string
          nullable: true
          description: Le `comment` envoyé avec la requête, ou `null`.
          example: Document manually verified by compliance.
        requested_by:
          type: object
          nullable: true
          description: Qui a demandé la dérogation, ou `null` lorsque cela n'est pas connu.
          properties:
            email:
              type: string
              format: email
              nullable: true
              description: >-
                E-mail de l'utilisateur de la console, ou `null` pour les clés
                API et le système.
              example: reviewer@example.com
            name:
              type: string
              nullable: true
              description: Nom d'affichage du demandeur, ou `null`.
              example: Alex Reviewer
            type:
              type: string
              enum:
                - CONSOLE_USER
                - API_KEY
                - SYSTEM
              description: >-
                Qui a effectué la requête : un utilisateur de la console, une
                clé API ou Didit lui-même.
              example: CONSOLE_USER
        requested_at:
          type: string
          format: date-time
          description: Moment où la dérogation a été demandée.
          example: '2026-10-13T09:15:00Z'
        applied_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Date et heure auxquelles la vérification a pris le nouveau statut,
            ou `null` pendant qu'elle est en attente ou une fois qu'elle est
            annulée.
          example: '2026-10-13T09:15:00Z'
        cancelled_at:
          type: string
          format: date-time
          nullable: true
          description: Moment où une dérogation en attente a été annulée, ou `null`.
          example: null
        cancel_reason:
          type: string
          nullable: true
          enum:
            - cancelled_by_reviewer
            - replaced
            - check_changed
            - session_closed
            - null
          description: >-
            Raison pour laquelle un remplacement en attente n'a jamais été
            appliqué, ou `null`. `cancelled_by_reviewer` : annulé avec
            l'endpoint d'annulation. `replaced` : un remplacement plus récent
            sur la même vérification l'a remplacé. `check_changed` : la personne
            a refait la vérification avant de terminer le flux. `session_closed`
            : la session a quitté le flux avant que la personne ne le termine
            (abandonnée, expirée ou décidée en cours de flux).
          example: null
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        La clé API de votre application, issue de Développeurs -> Clés API dans
        la Business Console. La clé principale dispose d'un accès complet. Une
        clé nommée peut être restreinte : aucun, lecture ou écriture par
        ressource, limitée à certains workflows ou aux sessions approuvées, à
        une liste d'adresses IP et à une date d'expiration. 401 signifie que la
        clé est incorrecte, révoquée ou expirée ; 403 signifie qu'aucune clé n'a
        été envoyée, que la clé n'a pas accès à cette ressource ou action, ou
        que la requête provient d'une adresse hors de sa liste d'IP ; 404 sur
        une route de session signifie que la session est hors des workflows ou
        des statuts de la clé. Une clé sans accès aux médias reçoit les URL
        d'images, de vidéos et de PDF à null, et une clé sans accès en écriture
        aux sessions reçoit les liens et tokens de session à null. Voir
        https://docs.didit.me/console/api-keys.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.