> ## 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 거래를 조회합니다. 연결된 당사자, 결제 수단, 알림, 규칙 일치, Travel Rule 점검, 조치 링크, 네트워크 스냅샷을 확인할 수 있습니다.



거래 조회 API 프롬프트
        프롬프트를 클립보드에 복사



      
      

\<pre>

\`Fetch the full detail of a Didit monitored transaction through the Management API.

Endpoint:
GET https://verification.didit.me/v3/transactions/{transaction_id}/

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

Goal:
\- Retrieve every detail of a transaction — linked parties, payment methods, alerts, rule matches, travel-rule checks, remediation links, network snapshots, cost breakdown — so I can render a detail screen or feed a downstream decision.

Path parameter:
\- transaction_id - Didit's transaction uuid (the uuid returned by POST /v3/transactions/).
Your own txn_id is not accepted here and returns 404.

Example call:
curl -X GET "https://verification.didit.me/v3/transactions/{transaction_id}/" \
-H "x-api-key: YOUR_API_KEY"

What to read from the response:
\- uuid, transaction_number, txn_id — identifiers.
\- status, score, severity, decision_reason_code, decision_reason_label — current verdict.
\- direction, amount, currency, currency_type, action_type, payment_details, payment_txn_id - the submitted details as top-level fields (there is no transaction_details object, and currency_type carries the currency_kind you sent).
\- parties - party records with role APPLICANT (the subject) or COUNTERPARTY (the other side) and kind USER, BUSINESS or EXTERNAL, each with entity_type, vendor_data, full_name, address and device.
\- payment_methods - the linked payment methods, each with payment_method_type, account_id and role (for example SOURCE or DESTINATION).
\- cost_breakdown — provider-by-provider cost detail for this transaction.
\- rule_runs / alerts — which rules fired and their outcomes.
\- provider_results - crypto screening (blockchain analytics) results, when a screening ran.
\- travel_rule - the Travel Rule transfer (uuid, status, protocol, required, obligations_count, originator_data, beneficiary_data, metadata, direction, rail, counterparty_vasp, delivery, discovery, reason, next_actions), or null when the transaction has none.
For a COUNTERPARTY_VASP_NOT_FOUND or COUNTERPARTY_VASP_NOT_REACHABLE transfer, reason says why it is stuck and next_actions what moves it on: email_undeliverable offers update_compliance_email then resend, delivery_failed offers resend, and a discovery reason (awaiting_end_user, directory_match_no_route, picked_member_without_proven_wallet, no_directory_match) offers select_counterparty_vasp, declare_self_hosted, add_vasp_hint and resend.
delivery is the newest message the transfer owes the other side (kind, status, rail, attempts, last_error, next_attempt_at, delivered_at), or null; discovery is the trace of where Didit looked for the counterparty.
On an inbound transfer, the counterparty's originator_data and beneficiary_data stay masked (data_masked: true) until wallet ownership is confirmed.
\- tags — Console tags (uuid, name, color).
\- assigned_to_name (the Console reviewer) is not part of this response; the list endpoint GET /v3/transactions/ returns it.

Use cases:
\- Render the Console-equivalent "Transaction detail" screen in your back-office.
\- Reconcile rule outcomes against your own ledger.
\- Poll after a transaction.status.updated webhook to fetch the fresh verdict.

Failure modes:
\- 403 - missing x-api-key (a wrong, revoked or expired key gets 401), or a key without permission for this action ({ "detail": "..." } envelope).
\- 404 - transaction not found in this application, including a transaction that belongs to another application (or deleted via the Console).
\- 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 ko/openapi-25.json GET /v3/transactions/{transaction_id}/
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/{transaction_id}/:
    get:
      tags:
        - Transactions
      summary: 거래 가져오기
      description: 단일 거래의 전체 모니터링 기록(당사자, 점수/심각도, 규칙 실행, 알림, Travel Rule 결과, 조치 세션)을 조회합니다.
      operationId: getTransaction
      parameters:
        - name: transaction_id
          in: path
          required: true
          description: Didit 고유 거래 UUID(생성/조회 시 반환된 `uuid`이며, 귀하의 `txn_id`가 **아님**).
          schema:
            type: string
            format: uuid
          example: abcdef12-3456-7890-abcd-ef1234567890
      responses:
        '200':
          description: 전체 거래 세부정보입니다.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionDetail'
              examples:
                In review with an alert:
                  value:
                    uuid: abcdef12-3456-4890-abcd-ef1234567890
                    environment: live
                    transaction_number: 4123
                    txn_id: your-txn-2026-05-17-001
                    txn_date: '2026-05-17T08:42:00Z'
                    zone_id: Europe/Madrid
                    transaction_type: finance
                    action_type: withdrawal
                    direction: OUTBOUND
                    status: IN_REVIEW
                    source: LIVE
                    amount: '1500'
                    currency: EUR
                    currency_type: fiat
                    amount_in_default_currency: '1620.45'
                    default_currency_code: USD
                    preferred_currency_amount: '1620.45'
                    preferred_currency_code: USD
                    payment_details: Withdrawal to crypto wallet
                    payment_txn_id: null
                    score: 78
                    severity: HIGH
                    decision_reason_code: WALLET_HIGH_RISK
                    decision_reason_label: Destination wallet flagged as high risk
                    vendor_data: user-12345
                    metadata:
                      subject:
                        entity_type: individual
                        vendor_data: user-12345
                        full_name: Maria Garcia
                        address: {}
                        institution_details: {}
                        device_context: {}
                      counterparty: {}
                    props:
                      order_id: ord-9988
                    tags: []
                    parties:
                      - uuid: b1111111-2222-4333-8444-555555555555
                        role: APPLICANT
                        entity_type: individual
                        kind: USER
                        vendor_data: user-12345
                        full_name: Maria Garcia
                        first_name: null
                        last_name: null
                        country_code: null
                        dob: null
                        address: {}
                        institution_info: {}
                        device: {}
                        external_party_snapshot: null
                    payment_methods: []
                    documents: []
                    activities: []
                    alerts:
                      - uuid: a7b8c9d0-1234-4abc-9def-567890abcdef
                        title: Destination wallet flagged as high risk
                        description: Provider risk score exceeded the configured threshold.
                        severity: HIGH
                        status: OPEN
                        source: RULE
                        metadata: {}
                        created_at: '2026-05-17T08:42:12Z'
                        due_at: null
                    rule_runs: []
                    provider_results: []
                    travel_rule: null
                    network_snapshot: null
                    remediation: null
                    action_required: null
                    cost_breakdown: null
        '403':
          description: >-
            API 키가 누락되었거나 유효하지 않거나 폐기되었거나, 해당 키에 이 애플리케이션의 거래 정보를 읽을 수 있는 권한이
            없습니다. 누락된 키는 `403`을 반환하며, 잘못되었거나 폐기되었거나 만료된 키는 `401`을 반환합니다.
          content:
            application/json:
              examples:
                Forbidden:
                  value:
                    detail: You do not have permission to perform this action.
        '404':
          description: >-
            애플리케이션에 이 UUID를 가진 거래가 존재하지 않습니다(삭제되었거나, 생성된 적이 없거나, 다른 애플리케이션에 속해
            있거나, 경로 세그먼트가 유효한 UUID가 아님).
          content:
            application/json:
              examples:
                Not found:
                  value:
                    detail: Not found.
        '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/abcdef12-3456-7890-abcd-ef1234567890/'
            \
              -H 'x-api-key: YOUR_API_KEY'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.transactions.retrieve(
                "abcdef12-3456-7890-abcd-ef1234567890",
            )
            print(result)
        - lang: javascript
          label: Node.js
          source: >-
            import Didit from "@didit-protocol/sdk-node";


            // Reads DIDIT_API_KEY.

            const didit = new Didit();


            const result = await
            didit.transactions.retrieve("abcdef12-3456-7890-abcd-ef1234567890");

            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Transactions.Retrieve(ctx, \"abcdef12-3456-7890-abcd-ef1234567890\")\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import me.didit.Didit;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.transactions().retrieve("abcdef12-3456-7890-abcd-ef1234567890");

            System.out.println(result);
        - lang: php
          label: PHP
          source: >-
            <?php


            require 'vendor/autoload.php';


            use Didit\DiditClient;


            // Reads DIDIT_API_KEY.

            $didit = new DiditClient();


            $result =
            $didit->transactions->retrieve('abcdef12-3456-7890-abcd-ef1234567890');

            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: >-
            require "didit"


            # Reads DIDIT_API_KEY.

            didit = Didit::Client.new


            result =
            didit.transactions.retrieve("abcdef12-3456-7890-abcd-ef1234567890")

            puts result.to_h
        - lang: csharp
          label: .NET
          source: >-
            using System;

            using System.Text.Json;

            using Didit;


            // Reads DIDIT_API_KEY.

            using var client = new DiditClient();


            var result = await
            client.Transactions.RetrieveAsync("abcdef12-3456-7890-abcd-ef1234567890");

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    TransactionDetail:
      type: object
      description: >-
        `GET /v3/transactions/{transaction_id}/` 및 `POST /v3/transactions/`에서
        반환되는 단일 거래에 대한 전체 모니터링 기록입니다.
      properties:
        uuid:
          type: string
          format: uuid
          description: Didit 고유 거래 식별자입니다. 후속 호출 시 `{transaction_id}`로 사용합니다.
        environment:
          type: string
          enum:
            - live
            - sandbox
          description: >-
            거래를 소유한 애플리케이션의 환경. `sandbox` 거래는 저장되지만 평가, 스크리닝, 알림 또는 결제가 이루어지지
            않으므로, 비어 있는 `rule_runs`는 "평가되지 않음"을 의미합니다.
        transaction_number:
          type: integer
          description: 'Console에 표시되는 애플리케이션별 순차 거래 번호(예: `4123`)입니다.'
        txn_id:
          type: string
          description: 생성 시 제공한 `transaction_id`입니다(최대 128자). 애플리케이션별로 고유합니다.
        txn_date:
          type: string
          format: date-time
          description: 거래가 발생한 시점입니다(`transaction_at` 기준, 기본값은 제출 시간).
        zone_id:
          type: string
          nullable: true
          description: 생성 시 제공된 IANA 표준 시간대 식별자입니다.
        transaction_type:
          type: string
          description: >-
            저장된 최상위 카테고리: `finance`, `kyc`, `travelRule`, `userPlatformEvent`,
            `gamblingBet`, `gamblingLimitChange`, `gamblingBonusChange`,
            `auditTrailEvent`. 여러 단어로 된 값은 snake_case로 제출하더라도 camelCase로 반환됩니다.
        action_type:
          type: string
          description: >-
            카테고리 내 하위 유형입니다(예: `deposit`, `withdrawal`, `transfer`). 제공되지 않은 경우
            카테고리로 기본 설정됩니다.
        direction:
          type: string
          enum:
            - INBOUND
            - OUTBOUND
          description: >-
            주체 기준의 방향입니다. 제출된 대소문자에 관계없이 대문자로 저장됩니다(입력 시
            `in`/`out`/`inbound`/`outbound` 허용).
        status:
          type: string
          enum:
            - APPROVED
            - IN_REVIEW
            - DECLINED
            - AWAITING_USER
          description: >-
            현재 모니터링 판정 결과입니다. 거래는 `APPROVED` 상태로 생성되며, 규칙에 따라 동기식으로
            `IN_REVIEW`/`DECLINED` 상태로 변경될 수 있습니다.
        source:
          type: string
          enum:
            - LIVE
            - IMPORTED
          description: >-
            기록이 생성된 방식입니다. API 또는 SDK를 통해 제출된 거래는 `LIVE`, 콘솔 가져오기를 통해 로드된 거래는
            `IMPORTED`입니다.
        amount:
          type: string
          description: >-
            끝자리의 0이 제거된 십진수 문자열 형태의 거래 금액(예: `"1500"`, `"0.5"`,
            `"0.123456789012345678"`)입니다. 소수점 이하 최대 18자리입니다.
        currency:
          type: string
          description: >-
            `amount`의 통화 코드입니다. 암호화폐 자산 심볼(예: `BTC`)뿐만 아니라 모든 ISO 4217 알파벳 코드(예:
            `EUR`, `USD`, `NGN`)를 사용할 수 있습니다. 현재 유통 중인 코드를 사용하는 것이 좋습니다. 지원되는 모든
            코드에 환율이 제공되는 것은 아닙니다. 해당 코드의 환율을 사용할 수 없는 경우(예: ISO 회계 단위 `XSU` 또는
            Didit에서 가격을 책정하지 않는 암호화폐 심볼), 자동 변환이 실패하며 요청에 사전 변환된
            `amount_in_default_currency`가 제공되지 않는 한 `preferred_currency_amount`는
            null로 반환됩니다.
        currency_type:
          type: string
          nullable: true
          description: '`currency_kind`로 제출된 `fiat` 또는 `crypto`.'
        amount_in_default_currency:
          type: string
          nullable: true
          description: 사용자가 제공한 사전 환산 금액으로, 뒤따르는 0이 제거된 십진수 문자열입니다.
        default_currency_code:
          type: string
          nullable: true
        preferred_currency_amount:
          type: string
          nullable: true
          description: 제공되는 경우 애플리케이션의 선호 통화로 변환된 `amount`입니다.
        preferred_currency_code:
          type: string
          nullable: true
        payment_details:
          type: string
          nullable: true
          description: 제출된 자유 형식 결제 참조 또는 메모입니다.
        payment_txn_id:
          type: string
          nullable: true
          description: '`payment_reference_id`에서 가져온 외부 결제 시스템 참조(예: 블록체인 거래 해시)입니다.'
        score:
          type: integer
          description: 규칙에 의해 누적된 위험 점수(일반적으로 0–100). 높을수록 위험합니다.
        severity:
          type: string
          nullable: true
          enum:
            - UNKNOWN
            - LOW
            - MEDIUM
            - HIGH
            - CRITICAL
          description: >-
            규칙/제공업체에서 설정한 범주형 위험 심각도(`UNKNOWN`, `LOW`, `MEDIUM`, `HIGH`,
            `CRITICAL`). 설정되기 전까지는 `null`입니다.
        decision_reason_code:
          type: string
          nullable: true
          description: 현재 `status`에 대한 기계 판독 가능한 사유.
        decision_reason_label:
          type: string
          nullable: true
          description: '`decision_reason_code`에 대한 사람이 읽기 쉬운 라벨입니다.'
        vendor_data:
          type: string
          nullable: true
          description: 신청자의 `vendor_data`에 대한 편의 사본입니다.
        metadata:
          type: object
          description: 생성 시점에 제출된 `subject` 및 `counterparty` payload의 스냅샷입니다.
        props:
          type: object
          description: >-
            생성 시 제공한 `custom_properties`입니다. 각 키는 규칙 조건에서 `custom_values.<key>`로
            참조할 수 있습니다.
        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: 거래에 연결된 태그(수동 또는 규칙에 의해)입니다.
        parties:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              role:
                type: string
                enum:
                  - APPLICANT
                  - REMITTER
                  - BENEFICIARY
                  - COUNTERPARTY
                description: >-
                  당사자 역할입니다. 생성 endpoint는 `APPLICANT`(대상자) 및 `COUNTERPARTY`를
                  할당합니다.
              entity_type:
                type: string
                enum:
                  - individual
                  - company
                  - external
                  - unhostedWallet
              kind:
                type: string
                enum:
                  - USER
                  - BUSINESS
                  - EXTERNAL
                description: >-
                  `USER`/`BUSINESS` 당사자는 `vendor_data`를 통해 Didit 소유 엔티티로 다시
                  연결됩니다. `EXTERNAL` 당사자는 연결된 Didit 엔티티가 없습니다.
              vendor_data:
                type: string
                nullable: true
                description: 귀하의 내부 사용자/기업 식별자입니다.
              full_name:
                type: string
                nullable: true
              first_name:
                type: string
                nullable: true
              last_name:
                type: string
                nullable: true
              country_code:
                type: string
                nullable: true
                description: 제출된 `address.country`의 국가 코드입니다(일반적으로 ISO 3166-1 alpha-3).
              dob:
                type: string
                format: date
                nullable: true
                description: 제출된 `date_of_birth`에서 가져온 생년월일입니다.
              address:
                type: object
                description: 제출된 주소 객체입니다. 생략된 경우 `{}`입니다.
              institution_info:
                type: object
                description: 제출된 기관 세부 정보입니다. 생략 시 `{}`입니다.
              device:
                type: object
                description: >-
                  IP가 제공된 경우 network_context 하위의 서버 측 IP 보강(지리적 위치, VPN/데이터 센터
                  플래그)을 포함한 정규화된 기기 컨텍스트입니다.
                properties:
                  fingerprint:
                    type: string
                    description: 고유 기기 핑거프린트입니다.
                  persistent_device_id:
                    type: string
                    description: 세션 간 유지되는 고유 기기 식별자(v2 핑거프린트 스키마)입니다.
                  user_agent:
                    type: string
                    description: 브라우저 또는 앱 사용자 에이전트 문자열입니다.
                  browser_family:
                    type: string
                    description: '브라우저 계열(예: Chrome, Firefox, Safari)입니다.'
                  browser_version:
                    type: string
                    description: 브라우저 버전 문자열입니다.
                  platform:
                    type: string
                    description: 플랫폼 식별자(web, ios, android, macos, windows, linux)입니다.
                  os_family:
                    type: string
                    description: '운영체제 제품군(예: iOS, Android, Windows).'
                  os_version:
                    type: string
                    description: 운영체제 버전 문자열입니다.
                  accept_language:
                    type: string
                    description: Accept-Language 헤더 값입니다.
                  session_id:
                    type: string
                    description: 세션 식별자(메타데이터에 저장됨)입니다.
                  session_age_ms:
                    type: number
                    description: 밀리초 단위의 세션 경과 시간입니다.
                  network_context:
                    type: object
                    description: IP 주소 및 지리적 위치가 포함된 네트워크 컨텍스트입니다.
                    properties:
                      ip_address:
                        type: string
                        description: 클라이언트 IP 주소입니다.
                      ip_country_code:
                        type: string
                        description: IP의 지리적 위치로 확인된 국가(ISO 3166-1 alpha-3)입니다.
                      latitude:
                        type: number
                        description: IP의 지리적 위도입니다.
                      longitude:
                        type: number
                        description: IP의 지리적 경도입니다.
              external_party_snapshot:
                type: object
                nullable: true
                description: >-
                  `EXTERNAL` 당사자에 대한 당사자 데이터의 동결 사본입니다. 당사자가 Didit 사용자 또는 기업에
                  연결되어 있는 동안에는 `null`입니다.
          description: 거래 당사자(신청인, 거래 상대방)입니다.
        payment_methods:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              payment_method_type:
                type: string
                enum:
                  - bank_card
                  - bank_account
                  - e_wallet
                  - crypto_wallet
                  - unhosted_wallet
                  - other
              label:
                type: string
                nullable: true
              fingerprint:
                type: string
                nullable: true
                description: >-
                  `type:account_id:issuing_country`에 대한 SHA-256 — 동일한 수단의 재사용을
                  연계하기 위한 안정적인 식별자입니다.
              account_id:
                type: string
                nullable: true
                description: 계정 식별자(IBAN, 지갑 주소, 카드 token 등).
              issuing_country:
                type: string
                nullable: true
              owner_kind:
                type: string
                enum:
                  - USER
                  - BUSINESS
                  - EXTERNAL
              vendor_data:
                type: string
                nullable: true
                description: 소유한 사용자/기업에 대한 귀하의 식별자입니다.
              owner_name:
                type: string
                nullable: true
              institution_info:
                type: object
              details:
                type: object
                description: 제출된 원시 `payment_method` 객체입니다.
              external_owner_snapshot:
                type: object
                nullable: true
              role:
                type: string
                enum:
                  - SOURCE
                  - DESTINATION
                  - FUNDING
                  - BENEFICIARY
                description: >-
                  거래에서 이 방법이 사용된 방식입니다. 생성 endpoint는 방향에 따라
                  `SOURCE`/`DESTINATION`을 할당합니다(발신: 주체 = SOURCE, 수신: 주체 =
                  DESTINATION).
          description: 거래에 연결된 결제 수단입니다.
        documents:
          type: array
          description: 콘솔에서 거래에 첨부된 파일입니다. 없는 경우 `[]`입니다.
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              label:
                type: string
                nullable: true
              note:
                type: string
                nullable: true
              uploaded_by:
                type: string
                nullable: true
              created_at:
                type: string
                format: date-time
              files:
                type: array
                items:
                  type: object
                  properties:
                    uuid:
                      type: string
                      format: uuid
                    file_url:
                      type: string
                      format: uri
                      nullable: true
                      description: 유효 기간이 짧은 서명된 다운로드 URL입니다. 저장하지 말고 필요할 때 가져오세요.
                    original_filename:
                      type: string
                      nullable: true
                    file_size:
                      type: integer
                      nullable: true
        activities:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              activity_type:
                type: string
                description: >-
                  예: `TRANSACTION_CREATED`, `TRANSACTION_NOTE_ADDED`,
                  `TRANSACTION_STATUS_CHANGED`.
              source:
                type: string
              status:
                type: string
                nullable: true
              title:
                type: string
                nullable: true
              description:
                type: string
                nullable: true
              metadata:
                type: object
              occurred_at:
                type: string
                format: date-time
          description: 활동 로그 항목입니다(생성, 메모, 수동 검토, 상태 변경).
        alerts:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              title:
                type: string
              description:
                type: string
                nullable: true
              severity:
                type: string
                enum:
                  - UNKNOWN
                  - LOW
                  - MEDIUM
                  - HIGH
                  - CRITICAL
              status:
                type: string
                enum:
                  - OPEN
                  - INVESTIGATING
                  - AWAITING_USER
                  - PENDING_SAR
                  - SAR_FILED
                  - RESOLVED
                  - DISMISSED
              source:
                type: string
                enum:
                  - RULE
                  - PROVIDER
                  - MANUAL
              metadata:
                type: object
              created_at:
                type: string
                format: date-time
              due_at:
                type: string
                format: date-time
                nullable: true
          description: 현재는 항상 비어 있습니다. 미해결 알림은 상태가 `IN_REVIEW` 또는 `AWAITING_USER`인 거래입니다.
        rule_runs:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              rule:
                type: string
                format: uuid
                description: 실행된 규칙의 UUID입니다.
              rule_title:
                type: string
              rule_description:
                type: string
                nullable: true
              rule_category:
                type: string
              matched:
                type: boolean
                description: >-
                  규칙의 조건이 이 거래와 일치했는지 여부입니다. 일치하는 규칙에 대해서만 실행이 기록되므로, 실시간 평가에서는
                  항상 `true`를 갖습니다.
              is_test:
                type: boolean
                description: 규칙이 TEST 모드에서 실행된 경우 true입니다(상태/점수에 영향 없음).
              mode:
                type: string
                enum:
                  - ACTIVE
                  - DISABLED
                  - TEST
              severity:
                type: string
                nullable: true
              score_delta:
                type: integer
                description: 이 규칙의 `add_score` 작업으로 추가된 점수입니다.
              status_target:
                type: string
                nullable: true
                description: '`change_status` 작업에 의해 설정된 상태(있는 경우)입니다.'
              action_summary:
                type: string
                nullable: true
                description: >-
                  규칙이 실행한 작업의 요약으로, `; `로 연결됩니다(예: `score +30;
                  change_status:IN_REVIEW; add_tag:high_risk_country`). 구성 요소:
                  `score +N`, `change_status:<STATUS>`, `add_tag:<name>`,
                  `add_note`, `add_to_list`, `open_case`. 규칙이 아무런 작업도 실행하지 않은 경우
                  `null`입니다.
              metadata:
                type: object
                description: >-
                  평가 세부 정보: `scope_match`, `conditions[]` 및 `aggregations[]`. 각
                  조건 항목은 `field`, `operator`, `expected_value`, 거래에서 읽은
                  `current_value`, `matched`, `group_index` 및 `group_logic`을
                  포함합니다. 각 집계 항목(속도 / 건수 / 합계)은 `metric`, `field`, `operator`,
                  `expected_value`, 집계 결과인 `computed_value`, `window`,
                  `filters`, `matched` 및 `sample_references`를 포함합니다. 지연된 비동기 집계는
                  `computed_value: null` 및 `deferred: true`를 가집니다. 중첩 조건 그룹은
                  `operator`가 `any_of` 또는 `all_of`이고, `field`가 null이며, 해당 멤버들의
                  결과가 자체 `conditions` 아래에 있는 하나의 `conditions[]` 항목입니다.
              created_at:
                type: string
                format: date-time
          description: 규칙별 실행 결과 — 어떤 규칙이 실행되었는지와 점수에 미친 영향입니다.
        provider_results:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              provider:
                type: string
              result_type:
                type: string
                enum:
                  - FIAT_MONITORING
                  - WALLET_SCREENING
                  - TRANSACTION_SCREENING
                  - TRAVEL_RULE
                  - NETWORK_GRAPH
                  - CUSTOM
              status:
                type: string
              severity:
                type: string
                nullable: true
              score:
                type: integer
              summary:
                type: string
                nullable: true
              payload:
                type: object
                description: 원시 제공자 응답 payload입니다.
              created_at:
                type: string
                format: date-time
          description: 원시 제공자 payload(AML 스크리닝, 블록체인 분석 등)입니다.
        travel_rule:
          nullable: true
          allOf:
            - $ref: '#/components/schemas/TransactionTravelRule'
          description: >-
            Travel Rule 이체 또는 확인입니다. `travel_rule_details`가 제출되었을 때, 그리고 Travel
            Rule이 활성화되어 있고 `transaction_category: travelRule`로 거래가 생성되었을 때
            채워집니다(Didit은 `travel_rule_details` 없이도 정보 교환을 직접 시작합니다). 이체 또는 확인이
            존재하지 않는 경우 `null`입니다. 인바운드 이체에서는 지갑 소유권이 확인될 때까지 거래 상대방의
            `originator_data` 및 `beneficiary_data`가 마스킹된 상태(`data_masked:
            true`)로 유지됩니다.
        network_snapshot:
          type: object
          nullable: true
          description: >-
            규칙 엔진에서 사용하는 관련 거래/당사자의 그래프 스냅샷입니다. 거래와 함께 제출된 `network_snapshot` 또는
            Didit이 성공한 AML 지갑 스크리닝에서 빌드하는 그래프(제출된 그래프를 대체함) 중 하나입니다. 둘 다 존재하지 않는
            경우 `null`입니다.
          properties:
            uuid:
              type: string
              format: uuid
            nodes:
              type: array
              items:
                type: object
            edges:
              type: array
              items:
                type: object
            metrics:
              type: object
        remediation:
          type: object
          nullable: true
          description: >-
            재인증이 필요할 때 사용자에게 제공되는 개선 세션입니다. 표준 블록인 `action_required`로 대체되었으며, 이전
            버전과의 호환성을 위해 유지됩니다.
          properties:
            session_id:
              type: string
            session_token:
              type: string
            url:
              type: string
              format: uri
            status:
              type: string
        action_required:
          type: object
          nullable: true
          description: >-
            이 거래를 완료하는 데 필요한 대기 중인 최종 사용자 작업이며, 없는 경우 null입니다. Didit SDK는 기본적으로
            작업을 자동으로 실행하고 완료 시 거래를 새로고침합니다. `type`으로 구분되는 두 가지 변형이 있습니다.
            `verification_session`(규칙 작업에 의해 생성된 호스팅 인증 세션)과
            `wallet_ownership`(지갑 제어 증명이 필요한 Travel Rule 이체에 대해 자동 생성되는 지갑 소유권
            위젯 세션으로, `auto_wallet_verification` Travel Rule 설정에 따라 제어됨)입니다. 둘 다
            적용될 수 있는 경우 Travel Rule 교환을 차단하므로 `wallet_ownership`이 우선 적용됩니다.
          oneOf:
            - $ref: '#/components/schemas/TransactionVerificationSessionAction'
            - $ref: '#/components/schemas/TransactionWalletOwnershipAction'
          discriminator:
            propertyName: type
            mapping:
              verification_session: '#/components/schemas/TransactionVerificationSessionAction'
              wallet_ownership: '#/components/schemas/TransactionWalletOwnershipAction'
        cost_breakdown:
          type: object
          nullable: true
          description: >-
            이 거래의 비용입니다. `total_price`와 청구 항목별 `usage_type`, `price`, `details`,
            `created_at`이 포함된 `items`로 구성됩니다. 동일한 거래를 다시 스크리닝하면 새 항목이 생성됩니다.
    TransactionTravelRule:
      type: object
      description: >-
        `GET /v3/transactions/{transaction_id}/`, `POST /v3/transactions/`의
        `201`, `GET /v3/transactions/`의 각 행에서 반환하는 거래의 Travel Rule 이체입니다.
        `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를 지정한 단계임),
            `picked_member_without_proven_wallet`(최종 사용자가 지갑 제어권을 증명하지 않은 Didit
            고객을 선택함), 또는 추적에서 다른 이유를 제공하지 않는 경우 `no_directory_match`. 재전송하면 전송이
            진행되므로 이유가 초기화됩니다. [전송이 지연되는
            이유](/ko/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'
    TransactionVerificationSessionAction:
      title: Verification session
      type: object
      properties:
        type:
          type: string
          enum:
            - verification_session
        url:
          type: string
          format: uri
          description: 최종 사용자에게 열어줄 호스팅 인증 URL입니다.
        session_id:
          type: string
          format: uuid
          description: 인증 세션 ID입니다.
        session_token:
          type: string
          description: 모바일 SDK에서 플로우를 네이티브로 실행하는 데 사용되는 세션 token입니다.
        status:
          type: string
          description: 인증 세션 상태입니다.
      required:
        - type
        - url
    TransactionWalletOwnershipAction:
      title: Wallet ownership
      type: object
      properties:
        type:
          type: string
          enum:
            - wallet_ownership
        url:
          type: string
          format: uri
          description: >-
            호스팅 지갑 소유권 위젯 URL입니다. 실제 브라우저 환경에서 여십시오. 모바일에서는 임베디드 웹뷰를 사용하지 말고
            SFSafariViewController 또는 Chrome Custom Tab을 사용하십시오.
        widget_session_id:
          type: string
          format: uuid
          description: 지갑 소유권 위젯 세션 ID입니다.
        expires_at:
          type: string
          format: date-time
          description: 위젯 세션이 만료되는 시점입니다.
      required:
        - type
        - url
    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: >-
            당사자의 엔티티 유형에 따라 비교된 필드당 항목 1개(`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은 이체를 생성하거나 변경한 요청이 반환된 후 거래
        상대방에게 연락하므로, 이 객체는 해당 메시지가 전달되었는지 여부(대기열 등록됨, 전송 중, 오류 후 재시도 대기 중, 전달됨
        또는 실패함)를 나타냅니다. 네트워크가 복구될 가능성이 있는 실패(시간 내 응답 없음, 연결 실패, HTTP `408`,
        `429` 또는 `5xx`)는 30초, 2분, 10분, 30분, 1시간 후에 다시 시도됩니다. 네트워크가 거부했거나 6번째
        시도마저 실패하여 첫 번째 메시지(`kind: SEND`)가 완전히 실패하면, 이체는 `timeline`에
        `last_error`와 함께 `COUNTERPARTY_VASP_NOT_REACHABLE`로 이동합니다. 완전히 실패한 다른 모든
        메시지는 `timeline`에 기록됩니다. 이체의 `status`는 교환 자체에 대한 기준(source of truth)으로
        유지됩니다.
      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이 오류로 응답하는 경우 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` 상태의
        전송을 진행시키는 요소 하나입니다. [전송이 중단되는
        이유](/ko/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를 선택하거나, 귀하가
            `action=beneficiary_vasp`로 PATCH 요청을 보냅니다. `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 전송의 경우 `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 불일치 사항: 신고된 송금인이 입력(input)에 없음, 신고된 수취인이 출력(output)에
            없음, 단일 수취인 출력을 구별할 수 없음, 또는 수취인 출력이 거래에 명시된 금액과 다른 금액을 지급함.
        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: >-
            지갑입니다. 메모 네트워크에서는 클래식 주소(XRP X-address는 클래식 주소와 태그로 분할됨),
            Lightning에서는 수취인 노드 ID 또는 Lightning Address입니다.
        memo:
          type: string
          description: 지갑의 일부인 대상 태그 또는 메모입니다. 없는 경우 `""`입니다.
        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 거래의 입력 또는 출력 1개입니다.
      required:
        - address
      properties:
        address:
          type: string
          maxLength: 128
        amount:
          type: string
          nullable: true
          description: 해당 코인 자체의 단위(사토시가 아닌 BTC)로 표시된 십진수 문자열입니다. 선택 사항입니다.
          example: '0.0125'
        txid:
          type: string
          maxLength: 128
          description: 선택 사항입니다. 입력(input)이 사용하는 거래입니다.
        vout:
          type: integer
          nullable: true
          minimum: 0
          description: 선택 사항입니다. 입력(input)이 사용하는 출력 인덱스(output index)입니다.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Business Console의 Developers -> API keys에서 발급받은 귀하 애플리케이션의 API 키입니다. 기본
        키는 전체 접근 권한을 갖습니다. 이름이 지정된 키는 리소스별 none, read, write 범위로 권한을 제한할 수 있으며
        특정 워크플로나 승인된 세션, IP 주소 목록, 만료일 등으로 제한할 수도 있습니다. 401은 키가 잘못되었거나 폐기되었거나
        만료되었음을 의미합니다. 403은 키가 전송되지 않았거나, 키에 해당 리소스나 작업에 대한 접근 권한이 없거나, 요청이 허용된
        IP 목록 외부 주소에서 발생했음을 의미합니다. 세션 경로에서의 404는 해당 세션이 키의 허용 워크플로 또는 상태 범위를
        벗어났음을 의미합니다. 미디어 접근 권한이 없는 키는 이미지, 비디오, PDF URL을 null로 수신하며, 세션 write
        권한이 없는 키는 세션 링크와 token을 null로 수신합니다.
        https://docs.didit.me/console/api-keys 를 참고하십시오.

````

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