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

# Pencocokkan Deposit Travel Rule API: Pasangkan Pesan

> Pasangkan deposit masuk yang menunggu data originator dengan pesan Travel Rule dari VASP pengirim, agar deposit menerima data originator tersebut.



Prompt API Cocokkan Deposit Travel Rule yang Belum Cocok
        Salin prompt ke papan klip



      
      

\<pre>

\`Pair an inbound deposit that still waits for originator data with the Travel Rule message the originating VASP sent for it.

Endpoint:
POST https://verification.didit.me/v3/travel-rule/unmatched/{transaction_uuid}/match/

Authentication:
Use the x-api-key header with my Didit API key. A scoped API key needs the transactions privilege.

Path parameter:
\- transaction_uuid - the transaction_id of the unmatched deposit, from GET /v3/travel-rule/unmatched/.

Request body (JSON, required):
\- transaction_id (UUID) - the transaction_id of the received Travel Rule message: a row with kind "message" from GET /v3/travel-rule/transfers/?kind=message. The transfer's own id is not found.

curl example:
curl -X POST "https://verification.didit.me/v3/travel-rule/unmatched/<DEPOSIT_TRANSACTION_ID>/match/" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"transaction_id": "<MESSAGE_TRANSACTION_ID>"}'

Response 200:
\- deposit - the deposit row after the match: it now carries the message's originator data, counterparty VASP and rail, and matched_transaction_id points to the message.
\- message - the message row, with matched_transaction_id pointing to the deposit.

Failure modes:
\- 400 - transaction_id is missing, is the deposit itself, is not a received Travel Rule message, or is for a different asset than the deposit; or the transaction in the path is not an inbound deposit.
\- 401 - invalid API key.
\- 403 - the key lacks the transactions privilege.
\- 404 - the deposit or the message does not exist or was deleted.
\- 409 - the deposit no longer waits for originator data, or the message is already matched to a deposit. Nothing changes.

Full guide: /transaction-monitoring/travel-rule.`

\</pre>



      
      

Tempel ke

## Kapan digunakanGunakan endpoint ini saat deposit dari [Daftar deposit yang belum cocok](https://docs.didit.me/id/management-api/travel-rule/list-unmatched-deposits.md) memiliki pesan Travel Rule yang diterima dan memang milik deposit tersebut, tetapi Didit tidak memasangkan keduanya secara otomatis.
Deposit akan mengambil data pengirim, VASP pihak lawan, dan jalur dari pesan tersebut, dan kedua transfer mencatat pencocokan ini pada linimasa masing-masing.## Permintaan```bash theme={null}
curl -X POST "https://verification.didit.me/v3/travel-rule/unmatched/DEPOSIT_TRANSACTION_ID/match/" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"transaction_id": "MESSAGE_TRANSACTION_ID"}'
```## Catatan- `transaction_uuid` di path adalah deposit. `transaction_id` di body adalah pesan.
- Pesan harus untuk aset yang sama dengan deposit.
- Panggilan gagal dengan `409` jika salah satu sisi sudah berlanjut ke tahap berikutnya, dan tidak mengubah apa pun.
- Transaksi yang dihapus dari Console akan menghasilkan `404`, baik di sisi deposit maupun di sisi pesan.## Terkait- [Daftar deposit yang belum cocok](https://docs.didit.me/id/management-api/travel-rule/list-unmatched-deposits.md)
- [Daftar transfer Travel Rule](https://docs.didit.me/id/management-api/travel-rule/list-transfers.md)
- [Travel Rule](https://docs.didit.me/id/transaction-monitoring/travel-rule.md)


## OpenAPI

````yaml id/openapi-25.json POST /v3/travel-rule/unmatched/{transaction_uuid}/match/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: API Verifikasi Identitas. Lakukan autentikasi dengan header x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/travel-rule/unmatched/{transaction_uuid}/match/:
    post:
      tags:
        - Travel Rule
      summary: Cocokkan deposit Travel Rule dengan pesan yang diterima
      description: >-
        Pasangkan deposit masuk yang masih menunggu data pengirim dengan pesan
        Travel Rule yang dikirimkan oleh VASP pengirim untuk deposit tersebut.
        Deposit akan mengambil data pengirim, VASP pihak lawan, dan jalur dari
        pesan tersebut, serta kedua transfer mencatat kecocokan pada lini masa
        masing-masing. `transaction_uuid` adalah `transaction_id` milik deposit
        dari `GET /v3/travel-rule/unmatched/`. `transaction_id` di dalam body
        adalah `transaction_id` pesan yang diterima, dari baris `GET
        /v3/travel-rule/transfers/?kind=message`; `id` transfer itu sendiri
        tidak ditemukan. Pesan harus menyangkut aset yang sama dengan deposit.
        Deposit atau pesan yang dihapus dari Console merespons `404`; yang telah
        berpindah status (cocok, atau tidak lagi menunggu) merespons `409`.
      operationId: matchUnmatchedTravelRuleDeposit
      parameters:
        - name: transaction_uuid
          in: path
          required: true
          description: '`transaction_id` dari deposit yang tidak cocok.'
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TravelRuleManualMatchRequest'
            example:
              transaction_id: e90a4d7b-1c2f-4b83-a6d5-8f0e3c1b7a24
      responses:
        '200':
          description: Kedua transfer setelah pencocokan.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleManualMatchResponse'
              example:
                deposit:
                  id: 7d3a1c55-0b9e-4d52-8a3c-1f6e2b9d4a08
                  transaction_id: c41f9b2e-5a8d-4e0c-9f17-3b6d8a2e5c91
                  txn_id: dep-2026-10-20-0007
                  txn_date: '2026-10-19T08:41:12Z'
                  kind: deposit
                  direction: INBOUND
                  status: AWAITING_COUNTERPARTY
                  rail: TRP
                  asset: ETH
                  amount: '1.25'
                  originator_vasp: Example Counterparty VASP
                  beneficiary_vasp: Example Counterparty VASP
                  originator_wallet: '0x77ccff0cc624a53cd8b8d8703ced826710211ec7'
                  beneficiary_wallet: '0xede2d7e4f5b097e6391ab6bbcf2f47a53f4778cb'
                  originator_memo: ''
                  beneficiary_memo: ''
                  originator_wallet_type: vasp
                  beneficiary_wallet_type: vasp
                  matched_transaction_id: e90a4d7b-1c2f-4b83-a6d5-8f0e3c1b7a24
                  deadline_at: null
                  created_at: '2026-10-19T08:41:13Z'
                message:
                  id: 2b8e6f10-9c3a-47d1-b5e2-0a4c7d9f3e66
                  transaction_id: e90a4d7b-1c2f-4b83-a6d5-8f0e3c1b7a24
                  txn_id: msg-2026-10-20-0003
                  txn_date: '2026-10-19T08:41:12Z'
                  kind: message
                  direction: INBOUND
                  status: COMPLETED
                  rail: TRP
                  asset: ETH
                  amount: '1.25'
                  originator_vasp: Origin CASP SL
                  beneficiary_vasp: Example Counterparty VASP
                  originator_wallet: '0x77ccff0cc624a53cd8b8d8703ced826710211ec7'
                  beneficiary_wallet: '0xede2d7e4f5b097e6391ab6bbcf2f47a53f4778cb'
                  originator_memo: ''
                  beneficiary_memo: ''
                  originator_wallet_type: vasp
                  beneficiary_wallet_type: vasp
                  matched_transaction_id: null
                  deadline_at: '2026-10-21T08:41:13Z'
                  created_at: '2026-10-19T08:41:13Z'
        '400':
          description: >-
            Kesalahan validasi: `transaction_id` tidak ada, merupakan setoran
            itu sendiri, bukan pesan Travel Rule yang diterima, atau untuk aset
            yang berbeda dari setoran tersebut; atau transaksi di dalam jalur
            bukanlah setoran masuk.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
              examples:
                Error:
                  value:
                    transaction_id:
                      - >-
                        The travel rule message is for a different asset than
                        the deposit.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          description: Deposit atau pesan tidak dikenal, atau salah satunya telah dihapus.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
              example:
                detail: No TravelRuleTransfer matches the given query.
        '409':
          description: >-
            Deposit tidak lagi menunggu data pengirim, atau pesan sudah cocok
            dengan deposit.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
              examples:
                Error:
                  value:
                    detail: This deposit is no longer waiting for originator data.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.travel_rule.unmatched_deposits.match(
                "11111111-2222-3333-4444-555555555555",
                transaction_id="e90a4d7b-1c2f-4b83-a6d5-8f0e3c1b7a24",
            )
            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.unmatchedDeposits.match("11111111-2222-3333-4444-555555555555",
            {
              transaction_id: "e90a4d7b-1c2f-4b83-a6d5-8f0e3c1b7a24",
            });

            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.TravelRule.UnmatchedDeposits.Match(ctx, \"11111111-2222-3333-4444-555555555555\", didit.TravelRuleManualMatchRequest{\n\tTransactionID: \"e90a4d7b-1c2f-4b83-a6d5-8f0e3c1b7a24\",\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.TravelRuleManualMatchRequest;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.travelRule().unmatchedDeposits().match("11111111-2222-3333-4444-555555555555",
            TravelRuleManualMatchRequest.builder()
                    .transactionId("e90a4d7b-1c2f-4b83-a6d5-8f0e3c1b7a24")
                    .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->unmatchedDeposits->match('11111111-2222-3333-4444-555555555555',
            [
                'transaction_id' => 'e90a4d7b-1c2f-4b83-a6d5-8f0e3c1b7a24',
            ]);

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

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

            result = didit.travel_rule.unmatched_deposits.match(
              "11111111-2222-3333-4444-555555555555",
              transaction_id: "e90a4d7b-1c2f-4b83-a6d5-8f0e3c1b7a24"
            )
            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.UnmatchedDeposits.MatchAsync("11111111-2222-3333-4444-555555555555",
            new TravelRuleManualMatchRequest

            {
                TransactionId = "e90a4d7b-1c2f-4b83-a6d5-8f0e3c1b7a24",
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    TravelRuleManualMatchRequest:
      type: object
      required:
        - transaction_id
      properties:
        transaction_id:
          type: string
          format: uuid
          description: >-
            `transaction_id` dari pesan Travel Rule yang diterima (baris dengan
            `kind: message`).
    TravelRuleManualMatchResponse:
      type: object
      required:
        - deposit
        - message
      properties:
        deposit:
          $ref: '#/components/schemas/TravelRuleTransferRow'
        message:
          $ref: '#/components/schemas/TravelRuleTransferRow'
    TravelRuleTransferRow:
      type: object
      description: >-
        Satu transfer Travel Rule seperti yang ditampilkan dalam daftar
        transfer: hanya nama VASP, dompet, dan memo, tanpa data pribadi pengirim
        atau penerima.
      properties:
        id:
          type: string
          format: uuid
          description: id transfer.
        transaction_id:
          type: string
          format: uuid
          description: Transaksi Didit yang terkait dengan transfer tersebut.
        txn_id:
          type: string
          nullable: true
          description: >-
            ID Anda sendiri untuk transaksi tersebut. Transfer yang dicatat
            Didit untuk Anda, seperti transfer masuk Didit Test VASP, membawa ID
            yang dibuat secara otomatis.
        txn_date:
          type: string
          format: date-time
        kind:
          type: string
          enum:
            - withdrawal
            - deposit
            - message
          description: >-
            withdrawal: keluar. message: transfer masuk yang dibuat oleh jalur
            berdasarkan pesan pihak lawan (pertanyaan TRP, bagian masuk
            INTERNAL, atau pesan GTR, VerifyVASP, atau Sygna Bridge). deposit:
            transfer masuk lainnya.
        direction:
          type: string
          enum:
            - INBOUND
            - OUTBOUND
        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
        reason:
          type: string
          description: >-
            Alasan transfer `COUNTERPARTY_VASP_NOT_FOUND` atau
            `COUNTERPARTY_VASP_NOT_REACHABLE` tertahan, nilai yang sama dengan
            `reason` transfer itu sendiri, sehingga daftar tersebut membedakan
            email kepatuhan yang dikembalikan dari pihak lawan tanpa rute tanpa
            harus membuka setiap transfer. `""` untuk status lainnya. Lihat
            [Mengapa transfer
            tertahan](/id/transaction-monitoring/travel-rule#mengapa-transfer-macet).
        rail:
          type: string
          nullable: true
          enum:
            - INTERNAL
            - TRP
            - GTR
            - TRUST
            - VERIFYVASP
            - SYGNA
            - EMAIL
            - TEST_VASP
            - null
        asset:
          type: string
          description: Mata uang transaksi.
        amount:
          type: string
          description: Jumlah sebagai desimal biasa, misalnya "1.25".
        originator_vasp:
          type: string
          description: >-
            Keluar: nama resmi VASP Anda. Masuk: nama pihak lawan, dari entri
            direktorinya, anggota jaringan Didit, pengirim TRP, Didit Test VASP,
            atau nama yang dinyatakan transfer. Kosong jika tidak ada yang
            diketahui.
        beneficiary_vasp:
          type: string
          description: >-
            Keluar: nama pihak lawan, ditentukan dengan cara yang sama. Masuk:
            nama resmi VASP Anda.
        originator_wallet:
          type: string
        beneficiary_wallet:
          type: string
        originator_memo:
          type: string
          description: Memo atau tag tujuan, kosong pada rantai yang tidak memilikinya.
        beneficiary_memo:
          type: string
        originator_wallet_type:
          type: string
          enum:
            - vasp
            - self_hosted
            - own
          description: >-
            vasp, self_hosted (dinyatakan unhosted) atau own (dompet yang
            dicatat oleh buku alamat Anda sebagai milik Anda). Sisi Anda sendiri
            selalu vasp.
        beneficiary_wallet_type:
          type: string
          enum:
            - vasp
            - self_hosted
            - own
        matched_transaction_id:
          type: string
          format: uuid
          nullable: true
          description: >-
            Sisi lain dari setoran yang Anda cocokkan secara manual dengan
            transfer yang diumumkan.
        deadline_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Kapan transfer kedaluwarsa jika masih menunggu pihak lawannya.
            Ditetapkan pada setiap transfer yang Anda buat dengan `POST
            /v3/transactions/` yang memerlukan pertukaran, keluar atau masuk.
            Bernilai null di bawah ambang batas, pada pembayaran Lightning yang
            tidak berlaku Travel Rule, dan pada transfer masuk yang dibuat Didit
            saat pihak lawan menghubungi Anda (permintaan TRP masuk, pesan
            jaringan, atau bagian masuk INTERNAL).
        created_at:
          type: string
          format: date-time
  responses:
    Unauthorized:
      description: Tidak diotorisasi
      content:
        application/json:
          examples:
            Invalid API Key:
              summary: Kunci API tidak valid
              value:
                detail: Invalid API Key.
    Forbidden:
      description: Dilarang
      content:
        application/json:
          examples:
            No Permission:
              summary: Tidak Ada Izin
              value:
                detail: You do not have permission to perform this action.
            Not Enough Credits:
              summary: Kredit Tidak Cukup
              value:
                error: >-
                  You don't have enough credits to perform this request. Please
                  top up at https://business.didit.me
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Kunci API aplikasi Anda, dari Developers -> API keys di Business
        Console. Kunci utama memiliki akses penuh. Kunci bernama dapat diberi
        cakupan: none, read, atau write per sumber daya, dibatasi pada beberapa
        alur kerja atau pada sesi yang disetujui, pada daftar alamat IP, dan
        pada tanggal kedaluwarsa. 401 berarti kuncinya salah, dicabut, atau
        kedaluwarsa; 403 berarti tidak ada kunci yang dikirimkan, kunci tidak
        memiliki akses ke sumber daya atau tindakan ini, atau permintaan datang
        dari alamat di luar daftar IP-nya; 404 pada rute sesi berarti sesi
        berada di luar alur kerja atau status kunci tersebut. Kunci tanpa akses
        media menerima URL gambar, video, dan PDF sebagai null, dan kunci tanpa
        izin tulis sesi menerima tautan sesi dan token sebagai null. Lihat
        https://docs.didit.me/console/api-keys.

````

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