> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# 거래 목록 조회 API: KYT 모니터링

> Didit에서 모니터링 중인 거래를 위험 점수, 심각도, 거래 상대방, 태그, 스크리닝 상태와 함께 조회하세요. 호출당 과금 KYT, 계약 불필요.



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



      
      

\<pre>

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

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

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

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

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

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

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

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

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

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

Side effects: none. This is a pure read.

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

\</pre>



      
      

붙여넣을 곳



## OpenAPI

````yaml ko/openapi-25.json GET /v3/transactions/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: 신분증 인증 API입니다. x-api-key 헤더로 인증합니다.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/transactions/:
    get:
      tags:
        - Transactions
      summary: 거래 목록 조회
      description: >-
        모니터링된 거래의 페이지 단위 목록이며 최신순(`txn_date` 내림차순)으로 정렬됩니다. `count`는 최대 100으로
        제한되므로 실제 행 수를 확인하려면 `total_transactions`를 사용하십시오. 이 endpoint는 필터링이나 검색
        파라미터를 지원하지 않습니다.
      operationId: listTransactions
      parameters:
        - name: limit
          in: query
          schema:
            type: integer
            default: 50
            minimum: 1
            maximum: 1000000
          description: 페이지 크기입니다. 생략 시 기본값은 50입니다. 강제된 최댓값은 없으나 지연 시간을 줄이려면 페이지를 작게 유지하십시오.
        - name: offset
          in: query
          schema:
            type: integer
            maximum: 1000000
            minimum: 0
            default: 0
          description: 반환할 첫 번째 레코드의 0부터 시작하는 오프셋입니다. 이전 페이지의 `next` URL을 따르는 것이 좋습니다.
        - name: travel_rule_status
          in: query
          required: false
          schema:
            type: string
          description: >-
            Travel Rule 전송이 정확히 이 상태(예: `ON_HOLD` 또는 `AWAITING_COUNTERPARTY`)인
            거래만 반환합니다. `count`는 이 필터를 따르며, `total_transactions`는 애플리케이션의 모든 거래를
            계속해서 계산합니다.
        - name: assignee
          in: query
          required: false
          schema:
            type: string
          description: >-
            쉼표로 구분되며, 거래가 값 중 하나와 일치하면 매칭됩니다. `unassigned`는 아직 아무에게도 배정되지 않은 상태,
            `rules`는 검토자 없이 규칙에 따라 자체적으로 결정된 상태를 의미하며, 멤버 이메일은 배정된 검토자와 일치합니다.
            `me`는 로그인한 Console 검토자를 가리키므로, API 키로 `me`를 전송하면 `400`이 반환됩니다.
      responses:
        '200':
          description: 거래 요약의 페이지 단위 목록(최신순)입니다.
          content:
            application/json:
              schema:
                type: object
                properties:
                  count:
                    type: integer
                    description: >-
                      일치하는 거래의 상한이 적용된 개수(최대 100개까지 정확하며 이후 상한 적용). 페이지를 매길 때 실제
                      개수를 확인하려면 `total_transactions`를 사용하십시오.
                  next:
                    type: string
                    nullable: true
                    description: 다음 페이지의 절대 URL이며, 마지막 페이지에서는 `null`입니다.
                  previous:
                    type: string
                    nullable: true
                    description: 이전 페이지의 절대 URL이며, 첫 번째 페이지에서는 `null`입니다.
                  total_transactions:
                    type: integer
                    description: 애플리케이션의 (삭제되지 않은) 정확한 총 거래 수입니다. 페이지네이션된 응답에 존재합니다.
                  results:
                    type: array
                    items:
                      type: object
                      properties:
                        uuid:
                          type: string
                          format: uuid
                          description: >-
                            고유 Didit 거래 식별자입니다. 세부 정보/메모/관련 호출에서
                            `{transaction_id}`로 사용하세요.
                        transaction_number:
                          type: integer
                          description: 'Console에 표시되는 애플리케이션별 순차 거래 번호(예: `4123`)입니다.'
                        txn_id:
                          type: string
                          description: 생성 호출 시 고객이 제공한 식별자(최대 128자)입니다. 애플리케이션별로 고유합니다.
                        transaction_type:
                          type: string
                          description: >-
                            저장된 최상위 카테고리: `finance`, `kyc`, `travelRule`,
                            `userPlatformEvent`, `gamblingBet`,
                            `gamblingLimitChange`, `gamblingBonusChange`,
                            `auditTrailEvent`. 여러 단어로 된 값은 snake_case로 제출하더라도
                            camelCase로 반환됩니다.
                        action_type:
                          type: string
                          description: >-
                            카테고리 내 하위 유형입니다(예: `deposit`, `withdrawal`,
                            `transfer`).
                        status:
                          type: string
                          enum:
                            - APPROVED
                            - IN_REVIEW
                            - DECLINED
                            - AWAITING_USER
                          description: 현재 모니터링 판정 결과입니다.
                        direction:
                          type: string
                          enum:
                            - INBOUND
                            - OUTBOUND
                          description: 주체 기준의 방향입니다. 제출된 대소문자에 관계없이 대문자로 저장됩니다.
                        amount:
                          type: string
                          description: >-
                            끝자리의 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로 반환됩니다.
                        preferred_currency_amount:
                          type: string
                          nullable: true
                          description: 제공되는 경우 애플리케이션의 선호 통화로 변환된 `amount`입니다.
                        preferred_currency_code:
                          type: string
                          nullable: true
                          description: >-
                            `preferred_currency_amount`에 사용되는 선호 통화 코드입니다.
                            애플리케이션의 기준 통화이며, 현재 통용되는 모든 ISO 4217 코드입니다. 환율을 사용할
                            수 없는 코드의 경우, 요청에서 사전 환산된
                            `amount_in_default_currency`를 제공하지 않는 한
                            `preferred_currency_amount`는 null로 유지됩니다.
                        payment_details:
                          type: string
                          nullable: true
                          description: 제출된 자유 형식 결제 참조 또는 메모입니다.
                        score:
                          type: integer
                          description: 위험 점수(일반적으로 0–100). 높을수록 위험합니다.
                        severity:
                          type: string
                          nullable: true
                          enum:
                            - UNKNOWN
                            - LOW
                            - MEDIUM
                            - HIGH
                            - CRITICAL
                          description: >-
                            규칙/제공업체에서 설정한 범주형 위험 심각도(`UNKNOWN`, `LOW`, `MEDIUM`,
                            `HIGH`, `CRITICAL`). 설정되기 전까지는 `null`입니다.
                        subject_name:
                          type: string
                          nullable: true
                          description: '`APPLICANT` 당사자의 성명입니다.'
                        subject_vendor_data:
                          type: string
                          nullable: true
                          description: 신청자에 대한 귀하의 내부 사용자/기업 식별자입니다.
                        subject_country:
                          type: string
                          nullable: true
                          description: >-
                            제출된 `address.country`의 신청인 국가 코드입니다(일반적으로 ISO 3166-1
                            alpha-3).
                        counterparty_name:
                          type: string
                          nullable: true
                          description: '`COUNTERPARTY` 당사자의 성명(있는 경우)입니다.'
                        counterparty_vendor_data:
                          type: string
                          nullable: true
                          description: 거래 상대방에 대한 귀하의 내부 식별자입니다.
                        counterparty_country:
                          type: string
                          nullable: true
                          description: 제출된 `address.country`의 거래 상대방 국가 코드입니다.
                        tags:
                          type: array
                          items:
                            type: object
                            properties:
                              uuid:
                                type: string
                                format: uuid
                              name:
                                type: string
                              color:
                                type: string
                              description:
                                type: string
                                nullable: true
                              source:
                                type: string
                                enum:
                                  - didit
                                  - custom
                                description: 태그가 Didit 프리셋인지 커스텀 태그인지 여부입니다.
                          description: 거래에 연결된 태그(수동 또는 규칙에 의해)입니다.
                        txn_date:
                          type: string
                          format: date-time
                          description: 거래가 발생한 시점입니다(생성 시점의 `transaction_at` 기준).
                        created_at:
                          type: string
                          format: date-time
                          description: Didit이 제출 내용을 기록한 시점입니다.
                        decision_reason_code:
                          type: string
                          nullable: true
                          description: '현재 `status`에 대한 기계 판독 가능한 사유(예: `WALLET_HIGH_RISK`).'
                        decision_reason_label:
                          type: string
                          nullable: true
                          description: '`decision_reason_code`에 대한 사람이 읽기 쉬운 라벨입니다.'
                        assigned_to_name:
                          type: string
                          nullable: true
                          description: 이 거래에 배정된 콘솔 검토자의 표시 이름입니다.
                        travel_rule_status:
                          type: string
                          nullable: true
                          description: >-
                            거래의 Travel Rule 전송 상태(예: `COMPLETED`)이며, 없는 경우
                            `null`입니다.
                        travel_rule:
                          nullable: true
                          allOf:
                            - $ref: '#/components/schemas/TransactionTravelRule'
                          description: >-
                            거래의 Travel Rule 전송으로, `GET
                            /v3/transactions/{transaction_id}/`의 `travel_rule`과
                            동일한 블록이거나 거래에 해당 사항이 없는 경우 `null`입니다.
              examples:
                Single transaction:
                  value:
                    count: 1
                    next: null
                    previous: null
                    total_transactions: 1
                    results:
                      - uuid: abcdef12-3456-4890-abcd-ef1234567890
                        transaction_number: 4123
                        txn_id: your-txn-2026-05-17-001
                        transaction_type: finance
                        action_type: withdrawal
                        status: IN_REVIEW
                        direction: OUTBOUND
                        amount: '1500'
                        currency: EUR
                        preferred_currency_amount: '1620.45'
                        preferred_currency_code: USD
                        payment_details: Withdrawal to crypto wallet
                        txn_date: '2026-05-17T08:42:00Z'
                        created_at: '2026-05-17T08:42:11Z'
                        score: 78
                        severity: HIGH
                        decision_reason_code: WALLET_HIGH_RISK
                        decision_reason_label: Destination wallet flagged as high risk
                        tags:
                          - uuid: 9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d
                            name: Manual review
                            color: '#F59E0B'
                            description: null
                            source: custom
                        subject_name: Maria Garcia
                        subject_vendor_data: user-12345
                        counterparty_name: null
                        counterparty_vendor_data: null
                        counterparty_country: null
                        subject_country: null
                        assigned_to_name: Alex Reviewer
                        travel_rule_status: null
                        travel_rule: null
        '403':
          description: >-
            API 키가 누락되었거나 유효하지 않거나 폐기되었거나, 해당 키에 이 애플리케이션의 거래를 조회할 수 있는 권한이
            없습니다. 누락된 키는 `403`을 반환하며, 잘못되었거나 폐기되었거나 만료된 키는 `401`을 반환합니다.
          content:
            application/json:
              examples:
                Forbidden:
                  value:
                    detail: You do not have permission to perform this action.
        '429':
          description: 속도 제한 초과. 대기 후 `Retry-After`에 지정된 시간 간격이 지난 뒤 재시도하세요.
          content:
            application/json:
              examples:
                Throttled:
                  value:
                    detail: Request was throttled. Expected available in 30 seconds.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X GET
            'https://verification.didit.me/v3/transactions/?limit=50' \
              -H 'x-api-key: YOUR_API_KEY'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            for item in client.transactions.list():
                print(item)
        - lang: javascript
          label: Node.js
          source: |-
            import Didit from "@didit-protocol/sdk-node";

            // Reads DIDIT_API_KEY.
            const didit = new Didit();

            for await (const item of didit.transactions.list()) {
              console.log(item);
            }
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\niter := client.Transactions.ListAutoPaging(ctx, didit.TransactionsListParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
        - lang: java
          label: Java
          source: |-
            import me.didit.Didit;

            // Reads DIDIT_API_KEY.
            Didit client = new Didit();

            for (var item : client.transactions().list()) {
                System.out.println(item);
            }
        - lang: php
          label: PHP
          source: |-
            <?php

            require 'vendor/autoload.php';

            use Didit\DiditClient;

            // Reads DIDIT_API_KEY.
            $didit = new DiditClient();

            foreach ($didit->transactions->list() as $item) {
                print_r($item->toArray());
            }
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

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

            didit.transactions.list.auto_paging_each do |item|
              puts item.to_h
            end
        - lang: csharp
          label: .NET
          source: |-
            using System;
            using System.Text.Json;
            using Didit;

            // Reads DIDIT_API_KEY.
            using var client = new DiditClient();

            await foreach (var item in await client.Transactions.ListAsync())
            {
                Console.WriteLine(JsonSerializer.Serialize(item));
            }
components:
  schemas:
    TransactionTravelRule:
      type: object
      description: >-
        `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'
    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.