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

# 交易监控响应结构：交易 Payload 参考

> Didit 交易监控响应的注释示例：风险评分、规则运行、交易方、设备与 IP 分析、钱包筛查、Travel Rule。每月包含 1,000 次，之后每次 $0.001。

本页介绍 `POST /v3/transactions/` 和 `GET /v3/transactions/{transaction_id}/` 返回的完整 payload。两个端点返回的是同一个 `TransactionDetail` 对象；[API 参考](https://docs.didit.me/zh/management-api/transactions/get.md)包含逐字段的架构说明，本页将逐一介绍。

## 顶层结构

```json theme={null}
{
  "uuid": "abcdef12-3456-4890-abcd-ef1234567890",
  "environment": "live",
  "transaction_number": 4123,
  "txn_id": "tx-0001",
  "txn_date": "2026-04-16T12:00:00Z",
  "zone_id": "Europe/Madrid",
  "transaction_type": "finance",
  "action_type": "withdrawal",
  "direction": "OUTBOUND",
  "status": "IN_REVIEW",
  "source": "LIVE",
  "amount": "12500",
  "currency": "EUR",
  "currency_type": "fiat",
  "amount_in_default_currency": null,
  "default_currency_code": null,
  "preferred_currency_amount": "13520.75",
  "preferred_currency_code": "USD",
  "payment_details": "Withdrawal to bank account",
  "payment_txn_id": null,
  "score": 65,
  "severity": "MEDIUM",
  "decision_reason_code": "rule_score_threshold",
  "decision_reason_label": "Score above review threshold",
  "vendor_data": "user-42",
  "metadata": { "subject": { ... }, "counterparty": { ... } },
  "props": { "order_id": "ORD-7891" },
  "tags": [ ... ],
  "parties": [ ... ],
  "payment_methods": [ ... ],
  "documents": [ ... ],
  "activities": [ ... ],
  "alerts": [],
  "rule_runs": [ ... ],
  "provider_results": [ ... ],
  "travel_rule": { ... } | null,
  "network_snapshot": { ... } | null,
  "remediation": { ... } | null,
  "action_required": { ... } | null,
  "cost_breakdown": { ... } | null
}
```

两个标识符描述同一笔交易。`uuid` 是 Didit 的稳定标识符，也是 `GET /v3/transactions/{transaction_id}/` 路径中需要传入的值；`txn_id` 是你在创建时提供的 `transaction_id`。`transaction_number` 是控制台显示的、按应用范围递增的序号。

你提交的主体和交易对手不会作为顶层键返回。它们是 `parties` 数组中的条目，通过 `role` 加以区分；顶层的 `vendor_data` 是申请人 `vendor_data` 的便捷副本。

## 关键字段

### 财务字段

* `amount` / `currency`：提交的交易金额。`amount` 为十进制字符串，去除末尾零（如 `"1500"`、`"0.5"`），最多保留 18 位小数。
* `currency_type`：`fiat` 或 `crypto`，与提交的 `currency_kind` 一致；未提交时为 `null`。
* `amount_in_default_currency` / `default_currency_code`：您在请求中提供的预换算金额，原样回传；未发送时为 `null`。
* `preferred_currency_amount` / `preferred_currency_code`：`amount` 按您应用的首选货币换算后的金额。当 `currency` 没有可用汇率，且您也未提交 `amount_in_default_currency` 时为 `null`。
* `payment_details` / `payment_txn_id`：请求中的自由文本付款备注，以及外部付款参考（例如区块链交易哈希）。

### 状态字段

* `status`：`APPROVED`、`IN_REVIEW`、`DECLINED`、`AWAITING_USER`。交易创建时为 `APPROVED`；规则可能同步修改其状态。
* `score`：规则累计得出的整数风险分数。数值越高，风险越大。
* `severity`：`UNKNOWN`、`LOW`、`MEDIUM`、`HIGH`、`CRITICAL`，或在规则或服务商设置之前为 `null`。
* `decision_reason_code` / `decision_reason_label`：当前状态的结构化原因和人类可读原因。
* `environment`：`live` 或 `sandbox`，取自拥有该交易的应用。`sandbox` 交易会被存储但不会被评估，因此其空的 `rule_runs` 表示“未评估”，而非“没有任何规则命中”。参见[沙盒中的交易监控](https://docs.didit.me/zh/integration/sandbox-testing.md#沙盒中的交易监控)。
* `source`：`LIVE` 表示通过 API 或 SDK 提交的交易，`IMPORTED` 表示通过控制台 CSV 导入加载的交易。

### 参与方

交易中的每个参与方都是 `parties` 中的一个条目。创建接口将交易主体记录为 `APPLICANT`，可选的交易对手记录为 `COUNTERPARTY`；`role` 枚举还包括 `REMITTER` 和 `BENEFICIARY`。所有条目的结构相同。

```json theme={null}
"parties": [
  {
    "uuid": "b1111111-2222-4333-8444-555555555555",
    "role": "APPLICANT",
    "entity_type": "individual",
    "kind": "USER",
    "vendor_data": "user-42",
    "full_name": "John Doe",
    "first_name": "John",
    "last_name": "Doe",
    "country_code": "USA",
    "dob": "1990-01-01",
    "address": { "line_1": "...", "city": "...", "country": "USA" },
    "institution_info": { "name": "...", "country_code": "..." },
    "device": {
      "fingerprint": "...",
      "persistent_device_id": "...",
      "user_agent": "...",
      "browser_family": "Chrome",
      "browser_version": "131.0",
      "platform": "web",
      "os_family": "Windows",
      "os_version": "10.0",
      "accept_language": "en-US,en;q=0.9",
      "session_id": "...",
      "session_age_ms": 84000,
      "metadata": {
        "accept_language": "en-US,en;q=0.9",
        "session_id": "...",
        "session_age_ms": 84000
      },
      "network_context": {
        "ip_address": "203.0.113.5",
        "ip_country": "United States",
        "ip_country_code": "US",
        "ip_state": "California",
        "ip_city": "San Francisco",
        "latitude": 37.7749,
        "longitude": -122.4194,
        "isp": "Example ISP",
        "organization": "Example Org",
        "is_vpn_or_tor": false,
        "is_data_center": false,
        "time_zone": "America/Los_Angeles",
        "time_zone_offset": "-0700",
        "asn_number": 64496,
        "asn_organization": "Example ISP",
        "connection_type": "isp",
        "carrier": null,
        "proxy_type": null
      }
    },
    "external_party_snapshot": null
  },
  {
    "uuid": "c2222222-3333-4444-8555-666666666666",
    "role": "COUNTERPARTY",
    "entity_type": "company",
    "kind": "EXTERNAL",
    "vendor_data": null,
    "full_name": "Acme Supplier",
    "first_name": null,
    "last_name": null,
    "country_code": "GBR",
    "dob": null,
    "address": {},
    "institution_info": {},
    "device": {},
    "external_party_snapshot": { "full_name": "Acme Supplier", "country": "GBR", "...": "..." }
  }
]
```

* `role`：`APPLICANT`、`COUNTERPARTY`、`REMITTER`、`BENEFICIARY`。可按此字段筛选以找到交易主体。
* `entity_type`：`individual`、`company`、`external`、`unhostedWallet`，按提交时的原样。
* `kind`：当参与方通过 `vendor_data` 关联到 Didit 用户或企业时为 `USER` 或 `BUSINESS`；否则为 `EXTERNAL`。
* `country_code` / `dob`：来自提交的 `address.country` 和 `date_of_birth`。
* `address` / `institution_info`：提交时的对象原样保存；未提交时为 `{}`。
* `external_party_snapshot`：`EXTERNAL` 参与方的参与方数据冻结副本；参与方已关联到 Didit 用户或企业时为 `null`。

#### `device`

`device` 是您为该参与方提交的 `device_context`，已规范化为 snake\_case，并附加服务端 IP 富化信息。请求未包含设备上下文时为 `{}`，因此请始终将每个键都视为可选。

| 键 | 说明 |
| - | - |
| `fingerprint`、`persistent_device_id` | 提交的设备标识符。 |
| `user_agent`、`browser_family`、`browser_version`、`platform`、`os_family`、`os_version` | 提交的浏览器和操作系统属性。`browser_family` 和 `platform` 绝不会从 `user_agent` 推导。 |
| `accept_language`、`session_id`、`session_age_ms` | 提交的会话属性。这些属性也会以相同名称镜像到 `device.metadata` 中，SDK 路径会将这些属性存储于此。 |
| `metadata` | 当请求包含 `metadata` 对象或上述三个会话属性之一时存在。 |
| `network_context` | 网络上下文，见下文。未提交 IP 或网络数据时不存在。 |

没有单独的富化对象。当参与方提交了公网 `network_context.ip_address` 时，Didit 会直接在原对象中解析该地址，并将[富化字段](https://docs.didit.me/zh/transaction-monitoring/ip-enrichment.md#富化字段)写入同一个 `network_context` 对象，且只填充您未提交的键。解析器返回为空的键会被省略，因此完整富化的 `network_context` 包含四个提交的键（`ip_address`、`ip_country_code`、`latitude`、`longitude`），以及成功解析出的 `ip_country`、`ip_state`、`ip_city`、`isp`、`organization`、`is_vpn_or_tor`、`is_data_center`、`time_zone`、`time_zone_offset`、`asn_number`、`asn_organization`、`connection_type`、`carrier` 和 `proxy_type` 中的部分或全部。成功解析后，`is_vpn_or_tor` 和 `is_data_center` 始终存在。

以下情况会跳过富化，`network_context` 将按提交时的原样返回：IP 缺失或不可路由、应用处于沙盒环境，或解析失败。Didit 解析成功时，`ip_country_code` 为 ISO 3166-1 alpha-2 代码；否则为您提交的值。规则条件在比较前会将两种形式统一规范化。

### 支付方式

```json theme={null}
"payment_methods": [
  {
    "uuid": "...",
    "payment_method_type": "bank_account",
    "label": null,
    "fingerprint": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",
    "account_id": "DE89370400440532013000",
    "issuing_country": "DE",
    "owner_kind": "USER",
    "vendor_data": "user-42",
    "owner_name": "John Doe",
    "institution_info": {},
    "details": { "method_type": "bank_account", "account_id": "DE89370400440532013000", "issuing_country": "DE" },
    "external_owner_snapshot": null,
    "role": "SOURCE"
  }
]
```

* `role`：`SOURCE`、`DESTINATION`、`FUNDING`、`BENEFICIARY`。创建接口根据 `direction` 分配 `SOURCE` / `DESTINATION`：在转出交易中，交易主体的支付方式为 `SOURCE`，交易对手的为 `DESTINATION`；转入时则相反。
* `payment_method_type`：`bank_card`、`bank_account`、`e_wallet`、`crypto_wallet`、`unhosted_wallet`、`other`。
* `fingerprint`：对 `type:account_id:issuing_country` 计算的 SHA-256，在不同交易间保持稳定，便于您关联同一支付工具的重复使用。未提交 `account_id` 时为 `null`。
* `owner_kind` / `vendor_data` / `owner_name`：支付工具的所有者信息，遵循与参与方相同的 `USER` / `BUSINESS` / `EXTERNAL` 约定。
* `details`：提交时的原始 `payment_method` 对象。

### 规则运行记录

```json theme={null}
"rule_runs": [
  {
    "uuid": "...",
    "rule": "f6a7b8c9-0123-4def-b012-3456789abcde",
    "rule_title": "High-value outbound",
    "rule_description": null,
    "rule_category": "finance",
    "matched": true,
    "is_test": false,
    "mode": "ACTIVE",
    "severity": "MEDIUM",
    "score_delta": 30,
    "status_target": null,
    "action_summary": "score +30",
    "metadata": {
      "scope_match": true,
      "conditions": [
        {
          "field": "amount",
          "operator": "gt",
          "expected_value": "10000",
          "current_value": "12500",
          "matched": true,
          "group_index": null,
          "group_logic": "AND",
          "field_source": null
        }
      ],
      "aggregations": []
    },
    "created_at": "2026-04-16T12:00:01Z"
  },
  {
    "uuid": "...",
    "rule": "...",
    "rule_title": "High-risk jurisdiction counterparty",
    "rule_description": null,
    "rule_category": "finance",
    "matched": true,
    "is_test": false,
    "mode": "ACTIVE",
    "severity": "HIGH",
    "score_delta": 35,
    "status_target": "IN_REVIEW",
    "action_summary": "score +35; change_status:IN_REVIEW; add_tag:high_risk_country",
    "metadata": { "scope_match": true, "conditions": [ ... ], "aggregations": [] },
    "created_at": "2026-04-16T12:00:01Z"
  }
]
```

* `rule`：运行规则的 UUID；`rule_title`、`rule_description`、`rule_category` 均从该规则复制而来。
* `matched`：只有当规则的条件命中时才会记录运行，因此生产环境评估始终带有 `matched: true`。评估后未命中的规则不会留下记录。演示数据中可能包含 `matched: false` 的记录。
* `is_test` / `mode`：规则以测试模式运行时为 `true` 和 `TEST`；测试运行会被记录，但不会影响 `status`、`score` 或 `severity`。
* `score_delta` / `status_target` / `severity`：本次运行所贡献的内容。当执行了 `change_status` 操作，或新增分数超过[阈值](https://docs.didit.me/zh/transaction-monitoring/risk-scoring.md)时，会设置 `status_target`。
* `action_summary`：规则所执行操作的字符串摘要，各项以 `; ` 连接（`score +30`、`change_status:IN_REVIEW`、`add_tag:<name>`、`add_note`、`add_to_list`、`open_case`）；规则未执行任何操作时为 `null`。
* `metadata`：评估详情，包括 `scope_match`，以及 `conditions[]` 和 `aggregations[]`。这两个列表使用不同的值键：
  * `conditions[]`：每个条件一个条目，包含 `field`、`operator`、`expected_value`、从交易中读取的 `current_value`、`matched`、`group_index` 和 `group_logic`。在交易规则运行中，`field_source` 始终为 `null`；仅在[监控事件](https://docs.didit.me/zh/transaction-monitoring/events.md)中才会对其进行分类。
  * `aggregations[]`：每个频次 / 计数 / 求和聚合一个条目，包含 `metric`、`field`、`operator`、`expected_value`、聚合计算得出的 `computed_value`、`window`、`filters`、`matched` 和 `sample_references`。只能异步计算的聚合会携带 `computed_value: null` 和 `deferred: true`。

### 警报

`alerts` 目前始终为空数组。
未关闭的警报表示交易已被挂起，因此请改为读取 `status`（`IN_REVIEW` 或 `AWAITING_USER`）。参见 [警报](https://docs.didit.me/zh/transaction-monitoring/alerts.md)。

### 活动

交易的活动日志：创建、备注、人工审核和状态变更。

```json theme={null}
"activities": [
  {
    "uuid": "...",
    "activity_type": "TRANSACTION_CREATED",
    "source": "TRANSACTION",
    "status": "APPROVED",
    "title": "withdrawal",
    "description": null,
    "metadata": { "action_type": "withdrawal", "direction": "OUTBOUND", "amount": "12500", "currency": "EUR" },
    "occurred_at": "2026-04-16T12:00:00Z"
  }
]
```

分析师备注以 `TRANSACTION_NOTE_ADDED` 条目的形式出现在此处，没有单独的 `notes` 数组。

### 文件

从控制台附加到交易的文件。没有文件时为 `[]`。

```json theme={null}
"documents": [
  {
    "uuid": "...",
    "label": "Invoice",
    "note": null,
    "uploaded_by": "...",
    "created_at": "2026-04-16T12:05:00Z",
    "files": [
      { "uuid": "...", "file_url": "https://...", "original_filename": "invoice.pdf", "file_size": 48213 }
    ]
  }
]
```

`file_url` 是短期有效的签名 URL；需要时再获取，请勿将其存储下来。

### 供应商结果

外部供应商的输出（交易哈希筛查、钱包筛查、法币监控、制裁筛查）。

```json theme={null}
"provider_results": [
  {
    "uuid": "...",
    "result_type": "TRANSACTION_SCREENING",
    "provider": "merklescience",
    "status": "SCREENED",
    "severity": "HIGH",
    "score": 82,
    "summary": "Merkle Science risk: High (4/5). Dominant risk: stolen_funds. Driven by: 50% direct incoming exposure to Theft / Hack (Stolen Funds)",
    "payload": {
      "provider": "merklescience",
      "screening_type": "TRANSACTION_SCREENING",
      "transaction_hash": "0x...",
      "wallet_address": null,
      "blockchain": "ETH",
      "block_timestamp": "2026-04-01T00:07:11Z",
      "total_value_usd": 2942.31,
      "fee_usd": 0.09,
      "transaction_flows": [
        {
          "flow_type": "token",
          "from_address": "0x...",
          "to_address": "0x...",
          "amount": 72.83039728,
          "amount_usd": 235.97,
          "currency": "UNI",
          "token_name": "Uniswap",
          "token_address": "0x1f9840a85d5af5bf1d1762f925bdaddc4201f984",
          "transaction_hash": "0x...",
          "block_timestamp": "2026-04-01T00:07:11Z",
          "index": 460,
          "success": true,
          "metadata": {
            "provider": "blockscout",
            "token_type": "ERC-20",
            "token_icon_url": "https://...",
            "token_reputation": "ok",
            "token_holders_count": "410093",
            "from": {
              "label": "ravaga.eth",
              "tags": [{ "name": "Beacon Depositor", "type": "generic" }]
            },
            "to": {
              "label": "AirSwap: Spender",
              "is_contract": true,
              "is_verified": true
            }
          }
        }
      ],
      "source_of_funds": [
        {
          "category": "stolen_funds",
          "entity_name": "Stolen Funds",
          "entity_type": "Theft",
          "entity_subtype": "Hack",
          "exposure_direction": "incoming",
          "exposure_type": "direct",
          "is_direct": true,
          "amount_usd": 1471.16,
          "percentage": 50,
          "country": ""
        }
      ],
      "destination_of_funds": [],
      "counterparty_connections": [],
      "sanctions_hit": false,
      "risk_factors": [
        {
          "source": "exposure",
          "category": "stolen_funds",
          "label": "Theft / Hack",
          "entity_name": "Stolen Funds",
          "direction": "incoming",
          "exposure_type": "direct",
          "amount_usd": 1471.16,
          "percentage": 50,
          "is_high_risk": true,
          "description": "50% direct incoming exposure to Theft / Hack (Stolen Funds)"
        }
      ],
      "raw_response": { "...": "provider-specific details" }
    },
    "created_at": "2026-04-16T12:00:02Z"
  }
]
```

`result_type`：`FIAT_MONITORING`、`WALLET_SCREENING`、`TRANSACTION_SCREENING`、`TRAVEL_RULE`、`NETWORK_GRAPH`、`CUSTOM`。

`payload.risk_factors` 是对 `score` 的排序解释，说明得出该结论的原因：风险较高的驱动因素排在前面，其次按涉及的转移价值排序。如果 `score` 较高但没有 `is_high_risk` 条目，说明供应商是依据其自身的风险敞口模型对该实体进行评级的，并未报告制裁或已归属实体的匹配；`summary` 会明确说明这一点。逐字段说明参见 [风险因素](https://docs.didit.me/zh/transaction-monitoring/wallet-screening.md#风险因素)。在该字段推出之前筛查的结果不包含此键。

对于加密货币交易哈希筛查，链上数据补充可用时会填充 `transaction_flows`。它会对链上活动进行标准化处理，使控制台能够基于同一响应 payload 同时渲染交易概览和可视化图谱。

支持的数据补充来源：

* EVM 链使用 Blockscout 标准化主交易、内部调用和代币转账。
* Bitcoin 使用 mempool.space 标准化交易输入和输出。
* Solana 使用 Helius 标准化原生 SOL 转账、SPL 代币转账，以及可用的 NFT 事件上下文。

每个 `transaction_flows[]` 条目都包含稳定的标准化字段（`flow_type`、`from_address`、`to_address`、`amount`、`amount_usd`、`currency`、`token_name`、`token_address`、`transaction_hash`、`block_timestamp`、`index`、`success`），以及特定于供应商的 `metadata`。

常见的 `metadata` 示例：

```json theme={null}
{
  "provider": "blockscout",
  "decoded_method_call": "swap(string aggregatorId, address tokenFrom, uint256 amount, bytes data)",
  "block_number": 23141214,
  "gas_used": "171843",
  "fee_native": 0.000342317619518133,
  "token_icon_url": "https://...",
  "token_reputation": "ok"
}
```

```json theme={null}
{
  "provider": "mempool",
  "role": "input",
  "previous_txid": "4c0c...",
  "previous_vout": 0,
  "scriptpubkey_type": "v0_p2wpkh",
  "fee_btc": 0.00000322,
  "block_height": 943130
}
```

```json theme={null}
{
  "provider": "helius",
  "source": "MAGIC_EDEN",
  "type": "NFT_BID",
  "description": "Wallet bid 2.5 SOL on an NFT.",
  "slot": 136658192,
  "fee_sol": 0.000005,
  "nft_event": {
    "type": "NFT_BID",
    "source": "MAGIC_EDEN",
    "nft_mints": ["3bUW..."]
  }
}
```

`metadata` 是可追加的，且因供应商而异。请勿构建关键集成，使其要求每条链都必须包含所有键。

### Travel Rule

当交易没有 Travel Rule 转账或检查时，此字段为 `null`。当您提交 `travel_rule_details` 时会填充此字段；当应用已启用 [Travel Rule](https://docs.didit.me/zh/transaction-monitoring/travel-rule.md) 且交易以 `transaction_category: "travelRule"` 创建时，同样会填充此字段：此时 Didit 会自行发起交换，无论是否提供 `travel_rule_details`，并在此处报告其 `status`。请读取此字段，而不是您发送的请求。
对于入站转账，交易对手的 `originator_data` 和 `beneficiary_data` 在钱包所有权确认之前保持脱敏（`data_masked: true`）（参见 [脱敏的交易对手数据](https://docs.didit.me/zh/transaction-monitoring/travel-rule.md#脱敏的交易对手数据)）。

```json theme={null}
"travel_rule": {
  "uuid": "...",
  "status": "COMPLETED",
  "required": true,
  "protocol": "TRP",
  "obligations_count": 2,
  "originator_data": { "name": "...", "wallet_address": "..." },
  "beneficiary_data": { "name": "...", "wallet_address": "..." },
  "metadata": {},
  "direction": "OUTBOUND",
  "rail": "TRP",
  "counterparty_vasp": null,
  "delivery": {
    "kind": "SEND",
    "status": "DELIVERED",
    "rail": "TRP",
    "attempts": 1,
    "last_error": "",
    "next_attempt_at": null,
    "delivered_at": "..."
  },
  "discovery": [ ... ],
  "reason": "",
  "next_actions": []
}
```

`direction`、`rail`、`counterparty_vasp`、`delivery`、`discovery`、`reason` 和 `next_actions` 的结构与转账端点中的相同。
`reason` 和 `next_actions` 说明 `COUNTERPARTY_VASP_NOT_FOUND` 或 `COUNTERPARTY_VASP_NOT_REACHABLE` 转账卡住的原因以及推动其继续的方法；对于其他任何状态，二者分别为 `""` 和 `[]`。参见 [转账卡住的原因](https://docs.didit.me/zh/transaction-monitoring/travel-rule.md#为什么转账会卡住)。
[`GET /v3/transactions/`](https://docs.didit.me/zh/management-api/transactions/list) 的每一行都包含相同的数据块。

参见 [Travel Rule](https://docs.didit.me/zh/transaction-monitoring/travel-rule.md)。

### 网络快照

存储的图谱本身，而不是对它的引用。它来自以下任一来源：

* 您随交易提交的 `network_snapshot`，或
* 加密交易的 [AML 钱包筛查](https://docs.didit.me/zh/transaction-monitoring/aml-screening.md) 成功时 Didit 构建的图谱，即使请求中未携带 `network_snapshot` 也是如此。由筛查构建的图谱会替换已提交的图谱，异步重新筛查会刷新它。

两者都不存在时为 `null`：

```json theme={null}
"network_snapshot": {
  "uuid": "...",
  "nodes": [ ... ],
  "edges": [ ... ],
  "metrics": { }
}
```

控制台交易详情页面渲染的是同一图谱。

### 标签、元数据、props

* `tags[]`：已附加的标签（通过规则操作或由分析师添加）：`{ "uuid", "name", "color", "description", "source" }`，其中 `source` 为 `didit` 表示预设标签，为 `custom` 表示您自定义的标签。
* `metadata`：创建时您提交的 `subject` 和 `counterparty` payload 的快照，位于这两个键之下。
* `props`：创建时您提供的 `custom_properties`。每个键都可以在规则条件中以 `custom_values.<key>` 的形式引用。

### 补救

当规则触发 `AWAITING_USER` 时，Didit 会创建关联的验证会话，并通过两个字段返回：

* `remediation`：关联会话：`{ "session_id", "session_token", "url", "status" }`。在交易的整个生命周期内都会保持有值，因此您始终可以查看用户操作的结束情况。
* `action_required`：用户当前必须执行的操作；没有待处理事项时为 `null`：`{ "type": "verification_session", "url", "session_id", "session_token", "status" }`。将用户重定向到 `url`，或将 `session_token` 提供给 Didit SDK。Travel Rule 钱包所有权操作使用 `{ "type": "wallet_ownership", "url", "widget_session_id", "expires_at" }`，当两种操作都可能适用时优先采用此操作。当钱包所有权操作待处理且无法找到转账的交易对手时，同一数据块还会包含 `reason` 和 `next_actions`（参见 [交易对手发现](https://docs.didit.me/zh/transaction-monitoring/travel-rule.md#交易对手发现)）。

同样的两个字段也会出现在 `transaction.created` 和 `transaction.status.updated` Webhook payload 中（`action_required`）。参见 [Webhook](https://docs.didit.me/zh/transaction-monitoring/webhooks.md)。

### 费用明细

在计费功能为该交易运行之前为 `null`。否则为 `{ "total_price", "items": [ { "usage_type", "price", "details" } ] }`，每个计量功能对应一项（如筛查、数据补充等）。

## 货币换算

`preferred_currency_amount` 是将 `amount` 按中间市场汇率换算为您应用的首选货币后得到的金额，除非您提供了 `amount_in_default_currency`，此时直接使用该预先换算的值。针对 `amount` 的规则条件比较的是原始金额。如果您需要在不同货币之间使用同一个阈值，请在条件中使用 `preferred_currency_amount`。

## 后续步骤

> [card] [提交交易](https://docs.didit.me/zh/transaction-monitoring/transactions.md)
>
> 完整的请求结构。

> [card] [状态](https://docs.didit.me/zh/transaction-monitoring/statuses.md)
>
> 每个状态的含义。

> [card] [风险评分](https://docs.didit.me/zh/transaction-monitoring/risk-scoring.md)
>
> 评分的计算方式。


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