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

# Travel Rule ट्रांसफर API: समाप्त, पुनः भेजें, अपडेट

> Didit के साथ Travel Rule ट्रांसफ़र को उसके ब्लॉकचेन हैश से बंद करें, रद्द या पुनः भेजें, या वह वॉलेट दर्ज करें जहाँ से धन वास्तव में गया।



Travel Rule ट्रांसफ़र कार्रवाइयाँ API प्रॉम्प्ट
        प्रॉम्प्ट को क्लिपबोर्ड पर कॉपी करें



      
      

\<pre>

\`Act on an existing Travel Rule transfer: report the on-chain hash to finish it, cancel it, re-run counterparty routing, replace a refused compliance email, or record the wallet the funds left from.

Endpoint:
PATCH https://verification.didit.me/v3/transactions/{transaction_id}/travel-rule/

Authentication:
Use the x-api-key header with my Didit API key. {transaction_id} is the Didit transaction uuid.

Four mutually exclusive bodies:

1\. Finish (close out after broadcasting on-chain):
\{"payment_txn_id": "0x5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060"}
\- Requires an OUTBOUND transfer in COMPLETED status - otherwise 409.
\- Moves the transfer (and its INTERNAL-rail counterpart, if any) to FINISHED and stores the hash on the transaction.
\- Over GTR, VerifyVASP or Sygna Bridge, the network learns the hash after the response, with retries (see delivery below).
\- On the TRP rail, Didit also posts the hash to the counterparty's confirmation callback.

2\. Cancel:
\{"action": "cancel"}
\- Allowed from any non-terminal status; moves the transfer (and its INTERNAL-rail counterpart, if any) to CANCELLED.
\- From a terminal status (FINISHED, CANCELLED, EXPIRED) it returns 409.
\- On an outbound TRP transfer, Didit also sends a cancellation to the counterparty.
\- Over GTR, VerifyVASP or Sygna Bridge, the network is told after the response, with retries.

3\. Resend (re-run the routing ladder):
\{"action": "resend"}
\- Allowed only on an OUTBOUND transfer in COUNTERPARTY_VASP_NOT_FOUND, COUNTERPARTY_VASP_NOT_REACHABLE, or NOT_ENOUGH_COUNTERPARTY_DATA - otherwise 409.
\- Resets the deadline and re-runs routing; a transfer whose destination wallet was declared unhosted moves to UNCONFIRMED_OWNERSHIP.
\- First give Didit a route, for example by registering the destination wallet in your address book (same chain as the transfer, or a blank chain) with the counterparty's travel_address (TRP carries BTC, ETH, and USDC on a named network), or by adding a compliance contact for the counterparty's directory entry with POST /v3/travel-rule/counterparty-contacts/, then resend.
\- Resend reuses the transfer's beneficiary_data, which you cannot change after creation except for the compliance email (body 4), so submit a new transaction to send different beneficiary data.
\- A previously recorded blockchain-analytics attribution is reused - no new lookup, no new charge.
\- Discovery runs again from the first step (internal address book, wallet attribution, network lookup, your VASP hint, then the end user); the transfer's "discovery" list shows what each step found.
\- Queued, not run inside the request: the response shows the transfer back in AWAITING_COUNTERPARTY with a "resend queued" timeline entry, and the outcome arrives as a travel_rule.status.updated webhook. A resend sent while an earlier attempt is still running is sent once that attempt settles.
\- If routing still resolves nothing, the transfer lands back in COUNTERPARTY_VASP_NOT_FOUND.

4\. Update the compliance email (the fix for reason email_undeliverable):
\{"action": "update_compliance_email", "compliance_email": "desk@bene-casp.example"}
\- Allowed only on an OUTBOUND transfer in COUNTERPARTY_VASP_NOT_FOUND, COUNTERPARTY_VASP_NOT_REACHABLE, or NOT_ENOUGH_COUNTERPARTY_DATA - otherwise 409.
\- A missing or malformed compliance_email returns 400.
\- Stores the address as this transfer's beneficiary_data.counterparty_vasp_email; it belongs to this transfer only and joins no directory entry or contact list.
\- The status does not change and the timeline gains "compliance email updated". The transfer keeps reason email_undeliverable until you send {"action": "resend"}, which sends the request to the new address.

4\. Update the originator wallet (the wallet the funds actually left from):
\{"action": "update_originator_wallet", "wallet_address": "bc1q...", "memo": ""}
\- Outbound transfers only (an inbound transfer -> 409), and never a CANCELLED or EXPIRED one (-> 409).
\- Use it when a withdrawal is broadcast from another address than the one declared, typically a UTXO withdrawal spending whichever addresses held the coins. When the transfer's UTXO inputs are known, wallet_address must be one of them (-> 400 otherwise).
\- Changes the record only: nothing is sent to the counterparty again and the status stays. chain_details.originator becomes the new wallet with source "updated", the timeline records the previous and the new wallet, and the INTERNAL-rail counterpart is updated the same way.

5\. Name the counterparty (when discovery could not):
\{"action": "beneficiary_vasp", "beneficiary_vasp": "<directory VASP id>"}
\- The id comes from GET /v3/travel-rule/vasps/.
\- Allowed only for an outbound transfer in COUNTERPARTY_VASP_NOT_FOUND, COUNTERPARTY_VASP_NOT_REACHABLE, or NOT_ENOUGH_COUNTERPARTY_DATA - otherwise 409.
\- Routes the transfer to that VASP and sends it again; automatic discovery never overrides your choice.
\- 400 if beneficiary_vasp is missing or not a valid id, 404 if no directory entry has that id.

What to read from the response:
\- The full transfer object: status, rail, direction, ownership_confirmed, deadline_at, timeline, counterparty_vasp, delivery, discovery, reason, next_actions.
\- delivery: the latest message the transfer owes the other side - kind (SEND, ANSWER, TXID, CANCEL, POLL), status (QUEUED, SENDING, RETRYING, DELIVERED, FAILED), rail, attempts, last_error, next_attempt_at, delivered_at. Failures a network may recover from are retried after 30 s, 2, 10, 30 and 60 minutes; when a first message fails for good the transfer moves to COUNTERPARTY_VASP_NOT_REACHABLE. null when the transfer never owed a message.
\- reason and next_actions say why a COUNTERPARTY_VASP_NOT_FOUND or COUNTERPARTY_VASP_NOT_REACHABLE transfer is stuck and what moves it on: email_undeliverable offers update_compliance_email then resend, delivery_failed offers resend, and a discovery reason offers select_counterparty_vasp, declare_self_hosted, add_vasp_hint and resend. Both are empty for any other status, so they clear once a resend moves the transfer on.

Order of operations for outbound transfers:
submit transaction -> wait for travel_rule.status == "COMPLETED" -> broadcast on-chain -> PATCH with payment_txn_id -> FINISHED.
Never broadcast before COMPLETED.
A transfer sent over TRUST cannot reach COMPLETED, because TRUST sends back nothing Didit can read; it stays AWAITING_COUNTERPARTY until it expires. Over GTR, VerifyVASP and Sygna Bridge, Didit reads the counterparty's answer from the network.
If the message cannot be delivered, the transfer moves to COUNTERPARTY_VASP_NOT_REACHABLE instead.

Failure modes:
\- 400 - the body has none of payment_txn_id or a supported action, update_compliance_email has a missing or malformed compliance_email, or a wallet_address or memo the transfer's chain cannot carry.
\- 409 - action not allowed from the transfer's current status or direction (see the per-action rules above).
\- 400 - action=beneficiary_vasp without a valid beneficiary_vasp.
\- 404 - unknown transaction, no Travel Rule transfer attached, or (action=beneficiary_vasp) no directory entry has that id.

Full guide: /transaction-monitoring/travel-rule#sending-a-transfer and /transaction-monitoring/travel-rule#why-a-transfer-is-stuck.`

\</pre>



      
      

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



## OpenAPI

````yaml hi/openapi-25.json PATCH /v3/transactions/{transaction_id}/travel-rule/
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/{transaction_id}/travel-rule/:
    patch:
      tags:
        - Travel Rule
      summary: >-
        Travel Rule ट्रांसफ़र के प्रेषक वॉलेट को समाप्त करें, रद्द करें, पुनः
        भेजें या अपडेट करें
      description: >-
        ऑन-चेन हैश की रिपोर्ट करने और आउटबाउंड COMPLETED ट्रांसफ़र को FINISHED
        में ले जाने के लिए `payment_txn_id` प्रदान करें (इसका INTERNAL-रेल
        समकक्ष भी FINISHED में चला जाता है), गैर-टर्मिनल ट्रांसफ़र को रद्द करने
        के लिए `{"action": "cancel"}` प्रदान करें, या
        COUNTERPARTY_VASP_NOT_FOUND, COUNTERPARTY_VASP_NOT_REACHABLE, या
        NOT_ENOUGH_COUNTERPARTY_DATA में अटके आउटबाउंड ट्रांसफ़र को फिर से रूट
        करने के लिए `{"action": "resend"}` प्रदान करें (पहले प्रतिपक्ष डेटा में
        सुधार करें, उदाहरण के लिए गंतव्य वॉलेट प्रविष्टि में travel_address
        जोड़ें)। resend केवल आउटबाउंड ट्रांसफ़र पर लागू होता है। `{"action":
        "update_compliance_email", "compliance_email": "desk@example.com"}` उन
        तीन स्थितियों में से किसी एक में आउटबाउंड ट्रांसफ़र के अनुपालन ईमेल को
        बदल देता है, जो `reason: email_undeliverable` का समाधान है: स्थिति नहीं
        बदलती है, और अगला `resend` उस पते पर अनुरोध भेजता है। पुनः भेजना कतार
        में रखा जाता है, अनुरोध के भीतर नहीं चलाया जाता है: रिस्पॉन्स ट्रांसफ़र
        को वापस AWAITING_COUNTERPARTY में `resend queued` टाइमलाइन प्रविष्टि और
        कतारबद्ध `delivery` के साथ दिखाता है, और यह किस गंतव्य पर गया, इसकी
        जानकारी `travel_rule.status.updated` webhook के रूप में प्राप्त होती है।
        जब ट्रांसफ़र GTR, VerifyVASP या Sygna Bridge पर जाता है, तो नेटवर्क को
        रिस्पॉन्स के बाद, पुनः प्रयासों के साथ, ऑन-चेन हैश या रद्दीकरण की
        जानकारी मिलती है; `delivery` दिखाता है कि वह संदेश किस स्थिति में है।
        `{"action": "update_originator_wallet", "wallet_address": "..."}` उस
        वॉलेट को रिकॉर्ड करता है जिससे आउटबाउंड ट्रांसफ़र पर वास्तव में धनराशि
        निकली थी, उदाहरण के लिए वह पता जिससे आपके द्वारा घोषित मुख्य वॉलेट के
        बजाय UTXO निकासी प्रसारित की गई थी। यह केवल रिकॉर्ड को बदलता है:
        प्रतिपक्ष को दोबारा कुछ नहीं भेजा जाता है और स्थिति वही रहती है। प्रेषक
        `source: updated` के साथ `chain_details.originator` बन जाता है, पिछले और
        नए वॉलेट के साथ परिवर्तन को `timeline` में जोड़ा जाता है, और ट्रांसफ़र
        के INTERNAL-रेल समकक्ष को उसी तरह अपडेट किया जाता है। `{"action":
        "beneficiary_vasp", "beneficiary_vasp": "<directory VASP id>"}`
        COUNTERPARTY_VASP_NOT_FOUND, COUNTERPARTY_VASP_NOT_REACHABLE या
        NOT_ENOUGH_COUNTERPARTY_DATA में किसी आउटबाउंड ट्रांसफ़र पर खोज न होने
        पर प्रतिपक्ष का नाम स्वयं तय करता है: ट्रांसफ़र को उस VASP पर रूट किया
        जाता है और फिर से भेजा जाता है।
      operationId: patchTravelRuleTransfer
      parameters:
        - name: transaction_id
          in: path
          required: true
          description: ट्रांसफ़र का स्वामित्व रखने वाला Didit-स्थायी लेन-देन UUID।
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TravelRuleTransferPatchRequest'
            examples:
              Finish:
                value:
                  payment_txn_id: 0xchainhash
              Cancel:
                value:
                  action: cancel
              Resend:
                value:
                  action: resend
              Update compliance email:
                value:
                  action: update_compliance_email
                  compliance_email: desk@example.com
              Update originator wallet:
                value:
                  action: update_originator_wallet
                  wallet_address: bc1qOriginatorInputAddress01
              Name the counterparty:
                value:
                  action: beneficiary_vasp
                  beneficiary_vasp: 9f1c2b34-5d6e-4f70-8a91-b2c3d4e5f607
      responses:
        '200':
          description: >-
            अपडेट किया गया ट्रांसफ़र। `update_compliance_email` के बाद इसकी
            स्थिति अपरिवर्तित रहती है और यह अगले `resend` तक `reason:
            email_undeliverable` बनाए रखता है।
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleTransferDetail'
        '400':
          description: >-
            न तो payment_txn_id और न ही कोई समर्थित कार्रवाई प्रदान की गई थी,
            `update_compliance_email` पर `compliance_email` गायब है या कोई ईमेल
            पता नहीं है, या, `update_originator_wallet` के लिए, कोई
            wallet_address नहीं है, ऐसा वॉलेट या मेमो जिसे ट्रांसफर की चेन नहीं
            ले जा सकती, या ऐसा वॉलेट जो ट्रांसफर के UTXO इनपुट में से एक नहीं
            है, या `beneficiary_vasp` गायब है या एक मान्य डायरेक्टरी VASP id
            नहीं है।
          content:
            application/json:
              examples:
                No action:
                  value:
                    detail:
                      - >-
                        Provide payment_txn_id, action=cancel, action=resend,
                        action=beneficiary_vasp, action=update_originator_wallet
                        or action=update_compliance_email.
                Invalid compliance email:
                  value:
                    compliance_email:
                      - Enter a valid email address.
        '404':
          description: >-
            अज्ञात लेन-देन, लेन-देन में कोई Travel Rule ट्रांसफ़र नहीं है, या
            (कार्रवाई `beneficiary_vasp`) किसी भी डायरेक्टरी प्रविष्टि में वह id
            नहीं है।
        '409':
          description: >-
            ट्रांसफर ऐसी स्थिति में नहीं है जो इस कार्रवाई की अनुमति देता हो
            (उदा. समाप्त करने के लिए COMPLETED/outbound नहीं, रद्द करने के लिए
            पहले से ही अंतिम स्थिति में, या पुनः भेजने के लिए पुनः भेजने योग्य
            स्थिति में आउटबाउंड ट्रांसफर नहीं)। `update_compliance_email`
            इनबाउंड ट्रांसफर के लिए, और COUNTERPARTY_VASP_NOT_FOUND,
            COUNTERPARTY_VASP_NOT_REACHABLE और NOT_ENOUGH_COUNTERPARTY_DATA के
            बाहर के आउटबाउंड ट्रांसफर के लिए `409` उत्तर देता है।
            `update_originator_wallet` इनबाउंड, रद्द या समय-सीमा समाप्त ट्रांसफर
            के लिए `409` उत्तर देता है। `beneficiary_vasp` तब तक `409` उत्तर
            देता है जब तक कि ट्रांसफर आउटबाउंड न हो और
            COUNTERPARTY_VASP_NOT_FOUND, COUNTERPARTY_VASP_NOT_REACHABLE या
            NOT_ENOUGH_COUNTERPARTY_DATA में न हो।
          content:
            application/json:
              examples:
                Cancel from a terminal status:
                  value:
                    detail: Transfer is already in a terminal state.
                Resend not allowed:
                  value:
                    detail: Transfer cannot be resent from its current state.
                Finish not allowed:
                  value:
                    detail: >-
                      Transfer must be an outbound transfer in COMPLETED status
                      to finish.
                Compliance email cannot change:
                  value:
                    detail: >-
                      The compliance email of this transfer cannot change from
                      its current state.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X PATCH
            https://verification.didit.me/v3/transactions/{transaction_id}/travel-rule/
            \
              -H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \
              -d '{"payment_txn_id": "0xchainhash"}'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.transactions.travel_rule.update_transfer(
                "11111111-2222-3333-4444-555555555555",
                payment_txn_id="0xchainhash",
            )
            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.transactions.travelRule.updateTransfer("11111111-2222-3333-4444-555555555555",
            {
              payment_txn_id: "0xchainhash",
            });

            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Transactions.TravelRule.UpdateTransfer(ctx, \"11111111-2222-3333-4444-555555555555\", didit.TravelRuleTransferPatchRequest{\n\tPaymentTxnID: didit.String(\"0xchainhash\"),\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.TravelRuleTransferPatchRequest;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.transactions().travelRule().updateTransfer("11111111-2222-3333-4444-555555555555",
            TravelRuleTransferPatchRequest.builder()
                    .paymentTxnId("0xchainhash")
                    .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->transactions->travelRule->updateTransfer('11111111-2222-3333-4444-555555555555',
            [
                'payment_txn_id' => '0xchainhash',
            ]);

            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

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

            result = didit.transactions.travel_rule.update_transfer(
              "11111111-2222-3333-4444-555555555555",
              payment_txn_id: "0xchainhash"
            )
            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.Transactions.TravelRule.UpdateTransferAsync("11111111-2222-3333-4444-555555555555",
            new TravelRuleTransferPatchRequest

            {
                PaymentTxnId = "0xchainhash",
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    TravelRuleTransferPatchRequest:
      type: object
      description: >-
        इनमें से ठीक एक प्रदान करें: payment_txn_id (finish), action=cancel,
        action=resend, compliance_email के साथ action=update_compliance_email,
        wallet_address के साथ action=update_originator_wallet, या
        beneficiary_vasp के साथ action=beneficiary_vasp।
      properties:
        payment_txn_id:
          type: string
          description: >-
            ऑन-चेन लेन-देन हैश। इसके लिए ट्रांसफ़र का COMPLETED स्थिति में
            आउटबाउंड ट्रांसफ़र होना आवश्यक है।
        action:
          type: string
          enum:
            - cancel
            - resend
            - update_compliance_email
            - update_originator_wallet
            - beneficiary_vasp
          description: >-
            "cancel" किसी गैर-टर्मिनल ट्रांसफर को रद्द करता है। "resend"
            COUNTERPARTY_VASP_NOT_FOUND, COUNTERPARTY_VASP_NOT_REACHABLE, या
            NOT_ENOUGH_COUNTERPARTY_DATA में अटके आउटबाउंड ट्रांसफर के लिए
            रूटिंग को फिर से चलाता है। "update_compliance_email" उन तीन
            स्थितियों में से किसी एक में मौजूद आउटबाउंड ट्रांसफर पर उस अनुपालन
            ईमेल को बदलता है जिस पर अनुरोध भेजा जाता है; इसके बाद "resend"
            भेजें। "update_originator_wallet" उस वॉलेट को रिकॉर्ड करता है जिससे
            वास्तव में धनराशि निकली थी (`wallet_address`, `memo`)।
            "beneficiary_vasp" उन स्थितियों में से किसी एक में मौजूद आउटबाउंड
            ट्रांसफर के लिए प्रतिपक्ष VASP को स्वयं निर्दिष्ट करता है
            (`beneficiary_vasp` आवश्यक है): इसे उस VASP पर रूट किया जाता है और
            फिर से भेजा जाता है।
        compliance_email:
          type: string
          format: email
          maxLength: 254
          description: >-
            `action: update_compliance_email` के साथ आवश्यक है। इसे इस ट्रांसफर
            के `beneficiary_data.counterparty_vasp_email` के रूप में रखा जाता
            है: यह केवल इसी ट्रांसफर से संबंधित है और किसी डायरेक्टरी प्रविष्टि
            या संपर्क सूची में शामिल नहीं होता है।
        wallet_address:
          type: string
          maxLength: 128
          description: >-
            `action: update_originator_wallet` के साथ: वह वॉलेट जिससे धनराशि
            निकली है। जब ट्रांसफ़र के UTXO इनपुट ज्ञात हों, तो यह उनमें से एक
            होना चाहिए।
        memo:
          type: string
          maxLength: 256
          description: >-
            `action: update_originator_wallet` के साथ: मेमो नेटवर्क पर वॉलेट का
            मेमो या टैग। वैकल्पिक।
        beneficiary_vasp:
          type: string
          format: uuid
          description: >-
            action=beneficiary_vasp के साथ आवश्यक है: `GET
            /v3/travel-rule/vasps/` से डायरेक्टरी VASP की `id`। आपकी पसंद हर
            स्वचालित खोज चरण से ऊपर होती है, जो इसे कभी ओवरराइड नहीं करता है।
    TravelRuleTransferDetail:
      type: object
      description: >-
        स्वामित्व-पुष्टि और समाप्त/रद्द endpoints द्वारा लौटाया गया पूर्ण
        स्थानांतरण ऑब्जेक्ट। जब तक किसी इनबाउंड स्थानांतरण के वॉलेट स्वामित्व की
        पुष्टि नहीं हो जाती, तब तक प्रतिपक्ष का `originator_data` और
        `beneficiary_data` मास्क होकर वापस आते हैं (प्रत्येक शब्द का पहला अक्षर
        रखा जाता है; वॉलेट, चेन और VASP रूटिंग पठनीय रहते हैं) और `data_masked`
        true होता है।
      properties:
        uuid:
          type: string
          format: uuid
        status:
          type: string
          enum:
            - AWAITING_COUNTERPARTY
            - ON_HOLD
            - COMPLETED
            - FINISHED
            - CANCELLED
            - EXPIRED
            - COUNTERPARTY_MISMATCHED_DATA
            - COUNTERPARTY_VASP_NOT_FOUND
            - COUNTERPARTY_VASP_NOT_REACHABLE
            - UNCONFIRMED_OWNERSHIP
            - COUNTERPARTY_VASP_GENERAL_DECLINE
            - NOT_ENOUGH_COUNTERPARTY_DATA
            - NOT_APPLICABLE
        direction:
          type: string
          enum:
            - INBOUND
            - OUTBOUND
        rail:
          type: string
          nullable: true
          enum:
            - INTERNAL
            - TRP
            - GTR
            - TRUST
            - VERIFYVASP
            - SYGNA
            - EMAIL
            - TEST_VASP
            - null
          description: >-
            वह रेल जिसके माध्यम से ट्रांसफर रूट किया गया था, या null जब कोई रेल
            नहीं चुना गया था (उदाहरण के लिए थ्रेशोल्ड से नीचे, एक स्व-होस्टेड
            प्रतिपक्ष वॉलेट, जमा के बाद का पंजीकरण, या कोई पहुँच योग्य प्रतिपक्ष
            न होने पर)। INTERNAL का अर्थ है दोनों पक्ष Didit एप्लिकेशन हैं;
            EMAIL का अर्थ है कि प्रतिपक्ष तक ईमेल किए गए पिकअप लिंक द्वारा
            पहुँचा गया था। TEST_VASP का अर्थ है कि Didit Test VASP ने सैंडबॉक्स
            ट्रांसफर का उत्तर दिया। GTR, VERIFYVASP और SYGNA पर, Didit नेटवर्क
            के रिस्पॉन्स से या हर 5 मिनट में इसे पोल करके प्रतिपक्ष का उत्तर
            पढ़ता है। TRUST केवल भेजता है, इसलिए TRUST ट्रांसफर तब तक
            AWAITING_COUNTERPARTY बना रहता है जब तक कि इसकी समय-सीमा समाप्त न हो
            जाए। नेटवर्क रेल का उपयोग केवल तभी किया जाता है जब आपने उस नेटवर्क
            के लिए अपनी सदस्यता कनेक्ट की हो। इसे लेन-देन बनाने का अनुरोध
            रिस्पॉन्स लौटाने के बाद चुना जाता है, इसलिए यह उस रिस्पॉन्स में null
            होता है।
        protocol:
          type: string
          nullable: true
        ivms_version:
          type: string
          example: ivms101.2023
        required:
          type: boolean
        ownership_confirmed:
          type: boolean
          nullable: true
        deadline_at:
          type: string
          format: date-time
          nullable: true
        timeline:
          type: array
          items:
            type: object
            properties:
              status:
                type: string
              at:
                type: string
                format: date-time
              detail:
                type: string
              name_match:
                allOf:
                  - $ref: '#/components/schemas/TravelRuleNameMatch'
                nullable: true
                description: >-
                  नाम तुलना जो इस प्रविष्टि ने तय की, `detail` के बगल में। उन
                  प्रविष्टियों पर अनुपस्थित जिन्होंने किसी नाम की तुलना नहीं की।
              reason:
                type: string
                description: >-
                  केवल उस संक्रमण की प्रविष्टि पर मौजूद जो विफल डिलीवरी के कारण
                  हुआ था: `email_undeliverable` या `delivery_failed`, वह मान जो
                  ट्रांसफ़र का `reason` रिपोर्ट करता है।
        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।
        originator_data:
          type: object
          description: >-
            प्रेषक पक्ष। इनबाउंड ट्रांसफ़र के लिए स्वामित्व की पुष्टि होने तक
            प्रतिपक्ष के मान छिपाए जाते हैं।
        beneficiary_data:
          type: object
          description: >-
            लाभार्थी पक्ष। इनबाउंड ट्रांसफ़र के लिए स्वामित्व की पुष्टि होने तक
            प्रतिपक्ष के मान छिपे रहते हैं।
        name_match:
          allOf:
            - $ref: '#/components/schemas/TravelRuleNameMatch'
          nullable: true
          description: >-
            नाम तुलना जिसने ट्रांसफर तय किया, या एक बार चलने तक null। जब तक पक्ष
            मास्क किए गए हों, और INTERNAL एक्सचेंज की अन्य ग्राहक की प्रति पर,
            `transfer_name`, `compared_name`, `matched_names` और
            `mismatched_names` छिपे होते हैं। `score` और `matched` असहमत हो सकते
            हैं: `matched` सख्ती का पालन करता है, `score` दोनों पूरे नामों की
            समानता है।
        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: >-
            सही जब इस रिस्पॉन्स में प्रतिपक्ष का व्यक्तिगत डेटा मास्क किया गया
            हो।
        created_at:
          type: string
          format: date-time
        delivery:
          nullable: true
          allOf:
            - $ref: '#/components/schemas/TravelRuleDelivery'
          description: >-
            इस स्थानांतरण द्वारा दूसरे पक्ष को भेजे जाने वाले नवीनतम संदेश की
            स्थिति। Null जब स्थानांतरण को कभी कोई संदेश भेजने की आवश्यकता नहीं
            थी (उदाहरण के लिए `threshold_amount` से कम, घोषित स्व-होस्टेड वॉलेट,
            या सनराइज़ पंजीकरण)।
        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` जब ट्रेस कोई अन्य कारण नहीं देता है। पुनः भेजना
            ट्रांसफर को आगे बढ़ाता है, इसलिए कारण साफ़ हो जाता है। देखें
            [ट्रांसफर क्यों अटका हुआ
            है](/hi/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'
    TravelRuleNameMatch:
      type: object
      nullable: true
      description: >-
        नाम तुलना जिसने ट्रांसफर तय किया, या एक बार चलने तक null। जब तक पक्ष
        मास्क किए गए हों, और INTERNAL एक्सचेंज की अन्य ग्राहक की प्रति पर,
        `transfer_name`, `compared_name`, `matched_names` और `mismatched_names`
        छिपे होते हैं। `score` और `matched` असहमत हो सकते हैं: `matched` सख्ती
        का पालन करता है, `score` दोनों पूरे नामों की समानता है।
      properties:
        score:
          type: integer
          minimum: 0
          maximum: 100
          description: >-
            दोनों पूरे नामों की समानता, 0 से 100। दोनों में से कोई भी नाम खाली
            होने पर 0।
        matched:
          type: boolean
          description: >-
            क्या नाम `strictness` को संतुष्ट करते हैं। ट्रांसफ़र का परिणाम
            `data_match` का पालन करता है, जो प्रत्येक फ़ील्ड की तुलना करता है,
            इसलिए इसके true होने पर भी कोई ट्रांसफ़र
            COUNTERPARTY_MISMATCHED_DATA हो सकता है।
        method:
          type: string
          enum:
            - none
            - exact_token
            - token_subset
            - token_containment
            - sequence_ratio
          description: >-
            `matched` कैसे तय किया गया था: none (`NONE`), exact_token
            (`STRICT`), token_subset (`DEFAULT`), token_containment (`CONTAINS`)
            या sequence_ratio (`FUZZY`)।
        strictness:
          type: string
          enum:
            - NONE
            - STRICT
            - CONTAINS
            - DEFAULT
            - FUZZY
        compared_with:
          type: string
          enum:
            - wallet_holder
            - counterparty_vasp
          description: >-
            wallet_holder: वॉलेट के लिए रिकॉर्ड किया गया धारक।
            counterparty_vasp: वह नाम जिससे प्रतिपक्ष ने ईमेल रिस्पॉन्स पेज पर
            उत्तर दिया, या सैंडबॉक्स में Didit Test VASP का उत्तर।
        transfer_name:
          type: string
          description: ट्रांसफर पर नाम।
        compared_name:
          type: string
          description: वह नाम जिसके साथ इसकी तुलना की गई थी।
        matched_names:
          type: array
          items:
            type: string
          description: '`compared_name` में पाए गए `transfer_name` के शब्द।'
        mismatched_names:
          type: array
          items:
            type: string
          description: >-
            `compared_name` में अनुपस्थित `transfer_name` के शब्द, फिर
            `transfer_name` में अनुपस्थित `compared_name` के शब्द।
    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: >-
            पक्ष के निकाय प्रकार के लिए तुलना किए गए प्रति फ़ील्ड एक प्रविष्टि
            (`name`, `date_of_birth`, `address`, `account`; किसी कंपनी की कोई
            `date_of_birth` नहीं होती है)।
          additionalProperties:
            type: object
            properties:
              result:
                type: string
                enum:
                  - matched
                  - mismatched
                  - not_compared
                description: >-
                  `not_compared` जब नियम `NONE` हो या किसी भी पक्ष के पास फ़ील्ड
                  के लिए कोई मान न हो।
              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 घंटे के बाद पुनः प्रयास
        किया जाता है। जब कोई पहला संदेश (`kind: SEND`) स्थायी रूप से विफल हो
        जाता है, क्योंकि नेटवर्क ने इसे अस्वीकार कर दिया या छठा प्रयास भी विफल
        रहा, तो स्थानांतरण अपनी `timeline` में `last_error` के साथ
        `COUNTERPARTY_VASP_NOT_REACHABLE` पर चला जाता है; स्थायी रूप से विफल
        होने वाले किसी भी अन्य संदेश को `timeline` में दर्ज किया जाता है। स्वयं
        एक्सचेंज के लिए स्थानांतरण का `status` ही सत्य का प्राथमिक स्रोत बना
        रहता है।
      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 किसी त्रुटि के साथ उत्तर देता है, तो उसका अपना स्टेटस कोड और
            संदेश शामिल होता है। रिस्पॉन्स बॉडी कभी शामिल नहीं की जाती है।
          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`: VASP नाम, LEI या
            अधिकार क्षेत्र जो आपने `beneficiary_data` में भेजा है। `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` ट्रांसफ़र को आगे बढ़ाती है। देखें
        [ट्रांसफ़र क्यों अटका हुआ
        है](/hi/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`: Didit को बताएं कि VASP
            नाम, LEI या Travel Address (उदाहरण के लिए गंतव्य वॉलेट की एड्रेस-बुक
            प्रविष्टि पर एक `travel_address`) के साथ प्रतिपक्ष कौन है, फिर पुनः
            भेजें। `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 विसंगतियाँ जिन पर ध्यान देने की आवश्यकता है: घोषित प्रेषक कोई
            इनपुट नहीं है, घोषित लाभार्थी कोई आउटपुट नहीं है, किसी एकल लाभार्थी
            आउटपुट की अलग से पहचान नहीं की जा सकी, या लाभार्थी आउटपुट लेन-देन
            में बताई गई राशि से भिन्न राशि का भुगतान करता है।
        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` (Lightning भुगतान अनुरोध द्वारा
            निर्दिष्ट आदाता), `updated` (`action: update_originator_wallet` के
            साथ बाद में सेट किया गया)।
    TravelRuleUtxoEntry:
      type: object
      description: >-
        एक UTXO लेन-देन का एक इनपुट या आउटपुट, जैसा कि ब्लॉकचेन ने इसे रिकॉर्ड
        किया है।
      required:
        - address
      properties:
        address:
          type: string
          maxLength: 128
        amount:
          type: string
          nullable: true
          description: कॉइन की अपनी इकाई (BTC, satoshis नहीं) में दशमलव स्ट्रिंग। वैकल्पिक।
          example: '0.0125'
        txid:
          type: string
          maxLength: 128
          description: वैकल्पिक। वह लेन-देन जिसे कोई इनपुट खर्च करता है।
        vout:
          type: integer
          nullable: true
          minimum: 0
          description: वैकल्पिक। वह आउटपुट इंडेक्स जिसे कोई इनपुट खर्च करता है।
  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.