> ## 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：步骤状态记录

> 按最新在前列出某会话中单个步骤的所有状态覆盖记录：已应用、等待用户完成流程或已取消。由 Didit 提供。



列出功能覆盖提示词
        将提示词复制到剪贴板



      
      

\<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>



      
      

粘贴到

每次调用[Update Feature Status](https://docs.didit.me/zh/sessions-api/update-feature-status.md)都会记录一次对某项检查状态的覆盖。
此端点列出某个会话的全部覆盖记录，按最新排序，不分页。## 覆盖状态| `state` | 含义 |
| - | - |
| `applied` | 该检查已采用新状态。`applied_at` 表示生效时间。 |
| `pending_until_flow_finishes` | 覆盖处于等待中，待用户完成流程后生效。 |
| `cancelled` | 覆盖在等待期间被取消，从未生效。`cancel_reason` 表示取消原因。 |带有 `forced: true` 的覆盖会在用户仍处于流程中时立即生效。## 等待中的覆盖为何被取消| `cancel_reason` | 发生的情况 |
| - | - |
| `cancelled_by_reviewer` | 审核员通过[Cancel Feature Override](https://docs.didit.me/zh/sessions-api/cancel-feature-override.md)取消了该覆盖。 |
| `replaced` | 同一检查上的较新覆盖替换了它。 |
| `check_changed` | 用户在完成流程前重新进行了该检查，因此您所覆盖的结果已失效。 |
| `session_closed` | 会话在用户完成流程前已结束：已放弃、已过期，或在流程中已做出决策。 |## 用户所处的流程位置当会话状态为 `Not Started`、`In Progress` 或 `Resubmitted`，且用户尚未完成流程时，`person_in_flow` 为 `true`。
在其为 `true` 期间，设置了 `defer_until_flow_finishes: true` 的新覆盖将进入等待。
`flow_finished_at` 表示用户最后一次完成流程的时间。
当用户仍在流程中（包括重新提交期间），以及会话在用户完成流程前已关闭时，该值为 `null`。## 相关内容- [Update Feature Status](https://docs.didit.me/zh/sessions-api/update-feature-status.md)：覆盖某一步骤的状态，立即生效或在流程结束后生效。
- [Cancel Feature Override](https://docs.didit.me/zh/sessions-api/cancel-feature-override.md)：阻止等待中的覆盖生效。
- [Retrieve Session](https://docs.didit.me/zh/sessions-api/retrieve-session.md)：每个功能的 `node_id` 及当前状态。


## OpenAPI

````yaml zh/openapi-25.json GET /v3/session/{sessionId}/features/overrides/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: 身份证件验证 API。使用 x-api-key 请求头进行身份验证。
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/session/{sessionId}/features/overrides/:
    get:
      tags:
        - Sessions
      summary: 列出会话的检查覆盖项
      description: >-
        对用户验证（KYC）或企业验证（KYB）会话中单个功能（步骤）状态的每次覆盖，最新的排在最前且不分页：已应用的、等待用户完成流程的（`pending_until_flow_finishes`）以及已取消的，每项都包含请求者、原因以及是否在用户仍在流程中时应用（`forced`）。


        `person_in_flow` 会告知您带有 `defer_until_flow_finishes: true`
        的新覆盖是否会处于等待状态。`flow_finished_at`
        是用户最后一次完成流程的时间；如果他们仍在流程中（包括重新提交）或会话在他们完成前已关闭，则为 `null`。


        需要 `read:sessions` 权限；受限的 API 密钥需要对决策拥有读取权限。
      operationId: get_v3_session_feature_overrides
      parameters:
        - in: path
          name: sessionId
          required: true
          description: 验证会话的 UUID。支持用户（KYC）和企业（KYB）会话 ID。
          schema:
            type: string
            format: uuid
            example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
      responses:
        '200':
          description: 会话的检查覆盖记录，最新的排在最前。
          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: >-
                      该人员是否仍在流程中，因此带有 `defer_until_flow_finishes: true`
                      的新覆盖操作将等待。
                    example: true
                  flow_finished_at:
                    type: string
                    format: date-time
                    nullable: true
                    description: >-
                      当事人最后一次完成流程的时间。当其仍在流程中（包括重新提交）以及会话在完成前已关闭（已放弃、已过期或在流程中做出决策）时为
                      `null`。
                    example: null
                  overrides:
                    type: array
                    description: 该会话的每次覆盖，最新的排在最前。
                    items:
                      $ref: '#/components/schemas/FeatureStatusOverride'
              examples:
                Overrides:
                  summary: 一个处于等待状态的覆盖项，一个已应用的覆盖项
                  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: 作用域 API 密钥已过期。
          content:
            application/json:
              examples:
                Expired API Key:
                  summary: 已过有效期的作用域 API 密钥
                  value:
                    detail: This API key has expired.
        '403':
          description: >-
            缺少凭据、调用方没有 `read:sessions` 权限、限定范围的 API 密钥缺少此 endpoint 所需的访问权限，或者
            `session_id` 属于另一个应用。
          content:
            application/json:
              examples:
                Invalid Credentials:
                  summary: x-api-key 缺失或无效
                  value:
                    detail: >-
                      Authentication credentials were not provided or are
                      invalid.
                Missing Privilege:
                  summary: 调用方缺少 read:sessions 权限
                  value:
                    detail: You do not have permission to perform this action.
                Scoped Key Without Access:
                  summary: 没有此访问权限的作用域 API 密钥
                  value:
                    detail: This API key has no read access to decisions.
        '404':
          description: 不存在具有此 `session_id` 的 KYC 或 KYB 会话。
          content:
            application/json:
              examples:
                Not Found:
                  summary: 未知的 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: |-
            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: >-
        通过 `PATCH /v3/session/{sessionId}/features/{nodeId}/update-status/`
        对某项检查（功能）状态进行的一次覆盖：它更改了什么、是否已应用或仍在等待用户完成流程、发起者以及原因。
      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: 覆盖项的标识符。将其传递给取消 endpoint。
          example: 7c9e6679-7425-40de-944b-e07fc1f90ae7
        node_id:
          type: string
          description: 请求指定的工作流节点（对于没有节点的步骤为 `default`）。
          example: feature_ocr_1
        feature_type:
          type: string
          description: 请求传递的 `feature_type`；若未传递，则为空字符串。
          example: ''
        feature_model:
          type: string
          description: 被覆盖的核验类型，例如 `KYC`、`Face`、`AML` 或 `GeolocationCheck`。
          example: KYC
        previous_status:
          type: string
          enum:
            - Not Finished
            - Approved
            - Declined
            - In Review
            - Resub Requested
          description: 请求覆盖时该检查的状态。
          example: In Review
        new_status:
          type: string
          enum:
            - Approved
            - Declined
            - In Review
          description: 覆盖所设置的状态。
          example: Approved
        state:
          type: string
          enum:
            - applied
            - pending_until_flow_finishes
            - cancelled
          description: >-
            `applied`：检查已获得新状态。`pending_until_flow_finishes`：覆盖设置处于等待状态，并在该人员完成流程时应用。`cancelled`：已等待且从未应用（参见
            `cancel_reason`）。
          example: applied
        forced:
          type: boolean
          description: 当该人员仍在流程中且覆写立即生效时为 `true`。
          example: false
        reason:
          type: string
          nullable: true
          description: 随请求发送的 `comment`，或为 `null`。
          example: Document manually verified by compliance.
        requested_by:
          type: object
          nullable: true
          description: 请求覆盖的人员；若未知则为 `null`。
          properties:
            email:
              type: string
              format: email
              nullable: true
              description: Console 用户的邮箱，对于 API 密钥和系统则为 `null`。
              example: reviewer@example.com
            name:
              type: string
              nullable: true
              description: 请求者的显示名称，或 `null`。
              example: Alex Reviewer
            type:
              type: string
              enum:
                - CONSOLE_USER
                - API_KEY
                - SYSTEM
              description: 发起请求的主体：控制台用户、API 密钥或 Didit 本身。
              example: CONSOLE_USER
        requested_at:
          type: string
          format: date-time
          description: 请求覆盖的时间。
          example: '2026-10-13T09:15:00Z'
        applied_at:
          type: string
          format: date-time
          nullable: true
          description: 检查变为新状态的时间，等待中或一旦取消则为 `null`。
          example: '2026-10-13T09:15:00Z'
        cancelled_at:
          type: string
          format: date-time
          nullable: true
          description: 等待中的覆盖被取消的时间，或为 `null`。
          example: null
        cancel_reason:
          type: string
          nullable: true
          enum:
            - cancelled_by_reviewer
            - replaced
            - check_changed
            - session_closed
            - null
          description: >-
            处于等待状态的覆盖为何从未生效，或为 `null`。`cancelled_by_reviewer`：已通过取消 endpoint
            取消。`replaced`：同一项检查上更新的覆盖替换了它。`check_changed`：用户在完成流程之前重新进行了检查。`session_closed`：会话在用户完成之前离开了流程（已放弃、已过期或在流程中做出决策）。
          example: null
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        您的应用 API 密钥，可在 Business Console 的“开发者 -> API
        密钥”中获取。主密钥拥有完整访问权限。指定名称的密钥可设置作用域：针对每个资源设为无权限、只读或读写，限定于特定工作流或已通过的会话、限定于
        IP 地址列表，以及设置到期日期。401 表示密钥错误、已撤销或已过期；403 表示未发送密钥、密钥无权访问该资源或操作，或请求来自其 IP
        列表之外的地址；在会话路由上返回 404 表示该会话不在该密钥允许的工作流或状态范围内。没有媒体访问权限的密钥获取到的图片、视频和 PDF
        URL 将为 null；没有会话写入权限的密钥获取到的会话链接和 token 将为 null。请参阅
        https://docs.didit.me/console/api-keys。

````

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