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

# List Feature Overrides

> List every override of a single step's status on a session, newest first: applied, waiting for the person to finish the flow, or cancelled.



List Feature Overrides Prompt
        Copy prompt to clipboard



      
      

\<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: invalid credentials, 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>



      
      

Paste into

Every call to [Update Feature Status](/sessions-api/update-feature-status.md) records an override of one check's status.
This endpoint lists all of them for one session, newest first, without pagination.## Override states| `state` | What it means |
| - | - |
| `applied` | The check has the new status. `applied_at` says when. |
| `pending_until_flow_finishes` | The override waits and applies when the person finishes the flow. |
| `cancelled` | The override waited and never applied. `cancel_reason` says why. |An override with `forced: true` applied at once while the person was still in the flow.## Why a waiting override was cancelled| `cancel_reason` | What happened |
| - | - |
| `cancelled_by_reviewer` | Someone cancelled it with [Cancel Feature Override](/sessions-api/cancel-feature-override.md). |
| `replaced` | A newer override on the same check replaced it. |
| `check_changed` | The person redid the check before finishing the flow, so the result you overrode is gone. |
| `session_closed` | The session left the flow before the person finished it: abandoned, expired, or decided mid-flow. |## Where the person is in the flow`person_in_flow` is `true` while the session is `Not Started`, `In Progress` or `Resubmitted` and the person has not finished the flow.
While it is `true`, a new override with `defer_until_flow_finishes: true` waits.
`flow_finished_at` is when the person last finished the flow.
It is `null` while they are still in it, a resubmission included, and when the session closed before they finished.## Related- [Update Feature Status](/sessions-api/update-feature-status.md): override one step's status, now or once the flow finishes.
- [Cancel Feature Override](/sessions-api/cancel-feature-override.md): stop a waiting override from applying.
- [Retrieve Session](/sessions-api/retrieve-session.md): each feature's `node_id` and current status.


## OpenAPI

````yaml GET /v3/session/{sessionId}/features/overrides/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: Identity verification API. Authenticate with x-api-key header.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/session/{sessionId}/features/overrides/:
    get:
      tags:
        - Sessions
      summary: List a session's check overrides
      description: >-
        Every override of an individual feature (step) status on a User
        Verification (KYC) or Business Verification (KYB) session, newest first
        and not paginated: applied ones, ones waiting for the person to finish
        the flow (`pending_until_flow_finishes`) and cancelled ones, each with
        who asked, their reason, and whether it applied while the person was
        still in the flow (`forced`).


        `person_in_flow` tells you whether a new override with
        `defer_until_flow_finishes: true` would wait. `flow_finished_at` is when
        the person last finished the flow; it is `null` while they are still in
        it (a resubmission included) and when the session closed before they
        finished.


        Requires the `read:sessions` privilege; a scoped API key needs read
        access to decisions.
      operationId: get_v3_session_feature_overrides
      parameters:
        - in: path
          name: sessionId
          required: true
          description: >-
            UUID of the verification session. Accepts both user (KYC) and
            business (KYB) session IDs.
          schema:
            type: string
            format: uuid
            example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
      responses:
        '200':
          description: The session's check overrides, newest first.
          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: >-
                      Whether the person is still in the flow, so a new override
                      with `defer_until_flow_finishes: true` would wait.
                    example: true
                  flow_finished_at:
                    type: string
                    format: date-time
                    nullable: true
                    description: >-
                      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 (abandoned, expired or
                      decided mid-flow).
                    example: null
                  overrides:
                    type: array
                    description: Every override of the session, newest first.
                    items:
                      $ref: '#/components/schemas/FeatureStatusOverride'
              examples:
                Overrides:
                  summary: One override waiting, one applied
                  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: The scoped API key has expired.
          content:
            application/json:
              examples:
                Expired API Key:
                  summary: Scoped API key past its expiry date
                  value:
                    detail: This API key has expired.
        '403':
          description: >-
            Missing or invalid credentials, a caller without the `read:sessions`
            privilege, a scoped API key without the access this endpoint needs,
            or a `session_id` that belongs to another application.
          content:
            application/json:
              examples:
                Invalid Credentials:
                  summary: Missing or invalid x-api-key
                  value:
                    detail: >-
                      Authentication credentials were not provided or are
                      invalid.
                Missing Privilege:
                  summary: Caller lacks read:sessions
                  value:
                    detail: You do not have permission to perform this action.
                Scoped Key Without Access:
                  summary: Scoped API key without this access
                  value:
                    detail: This API key has no read access to decisions.
        '404':
          description: No KYC or KYB session with this `session_id` exists.
          content:
            application/json:
              examples:
                Not Found:
                  summary: Unknown session_id
                  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: |-
            import requests

            response = requests.get(
                "https://verification.didit.me/v3/session/3fa85f64-5717-4562-b3fc-2c963f66afa6/features/overrides/",
                headers={"x-api-key": "YOUR_API_KEY"},
            )
            response.raise_for_status()
            print(response.json())
components:
  schemas:
    FeatureStatusOverride:
      type: object
      description: >-
        One override of a check (feature) status made with `PATCH
        /v3/session/{sessionId}/features/{nodeId}/update-status/`: what it
        changes, whether it applied or still waits for the person to finish the
        flow, who asked and why.
      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: Identifier of the override. Pass it to the cancel endpoint.
          example: 7c9e6679-7425-40de-944b-e07fc1f90ae7
        node_id:
          type: string
          description: >-
            The workflow node the request named (`default` for a step without a
            node).
          example: feature_ocr_1
        feature_type:
          type: string
          description: >-
            The `feature_type` the request passed, or an empty string when it
            passed none.
          example: ''
        feature_model:
          type: string
          description: >-
            The kind of check that was overridden, for example `KYC`, `Face`,
            `AML` or `GeolocationCheck`.
          example: KYC
        previous_status:
          type: string
          enum:
            - Not Finished
            - Approved
            - Declined
            - In Review
            - Resub Requested
          description: The check's status when the override was requested.
          example: In Review
        new_status:
          type: string
          enum:
            - Approved
            - Declined
            - In Review
          description: The status the override sets.
          example: Approved
        state:
          type: string
          enum:
            - applied
            - pending_until_flow_finishes
            - cancelled
          description: >-
            `applied`: the check has the new status.
            `pending_until_flow_finishes`: the override waits and applies when
            the person finishes the flow. `cancelled`: it waited and never
            applied (see `cancel_reason`).
          example: applied
        forced:
          type: boolean
          description: >-
            `true` when the override applied at once while the person was still
            in the flow.
          example: false
        reason:
          type: string
          nullable: true
          description: The `comment` sent with the request, or `null`.
          example: Document manually verified by compliance.
        requested_by:
          type: object
          nullable: true
          description: Who requested the override, or `null` when that is not known.
          properties:
            email:
              type: string
              format: email
              nullable: true
              description: >-
                Email of the console user, or `null` for API keys and the
                system.
              example: reviewer@example.com
            name:
              type: string
              nullable: true
              description: Display name of the requester, or `null`.
              example: Alex Reviewer
            type:
              type: string
              enum:
                - CONSOLE_USER
                - API_KEY
                - SYSTEM
              description: >-
                Who made the request: a console user, an API key, or Didit
                itself.
              example: CONSOLE_USER
        requested_at:
          type: string
          format: date-time
          description: When the override was requested.
          example: '2026-10-13T09:15:00Z'
        applied_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            When the check took the new status, or `null` while it waits or once
            it is cancelled.
          example: '2026-10-13T09:15:00Z'
        cancelled_at:
          type: string
          format: date-time
          nullable: true
          description: When a waiting override was cancelled, or `null`.
          example: null
        cancel_reason:
          type: string
          nullable: true
          enum:
            - cancelled_by_reviewer
            - replaced
            - check_changed
            - session_closed
            - null
          description: >-
            Why a waiting override never applied, or `null`.
            `cancelled_by_reviewer`: cancelled with the cancel endpoint.
            `replaced`: a newer override on the same check replaced it.
            `check_changed`: the person redid the check before finishing the
            flow. `session_closed`: the session left the flow before the person
            finished it (abandoned, expired, or decided mid-flow).
          example: null
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Your application's API key, from Developers -> API keys in the Business
        Console. The primary key has full access. A named key can be scoped:
        none, read or write per resource, limited to some workflows or to
        approved sessions, to a list of IP addresses, and to an expiry date. 401
        means the key is missing, wrong, revoked or expired; 403 means the key
        has no access to this resource or action, or the request came from an
        address outside its IP list; 404 on a session route means the session is
        outside the key's workflows or statuses. A key without media access
        receives image, video and PDF URLs as null, and a key without sessions
        write receives session links and tokens as null. See
        https://docs.didit.me/console/api-keys.

````

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