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

> 지갑 소유권 증명을 위해 서명, 테스트 입금 거래 ID 또는 스크린샷을 제출하세요. 실패하면 코드가 반환되고, 잘못된 입금은 거부됩니다. Didit



위젯 증빙 제출 API 프롬프트
        프롬프트를 클립보드에 복사



      
      

\<pre>

\`Submit the evidence for a wallet-ownership proof started from a widget session. The hosted widget makes this call; use it only if I build my own widget UI.

Endpoint:
POST https://verification.didit.me/v3/travel-rule/widget/{token}/proofs/{proof_id}/verify/

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

Body, by method:
\- MESSAGE_SIGNING - JSON {"signature": "..."}: the wallet's signature over the proof's challenge.
\- SATOSHI_TEST - JSON {"txid": "..."}: the test deposit's transaction id.
\- SCREENSHOT - multipart form with a file field.

Behavior:
\- 200 with status VERIFIED, is_ownership_verified and transfer_status once ownership is proven.
\- 200 with status PENDING for a screenshot (it waits for the customer's review) or a deposit not indexed or confirmed yet, with code DEPOSIT_NOT_FOUND or DEPOSIT_UNCONFIRMED (Didit rechecks it until the window closes; no resubmission needed).
\- Every submission counts in attempts.

Failure modes (errors carry a code to translate):
\- 400 - SIGNATURE_INVALID, SIGNATURE_UNSUPPORTED_SCHEME or DEPOSIT_LOOKUP_FAILED. The proof stays PENDING: let the end user try again.
\- 400 - DEPOSIT_MISMATCH, DEPOSIT_STALE or TXID_REUSED with status REJECTED: the deposit is genuinely wrong (another sender, not the expected amount to the deposit address, older than the challenge, or already used to prove another wallet). The proof is closed and uses one of the session's attempts; the body carries max_attempts, attempts_used and attempts_remaining. Pick a method again to start a new proof.
\- 409 - code OWNERSHIP_CHANGED, or a closed proof (REJECTED or EXPIRED; the body carries status, the code it closed with and the attempt counts): start a new proof.
\- 410 - the session expired, or code WINDOW_EXPIRED when the Satoshi test window closed.
\- 404 - unknown token or proof.

Full guide: /transaction-monitoring/wallet-ownership-widget#satoshi-test-verify-contract.`

\</pre>



      
      

붙여넣을 곳



## OpenAPI

````yaml ko/openapi-25.json POST /v3/travel-rule/widget/{token}/proofs/{proof_id}/verify/
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}/proofs/{proof_id}/verify/:
    post:
      tags:
        - Travel Rule
      summary: 지갑 소유권 증명 증빙 제출
      description: >-
        위젯 세션 token으로 식별되는 공개 endpoint이며 API 키가 필요하지 않습니다. 증명 방식에 필요한 증빙을
        전송하십시오: MESSAGE_SIGNING의 경우 서명, SATOSHI_TEST의 경우 txid(JSON), SCREENSHOT의
        경우 파일(multipart). 모든 제출은 시도 횟수로 계산됩니다. 검증되지 않은 서명이나 일치하지 않는 입금은 오류 코드와
        함께 400으로 응답하며 최종 사용자가 다시 시도할 수 있도록 증명 상태를 PENDING으로 유지합니다. 입금이 감지되었으나 아직
        확인되지 않은 경우 상태 PENDING과 함께 200으로 응답하고 기한이 만료될 때까지 자동으로 재확인합니다. 스크린샷은 상태
        PENDING과 함께 200으로 응답하고 검토 대기열(GET /v3/travel-rule/wallet-proofs/)에서
        대기합니다. EXPIRED 또는 REJECTED된 증명은 나중에 검증되지 않으므로 새 증명을 시작하십시오. 체인 패밀리별로
        검증되는 서명 형식: EVM 체인은 hex 인코딩된 personal_sign(EIP-191) 서명, Bitcoin은 base64
        인코딩된 BIP-137 signmessage 서명(P2PKH, P2SH-P2WPKH, P2WPKH 주소) 또는 BIP-322
        simple 서명(P2WPKH 및 P2TR 주소), Solana는 base58 인코딩된 챌린지에 대한 Ed25519 서명,
        Tron은 hex 인코딩된 signMessageV2(TIP-191) 서명을 지원합니다. BIP-322 full 또는
        proof-of-funds 서명, 또는 다중 서명 주소는 SIGNATURE_UNSUPPORTED_SCHEME 오류로 실패합니다.
      operationId: verifyTravelRuleWidgetProof
      parameters:
        - name: token
          in: path
          required: true
          description: 위젯 세션이 생성되었을 때 반환된 불투명 세션 token입니다.
          schema:
            type: string
        - name: proof_id
          in: path
          required: true
          description: 증명이 시작되었을 때 반환된 proof_id입니다.
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                signature:
                  type: string
                  description: 'MESSAGE_SIGNING: 증명의 챌린지에 대한 지갑 서명입니다.'
                txid:
                  type: string
                  description: 'SATOSHI_TEST: 테스트 입금의 거래 ID입니다.'
          multipart/form-data:
            schema:
              type: object
              required:
                - file
              properties:
                file:
                  type: string
                  format: binary
                  description: 'SCREENSHOT: 최종 사용자의 지갑 앱에 표시된 지갑을 보여주는 이미지입니다.'
      responses:
        '200':
          description: >-
            VERIFIED 또는 여전히 PENDING 상태입니다(검토 대기 중인 스크린샷, 아직 색인되지 않았거나 확인되지 않은
            입금, 코드 DEPOSIT_NOT_FOUND 또는 DEPOSIT_UNCONFIRMED).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleWidgetProofVerifyResult'
        '400':
          description: >-
            증거가 누락되었습니다. 최종 사용자가 다시 시도할 수 있도록 증명을 PENDING 상태로 유지하는 실패한 시도(코드
            SIGNATURE_INVALID, SIGNATURE_UNSUPPORTED_SCHEME 또는
            DEPOSIT_LOOKUP_FAILED)이거나, 증명을 거부하는 테스트 입금(코드 DEPOSIT_MISMATCH,
            DEPOSIT_STALE 또는 TXID_REUSED, 상태 REJECTED, 세션의 시도 횟수 포함)입니다.
            attempts_remaining이 0보다 큰 동안 방법을 다시 선택하면 새 증명이 시작됩니다.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleWidgetProofError'
        '404':
          description: 알 수 없는 token이거나 이 세션에 해당 증명이 없습니다.
        '409':
          description: >-
            코드 OWNERSHIP_CHANGED(증명이 이 코드로 종료됨); 종료된 증명(REJECTED 또는 EXPIRED) 및
            해당 상태, 증명을 종료한 코드 및 세션 시도 횟수: 새 증명을 시작하려면 방법을 다시 선택하십시오; 또는 시작 시
            검증되는 SELF_DECLARATION 증명입니다.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleWidgetProofError'
        '410':
          description: 세션이 만료되었거나, 사토시 테스트 윈도우가 닫혔을 때 WINDOW_EXPIRED 코드가 반환되었습니다.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleWidgetProofError'
      security:
        - {}
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X POST
            https://verification.didit.me/v3/travel-rule/widget/{token}/proofs/{proof_id}/verify/
            \
              -H 'Content-Type: application/json' \
              -d '{"signature": "0x..."}'
components:
  schemas:
    TravelRuleWidgetProofVerifyResult:
      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
        is_ownership_verified:
          type: boolean
          description: 증명이 VERIFIED 상태일 때 표시됩니다. 주소록 항목의 소유권이 확인되었습니다.
        transfer_status:
          type: string
          nullable: true
          description: 증명이 VERIFIED 상태일 때 표시됩니다. 연결된 전송의 상태이며, 연결된 항목이 없으면 null입니다.
        detail:
          type: string
          description: >-
            증명이 PENDING 상태를 유지하는 동안 표시됩니다. 검토 대기 중인 제출된 스크린샷 또는 아직 확인되지 않은 테스트
            입금입니다.
        code:
          allOf:
            - $ref: '#/components/schemas/TravelRuleWalletProofFailureReason'
          description: 보류 중인 테스트 입금에 표시됩니다. 아직 확인되지 않은 이유입니다.
    TravelRuleWidgetProofError:
      type: object
      properties:
        detail:
          type: string
          description: 사람이 읽기 쉬운 영어 메시지입니다.
        code:
          allOf:
            - $ref: '#/components/schemas/TravelRuleWalletProofFailureReason'
          description: 클라이언트가 자체 번역 메시지를 표시할 수 있도록 제공되는 기계 판독 가능한 사유입니다.
        status:
          type: string
          enum:
            - PENDING
            - VERIFIED
            - REJECTED
            - EXPIRED
          description: >-
            증명이 종료되었을 때 표시됩니다. 방금 제출된 입금으로 인해 REJECTED(400)되거나, 이미 종료된 증명에 증빙
            자료가 전송되었을 때 REJECTED 또는 EXPIRED(409)됩니다.
        proof_id:
          type: string
          format: uuid
          description: 상태와 함께 표시됩니다. 종료된 증명입니다.
        method:
          type: string
          enum:
            - MESSAGE_SIGNING
            - SATOSHI_TEST
            - SCREENSHOT
            - SELF_DECLARATION
          description: 상태와 함께 표시됩니다. 종료된 증명의 방식입니다.
        max_attempts:
          type: integer
          description: 상태와 함께 표시됩니다. 이 세션에서 허용하는 거부된 지갑 증명입니다.
        attempts_used:
          type: integer
          description: 상태와 함께 표시됩니다. 지금까지 거부된 증명 목록입니다.
        attempts_remaining:
          type: integer
          description: 상태와 함께 표시됩니다. 0인 경우 다른 증명을 시작하면 409가 반환되며 새 위젯 세션을 발급해야 합니다.
    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.