> ## 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のウィジェットセッショントークンからウォレット所有証明を開始します。メッセージ署名、サトシテスト、スクリーンショット、自己申告に対応。同じ方法を再度選ぶと再開されます。

Widget Proof開始APIのプロンプト
プロンプトをクリップボードにコピー

<pre>
  \`Start a wallet-ownership proof for a widget session. This is the call the hosted widget makes when the end user picks a proof method; use it only if I build my own widget UI.

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

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

  Body:

  * method - one of the context's allowed\_methods: MESSAGE\_SIGNING, SATOSHI\_TEST, SCREENSHOT or SELF\_DECLARATION.
  * wallet\_address, chain - optional, default to the session's.

  Behavior:

  * 201 with a new PENDING proof. MESSAGE\_SIGNING returns the challenge to sign; SATOSHI\_TEST returns deposit\_address, expected\_amount and expires\_at; SELF\_DECLARATION is verified at once.
  * 200 with the proof already open when the same method is picked again (same challenge or amount): resume it, do not treat it as an error.
  * Picking another method closes the unfinished proof as METHOD\_SWITCHED, except a submitted screenshot or a test deposit still being checked.
  * After a REJECTED proof, picking a method starts a new one (201). A session takes a limited number of rejected proofs: the context reports max\_attempts, attempts\_used and attempts\_remaining.
  * Message signing works on EVM chains (Ethereum, BNB Chain, Polygon, Arbitrum, Base, Optimism, Avalanche, Linea and others), Bitcoin (BIP-137 and BIP-322 simple), Solana and Tron.

  Failure modes (errors carry a code to translate):

  * 400 - code CHAIN\_UNSUPPORTED when the method is not available on the chain; also an invalid body or a wallet that does not match the transfer.
  * 403 - SELF\_DECLARATION not allowed for the application.
  * 409 - code OWNERSHIP\_CHANGED: mint a new session for the current holder.
  * 409 - no attempts left (no code; the body carries attempts\_remaining 0): mint a new session.
  * 404 - unknown token. 410 - the session expired.

  Full guide: /transaction-monitoring/wallet-ownership-widget#what-it-proves.\`
</pre>

貼り付け先


## OpenAPI

````yaml ja/openapi-25.json POST /v3/travel-rule/widget/{token}/proofs/
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/:
    post:
      tags:
        - Travel Rule
      summary: ウォレット所有の証明を開始
      description: >-
        ウィジェットのセッショントークンで識別する公開エンドポイントで、APIキーは不要です。エンドユーザーが証明方式を選択したときに、ホスト型ウィジェットがこのエンドポイントを呼び出します。証明はこの呼び出しによってのみ作成され、証明ファネルにカウントされます。同じ方式を再度選択すると、2つ目の証明を開始するのではなく、すでに開いている証明が返されます(200、同じチャレンジまたは入金額)。別の方式を選択すると、未完了の証明はMETHOD_SWITCHEDとしてクローズされます。ただし、送信済みのスクリーンショットや確認中のテスト入金は除きます。MESSAGE_SIGNINGは署名するチャレンジを返し、SATOSHI_TESTは入金先アドレス、正確な金額、期間を返します。SELF_DECLARATIONは即座に検証されます(ステータスVERIFIED)。チェーンファミリーごとに検証される署名形式は次のとおりです。EVMチェーンはpersonal_sign(EIP-191)署名を16進数エンコードで受け付けます。Bitcoinは、BIP-137のsignmessage署名(P2PKH、P2SH-P2WPKH、P2WPKHアドレス)またはBIP-322のsimple署名(P2WPKH、P2TRアドレス)をbase64エンコードで受け付けます。Solanaはチャレンジに対するEd25519署名をbase58エンコードで受け付けます。TronはsignMessageV2(TIP-191)署名を16進数エンコードで受け付けます。BIP-322のfull署名またはproof-of-funds署名、あるいはマルチシグアドレスは、SIGNATURE_UNSUPPORTED_SCHEMEで失敗します。
      operationId: createTravelRuleWidgetProof
      parameters:
        - name: token
          in: path
          required: true
          description: ウィジェットセッションの発行時に返される不透明なセッショントークンです。
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TravelRuleWidgetProofCreate'
      responses:
        '200':
          description: この方法ですでに開かれている証明を再開したものです。
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleWidgetProofSummary'
        '201':
          description: 新しいPENDINGの証明（SELF_DECLARATIONの場合はVERIFIED）。
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleWidgetProofSummary'
        '400':
          description: >-
            リクエストボディが無効である、ウォレットが転送と一致しない、SCREENSHOTが許可されていない、またはそのチェーンでメソッドが利用できない場合のコードCHAIN_UNSUPPORTEDです。
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleWidgetProofError'
        '403':
          description: このアプリケーションではSELF_DECLARATIONは許可されていません。
        '404':
          description: 不明なトークンです。
        '409':
          description: >-
            コードOWNERSHIP_CHANGED：セッションの発行後に、ウォレットの保有者が変わったか、ウォレットが削除されました。現在の保有者向けに新しいセッションを発行してください。セッションにsatoshi_deposit_addressがない場合のSATOSHI_TEST、およびセッションに残りの試行回数がない場合（コードなし。ボディにはmax_attempts、attempts_used、attempts_remaining
            0が含まれます）にも返されます。この場合は新しいセッションを発行してください。
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleWidgetProofError'
        '410':
          description: セッションが期限切れになりました。
      security:
        - {}
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X POST
            https://verification.didit.me/v3/travel-rule/widget/{token}/proofs/
            \
              -H 'Content-Type: application/json' \
              -d '{"method": "MESSAGE_SIGNING"}'
components:
  schemas:
    TravelRuleWidgetProofCreate:
      type: object
      required:
        - method
      properties:
        method:
          type: string
          enum:
            - MESSAGE_SIGNING
            - SATOSHI_TEST
            - SCREENSHOT
            - SELF_DECLARATION
          description: エンドユーザーが選択した証明方法です。コンテキストのallowed_methodsのいずれかである必要があります。
        wallet_address:
          type: string
          maxLength: 128
          description: >-
            デフォルトはセッションのwallet_addressです。セッションが送金に紐付いている場合は、送金のウォレットと一致している必要があります。
        chain:
          type: string
          maxLength: 32
          description: デフォルトはセッションのチェーンです。
    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にその理由が示されます。却下された証明は確定であり、セッションの試行回数を1回消費します。EXPIRED:
            証明をこれ以上判定できない状態です（期間の終了、エンドユーザーによる方法の切り替え、ウィジェットセッションの失効、またはウォレットの保有者の変更）。failure_reasonにその理由が示されます。
        wallet_address:
          type: string
        chain:
          type: string
          description: 証明の対象となるアドレス帳エントリの正規チェーン識別子(例:ETH、BTC、SOL、TRX)。
        deposit_address:
          type: string
          nullable: true
          description: 顧客がSatoshiテスト金額を送金する必要がある入金アドレス。SATOSHI_TEST証明の場合にのみ含まれます。
        expected_amount:
          type: string
          nullable: true
          description: >-
            Satoshiテスト入金が一致しなければならない、入金のネイティブ通貨建ての正確なオンチェーン金額です。SATOSHI_TESTの証明にのみ含まれます。
        expires_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            このプルーフ自体のSatoshiテスト期間の期限。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: 前回の試行が基準に達しなかった理由、または証明がクローズされた理由。失敗がない場合は空です。
    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: statusとともに含まれます。クローズされた証明です。
        method:
          type: string
          enum:
            - MESSAGE_SIGNING
            - SATOSHI_TEST
            - SCREENSHOT
            - SELF_DECLARATION
          description: statusとともに含まれます。クローズされた証明の方法です。
        max_attempts:
          type: integer
          description: statusとともに含まれます。このセッションで許容されるウォレット証明の却下回数です。
        attempts_used:
          type: integer
          description: statusとともに含まれます。これまでに却下された証明の数です。
        attempts_remaining:
          type: integer
          description: statusとともに含まれます。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.