> ## 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 से वॉलेट स्वामित्व विजेट सत्र बनाएँ: ग्राहक संदेश हस्ताक्षर, Satoshi test, स्क्रीनशॉट या स्व-घोषणा से वॉलेट नियंत्रण साबित करें



मिंट वॉलेट-स्वामित्व विजेट सत्र API प्रॉम्प्ट
        प्रॉम्प्ट को क्लिपबोर्ड पर कॉपी करें



      
      

\<pre>

\`Mint a hosted wallet-ownership widget session so a customer can prove control of a crypto wallet - to advance a Travel Rule transfer out of UNCONFIRMED_OWNERSHIP, or to pre-verify a wallet before any transfer exists.

Endpoint:
POST https://verification.didit.me/v3/travel-rule/widget-session/

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

You rarely need this call: with auto_wallet_verification on (the default), Didit auto-mints a widget session at transaction creation whenever a transfer needs end-user proof, and returns it in the transaction's action_required block. Mint manually for pre-verification or when auto_wallet_verification is off.

Request body (application/json):
\{
"wallet_address": "0x8ba1f109551bD432803012645Ac136ddd64DBA72",   // the wallet to verify
"chain": "ETH",                               // chain identifier (ETH, BTC, SOL, TRX, ...); use the same token your transfers carry
"holder_name": "Ana Diaz",                    // used for the beneficiary name match
"vendor_data": "user-042",                    // your internal id, carried onto the address-book entry
"transaction_id": "<didit-transaction-uuid>", // optional: transfer to advance when the proof verifies
"satoshi_deposit_address": "",                // optional: a deposit address you control - enables the SATOSHI_TEST method
"callback_url": "https://yourapp.example/wallet-verified",  // optional: where the widget returns the customer
"expires_in_minutes": 60                      // optional; auto-extended to cover the Satoshi test window
}

When the customer starts a proof, Didit saves the wallet to your address book with this chain (or reuses the entry with the same address and chain).
Address-book matching is chain-scoped and does not translate names ("ethereum" does not match "ETH"), so pass the same chain token your transfers carry.

What to read from the response:
\- url - send your customer there, verbatim (never construct it yourself). Open it in a real browser or the SDK modal - NEVER an embedded mobile webview (wallet deep links cannot escape a webview).
\- widget_session_id, token, expires_at.

Proof methods offered (depending on settings and mint parameters):
\- MESSAGE_SIGNING - when chain is an EVM, Solana, Bitcoin or Tron chain.
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.
\- SATOSHI_TEST - a micro-deposit, offered when you pass satoshi_deposit_address and chain is an EVM, Solana or Bitcoin chain.
\- SCREENSHOT - if allow_screenshot_proof.
\- SELF_DECLARATION - if allow_self_declaration.

Detect completion:
\- Poll GET /v3/travel-rule/widget/{token}/ (completed_at becomes non-null), or
\- Subscribe to travel_rule.status.updated webhooks when the session is linked to a transfer.

Failure modes:
\- 400 - callback_url is not an absolute http(s) URL ({"callback_url": ["callback_url must be an absolute http(s) URL."]}), expires_in_minutes is outside 5 to 10080, transaction_id is not a UUID, or a field is longer than its limit.
\- 404 - transaction_id does not name a Travel Rule transfer in this application.
\- Minting does not check wallet_address against the linked transfer, but every proof on a linked session must use the transfer's counterparty wallet, otherwise starting the proof returns 400.

Full guide: /transaction-monitoring/wallet-ownership-widget.`

\</pre>



      
      

यहाँ पेस्ट करें



## OpenAPI

````yaml hi/openapi-25.json POST /v3/travel-rule/widget-session/
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-session/:
    post:
      tags:
        - Travel Rule
      summary: वॉलेट-स्वामित्व विजेट सत्र मिंट करें
      description: >-
        होस्टेड वॉलेट-स्वामित्व विजेट URL/token जनरेट करें। वॉलेट पर नियंत्रण
        साबित करने के लिए ग्राहक को लौटाए गए url पर भेजें (मैसेज साइनिंग,
        Satoshi टेस्ट, स्क्रीनशॉट, या स्व-घोषणा)। यह विजेट इस रिलीज़ में केवल
        वेब के लिए है - url को सिस्टम ब्राउज़र या कस्टम टैब में खोलें, मोबाइल
        SDK वेबव्यू के अंदर कभी नहीं।
      operationId: createTravelRuleWidgetSession
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TravelRuleWidgetSessionCreate'
            example:
              wallet_address: '0xd3b62acb76fb27a7f8961ec40fa11746b113aca9'
              chain: ETH
              holder_name: Jane Doe
              vendor_data: user-042
              transaction_id: 99999999-aaaa-bbbb-cccc-dddddddddddd
              expires_in_minutes: 60
      responses:
        '201':
          description: मिंट किया गया विजेट सत्र।
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleWidgetSessionResponse'
        '400':
          description: >-
            अमान्य body: `callback_url` एक पूर्ण http(s) URL नहीं है,
            `expires_in_minutes` 5 से 10080 के बाहर है, `transaction_id` एक UUID
            नहीं है, या कोई फ़ील्ड अपनी सीमा से अधिक लंबा है।
          content:
            application/json:
              examples:
                Invalid callback_url:
                  value:
                    callback_url:
                      - callback_url must be an absolute http(s) URL.
        '404':
          description: >-
            `transaction_id` इस एप्लिकेशन में किसी Travel Rule स्थानांतरण को
            संदर्भित नहीं करता है।
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X POST
            https://verification.didit.me/v3/travel-rule/widget-session/ \
              -H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \
              -d '{"wallet_address":"0xd3b62acb76fb27a7f8961ec40fa11746b113aca9","chain":"ETH","holder_name":"Jane Doe","transaction_id":"99999999-aaaa-bbbb-cccc-dddddddddddd"}'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.travel_rule.create_widget_session(
                wallet_address="0xd3b62acb76fb27a7f8961ec40fa11746b113aca9",
                chain="ETH",
                holder_name="Jane Doe",
                vendor_data="user-042",
                transaction_id="99999999-aaaa-bbbb-cccc-dddddddddddd",
                expires_in_minutes=60,
            )
            print(result)
        - lang: javascript
          label: Node.js
          source: |-
            import Didit from "@didit-protocol/sdk-node";

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

            const result = await didit.travelRule.createWidgetSession({
              wallet_address: "0xd3b62acb76fb27a7f8961ec40fa11746b113aca9",
              chain: "ETH",
              holder_name: "Jane Doe",
              vendor_data: "user-042",
              transaction_id: "99999999-aaaa-bbbb-cccc-dddddddddddd",
              expires_in_minutes: 60,
            });
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.TravelRule.CreateWidgetSession(ctx, didit.TravelRuleWidgetSessionCreate{\n\tWalletAddress:    didit.String(\"0xd3b62acb76fb27a7f8961ec40fa11746b113aca9\"),\n\tChain:            didit.String(\"ETH\"),\n\tHolderName:       didit.String(\"Jane Doe\"),\n\tVendorData:       didit.String(\"user-042\"),\n\tTransactionID:    didit.String(\"99999999-aaaa-bbbb-cccc-dddddddddddd\"),\n\tExpiresInMinutes: didit.Int(60),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import me.didit.Didit;

            import me.didit.types.TravelRuleWidgetSessionCreate;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.travelRule().createWidgetSession(TravelRuleWidgetSessionCreate.builder()
                    .walletAddress("0xd3b62acb76fb27a7f8961ec40fa11746b113aca9")
                    .chain("ETH")
                    .holderName("Jane Doe")
                    .vendorData("user-042")
                    .transactionId("99999999-aaaa-bbbb-cccc-dddddddddddd")
                    .expiresInMinutes(60L)
                    .build());
            System.out.println(result);
        - lang: php
          label: PHP
          source: |-
            <?php

            require 'vendor/autoload.php';

            use Didit\DiditClient;

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

            $result = $didit->travelRule->createWidgetSession([
                'wallet_address' => '0xd3b62acb76fb27a7f8961ec40fa11746b113aca9',
                'chain' => 'ETH',
                'holder_name' => 'Jane Doe',
                'vendor_data' => 'user-042',
                'transaction_id' => '99999999-aaaa-bbbb-cccc-dddddddddddd',
                'expires_in_minutes' => 60,
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

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

            result = didit.travel_rule.create_widget_session(
              wallet_address: "0xd3b62acb76fb27a7f8961ec40fa11746b113aca9",
              chain: "ETH",
              holder_name: "Jane Doe",
              vendor_data: "user-042",
              transaction_id: "99999999-aaaa-bbbb-cccc-dddddddddddd",
              expires_in_minutes: 60
            )
            puts result.to_h
        - lang: csharp
          label: .NET
          source: >-
            using System;

            using System.Text.Json;

            using Didit;


            // Reads DIDIT_API_KEY.

            using var client = new DiditClient();


            var result = await client.TravelRule.CreateWidgetSessionAsync(new
            TravelRuleWidgetSessionCreate

            {
                WalletAddress = "0xd3b62acb76fb27a7f8961ec40fa11746b113aca9",
                Chain = "ETH",
                HolderName = "Jane Doe",
                VendorData = "user-042",
                TransactionId = "99999999-aaaa-bbbb-cccc-dddddddddddd",
                ExpiresInMinutes = 60,
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    TravelRuleWidgetSessionCreate:
      type: object
      properties:
        wallet_address:
          type: string
          description: >-
            सत्यापित करने के लिए वॉलेट पता। वैकल्पिक; खाली होने पर, प्रमाण शुरू
            होने पर पता प्रदान किया जाना चाहिए।
          maxLength: 128
        chain:
          type: string
          description: >-
            पते के लिए चेन token, उदाहरण के लिए `ETH`, `BTC` या `SOL`। उसी token
            का उपयोग करें जो आपकी वॉलेट एड्रेस बुक में है। संदेश हस्ताक्षर और
            Satoshi परीक्षण केवल समर्थित चेन के लिए पेश किए जाते हैं। एड्रेस बुक
            प्रविष्टि जिसे प्रमाण सत्यापित करता है, उसे उसके कैनोनिकल पहचानकर्ता
            (ETH, BTC, SOL, TRX) के तहत संग्रहीत करता है।
          maxLength: 32
        holder_name:
          type: string
          description: >-
            वॉलेट धारक का नाम, जिसका उपयोग लाभार्थी नाम मिलान के लिए किया जाता
            है।
          maxLength: 255
        vendor_data:
          type: string
          description: >-
            धारक के लिए आपका आंतरिक पहचानकर्ता, जो बनाई गई एड्रेस-बुक प्रविष्टि
            पर ले जाया जाता है।
          maxLength: 255
        transaction_id:
          type: string
          format: uuid
          description: >-
            वैकल्पिक। प्रमाण सत्यापित होने पर आगे बढ़ने वाले Travel Rule
            ट्रांसफ़र का Didit लेन-देन UUID।
          nullable: true
        satoshi_deposit_address:
          type: string
          description: >-
            वैकल्पिक। आपके नियंत्रण वाला एक डिपॉज़िट पता; इसे प्रदान करने से
            SATOSHI_TEST प्रमाण विधि सक्षम हो जाती है।
          maxLength: 128
        callback_url:
          type: string
          description: >-
            वैकल्पिक। पूर्ण http(s) URL जहां विजेट पूरा होने के बाद ग्राहक को
            वापस भेजता है।
          maxLength: 512
        expires_in_minutes:
          type: integer
          description: >-
            वैकल्पिक। मिंट किए गए लिंक का लाइफ़टाइम, मिनटों में। SATOSHI_TEST
            ऑफ़र किए जाने पर सातोशी टेस्ट विंडो को कवर करने के लिए स्वचालित रूप
            से विस्तारित किया जाता है।
          default: 60
          minimum: 5
          maximum: 10080
    TravelRuleWidgetSessionResponse:
      type: object
      properties:
        widget_session_id:
          type: string
          format: uuid
        token:
          type: string
          description: विजेट URL में एम्बेडेड अपारदर्शी सत्र token।
        url:
          type: string
          description: >-
            होस्टेड वॉलेट-स्वामित्व विजेट URL। इसे सिस्टम ब्राउज़र में शब्दशः
            खोलें (मोबाइल SDK वेबव्यू के अंदर कभी नहीं)।
        expires_at:
          type: string
          format: date-time
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        आपकी एप्लिकेशन की API कुंजी, Business Console में Developers -> API keys
        से। प्राथमिक कुंजी के पास पूर्ण एक्सेस होता है। एक नामित कुंजी को स्कोप
        किया जा सकता है: प्रति संसाधन 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.