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

# Vincular depósito da Travel Rule a uma mensagem via API

> Com a API da Didit, vincule um depósito recebido sem dados do remetente à mensagem da Travel Rule da VASP de origem e obtenha esses dados.



Prompt da API para vincular depósito da Travel Rule sem correspondência
        Copiar o prompt para a área de transferência



      
      

\<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>



      
      

Colar em

## Quando usarUse-o quando um depósito retornado por [Listar depósitos sem correspondência](https://docs.didit.me/pt-br/management-api/travel-rule/list-unmatched-deposits.md) tiver uma mensagem da Travel Rule recebida que pertence a ele e a Didit não tiver feito o pareamento dos dois automaticamente.
O depósito recebe os dados do remetente, o VASP da contraparte e a rede da mensagem, e as duas transferências registram a correspondência em suas linhas do tempo.## Requisição```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"}'
```## Observações- `transaction_uuid` no caminho é o depósito. `transaction_id` no corpo é a mensagem.
- A mensagem deve ser do mesmo ativo que o depósito.
- A chamada falha com `409` quando qualquer um dos lados já avançou, e não altera nada.
- Uma transação excluída no Console responde `404`, em qualquer um dos lados.## Conteúdo relacionado- [Listar depósitos sem correspondência](https://docs.didit.me/pt-br/management-api/travel-rule/list-unmatched-deposits.md)
- [Listar transferências da Travel Rule](https://docs.didit.me/pt-br/management-api/travel-rule/list-transfers.md)
- [Travel Rule](https://docs.didit.me/pt-br/transaction-monitoring/travel-rule.md)


## OpenAPI

````yaml pt-br/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 de verificação de identidade. Autentique-se com o cabeçalho x-api-key.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/travel-rule/unmatched/{transaction_uuid}/match/:
    post:
      tags:
        - Travel Rule
      summary: Associar um depósito da Travel Rule a uma mensagem recebida
      description: >-
        Associe um depósito de entrada que ainda aguarda os dados do remetente à
        mensagem de Travel Rule que o VASP de origem enviou para ele. O depósito
        recebe os dados do remetente, o VASP contraparte e o canal da mensagem,
        e ambas as transferências registram a correspondência em suas linhas do
        tempo. `transaction_uuid` é o `transaction_id` do depósito obtido em
        `GET /v3/travel-rule/unmatched/`. `transaction_id` no corpo é o
        `transaction_id` da mensagem recebida, obtido em uma linha de `GET
        /v3/travel-rule/transfers/?kind=message`; o `id` da própria
        transferência não é encontrado. A mensagem deve ser do mesmo ativo que o
        depósito. Um depósito ou uma mensagem excluídos pelo Console respondem
        `404`; um que já tenha avançado (correspondido ou que não esteja mais
        aguardando) responde `409`.
      operationId: matchUnmatchedTravelRuleDeposit
      parameters:
        - name: transaction_uuid
          in: path
          required: true
          description: O `transaction_id` do depósito sem correspondência.
          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: Ambas as transferências após a correspondência.
          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: >-
            Erro de validação: `transaction_id` está ausente, é o próprio
            depósito, não é uma mensagem de Travel Rule recebida ou se refere a
            um ativo diferente do depósito; ou a transação no caminho não é um
            depósito de entrada.
          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: Depósito ou mensagem desconhecidos, ou um deles foi excluído.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
              example:
                detail: No TravelRuleTransfer matches the given query.
        '409':
          description: >-
            O depósito não está mais aguardando dados do remetente, ou a
            mensagem já foi associada a um depósito.
          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: >-
            O `transaction_id` da mensagem de Travel Rule recebida (uma linha
            com `kind: message`).
    TravelRuleManualMatchResponse:
      type: object
      required:
        - deposit
        - message
      properties:
        deposit:
          $ref: '#/components/schemas/TravelRuleTransferRow'
        message:
          $ref: '#/components/schemas/TravelRuleTransferRow'
    TravelRuleTransferRow:
      type: object
      description: >-
        Uma transferência Travel Rule como aparece na lista de transferências:
        apenas nomes de VASP, carteiras e memorandos, nunca os dados pessoais do
        remetente ou do beneficiário.
      properties:
        id:
          type: string
          format: uuid
          description: O id da transferência.
        transaction_id:
          type: string
          format: uuid
          description: A transação da Didit à qual a transferência pertence.
        txn_id:
          type: string
          nullable: true
          description: >-
            Seu próprio id para a transação. As transferências que a Didit
            registra para você, como uma transferência de entrada do Didit Test
            VASP, recebem um id gerado.
        txn_date:
          type: string
          format: date-time
        kind:
          type: string
          enum:
            - withdrawal
            - deposit
            - message
          description: >-
            withdrawal: de saída. message: uma transferência de entrada que um
            canal criou a partir de uma mensagem da contraparte (uma consulta
            TRP, a ponta INTERNAL de entrada ou uma mensagem GTR, VerifyVASP ou
            Sygna Bridge). deposit: qualquer outra transferência de entrada.
        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: >-
            Motivo pelo qual uma transferência `COUNTERPARTY_VASP_NOT_FOUND` ou
            `COUNTERPARTY_VASP_NOT_REACHABLE` está parada, com o mesmo valor do
            `reason` da própria transferência, para que a lista diferencie um
            e-mail de conformidade devolvido de uma contraparte sem rota sem
            precisar abrir cada transferência. `""` para qualquer outro status.
            Veja [Por que uma transferência está
            parada](/pt-br/transaction-monitoring/travel-rule#por-que-uma-transferência-fica-travada).
        rail:
          type: string
          nullable: true
          enum:
            - INTERNAL
            - TRP
            - GTR
            - TRUST
            - VERIFYVASP
            - SYGNA
            - EMAIL
            - TEST_VASP
            - null
        asset:
          type: string
          description: A moeda da transação.
        amount:
          type: string
          description: O valor como decimal simples, por exemplo "1.25".
        originator_vasp:
          type: string
          description: >-
            Saída: a razão social do seu VASP. Entrada: o nome da contraparte,
            obtido da sua entrada no diretório, do membro da rede Didit, do
            remetente TRP, do Didit Test VASP ou do nome declarado na
            transferência. Vazio quando nenhum nome é conhecido.
        beneficiary_vasp:
          type: string
          description: >-
            Saída: o nome da contraparte, determinado da mesma forma. Entrada: a
            razão social do seu VASP.
        originator_wallet:
          type: string
        beneficiary_wallet:
          type: string
        originator_memo:
          type: string
          description: Memo ou tag de destino, vazio em blockchains que não têm um.
        beneficiary_memo:
          type: string
        originator_wallet_type:
          type: string
          enum:
            - vasp
            - self_hosted
            - own
          description: >-
            vasp, self_hosted (declarada como não custodiada) ou own (uma
            carteira que seu catálogo de endereços registra como sua). O seu
            próprio lado é sempre vasp.
        beneficiary_wallet_type:
          type: string
          enum:
            - vasp
            - self_hosted
            - own
        matched_transaction_id:
          type: string
          format: uuid
          nullable: true
          description: >-
            O outro lado de um depósito que você associou manualmente a uma
            transferência anunciada.
        deadline_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Quando a transferência expira, se ainda estiver aguardando a
            contraparte. Definido em toda transferência que você cria com `POST
            /v3/transactions/` e que exige uma troca, seja de saída ou de
            entrada. Nulo abaixo do limiar, em um pagamento Lightning ao qual a
            Travel Rule não se aplica e em transferências de entrada que a Didit
            cria quando uma contraparte entra em contato com você (uma consulta
            TRP de entrada, uma mensagem de rede ou a etapa de entrada
            INTERNAL).
        created_at:
          type: string
          format: date-time
  responses:
    Unauthorized:
      description: Não autorizado
      content:
        application/json:
          examples:
            Invalid API Key:
              summary: Chave de API inválida
              value:
                detail: Invalid API Key.
    Forbidden:
      description: Proibido
      content:
        application/json:
          examples:
            No Permission:
              summary: Sem permissão
              value:
                detail: You do not have permission to perform this action.
            Not Enough Credits:
              summary: Créditos insuficientes
              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: >-
        Chave de API da sua aplicação, em Developers -> API keys no Business
        Console. A chave principal tem acesso total. Uma chave nomeada pode ter
        escopo restrito: nenhum acesso, leitura ou escrita por recurso, limitada
        a alguns fluxos ou a sessões aprovadas, a uma lista de endereços IP e a
        uma data de validade. 401 significa que a chave está errada, revogada ou
        expirada; 403 significa que nenhuma chave foi enviada, que a chave não
        tem acesso a este recurso ou ação, ou que a requisição veio de um
        endereço fora da sua lista de IPs; 404 em uma rota de sessão significa
        que a sessão está fora dos fluxos ou status da chave. Uma chave sem
        acesso a mídia recebe URLs de imagem, vídeo e PDF como null, e uma chave
        sem permissão de escrita em sessões recebe links e tokens de sessão como
        null. Consulte https://docs.didit.me/console/api-keys.

````

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