> ## 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：KYT 交易监控

> 获取 Didit 受监控交易的风险评分、严重程度、交易对手、标签和筛查状态。按次计费的 KYT，无需签订合同。



列出交易 API 提示词
        将提示词复制到剪贴板



      
      

\<pre>

\`List monitored transactions for my Didit application through the Management API.

Endpoint:
GET https://verification.didit.me/v3/transactions/

Authentication:
Use the x-api-key header with my Didit API key.

Goal:
\- Retrieve a paginated list of high-level transaction summaries (score, severity, status, parties, tags, decision metadata) — suitable for back-office review screens, fraud dashboards, and audit exports.

Query parameters:
\- limit - page size (default 50, min 1).
\- offset — zero-based offset (default 0). Prefer following the next URL from the previous page.

Ordering & pagination:
\- Ordered by txn_date descending (most recent first), with created_at as a tie-breaker.
\- count is a bounded counter (exact up to 100, capped above). Use total_transactions when present for the true count.
\- Transactions deleted via the Console are not returned.

Filtering:
\- Besides limit / offset, this endpoint accepts travel_rule_status, an exact Travel Rule status (for example ON_HOLD), and then returns only transactions whose Travel Rule transfer is in that status.
count follows this filter, but total_transactions always counts every transaction in the application.
\- It also accepts assignee, a comma-separated list where any value matches: me (the calling reviewer, with a user token), unassigned, rules (decided by the rules alone, no reviewer involved), or a member email.
\- For other filtering (party, status, severity, date range), use the Console UI.

Example call:
curl -X GET "https://verification.didit.me/v3/transactions/?limit=50" \
-H "x-api-key: YOUR_API_KEY"

What to read from each row:
\- uuid — stable Didit transaction id; use as {transaction_id} in GET /v3/transactions/{transaction_id}/.
\- transaction_number — application-scoped sequential number shown in Console.
\- txn_id — the identifier you supplied at create time (max 128 chars, unique per application).
\- status, score, severity, decision_reason_code, decision_reason_label — live monitoring verdict.
\- direction, amount, currency — raw submission. amount is a decimal string.
\- subject_name / subject_vendor_data / subject_country — denormalized APPLICANT party fields.
\- counterparty_name / counterparty_vendor_data / counterparty_country — denormalized COUNTERPARTY fields (may be null).
\- tags — Console tags (uuid, name, color).
\- assigned_to_name — Console reviewer who owns the transaction.
\- travel_rule_status - the status of the transaction's Travel Rule transfer (for example COMPLETED), or null when it has none.
\- travel_rule - the same Travel Rule block as GET /v3/transactions/{transaction_id}/ (status, direction, rail, counterparty_vasp, delivery, discovery, reason, next_actions and the rest), or null when the transaction has none.
Read reason and next_actions to see why each COUNTERPARTY_VASP_NOT_FOUND or COUNTERPARTY_VASP_NOT_REACHABLE transfer is stuck without one read per transaction.

Failure modes:
\- 403 - missing x-api-key (a wrong, revoked or expired key gets 401), or a key without permission for this action; the body is a { "detail": "..." } envelope.
\- 429 — rate limited; back off and retry.

Side effects: none. This is a pure read.

For the full integration shape, see /integration/integration-prompt.`

\</pre>



      
      

粘贴到



## OpenAPI

````yaml zh/openapi-25.json GET /v3/transactions/
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/transactions/:
    get:
      tags:
        - Transactions
      summary: 列出交易
      description: >-
        分页的受监控交易列表，最新优先（`txn_date` 降序）。`count` 上限为 100；请使用 `total_transactions`
        获取真实的行计数。此 endpoint 不支持过滤或搜索参数。
      operationId: listTransactions
      parameters:
        - name: limit
          in: query
          schema:
            type: integer
            default: 50
            minimum: 1
            maximum: 1000000
          description: 页面大小。省略时默认为 50。虽无强制上限，但为降低延迟建议保持较小的页面大小。
        - name: offset
          in: query
          schema:
            type: integer
            maximum: 1000000
            minimum: 0
            default: 0
          description: 要返回的第一条记录的从零开始的偏移量。建议跟随上一页的 `next` URL。
        - name: travel_rule_status
          in: query
          required: false
          schema:
            type: string
          description: >-
            仅返回其 Travel Rule 转账处于此确切状态（例如 `ON_HOLD` 或
            `AWAITING_COUNTERPARTY`）的交易。`count` 会遵循此过滤器；`total_transactions`
            仍会统计应用中的所有交易。
        - name: assignee
          in: query
          required: false
          schema:
            type: string
          description: >-
            以逗号分隔；交易满足其中任意值即匹配。`unassigned` 表示尚未被任何人领取的案件，`rules`
            表示规则在没有审核员的情况下自行做出的决策，成员邮箱则匹配分配给该审核员的案件。`me` 代表当前登录的控制台审核员，因此 API
            密钥发送 `me` 将收到 `400`。
      responses:
        '200':
          description: 分页交易摘要列表，最新优先。
          content:
            application/json:
              schema:
                type: object
                properties:
                  count:
                    type: integer
                    description: >-
                      匹配交易的上限计数（100 笔以内准确，超过则设上限）。分页时请使用 `total_transactions`
                      获取真实计数。
                  next:
                    type: string
                    nullable: true
                    description: 下一页的绝对 URL，最后一页则为 `null`。
                  previous:
                    type: string
                    nullable: true
                    description: 上一页的绝对 URL，第一页则为 `null`。
                  total_transactions:
                    type: integer
                    description: 该应用（未删除的）交易的确切总数。在分页响应中提供。
                  results:
                    type: array
                    items:
                      type: object
                      properties:
                        uuid:
                          type: string
                          format: uuid
                          description: Didit 交易的稳定标识符。在详情/备注/关联调用中用作 `{transaction_id}`。
                        transaction_number:
                          type: integer
                          description: 控制台中显示的应用范围内连续交易序号（例如 `4123`）。
                        txn_id:
                          type: string
                          description: 创建调用时由客户提供的标识符（最多 128 个字符）。每个应用唯一。
                        transaction_type:
                          type: string
                          description: >-
                            存储的顶级类别：`finance`、`kyc`、`travelRule`、`userPlatformEvent`、`gamblingBet`、`gamblingLimitChange`、`gamblingBonusChange`、`auditTrailEvent`。请注意，即使以
                            snake_case 提交，包含多个单词的值也会以 camelCase 形式返回。
                        action_type:
                          type: string
                          description: 类别内的子类型（例如 `deposit`、`withdrawal`、`transfer`）。
                        status:
                          type: string
                          enum:
                            - APPROVED
                            - IN_REVIEW
                            - DECLINED
                            - AWAITING_USER
                          description: 当前监控裁决结果。
                        direction:
                          type: string
                          enum:
                            - INBOUND
                            - OUTBOUND
                          description: 相对于主体的方向。无论提交时的大小写如何，均以大写形式存储。
                        amount:
                          type: string
                          description: >-
                            作为十进制字符串的交易金额，已去除末尾零（例如
                            `"1500"`、`"0.5"`、`"0.123456789012345678"`）。最多 18
                            位小数。
                        currency:
                          type: string
                          description: >-
                            `amount` 的货币代码。接受任何 ISO 4217 字母代码（例如
                            `EUR`、`USD`、`NGN`）以及加密资产符号（例如
                            `BTC`）。建议使用当前流通的代码。并非每个接受的代码都有汇率：当该代码没有可用汇率时（例如 ISO
                            会计单位 `XSU`，或 Didit 未定价的加密资产符号），自动换算将失败，并且
                            `preferred_currency_amount` 将返回 null，除非请求提供了预先换算的
                            `amount_in_default_currency`。
                        preferred_currency_amount:
                          type: string
                          nullable: true
                          description: '`amount` 在可用时折算为应用的首选货币。'
                        preferred_currency_code:
                          type: string
                          nullable: true
                          description: >-
                            用于 `preferred_currency_amount`
                            的首选币种代码：应用的基准币种，任何当前流通的 ISO 4217
                            代码。若该币种代码没有可用的汇率，`preferred_currency_amount` 将保持为
                            null，除非请求中提供了预先换算的 `amount_in_default_currency`。
                        payment_details:
                          type: string
                          nullable: true
                          description: 提交内容中的自由文本付款参考号或附言。
                        score:
                          type: integer
                          description: 风险评分（通常为 0–100）。数值越高 = 风险越大。
                        severity:
                          type: string
                          nullable: true
                          enum:
                            - UNKNOWN
                            - LOW
                            - MEDIUM
                            - HIGH
                            - CRITICAL
                          description: >-
                            由规则/提供商设置的分类风险严重程度（`UNKNOWN`、`LOW`、`MEDIUM`、`HIGH`、`CRITICAL`）。在设置该值之前为
                            `null`。
                        subject_name:
                          type: string
                          nullable: true
                          description: '`APPLICANT` 方的姓名。'
                        subject_vendor_data:
                          type: string
                          nullable: true
                          description: 您为申请人指定的内部用户/企业标识符。
                        subject_country:
                          type: string
                          nullable: true
                          description: >-
                            申请人的国家/地区代码，来自提交的 `address.country`（通常为 ISO 3166-1
                            alpha-3）。
                        counterparty_name:
                          type: string
                          nullable: true
                          description: '`COUNTERPARTY` 方的姓名（若有）。'
                        counterparty_vendor_data:
                          type: string
                          nullable: true
                          description: 您为交易对手指定的内部标识符。
                        counterparty_country:
                          type: string
                          nullable: true
                          description: 交易对手的国家/地区代码，来自提交的 `address.country`。
                        tags:
                          type: array
                          items:
                            type: object
                            properties:
                              uuid:
                                type: string
                                format: uuid
                              name:
                                type: string
                              color:
                                type: string
                              description:
                                type: string
                                nullable: true
                              source:
                                type: string
                                enum:
                                  - didit
                                  - custom
                                description: 该标签是 Didit 预设还是自定义标签。
                          description: 附加到交易的标签（手动或通过规则）。
                        txn_date:
                          type: string
                          format: date-time
                          description: 交易发生的时间（来自创建时的 `transaction_at`）。
                        created_at:
                          type: string
                          format: date-time
                          description: Didit 记录提交的时间。
                        decision_reason_code:
                          type: string
                          nullable: true
                          description: 当前 `status` 的机器可读原因（例如 `WALLET_HIGH_RISK`）。
                        decision_reason_label:
                          type: string
                          nullable: true
                          description: '`decision_reason_code` 的便于人类阅读的标签。'
                        assigned_to_name:
                          type: string
                          nullable: true
                          description: 分配给此交易的 Console 审核员显示名称。
                        travel_rule_status:
                          type: string
                          nullable: true
                          description: 交易的 Travel Rule 转账状态（例如 `COMPLETED`），若无则为 `null`。
                        travel_rule:
                          nullable: true
                          allOf:
                            - $ref: '#/components/schemas/TransactionTravelRule'
                          description: >-
                            交易的 Travel Rule 转账，与 `GET
                            /v3/transactions/{transaction_id}/` 中的 `travel_rule`
                            数据块相同；当交易没有该项时为 `null`。
              examples:
                Single transaction:
                  value:
                    count: 1
                    next: null
                    previous: null
                    total_transactions: 1
                    results:
                      - uuid: abcdef12-3456-4890-abcd-ef1234567890
                        transaction_number: 4123
                        txn_id: your-txn-2026-05-17-001
                        transaction_type: finance
                        action_type: withdrawal
                        status: IN_REVIEW
                        direction: OUTBOUND
                        amount: '1500'
                        currency: EUR
                        preferred_currency_amount: '1620.45'
                        preferred_currency_code: USD
                        payment_details: Withdrawal to crypto wallet
                        txn_date: '2026-05-17T08:42:00Z'
                        created_at: '2026-05-17T08:42:11Z'
                        score: 78
                        severity: HIGH
                        decision_reason_code: WALLET_HIGH_RISK
                        decision_reason_label: Destination wallet flagged as high risk
                        tags:
                          - uuid: 9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d
                            name: Manual review
                            color: '#F59E0B'
                            description: null
                            source: custom
                        subject_name: Maria Garcia
                        subject_vendor_data: user-12345
                        counterparty_name: null
                        counterparty_vendor_data: null
                        counterparty_country: null
                        subject_country: null
                        assigned_to_name: Alex Reviewer
                        travel_rule_status: null
                        travel_rule: null
        '403':
          description: >-
            缺少、无效或已撤销的 API 密钥，或者该密钥无法列出此应用的交易。缺少密钥返回 `403`；错误、已撤销或已过期的密钥返回
            `401`。
          content:
            application/json:
              examples:
                Forbidden:
                  value:
                    detail: You do not have permission to perform this action.
        '429':
          description: 超出速率限制；请退避并在 `Retry-After` 指定的间隔后重试。
          content:
            application/json:
              examples:
                Throttled:
                  value:
                    detail: Request was throttled. Expected available in 30 seconds.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X GET
            'https://verification.didit.me/v3/transactions/?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.transactions.list():
                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.transactions.list()) {
              console.log(item);
            }
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\niter := client.Transactions.ListAutoPaging(ctx, didit.TransactionsListParams{})\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.transactions().list()) {
                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->transactions->list() as $item) {
                print_r($item->toArray());
            }
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

            # Reads DIDIT_API_KEY.
            didit = Didit::Client.new

            didit.transactions.list.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.Transactions.ListAsync())
            {
                Console.WriteLine(JsonSerializer.Serialize(item));
            }
components:
  schemas:
    TransactionTravelRule:
      type: object
      description: >-
        交易的 Travel Rule 转账，正如 `GET /v3/transactions/{transaction_id}/`、`POST
        /v3/transactions/` 的 `201` 以及 `GET /v3/transactions/`
        的每行所返回的内容。`direction`、`rail`、`counterparty_vasp`、`delivery`、`discovery`、`reason`
        和 `next_actions` 的结构与 `PATCH
        /v3/transactions/{transaction_id}/travel-rule/`
        相同，因此读取一次交易即可了解其转账受阻的原因以及如何继续推进。
      properties:
        uuid:
          type: string
          format: uuid
        status:
          type: string
        protocol:
          type: string
          nullable: true
        required:
          type: boolean
        obligations_count:
          type: integer
        originator_data:
          type: object
          description: 汇款人方。对于入账转账，在所有权确认之前，交易对手的值将被掩码遮盖。
        beneficiary_data:
          type: object
          description: 收款人方。对于入账转账，在确认所有权之前，交易对手的值将被遮蔽。
        name_match:
          type: object
          nullable: true
          description: 决定转账的姓名比对结果（分数和严格程度）。在运行比对前为 null。比对的姓名与当事方一同脱敏。
        data_match:
          $ref: '#/components/schemas/TravelRuleDataMatch'
        mismatched_fields:
          type: array
          items:
            type: string
          description: '`data_match.mismatched_fields` 的快捷方式。无差异时为空。'
        data_unmasked:
          $ref: '#/components/schemas/TravelRuleDataUnmasked'
        data_masked:
          type: boolean
          description: 在此响应中交易对手的个人数据被遮蔽时为 True。
        metadata:
          type: object
        direction:
          type: string
          enum:
            - INBOUND
            - OUTBOUND
          description: 此笔转账属于交易的哪一方。
        rail:
          type: string
          nullable: true
          description: >-
            转账所走的通道：`INTERNAL`、`TRP`、`GTR`、`TRUST`、`VERIFYVASP`、`SYGNA` 或
            `EMAIL`（在沙盒应用上且由 Didit Test VASP 应答时为 `TEST_VASP`），在选定通道前为 `null`。
        counterparty_vasp:
          type: object
          nullable: true
          properties:
            name:
              type: string
            lei:
              type: string
            dd_score:
              type: integer
              description: 尽职调查评分，范围为 0 到 100，分数越高越好。分值范围与 VASP 名录相同。
            dd_score_breakdown:
              type: object
              description: >-
                对 dd_score 的各组件贡献度，每个组件一个对象（对应 VASP 目录中的
                jurisdiction、verification、protocol、lei、history、essentials、responsiveness），每个组件均包含
                {points, max, reason, detail}。在交易对手完成评估前为 {}。
              additionalProperties:
                type: object
                properties:
                  points:
                    type: number
                    description: 为该组件分配的点数。
                  max:
                    type: integer
                    description: 该组件可赋予的最大分值。
                  reason:
                    type: string
                    description: 组件判定结果的机器可读代码。
                  detail:
                    type: string
                    description: 易于阅读的积分授予原因。
            dd_assessed_at:
              type: string
              format: date-time
              nullable: true
              description: 尽职调查评估上次运行的时间。在对交易对手进行评估之前为 Null。
          description: 交易对手的名录条目；若转账未关联任何条目，则为 `null`。
        delivery:
          nullable: true
          allOf:
            - $ref: '#/components/schemas/TravelRuleDelivery'
          description: >-
            该转账应发送给另一方的最新消息。若无需发送任何消息（例如金额低于 `threshold_amount` 或针对声明的自托管钱包），则为
            `null`。
        discovery:
          type: array
          description: Didit 查找交易对手的方式，每个运行的步骤对应一个条目。未运行发现流程时为空，例如对于入站转账。
          items:
            $ref: '#/components/schemas/TravelRuleDiscoveryStep'
        reason:
          type: string
          description: >-
            `COUNTERPARTY_VASP_NOT_FOUND` 或 `COUNTERPARTY_VASP_NOT_REACHABLE`
            转账受阻的原因；任何其他状态下为 `""`。首先由失败的投递决定（仅适用于
            `COUNTERPARTY_VASP_NOT_REACHABLE`）：`email_undeliverable`（邮件服务商拒绝了合规邮件，且没有可尝试的地址：发送时、发送提醒时或后续报告为永久退信）或
            `delivery_failed`（负责投递的通道彻底失败：网络通道拒绝了消息或重试次数耗尽、`TRP` 身份主机未应答，或交易对手的
            `TRP` 主机不接受查询）。否则由 `discovery` 追踪记录决定：`awaiting_end_user`（没有任何步骤指定
            Didit 可触达的交易对手）、`directory_match_no_route`（某步骤指定了名录中的 VASP，但该 VASP
            没有可用路由）、`picked_member_without_proven_wallet`（终端用户选择的 Didit
            客户尚未证明对该钱包的控制权），或者在追踪记录未提供其他原因时的
            `no_directory_match`。重新发送后转账会继续推进，因此该原因将被清除。参见[转账受阻的原因](/zh/transaction-monitoring/travel-rule#为什么转账会卡住)。
        next_actions:
          type: array
          description: >-
            推进转账的操作；除 `COUNTERPARTY_VASP_NOT_FOUND` 或
            `COUNTERPARTY_VASP_NOT_REACHABLE` 之外的任何状态均返回
            `[]`。`email_undeliverable` 提供 `update_compliance_email`，然后提供
            `resend`。`delivery_failed` 提供 `resend`。发现原因提供
            `select_counterparty_vasp`、`declare_self_hosted`、`add_vasp_hint` 和
            `resend`。
          items:
            $ref: '#/components/schemas/TravelRuleNextAction'
        chain_details:
          $ref: '#/components/schemas/TravelRuleChainDetails'
    TravelRuleDataMatch:
      type: object
      nullable: true
      description: >-
        转账当事方数据与对方已知的钱包持有人信息之间的逐字段比对。该项仅指明字段和结果，绝不包含具体值，因此在交易对手数据被脱敏的同时仍保持可读性。在执行比对前为
        null。
      properties:
        matched:
          type: boolean
          description: 当比对的字段均无差异时为 true。
        mismatched_fields:
          type: array
          items:
            type: string
            enum:
              - name
              - date_of_birth
              - address
              - account
          description: 存在差异的字段。
        fields:
          type: object
          description: >-
            针对该参与方实体类型所比对的每个字段对应一个条目（`name`、`date_of_birth`、`address`、`account`；企业没有
            `date_of_birth`）。
          additionalProperties:
            type: object
            properties:
              result:
                type: string
                enum:
                  - matched
                  - mismatched
                  - not_compared
                description: 当规则为 `NONE` 或任一方该字段均无值时为 `not_compared`。
              strictness:
                type: string
                enum:
                  - NONE
                  - STRICT
                  - CONTAINS
                  - DEFAULT
                  - FUZZY
    TravelRuleDataUnmasked:
      type: object
      nullable: true
      description: 交易对手数据解除掩码时刻的审计记录。当数据仍处于掩码状态时以及出站转账时为 null。
      properties:
        at:
          type: string
          format: date-time
        reason:
          type: string
          enum:
            - ownership_confirmed
            - wallet_proof
            - address_book_match
            - own_verified_wallet
            - inquiry_approved
            - known_payment_method
            - travel_address
          description: >-
            确认股权结构的依据：ownership_confirmed（您通过控制台或 API
            进行的确认）、wallet_proof（小组件中的钱包证明，或在创建时设置的 INTERNAL
            入站转账）、address_book_match（已验证的地址簿钱包）、own_verified_wallet（您的用户本人的已验证钱包）、inquiry_approved（您对入站
            TRP 问讯或 GTR 或 Sygna 消息的批准）、known_payment_method（您的用户已用于付款的钱包）或
            travel_address（按钱包分配的 Travel Address 指定了该钱包）。
        actor:
          type: string
          description: 确认此项的主体：控制台用户的邮箱或 API 密钥的标签。自动决策时为空白。
    TravelRuleDelivery:
      type: object
      description: >-
        该转账应发送给对方的最新消息所处的状态。Didit
        会在创建或修改转账的请求返回后联系交易对手，因此该对象显示该消息是否成功送达：已排队（queued）、正在发送（being
        sent）、出错后等待重试（waiting to be retried after an
        error）、已投递（delivered）或已失败（failed）。网络仍可能恢复的故障（超时未响应、连接失败、HTTP `408`、`429`
        或 `5xx`）会在 30 秒、2 分钟、10 分钟、30 分钟和 1 小时后再次重试。当首条消息（`kind:
        SEND`）彻底失败（因为网络拒绝或第 6 次尝试也失败）时，转账状态将变为
        `COUNTERPARTY_VASP_NOT_REACHABLE`，并在其 `timeline` 中记录
        `last_error`；任何其他彻底失败的消息也会在 `timeline` 中标明。转账的 `status` 始终是交易本身的真实事实来源。
      required:
        - kind
        - status
        - rail
        - attempts
        - last_error
        - next_attempt_at
        - delivered_at
      properties:
        kind:
          type: string
          enum:
            - SEND
            - ANSWER
            - TXID
            - CANCEL
            - POLL
          description: >-
            该消息携带的内容。`SEND`：发送给交易对手的首条转账消息（出站；在发送时选择通道）。`ANSWER`：您对发起请求的网络做出的接受或拒绝（入站）。`TXID`：完成转账后的链上交易哈希。`CANCEL`：取消操作（在您取消转账之后）。`POLL`：向支持状态查询的网络发起的查询请求，在转账等待交易对手期间每
            5 分钟重复一次。
        status:
          type: string
          enum:
            - QUEUED
            - SENDING
            - RETRYING
            - DELIVERED
            - FAILED
          description: >-
            `QUEUED`：等待发送。`SENDING`：正在尝试发送。`RETRYING`：尝试失败，下一次尝试将在
            `next_attempt_at` 运行。`DELIVERED`：对方已接收消息。`FAILED`：对方拒绝接收，或最后一次尝试失败。
        rail:
          type: string
          enum:
            - INTERNAL
            - TRP
            - GTR
            - TRUST
            - VERIFYVASP
            - SYGNA
            - EMAIL
            - ''
          description: 承载该消息的通道。在 Didit 为第一条消息选定通道之前为空。
        attempts:
          type: integer
          minimum: 0
          description: 截至目前针对该消息进行的尝试次数。非状态轮询的消息最多尝试 6 次。
        last_error:
          type: string
          description: >-
            上次尝试遇到的失败类型，无失败时为 `""`：例如 `email undeliverable`、`trp identity
            endpoint unreachable` 或 `trp transfer inquiry delivery
            failed`。它从不包含交易对手自身的回复，后者保留在转账的 `timeline` 中。

            当 GTR 回复错误时，会包含其自身的状态码和消息。绝不包含响应体。
          example: email undeliverable
        next_attempt_at:
          type: string
          format: date-time
          nullable: true
          description: 当消息处于 `QUEUED` 或 `RETRYING` 状态时，下一次尝试运行的时间。
        delivered_at:
          type: string
          format: date-time
          nullable: true
          description: 对方接收消息的时间。
    TravelRuleDiscoveryStep:
      type: object
      description: Didit 为出站转账执行的交易对手发现中的一个步骤，按执行顺序排列。第一个指定了具有可用路由的 VASP 的步骤将终止链条。
      properties:
        step:
          type: string
          enum:
            - internal_address_book
            - wallet_attribution
            - network_lookup
            - customer_hint
            - end_user
          description: >-
            `internal_address_book`：已证明拥有目标钱包控制权的另一位 Didit
            客户。`wallet_attribution`：钱包的区块链分析归属。`network_lookup`：能够辨明持有该地址之 VASP
            的网络。`customer_hint`：您在 `beneficiary_data` 中发送的 VASP 名称、LEI
            或司法管辖区。`end_user`：终端用户（或您）选择的交易对手，或选择交易对手的请求。
        outcome:
          type: string
          enum:
            - match
            - miss
            - skipped
          description: '`match`：该步骤指明了交易对手。`miss`：已运行但未找到。`skipped`：无法运行，`reason` 说明了原因。'
        reason:
          type: string
          description: >-
            机器可读的原因，匹配时为
            `""`：`no_proven_internal_wallet`、`attribution_disabled`、`already_attributed`、`no_attributed_entity`、`directory_match_no_route`、`gtr_address_lookup_runs_on_dispatch`、`no_membership`、`network_switched_off`、`no_network_address_lookup`、`no_directory_match`、`awaiting_end_user`
            或 `picked_member_without_proven_wallet`。
        vasp:
          type: string
          format: uuid
          nullable: true
          description: 步骤中指定的目录 VASP（若有指定）。
        rail:
          type: string
          nullable: true
          description: 该步骤找到的、可触达该交易对手的通道。
        at:
          type: string
          format: date-time
    TravelRuleNextAction:
      type: object
      description: >-
        推动处于 `COUNTERPARTY_VASP_NOT_FOUND` 或 `COUNTERPARTY_VASP_NOT_REACHABLE`
        状态的转账继续进行的一项操作。请参阅[转账卡住的原因](/zh/transaction-monitoring/travel-rule#为什么转账会卡住)。
      properties:
        action:
          type: string
          enum:
            - select_counterparty_vasp
            - declare_self_hosted
            - add_vasp_hint
            - update_compliance_email
            - resend
          description: >-
            `select_counterparty_vasp`：终端用户在钱包所有权组件中选择目标 VASP，或者您通过 PATCH 传入
            `action=beneficiary_vasp`。`declare_self_hosted`：终端用户在组件中声明该钱包为自托管钱包。`add_vasp_hint`：通过
            VASP 名称、LEI 或 Travel Address（例如目标钱包地址簿条目上的 `travel_address`）告知 Didit
            交易对手是谁，然后重新发送。`update_compliance_email` 和 `resend` 是 `PATCH
            /v3/transactions/{transaction_id}/travel-rule/` 的 `action`
            取值：再次提供交易对手的合规邮箱，并重新运行路由。
        url:
          type: string
          format: uri
          description: >-
            钱包所有权小组件链接，当转账拥有开启的小组件会话时，出现在 `select_counterparty_vasp` 和
            `declare_self_hosted` 状态下。
      required:
        - action
    TravelRuleChainDetails:
      type: object
      description: >-
        当转账涉及的不止是一个地址向另一个地址付款时，该交易所在区块链对其两个钱包的命名方式。对于账户模型区块链上的转账（EVM、Solana、Tron），由于两个地址本身就是钱包，因此该字段为空（`{}`）。匹配、路由和地址簿会优先从此字段读取钱包信息。
      properties:
        chain:
          type: string
          description: 规范链，例如 `BTC`、`XRP`，或用于闪电网络转账的 `LIGHTNING`。
        shape:
          type: string
          enum:
            - utxo
            - memo
            - lightning
        originator:
          $ref: '#/components/schemas/TravelRuleChainSide'
        beneficiary:
          $ref: '#/components/schemas/TravelRuleChainSide'
        utxo:
          type: object
          description: 在 UTXO 转账中：存储的输入和输出（金额为十进制字符串）以及 Didit 将哪些输出读取为何种内容。
          properties:
            inputs:
              type: array
              items:
                $ref: '#/components/schemas/TravelRuleUtxoEntry'
            outputs:
              type: array
              items:
                $ref: '#/components/schemas/TravelRuleUtxoEntry'
            change_output_indexes:
              type: array
              items:
                type: integer
              description: 向输入地址回款的输出。
            beneficiary_output_index:
              type: integer
              nullable: true
              description: 向收款人付款的输出；若无法明确区分则为 null。
        lightning:
          type: object
          description: >-
            在 Lightning 转账中：付款请求的内容。始终包含
            `kind`（`bolt11`、`bolt12_offer`、`bolt12_invoice`、`bolt12_invoice_request`、`lnurl`、`lightning_address`、`node_id`
            或 `unknown`）；BOLT11 发票会附加
            `network`、`payee_node_id`、`payment_hash`、`amount_msat`、`created_at`
            和 `expires_at`；BOLT12 字符串附加 `blinded_paths` 和 `payee_node_id`；LNURL
            或 Lightning Address 附加其 `domain`。不会通过网络解析任何内容：仅对请求进行解码。
          additionalProperties: true
        warnings:
          type: array
          items:
            type: string
            enum:
              - declared_originator_not_an_input
              - declared_beneficiary_not_an_output
              - beneficiary_output_ambiguous
              - beneficiary_output_amount_differs
          description: >-
            值得关注的 UTXO
            不一致性：声明的汇款人不是输入、声明的收款人不是输出、无法区分出单一的收款人输出，或收款人输出支付的金额与交易声明的不一致。
        not_applicable_reason:
          type: string
          enum:
            - LIGHTNING_NO_PAYEE_IDENTIFIER
            - LIGHTNING_BOLT12_BLINDED_PAYEE
            - LIGHTNING_LNURL_NAMES_NO_PAYEE
          description: >-
            在未指明收款人的出站 Lightning 转账中：转账为何为
            `NOT_APPLICABLE`。`LIGHTNING_NO_PAYEE_IDENTIFIER`（请求未指明收款人节点，或无法解码）、`LIGHTNING_BOLT12_BLINDED_PAYEE`（报价通过盲化路径隐藏了收款人）、`LIGHTNING_LNURL_NAMES_NO_PAYEE`（LNURL
            指明的是服务而非收款人）。相同的代码会打开转账的最后一条 `timeline` 条目。
    TravelRuleChainSide:
      type: object
      description: Didit 根据链上数据解析出的其中一方钱包。
      properties:
        address:
          type: string
          description: >-
            钱包。在 memo 网络上为经典地址（XRP X-address 会被拆分为其经典地址和标签）；在闪电网络上为收款人节点 ID
            或闪电网络地址。
        memo:
          type: string
          description: 作为钱包一部分的目标标签或 memo；无则为 `""`。
        source:
          type: string
          enum:
            - declared
            - x_address
            - largest_input
            - only_non_change_output
            - amount_match
            - invoice_payee
            - updated
          description: >-
            钱包来源：`declared`（您的请求）、`x_address`（从 XRP X-address
            拆分）、`largest_input`（贡献最大的 UTXO 输入地址）、`only_non_change_output`（唯一的非找零
            UTXO 输出）、`amount_match`（支付转账金额的那个 UTXO
            输出）、`invoice_payee`（闪电网络付款请求中指定的收款人）、`updated`（稍后通过 `action:
            update_originator_wallet` 设置）。
    TravelRuleUtxoEntry:
      type: object
      description: UTXO 交易的一个输入或输出，与区块链上记录的一致。
      required:
        - address
      properties:
        address:
          type: string
          maxLength: 128
        amount:
          type: string
          nullable: true
          description: 以代币自身为单位的十进制字符串（BTC，而非聪）。可选。
          example: '0.0125'
        txid:
          type: string
          maxLength: 128
          description: 可选。输入所花费的交易。
        vout:
          type: integer
          nullable: true
          minimum: 0
          description: 可选。输入所花费的输出索引。
  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.