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

> 토큰으로 Didit 지갑 소유권 위젯 세션의 공개 컨텍스트를 조회합니다: 허용된 증명 방법, 증명 진행 상황, 완료 상태.

위젯 컨텍스트 API 프롬프트 가져오기
프롬프트를 클립보드에 복사

<pre>
  \`Read the public context of a wallet-ownership widget session - the same endpoint the hosted widget page itself is driven by. Poll it to track proof progress from your backend.

  Endpoint:
  GET [https://verification.didit.me/v3/travel-rule/widget/\{token}/](https://verification.didit.me/v3/travel-rule/widget/\{token}/)

  Authentication:
  None - the widget token in the URL path is the credential. Treat the token as a secret.

  What to read from the response:

  * completed\_at - non-null once a proof has been verified. This is the completion signal.
  * allowed\_methods - which proof methods this session offers (MESSAGE\_SIGNING, SATOSHI\_TEST, SCREENSHOT, SELF\_DECLARATION).
    MESSAGE\_SIGNING works with wallets installed in the customer's browser, discovered in the page (EIP-6963 / Wallet Standard).
    Pairing a mobile wallet app (for example by scanning a QR code) is not available in production today.
  * transfer\_status - the linked Travel Rule transfer's status, when the session was minted with a transaction\_id.
  * proofs\[] - per-proof progress. A SATOSHI\_TEST proof carries deposit\_address, expected\_amount, and its own expires\_at; a MESSAGE\_SIGNING proof carries the challenge string. A SATOSHI\_TEST proof can sit at status PENDING while its deposit is seen on-chain but unconfirmed - a background job completes it automatically once it confirms. Each proof also carries attempts and failure\_reason (why the last attempt fell short, or why the proof closed; empty when nothing failed). A REJECTED proof carries rejection\_reason, an English sentence for the end user.
  * max\_attempts, attempts\_used, attempts\_remaining - how many rejected proofs this session allows, has had and has left. When attempts\_remaining is 0, starting another proof answers 409: mint a new session.
  * chain\_family - EVM, BTC, SOL or TRON: the key family behind chain, so a client picks the right wallet. One EVM key holds the same address on every EVM chain.
  * wallet\_address, chain (as minted, for example "ETH"), holder\_name, vasp\_name, callback\_url, expires\_at.

  Failure modes:

  * 404 - unknown token.
  * 410 - the session expired without completing.

  Prefer travel\_rule.status.updated webhooks over polling when the session is linked to a transfer.

  Full guide: /transaction-monitoring/wallet-ownership-widget#detect-completion.\`
</pre>

붙여넣을 곳


## OpenAPI

````yaml ko/openapi-25.json GET /v3/travel-rule/widget/{token}/
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/travel-rule/widget/{token}/:
    get:
      tags:
        - Travel Rule
      summary: 지갑 소유권 위젯 컨텍스트 가져오기
      description: >-
        위젯 세션 token으로 식별되는 공개 읽기 endpoint이며 API 키가 필요하지 않습니다. 위젯 컨텍스트와 모든 증명의
        상태를 반환하므로 폴링하여 완료 여부를 감지할 수 있습니다. 증명이 검증되면 completed_at이 null이 아닌 값이
        됩니다. SATOSHI_TEST 증명은 입금이 온체인에서 감지되었으나 아직 확인되지 않은 동안 상태 PENDING에 머무를 수
        있습니다. 백그라운드 작업이 자동으로 재확인하고 입금이 확인되면 완료하므로 대기하는 동안 클라이언트 작업이 필요하지 않습니다. 각
        증명은 해당 방식에 필요한 필드를 포함합니다: SATOSHI_TEST의 경우 deposit_address,
        expected_amount, 자체 expires_at, MESSAGE_SIGNING의 경우 challenge. 세션이 전송에
        연결되어 있는 경우 폴링보다 travel_rule.status.updated webhook을 사용하는 것이 좋습니다.
      operationId: getTravelRuleWidgetContext
      parameters:
        - name: token
          in: path
          required: true
          description: 위젯 세션이 생성되었을 때 반환된 불투명 세션 token입니다.
          schema:
            type: string
      responses:
        '200':
          description: 위젯 컨텍스트 및 증명 상태입니다.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleWidgetContext'
        '404':
          description: 알 수 없는 token입니다.
        '410':
          description: 세션이 완료되지 않고 만료되었습니다.
      security:
        - {}
      x-codeSamples:
        - lang: curl
          label: curl
          source: curl https://verification.didit.me/v3/travel-rule/widget/{token}/
components:
  schemas:
    TravelRuleWidgetContext:
      type: object
      properties:
        vasp_name:
          type: string
          description: VASP 프로필의 법인명으로, 위젯에서 고객에게 표시됩니다. 프로필이 없으면 비어 있습니다.
        wallet_address:
          type: string
        chain:
          type: string
          description: 전송한 그대로 세션이 발행된 체인입니다.
        chain_family:
          type: string
          nullable: true
          enum:
            - EVM
            - BTC
            - SOL
            - TRON
            - null
          description: >-
            체인에 사용되는 키 제품군입니다. EVM(Ethereum, BNB Chain, Polygon, Arbitrum, Base,
            Optimism, Avalanche, Linea 및 기타 EVM 체인), BTC, SOL 또는 TRON입니다. 하나의
            EVM 키가 모든 EVM 체인에서 동일한 주소를 제어합니다. 체인에서 서명을 검증할 수 없는 경우 null입니다.
        holder_name:
          type: string
        allowed_methods:
          type: array
          items:
            type: string
            enum:
              - MESSAGE_SIGNING
              - SCREENSHOT
              - SATOSHI_TEST
              - SELF_DECLARATION
          description: >-
            이 세션에서 사용 가능한 증명 방법입니다. MESSAGE_SIGNING에는 chain_family가 있는 체인이 필요하고,
            SATOSHI_TEST에는 세션의 satoshi_deposit_address 및 Didit이 입금을 다시 읽을 수 있는
            체인이 필요하며, SCREENSHOT에는 allow_screenshot_proof 설정이 필요하고,
            SELF_DECLARATION에는 allow_self_declaration 설정이 필요합니다.
        transfer_status:
          type: string
          nullable: true
          description: 연결된 Travel Rule 전송의 상태입니다. 세션이 transaction_id 없이 생성된 경우 null입니다.
        callback_url:
          type: string
          description: 완료 후 위젯이 고객을 다시 보낼 위치입니다. 설정되지 않은 경우 비어 있습니다.
        expires_at:
          type: string
          format: date-time
        completed_at:
          type: string
          format: date-time
          nullable: true
          description: 증명이 검증되면 null이 아닙니다.
        proofs:
          type: array
          items:
            $ref: '#/components/schemas/TravelRuleWidgetProofSummary'
        max_attempts:
          type: integer
          description: 이 세션에서 허용하는 거부된 지갑 증명입니다.
        attempts_used:
          type: integer
          description: 지금까지 거부된 증명입니다.
        attempts_remaining:
          type: integer
          description: 0인 경우 다른 증명을 시작하면 409를 응답하며 새로운 위젯 세션을 생성합니다.
        customization:
          type: object
          nullable: true
          description: >-
            화이트 라벨이 활성화된 경우 애플리케이션의 화이트 라벨 맞춤 설정(색상, 로고, 글꼴 모음)입니다. 위젯은 인증 흐름과
            동일한 브랜딩으로 렌더링됩니다. 그렇지 않은 경우 null입니다.
    TravelRuleWidgetProofSummary:
      type: object
      properties:
        proof_id:
          type: string
          format: uuid
        method:
          type: string
          enum:
            - MESSAGE_SIGNING
            - SATOSHI_TEST
            - SCREENSHOT
            - SELF_DECLARATION
        status:
          type: string
          enum:
            - PENDING
            - VERIFIED
            - REJECTED
            - EXPIRED
          description: >-
            PENDING: 최종 사용자가 이 방식을 선택했으며 증명이 아직 결정되지 않았습니다. 실패한 서명 또는 아직 읽을 수
            없거나 확인되지 않은 테스트 입금은 failure_reason과 함께 증명을 PENDING 상태로 유지하므로 최종 사용자가
            다시 시도할 수 있습니다. 제출된 SATOSHI_TEST 입금은 유효 기간이 닫힐 때까지 자동으로 재확인되며, 제출된
            SCREENSHOT은 검토를 대기합니다. VERIFIED: 소유권이 증명되었습니다. REJECTED: 테스트 입금이 확실히
            잘못되었거나(다른 발신자, 입금 주소로 전송된 예상치 않은 금액, 챌린지보다 이전 시점, 또는 이미 다른 지갑을 증명한
            거래) 검토자가 스크린샷을 거부했습니다. failure_reason에 구체적인 사유가 표시됩니다. 거부된 증명은 최종적이며
            세션 시도 횟수 중 하나를 사용합니다. EXPIRED: 증명을 더 이상 결정할 수 없습니다(유효 기간 만료, 최종 사용자가
            방식 변경, 위젯 세션 만료, 또는 지갑 보유자 변경). failure_reason에 구체적인 사유가 표시됩니다.
        wallet_address:
          type: string
        chain:
          type: string
          description: '증명이 대상인 주소록 항목의 표준 체인 식별자입니다(예: ETH, BTC, SOL, TRX).'
        deposit_address:
          type: string
          nullable: true
          description: 고객이 사토시 테스트 금액을 보내야 하는 입금 주소입니다. SATOSHI_TEST 증명에만 존재합니다.
        expected_amount:
          type: string
          nullable: true
          description: >-
            Satoshi 테스트 입금과 일치해야 하는 입금의 고유 통화로 표시된 정확한 온체인 금액입니다. SATOSHI_TEST
            증명에만 존재합니다.
        expires_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            해당 증명 자체의 사토시 테스트 기간 마감 시한입니다. SATOSHI_TEST 증명에만 존재하며, SATOSHI_TEST가
            제공될 경우 위젯 세션 자체의 expires_at이 이를 포함하도록 연장됩니다.
        challenge:
          type: string
          nullable: true
          description: 고객이 자신의 지갑으로 서명하는 Didit 발행 메시지입니다. MESSAGE_SIGNING 증명에만 존재합니다.
        rejection_reason:
          type: string
          description: >-
            증명이 거부된 이유(최종 사용자를 위한 영어 문장)입니다. `status`가 REJECTED일 때만 존재하며, 검토자가
            스크린샷을 거부한 경우에는 비어 있습니다(검토자 메모는 외부에 공개되지 않음).
        created_at:
          type: string
          format: date-time
        attempts:
          type: integer
          description: 이 증명을 위해 증빙 자료(서명, 거래 ID, 업로드)가 제출된 횟수입니다.
        failure_reason:
          allOf:
            - $ref: '#/components/schemas/TravelRuleWalletProofFailureReason'
          description: 마지막 시도가 실패한 이유 또는 증명이 종료된 이유입니다. 실패한 항목이 없으면 비어 있습니다.
    TravelRuleWalletProofFailureReason:
      type: string
      enum:
        - ''
        - SIGNATURE_INVALID
        - SIGNATURE_UNSUPPORTED_SCHEME
        - DEPOSIT_NOT_FOUND
        - DEPOSIT_UNCONFIRMED
        - DEPOSIT_LOOKUP_FAILED
        - DEPOSIT_MISMATCH
        - DEPOSIT_STALE
        - TXID_REUSED
        - CHAIN_UNSUPPORTED
        - WINDOW_EXPIRED
        - OWNERSHIP_CHANGED
        - METHOD_SWITCHED
        - REVIEW_REJECTED
        - ABANDONED
      description: >-
        지갑 소유권 증명 또는 마지막 시도가 VERIFIED에 도달하지 못한 이유입니다. 실패한 항목이 없으면 비어 있습니다.
        PENDING 증명에도 포함될 수 있습니다. 즉 마지막 시도가 실패했으며 최종 사용자가 다시 시도할 수 있습니다.
        DEPOSIT_MISMATCH, DEPOSIT_STALE, TXID_REUSED 및 REVIEW_REJECTED는 증명을
        REJECTED 상태로 종료합니다. SIGNATURE_INVALID: 서명이 지갑 및 챌린지와 일치하지 않습니다.
        SIGNATURE_UNSUPPORTED_SCHEME: 지갑이 Didit에서 검증하지 않는 형식으로 서명했습니다.
        DEPOSIT_NOT_FOUND, DEPOSIT_UNCONFIRMED, DEPOSIT_LOOKUP_FAILED: 테스트 입금을
        읽을 수 없거나 아직 확인되지 않았습니다. Didit은 테스트 기간이 종료될 때까지 계속 확인합니다.
        DEPOSIT_MISMATCH: 트랜잭션이 지갑에서 입금 주소로 예상 금액을 전송하지 않습니다. DEPOSIT_STALE:
        트랜잭션이 챌린지보다 이전 시점의 것입니다. TXID_REUSED: 트랜잭션이 이미 다른 지갑을 증명했습니다.
        CHAIN_UNSUPPORTED: 이 체인에서는 해당 방식을 사용할 수 없습니다. WINDOW_EXPIRED: 테스트 기간이
        만료되었습니다. OWNERSHIP_CHANGED: 위젯 세션이 생성된 후 지갑 소유자가 변경되었거나 주소록에서 지갑이
        삭제되었습니다. METHOD_SWITCHED: 최종 사용자가 이 방식을 완료하기 전에 다른 방식을 선택했습니다.
        REVIEW_REJECTED: 검토자가 스크린샷을 거부했습니다. ABANDONED: 최종 사용자가 완료하기 전에 위젯 세션이
        만료되었습니다.

````

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