> ## 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：KYC 审计日志

> 获取 Didit 验证会话的每条人工审核备注和每次状态变更记录，可作为审计就绪的合规日志使用，按每次调用计费，无需签约。



提示：列出会话审核
        将提示词复制到剪贴板



      
      

\<pre>

\``Goal: Fetch the full review/activity feed for a Didit verification session — manual comments, status changes, KYC/KYB edits, file uploads, AML events, tags. Mirrors the timeline shown on the Console session-detail page.

Endpoint: GET https://verification.didit.me/v3/sessions/{session_id}/reviews/
Auth header: x-api-key: YOUR_API_KEY

Path param:
\- session_id (UUID, REQUIRED) — verification session UUID. Cross-application reads return 404.

curl:
curl -s 'https://verification.didit.me/v3/sessions/8c2f3a14-7e9b-4d23-9e83-3f7d5e8a1c6d/reviews/' \
-H "x-api-key: $DIDIT_API_KEY"

Response 200: JSON ARRAY (no envelope, no pagination — feed is bounded). Newest first. Each entry (ReviewItem) has:
\- uuid (UUID)
\- activity_type: "COMMENT" | "STATUS_UPDATED" | "KYC_DATA_UPDATED" | "POA_DATA_UPDATED" | "FILE_ADDED" | "FILE_REMOVED" | "AML_ONGOING_MATCH" | "AML_STATUS_UPDATED" | "AML_HIT_STATUS_UPDATED" | "KYB_DATA_UPDATED" | "KYB_DOCUMENT_UPLOADED" | "TAG_ADDED" | "TAG_REMOVED"
\- actor_email, actor_display, actor_type: "API_KEY" | "CONSOLE_USER" | "SYSTEM"
\- new_status, previous_status — only populated for STATUS_UPDATED/AML_STATUS_UPDATED. Values from the SESSION status enum: "Not Started" | "In Progress" | "Awaiting User" | "In Review" | "Approved" | "Declined" | "Resubmitted" | "Expired" | "Kyc Expired" | "Abandoned".
\- comment (string | null)
\- mentioned_emails (string[]) — extracted @mentions, only for COMMENT activities
\- previous_value, new_value, changed_fields — diff payload for *_DATA_UPDATED, FILE_*, TAG_* (opaque JSON, shape varies per activity_type)
\- metadata (object | null)
\- created_at (ISO 8601 UTC)
Empty array means the session has had no recorded activity yet.

When to use:
\- Render an audit trail mirror on your own dashboard.
\- Export the feed for compliance archives.
\- Poll for manual-review decisions when you can't consume webhooks (filter activity_type === "STATUS_UPDATED"; inspect new_status). Webhooks are still preferred — see /integration/webhooks.

Failure modes (envelope {"detail": "..."}):
\- 401 — missing/invalid `x-api-key` header. Re-fetch your application API key from the Auth API if needed.
\- 403 — API key valid but the application is not allowed (revoked, expired, or wrong app).
\- 404 — session UUID does not exist, has been deleted, or belongs to a different application.
\- 429 — rate-limited. Inspect Retry-After.

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

\</pre>



      
      

粘贴到



## OpenAPI

````yaml zh/openapi-25.json GET /v3/sessions/{session_id}/reviews/
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/sessions/{session_id}/reviews/:
    get:
      tags:
        - Sessions
      summary: 列出会话审核和活动日志
      description: >-
        返回用户验证（KYC）会话的审计追踪/活动流，按最新优先排序，采用分页封装结构（`count` / `next` / `previous` /
        `results`，默认每页 50 条）。


        活动流条目由操作该会话的每个主体写入：通过 `PATCH /v3/session/{session_id}/update-status/`
        作出的人工决策（记录 `previous_status` → `new_status`）、控制台审核员活动（带有 `@email`
        提及的评论、KYC/POA 数据编辑、文件上传/删除、标签更改、详情页面查看）、AML 持续监控匹配项，以及通过此路径的 `POST`
        请求追加的备注。读取此活动流在 API 端的等效操作是查看 Didit 控制台会话视图中的 **Activity** 面板。


        此处仅支持访问用户验证（KYC）会话；企业验证（KYB）会话 ID 将返回 `404`。
      operationId: list_session_reviews
      parameters:
        - name: session_id
          in: path
          required: true
          description: >-
            用户验证（KYC）会话的 UUID。必须属于与 API 密钥相同的应用 — 跨应用 UUID、已删除会话以及企业验证（KYB）会话 ID
            均返回 `404`。
          schema:
            type: string
            format: uuid
            example: 8c2f3a14-7e9b-4d23-9e83-3f7d5e8a1c6d
        - name: limit
          in: query
          required: false
          description: 页面大小。默认为 `50`。
          schema:
            type: integer
            default: 50
            example: 50
        - name: offset
          in: query
          required: false
          description: 从（有序）数据流开头跳过的条目数量。默认为 `0`。响应中的 `next` / `previous` URL 包含遍历数据流的正确值。
          schema:
            type: integer
            default: 0
            example: 0
        - name: ordering
          in: query
          required: false
          description: >-
            排序顺序。feed 默认按从新到旧排序（`-created_at`）；传入 `created_at`
            可按从旧到新读取。无法识别的值会被静默忽略（采用默认顺序）；也支持其他序列化器字段名称。
          schema:
            type: string
            default: '-created_at'
            example: created_at
      responses:
        '200':
          description: >-
            分页活动源，默认最新的排在前面。`count` 是条目总数；`next` / `previous` 是现成的页面 URL（末尾为
            `null`）。`count` 为 `0` 且 `results` 为空表示尚未记录任何活动。
          content:
            application/json:
              schema:
                type: object
                properties:
                  count:
                    type: integer
                    description: 该会话的动态条目总数（跨所有页面）。
                    example: 3
                  next:
                    type: string
                    nullable: true
                    description: 下一页的 URL，最后一页为 `null`。
                    example: null
                  previous:
                    type: string
                    nullable: true
                    description: 上一页的 URL，第一页为 `null`。
                    example: null
                  results:
                    type: array
                    items:
                      $ref: '#/components/schemas/ReviewItem'
                    description: 此页面的动态流条目。
              examples:
                DecisionTrail:
                  summary: 人工批准加上通过 API 添加的备注
                  value:
                    count: 3
                    next: null
                    previous: null
                    results:
                      - uuid: de0561bc-5583-4409-9171-1a31a4c8a5f4
                        activity_type: STATUS_UPDATED
                        actor_display: API Client
                        actor_email: null
                        actor_type: API_KEY
                        new_status: Approved
                        previous_status: In Review
                        comment: Document re-checked manually; address matches.
                        mentioned_emails: []
                        previous_value:
                          status: In Review
                        new_value:
                          status: Approved
                        changed_fields:
                          - status
                        metadata: null
                        created_at: '2026-06-12T00:19:31.918735Z'
                      - uuid: 35370f58-5098-44ee-8a06-8c9af80b2455
                        activity_type: STATUS_UPDATED
                        actor_display: Unknown
                        actor_email: null
                        actor_type: CONSOLE_USER
                        new_status: null
                        previous_status: null
                        comment: Note without status.
                        mentioned_emails: []
                        previous_value: null
                        new_value: null
                        changed_fields: []
                        metadata: null
                        created_at: '2026-06-12T00:18:44.504157Z'
                      - uuid: 00338f82-f1c5-4f57-8614-c49bb258af1a
                        activity_type: STATUS_UPDATED
                        actor_display: Unknown
                        actor_email: null
                        actor_type: CONSOLE_USER
                        new_status: In Review
                        previous_status: null
                        comment: Flagging for manual document re-check.
                        mentioned_emails: []
                        previous_value: null
                        new_value: null
                        changed_fields: []
                        metadata: null
                        created_at: '2026-06-12T00:18:44.466537Z'
                PaginatedFirstPage:
                  summary: limit=2 的第一页，next 包含后续 URL
                  value:
                    count: 4
                    next: >-
                      https://verification.didit.me/v3/sessions/8c2f3a14-7e9b-4d23-9e83-3f7d5e8a1c6d/reviews/?limit=2&offset=2
                    previous: null
                    results:
                      - uuid: de0561bc-5583-4409-9171-1a31a4c8a5f4
                        activity_type: STATUS_UPDATED
                        actor_display: API Client
                        actor_email: null
                        actor_type: API_KEY
                        new_status: Approved
                        previous_status: In Review
                        comment: Document re-checked manually; address matches.
                        mentioned_emails: []
                        previous_value:
                          status: In Review
                        new_value:
                          status: Approved
                        changed_fields:
                          - status
                        metadata: null
                        created_at: '2026-06-12T00:19:31.918735Z'
                      - uuid: bd4e6227-bdd2-42b2-a726-1d12f785a457
                        activity_type: STATUS_UPDATED
                        actor_display: Unknown
                        actor_email: null
                        actor_type: CONSOLE_USER
                        new_status: null
                        previous_status: null
                        comment: null
                        mentioned_emails: []
                        previous_value: null
                        new_value: null
                        changed_fields: []
                        metadata: null
                        created_at: '2026-06-12T00:18:44.540238Z'
                Empty:
                  summary: 尚无活动记录的会话
                  value:
                    count: 0
                    next: null
                    previous: null
                    results: []
        '403':
          description: >-
            缺少、格式错误、已过期或已撤销的 `x-api-key`。身份验证在会话查找之前检查，因此即使会话 UUID 不存在，缺少密钥也会返回
            `403`。
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    example: You do not have permission to perform this action.
              examples:
                InvalidKey:
                  summary: x-api-key 请求头缺失或无效
                  value:
                    detail: You do not have permission to perform this action.
        '404':
          description: >-
            您的应用不可见具有此 UUID 的用户验证（KYC）会话：该 UUID 不存在、会话已被删除，或属于其他应用。企业验证（KYB）会话
            ID 在此处也返回 `404`，审核动态仅支持 KYC 会话。
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    example: Session not found.
              examples:
                NotFound:
                  summary: 未知、已删除或跨应用的会话 UUID
                  value:
                    detail: Session not found.
        '429':
          description: >-
            超出速率限制。请检查 `Retry-After` 和 `X-RateLimit-*`
            响应头。参见[速率限制](/zh/integration/rate-limiting)。
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -s
            'https://verification.didit.me/v3/sessions/8c2f3a14-7e9b-4d23-9e83-3f7d5e8a1c6d/reviews/?limit=50'
            \
              -H 'x-api-key: YOUR_API_KEY'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            for item in client.sessions.reviews.list(
                "8c2f3a14-7e9b-4d23-9e83-3f7d5e8a1c6d",
            ):
                print(item)
        - lang: javascript
          label: Node.js
          source: >-
            import Didit from "@didit-protocol/sdk-node";


            // Reads DIDIT_API_KEY.

            const didit = new Didit();


            for await (const item of
            didit.sessions.reviews.list("8c2f3a14-7e9b-4d23-9e83-3f7d5e8a1c6d"))
            {
              console.log(item);
            }
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\niter := client.Sessions.Reviews.ListAutoPaging(ctx, \"8c2f3a14-7e9b-4d23-9e83-3f7d5e8a1c6d\", didit.SessionsReviewsListParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
        - lang: java
          label: Java
          source: >-
            import me.didit.Didit;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            for (var item :
            client.sessions().reviews().list("8c2f3a14-7e9b-4d23-9e83-3f7d5e8a1c6d"))
            {
                System.out.println(item);
            }
        - lang: php
          label: PHP
          source: >-
            <?php


            require 'vendor/autoload.php';


            use Didit\DiditClient;


            // Reads DIDIT_API_KEY.

            $didit = new DiditClient();


            foreach
            ($didit->sessions->reviews->list('8c2f3a14-7e9b-4d23-9e83-3f7d5e8a1c6d')
            as $item) {
                print_r($item->toArray());
            }
        - lang: ruby
          label: Ruby
          source: >-
            require "didit"


            # Reads DIDIT_API_KEY.

            didit = Didit::Client.new


            didit.sessions.reviews.list("8c2f3a14-7e9b-4d23-9e83-3f7d5e8a1c6d").auto_paging_each
            do |item|
              puts item.to_h
            end
        - lang: csharp
          label: .NET
          source: >-
            using System;

            using System.Text.Json;

            using Didit;


            // Reads DIDIT_API_KEY.

            using var client = new DiditClient();


            await foreach (var item in await
            client.Sessions.Reviews.ListAsync("8c2f3a14-7e9b-4d23-9e83-3f7d5e8a1c6d"))

            {
                Console.WriteLine(JsonSerializer.Serialize(item));
            }
components:
  schemas:
    ReviewItem:
      type: object
      description: >-
        会话审核/活动动态中的一个条目。状态变更包含
        `previous_status`、`new_status`、`previous_value`、`new_value` 和
        `changed_fields`；评论包含 `comment` 以及（对于 Console
        评论）`mentioned_emails`；其余字段若不适用于该活动类型，则为 `null` 或留空。
      properties:
        uuid:
          type: string
          format: uuid
          description: 此动态条目的唯一标识符。
          example: de0561bc-5583-4409-9171-1a31a4c8a5f4
        activity_type:
          type: string
          enum:
            - COMMENT
            - STATUS_UPDATED
            - KYC_DATA_UPDATED
            - POA_DATA_UPDATED
            - FILE_ADDED
            - FILE_REMOVED
            - AML_ONGOING_MATCH
            - AML_STATUS_UPDATED
            - AML_HIT_STATUS_UPDATED
            - KYB_DATA_UPDATED
            - KYB_DOCUMENT_UPLOADED
            - TAG_ADDED
            - TAG_REMOVED
            - FEATURE_OVERRIDE_PENDING
            - FEATURE_OVERRIDE_APPLIED
            - FEATURE_OVERRIDE_CANCELLED
          description: >-
            该条目记录的活动类型。`STATUS_UPDATED` 行来自人工决策（`PATCH
            /v3/session/{session_id}/update-status/`）以及通过 `POST …/reviews/`
            添加的条目（即使未记录状态，也默认为此类型）。`COMMENT` 行来自 Console 审核员；Console
            详情页查看也存储为标记有 `metadata.system_event = "DETAIL_VIEWED"` 的 `COMMENT`
            行。其余类型用于跟踪数据编辑、文件变更、标签和 AML 监控活动。STATUS_UPDATED 行也可由系统主体写入（例如
            actor_type 为 SYSTEM 的持续 AML 监控，以及自动功能状态更新），而不仅由 update-status
            endpoint
            和人工审核提交写入。`FEATURE_OVERRIDE_PENDING`、`FEATURE_OVERRIDE_APPLIED` 和
            `FEATURE_OVERRIDE_CANCELLED` 记录对单个检查状态的覆盖（`PATCH
            /v3/session/{session_id}/features/{node_id}/update-status/`）：已请求等待流程完成、已应用或已取消。它们在
            `previous_value` / `new_value`（`{"status": ...}`）中携带该检查的状态，使
            `previous_status` 和 `new_status` 保持为 `null`，并在 `metadata`
            中指定覆盖信息（`feature_override_id`、`node_id`、`feature_model`、`forced`、`state`、`cancel_reason`）。请求对应的条目包含审核员的
            `comment`；在流程完成时应用的覆盖所记录的 `actor_type` 为 `SYSTEM`。
          example: STATUS_UPDATED
        actor_display:
          type: string
          description: >-
            便于人类阅读的操作者标签，按以下顺序解析：操作者姓名 → Console 账户标识符 → `actor_email` 的本地部分 →
            `"API Client"`（针对 `API_KEY` 操作者）→ `"System"`（针对 `SYSTEM` 操作者）→
            `"Unknown"`。通过 `POST …/reviews/` 创建的条目始终显示 `"Unknown"`，因为该 endpoint
            不记录操作者归属。
          example: API Client
        actor_email:
          type: string
          nullable: true
          description: 执行该操作的 Console 用户的邮箱。API 密钥和系统执行者为 `null`。
          example: null
        actor_type:
          type: string
          enum:
            - API_KEY
            - CONSOLE_USER
            - SYSTEM
          description: >-
            执行该操作的主体：API 密钥、控制台用户或 Didit 本身（`SYSTEM`，例如 AML 持续监控）。无论调用方是谁，通过
            `POST …/reviews/` 创建的条目均带有默认值 `CONSOLE_USER`。
          example: API_KEY
        new_status:
          type: string
          nullable: true
          enum:
            - Not Started
            - In Progress
            - Approved
            - Declined
            - In Review
            - Expired
            - Abandoned
            - Kyc Expired
            - Resubmitted
            - Awaiting User
          description: 此条目记录的会话状态（用于状态更新）。对于评论和数据变更条目为 `null`。
          example: Approved
        previous_status:
          type: string
          nullable: true
          enum:
            - Not Started
            - In Progress
            - Approved
            - Declined
            - In Review
            - Expired
            - Abandoned
            - Kyc Expired
            - Resubmitted
            - Awaiting User
          description: >-
            变更前会话所处的状态。在更新状态 endpoint 写入的 `STATUS_UPDATED` 条目中填充；在通过 `POST
            …/reviews/` 添加的条目中为 `null`。系统写入的 STATUS_UPDATED 行中也会填充。
          example: In Review
        comment:
          type: string
          nullable: true
          description: 附加至该条目的自由文本备注，或为 `null`。
          example: Document re-checked manually; address matches.
        mentioned_emails:
          type: array
          items:
            type: string
            format: email
          description: >-
            在评论中通过 `@email` 提及的 Console 用户。对于通过此 API 创建的条目，该项始终为空；提及处理仅为 Console
            专有功能。
          example: []
        previous_value:
          type: object
          nullable: true
          description: '操作前发生变更的数据快照，例如状态变更时的 `{"status": "In Review"}`。若未发生变更则为 `null`。'
          example:
            status: In Review
        new_value:
          type: object
          nullable: true
          description: '操作后发生变更的数据快照，例如 `{"status": "Approved"}`。若未发生变更则为 `null`。'
          example:
            status: Approved
        changed_fields:
          type: array
          items:
            type: string
          description: 此活动修改的字段名称（例如 `["status"]`）。对于评论以及通过 `POST …/reviews/` 添加的条目为空。
          example:
            - status
        metadata:
          type: object
          nullable: true
          description: >-
            系统生成条目的额外上下文。控制台详情页面浏览会包含 `{"system_event": "DETAIL_VIEWED",
            "detail_type": "verification"}`，以便在通知逻辑中过滤掉它们。其作者在控制台中编辑过的 `COMMENT`
            会包含 `edited_at`，即最后一次编辑的 ISO 8601 时间（`comment` 和 `mentioned_emails`
            随后保存编辑后的文本及其提及内容）。对于普通条目为 `null`。
          example: null
        created_at:
          type: string
          format: date-time
          description: 条目写入的时间，ISO 8601 UTC 格式。
          example: '2026-06-12T00:19:31.918735Z'
  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.