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

# SDK로 거래 조회: 클라이언트 측 KYT

> 같은 범위의 SDK 토큰으로 최종 사용자 기기에서 모니터링 중인 거래를 다시 조회합니다. Didit의 갱신된 상태, Travel Rule 상태, 대기 중인 action_required를 확인하세요.

거래 조회(SDK 토큰) API 프롬프트
프롬프트를 클립보드에 복사

<pre>
  \`Re-read a transaction from an end-user device using the same scoped SDK token that submitted it. The Didit SDKs call this automatically after a launched action flow completes or its window closes; call it yourself when handling flows manually.

  Endpoint:
  GET [https://verification.didit.me/v1/transactions/\{transaction\_id}/](https://verification.didit.me/v1/transactions/\{transaction_id}/)

  Authentication:
  X-Transaction-Token header with the sdk\_token used at submission (still within TTL). {transaction_id} is the Didit transaction uuid returned at creation.

  When to call:

  * After the user finishes (or abandons) a wallet-ownership or verification flow, to pick up the refreshed status.
  * To poll status and action\_required while the token is valid, instead of depending on any single event or notification.

  What to read from the response:

  * status - APPROVED | IN\_REVIEW | DECLINED | AWAITING\_USER.
  * travel\_rule.status - the Travel Rule exchange state (COMPLETED means the exchange concluded; the transfer can settle).
  * action\_required - null once the pending action is resolved; otherwise the same block returned at submission.

  Failure modes:

  * 401 - token missing, unknown, revoked, over max\_uses, or expired ("expired" appears in the detail).
  * 404 - the transaction does not belong to the token's application, or it was submitted for a different end user (another vendor\_data) than the token's.

  From your backend, GET /v3/transactions/{transaction_id}/ (x-api-key) returns the same record without any token constraints.

  Full guide: /transaction-monitoring/sdk-transaction-submission.\`
</pre>

붙여넣을 곳


## OpenAPI

````yaml ko/openapi-25.json GET /v1/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:
  /v1/transactions/{transaction_id}/:
    get:
      tags:
        - Transactions
      summary: SDK에서 거래 조회
      description: >-
        제출 시 사용된 것과 동일한 `X-Transaction-Token`으로 인증되는 디바이스용 읽기 endpoint입니다. 자동
        실행된 작업 흐름이 완료되거나 창이 닫힌 후 SDK가 이를 폴링하므로, 최종 상태가 단일 알림에만 의존하지 않습니다. 제출 응답과
        동일한 거래 세부 정보를 반환하며, 현재 `action_required` 블록(작업이 해결되면 `null`)이 포함됩니다.
      operationId: getTransactionFromSdk
      parameters:
        - name: transaction_id
          in: path
          required: true
          description: Didit 고유 거래 UUID(제출 응답의 `uuid`이며, 귀하의 `txnId`가 **아님**).
          schema:
            type: string
            format: uuid
          example: 22222222-3333-4444-5555-666666666666
      responses:
        '200':
          description: '`action_required`(대기 중인 작업이 해결되면 `null`)를 포함한 전체 거래 세부 정보입니다.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionDetail'
        '401':
          description: '거래 토큰이 거부되었습니다: 누락되었거나, 알 수 없거나, 폐기되었거나, `max_uses`를 초과했거나, 만료되었습니다.'
          content:
            application/json:
              examples:
                Expired token:
                  value:
                    detail: Transaction token expired.
        '404':
          description: token의 애플리케이션에 이 UUID를 가진 거래가 존재하지 않거나, 경로 세그먼트가 유효한 UUID가 아닙니다.
          content:
            application/json:
              examples:
                Not found:
                  value:
                    detail: Not found.
      security:
        - TransactionTokenAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X GET
            'https://verification.didit.me/v1/transactions/22222222-3333-4444-5555-666666666666/'
            \
              -H 'X-Transaction-Token: SDK_TOKEN'
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:
    TransactionTokenAuth:
      type: apiKey
      in: header
      name: X-Transaction-Token
      description: >-
        백엔드에서 POST /v3/transactions/sdk-token/을 통해 발행한 유효 기간이 짧은 범위 지정 token입니다.
        디바이스용 /v1/transactions/ endpoints에서 Didit SDK가 사용합니다.

````

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