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

# 거래 모니터링 응답 스키마 | KYT 페이로드 참조

> Didit 거래 응답 주석 예시: 점수, 규칙 실행, 당사자, 기기 및 IP 분석, 암호화폐 스크리닝, Travel Rule. 월 1,000건 포함, 이후 건당 $0.001.

이 페이지는 `POST /v3/transactions/`와 `GET /v3/transactions/{transaction_id}/`가 반환하는 전체 페이로드를 설명합니다. 두 엔드포인트는 동일한 `TransactionDetail` 객체를 반환합니다. 필드별 스키마는 [API 레퍼런스](https://docs.didit.me/ko/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`는 뒤쪽 0을 제거한 10진수 문자열이며(`"1500"`, `"0.5"`), 소수점 이하 최대 18자리까지 허용합니다.
* `currency_type`: `currency_kind`로 제출된 `fiat` 또는 `crypto`입니다. 생략된 경우 `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/ko/integration/sandbox-testing.md#샌드박스의-거래-모니터링)을 참조하십시오.
* `source`: API 또는 SDK로 제출된 거래는 `LIVE`, 콘솔의 CSV 가져오기로 불러온 거래는 `IMPORTED`입니다.

### 당사자

거래의 모든 당사자는 `parties`의 항목입니다. 생성 endpoint는 대상을 `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 정보 보강 결과를 더한 것입니다. 요청에 기기 컨텍스트가 없으면 `{}`입니다. 따라서 모든 키를 선택 사항으로 취급하십시오.

| Key | Description |
| - | - |
| `fingerprint`, `persistent_device_id` | 제출된 기기 식별자입니다. |
| `user_agent`, `browser_family`, `browser_version`, `platform`, `os_family`, `os_version` | 제출된 브라우저 및 OS 속성입니다. `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/ko/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가 없거나 라우팅할 수 없는 경우, 애플리케이션이 샌드박스에 있는 경우, 또는 해석에 실패한 경우입니다. `ip_country_code`는 Didit이 해석한 경우 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`. 생성 endpoint는 `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`: 이 실행이 기여한 값입니다. `status_target`은 `change_status` 작업이 실행되었거나, 추가된 점수가 [임계값](https://docs.didit.me/ko/transaction-monitoring/risk-scoring.md)을 넘었을 때 설정됩니다.
* `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/ko/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/ko/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/ko/transaction-monitoring/wallet-screening.md#위험-요인)을 확인하세요. 이 필드가 도입되기 전에 스크리닝된 결과에는 이 키가 없습니다.

암호화폐 거래 해시 스크리닝의 경우, 온체인 보강 정보를 사용할 수 있으면 `transaction_flows`가 채워집니다. 체인 활동을 정규화하여 콘솔이 같은 응답 페이로드에서 거래 개요와 시각화 그래프를 모두 렌더링할 수 있도록 합니다.

지원되는 보강 소스는 다음과 같습니다.

* 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/ko/transaction-monitoring/travel-rule.md)이 활성화되어 있고 거래가 `transaction_category: "travelRule"`로 생성된 경우에도 값이 채워집니다. 이때 Didit이 `travel_rule_details` 유무와 관계없이 교환을 직접 시작하고, 그 `status`를 여기에 보고합니다. 보낸 요청이 아니라 이 필드를 읽으세요.
수신 전송의 경우, 지갑 소유권이 확인되기 전까지 거래 상대방의 `originator_data`와 `beneficiary_data`는 마스킹된 상태(`data_masked: true`)로 유지됩니다([마스킹된 거래 상대방 데이터](https://docs.didit.me/ko/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/ko/transaction-monitoring/travel-rule.md#전송이-멈춘-이유)를 확인하세요.
[`GET /v3/transactions/`](https://docs.didit.me/ko/management-api/transactions/list)의 각 행에도 같은 블록이 포함됩니다.

[Travel rule](https://docs.didit.me/ko/transaction-monitoring/travel-rule.md)을 참조하세요.

### 네트워크 스냅샷

참조가 아니라 저장된 그래프 자체입니다. 다음 두 가지 출처 중 하나에서 가져옵니다.

* 거래와 함께 제출한 `network_snapshot`, 또는
* 암호화폐 거래에서 [AML 지갑 스크리닝](https://docs.didit.me/ko/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` 페이로드의 스냅샷이며, 이 두 키 아래에 제출한 그대로 저장됩니다.
* `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/ko/transaction-monitoring/travel-rule.md#거래-상대방-탐색) 참조).

같은 두 필드는 `transaction.created`와 `transaction.status.updated` webhook 페이로드에도 포함됩니다(`action_required`). 자세한 내용은 [webhook](https://docs.didit.me/ko/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/ko/transaction-monitoring/transactions.md)
>
> 전체 요청 스키마입니다.

> [card] [상태](https://docs.didit.me/ko/transaction-monitoring/statuses.md)
>
> 각 상태의 의미입니다.

> [card] [위험 점수 산정](https://docs.didit.me/ko/transaction-monitoring/risk-scoring.md)
>
> 점수가 계산되는 방식입니다.


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