> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# API de confirmação de propriedade da carteira Travel Rule

> Confirme ou recuse, com a Didit, que o seu cliente controla a carteira do beneficiário de uma transferência Travel Rule em UNCONFIRMED_OWNERSHIP.



Prompt da API de confirmação da propriedade da carteira
        Copiar o prompt para a área de transferência



      
      

\<pre>

\`Confirm or deny wallet ownership on a Travel Rule transfer waiting on the beneficiary side - typically the beneficiary leg of an INTERNAL-rail transfer whose wallet address book entry has not been ownership-verified yet, a transfer whose counterparty wallet was declared self-hosted (counterparty.payment_method.method_type: "unhosted_wallet"), an inbound transfer in ON_HOLD, or an inbound TRP inquiry a compliance officer resolves by hand.

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

Authentication:
Use the x-api-key header with my Didit API key. {transaction_id} is the Didit transaction uuid of the transfer your own application holds: on an INTERNAL-rail transfer that is your (beneficiary) side; on a declared self-hosted wallet it is the transaction you created, outbound or inbound.

Request body:
\{"confirmed": true}   or   {"confirmed": false}
Optionally {"confirmed": true, "wallet_address": "0x..."} - the payment address to return to the counterparty on an inbound TRP transfer.
On a declared self-hosted wallet transfer with no counterparty wallet on it, "wallet_address" supplies the wallet to verify; if neither the transfer nor the request names one, the request is rejected with 400.

Accepted states (anything else -> 409 "Transfer is not awaiting ownership confirmation."):
\- UNCONFIRMED_OWNERSHIP, in either direction.
\- ON_HOLD on an inbound transfer.
\- UNCONFIRMED_OWNERSHIP, ON_HOLD or COUNTERPARTY_MISMATCHED_DATA on an inbound TRP transfer.

Behavior on a transfer Didit created itself (INTERNAL rail, sunrise registration, declared self-hosted wallet):
\- confirmed: true - marks the matching wallet address book entry ownership-verified, then runs the beneficiary name match on both sides: COMPLETED on a pass, COUNTERPARTY_MISMATCHED_DATA on a fail.
An inbound transfer whose deposit already settled then moves on to FINISHED.
\- confirmed: true on a declared self-hosted wallet - records that the customer verified who controls the counterparty wallet and completes the transfer (COMPLETED), outbound or inbound; an inbound deposit whose on-chain hash is already known moves on to FINISHED. The wallet is the counterparty's: the destination of a withdrawal, the originator's source wallet of a deposit. If it is not in the wallet address book yet, it is added as ownership-verified under the counterparty's name; if the book already holds it under a different holder name, the transfer goes to COUNTERPARTY_MISMATCHED_DATA.
\- confirmed: false - moves both sides of the transfer to COUNTERPARTY_VASP_GENERAL_DECLINE.
\- Resolving an inbound ON_HOLD with no matching entry, or confirming a declared self-hosted wallet, creates the entry from the transfer's wallet address and marks it verified.

Behavior on an inbound TRP transfer (answering the counterparty's inquiry):
\- confirmed: true - needs a payment address, taken from the request's wallet_address, then the matched entry, then beneficiary_data.wallet_address.
Didit creates or verifies the entry, posts the inquiry-resolution callback to the counterparty, sets ownership_confirmed and moves the transfer to COMPLETED.
\- confirmed: false - posts a declined resolution and moves the transfer to COUNTERPARTY_VASP_GENERAL_DECLINE.

Transfers a network delivered (GTR or Sygna Bridge):
\- An inbound transfer that waits for your review (UNCONFIRMED_OWNERSHIP, ON_HOLD or COUNTERPARTY_MISMATCHED_DATA) is decided here: confirmed: true approves it (send wallet_address when the transfer names none), confirmed: false declines it. Didit answers the network after the response, with retries; the response's delivery field shows that answer.
\- VerifyVASP takes its answer when it asks, so a VerifyVASP transfer that would need your review is declined at once and cannot be decided here.
\- Receiving over a network is switched on by Didit per network, and none is switched on today.

What to read from the response:
\- The full transfer object. originator_data/beneficiary_data stay masked on inbound transfers (data_masked: true) until ownership is confirmed; data_unmasked then records when, why and by whom. data_match and mismatched_fields name the fields that differ after a mismatch.

Alternative: instead of this API call, send the end customer through the hosted wallet-ownership widget (POST /v3/travel-rule/widget-session/) and let them prove control cryptographically.

Failure modes:
\- 400 - on an inbound TRP approval with no payment address available: {"wallet_address": ["wallet_address is required to approve."]}.
\- 409 - the transfer is not in one of the accepted states, no entry in your wallet address book matches the transfer's wallet address (an inbound TRP approval, and an inbound ON_HOLD transfer that carries beneficiary_data.wallet_address, and a declared self-hosted wallet, create the missing entry instead), an INTERNAL transfer from another Didit customer needs a control proof (signed message or test deposit) first, or a network transfer was already answered over its network (a VerifyVASP transfer, or a GTR or Sygna Bridge transfer already decided).
\- 502 - the counterparty's TRP inquiry-resolution callback could not be delivered; the transfer keeps its current status.
\- 404 - unknown transaction or no Travel Rule transfer attached.

Full guide: /transaction-monitoring/travel-rule#confirming-wallet-ownership.`

\</pre>



      
      

Colar em

## Carteiras autocustodiadasQuando a carteira da contraparte foi declarada como autocustodiada (`counterparty.payment_method.method_type: "unhosted_wallet"`), a transferência fica em `UNCONFIRMED_OWNERSHIP`.
Ao chamar este endpoint com `confirmed: true`, fica registado que o seu cliente verificou quem controla essa carteira e a transferência é concluída (`COMPLETED`), tanto nos levantamentos de saída como nos depósitos de entrada.
Um depósito de entrada cujo hash on-chain já é conhecido passa para `FINISHED`.A carteira verificada é a da contraparte: o destino de um levantamento de saída ou a origem (a carteira do ordenante) de um depósito de entrada.
A Didit adiciona-a ao livro de endereços de carteiras como tendo a propriedade verificada, em nome da contraparte, e compara-a com o nome da contraparte (o ordenante, no caso de um depósito).
Se o livro de endereços já tiver essa carteira associada a um nome de titular diferente, a transferência passa para `COUNTERPARTY_MISMATCHED_DATA`.Se a transferência não indicar nenhuma carteira da contraparte, envie `wallet_address` no corpo do pedido.
Quando nem a transferência nem o pedido indicam um endereço, o pedido é rejeitado com `400`.`confirmed: false` recusa a transferência (`COUNTERPARTY_VASP_GENERAL_DECLINE`).


## OpenAPI

````yaml pt/openapi-25.json POST /v3/transactions/{transaction_id}/travel-rule/ownership/
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/transactions/{transaction_id}/travel-rule/ownership/:
    post:
      tags:
        - Travel Rule
      summary: Confirmar ou negar a propriedade da carteira
      description: >-
        Resolva uma transferência que aguarda a propriedade da carteira: chame-a
        do seu próprio lado da transferência quando estiver em
        UNCONFIRMED_OWNERSHIP, ou quando for uma transferência recebida em
        ON_HOLD. A confirmação marca a entrada correspondente no livro de
        endereços de carteiras como propriedade verificada (para uma
        transferência recebida em ON_HOLD sem nenhuma entrada, a Didit cria uma
        a partir de beneficiary_data.wallet_address) e executa a correspondência
        do nome do beneficiário em ambos os lados da transferência; a rejeição
        recusa ambos os lados. Uma transferência recebida cujo depósito já foi
        liquidado avança para FINISHED quando a correspondência é bem-sucedida.
        Quando a carteira da contraparte foi declarada como autocustodiada
        (counterparty.payment_method.method_type: unhosted_wallet), a
        confirmação regista que o cliente verificou quem controla essa carteira
        e conclui a transferência (COMPLETED) em ambas as direções, ou FINISHED
        para um depósito recebido cujo hash on-chain já seja conhecido. A
        carteira verificada é a da contraparte: o destino de um levantamento
        enviado, ou a origem (carteira do ordenante) de um depósito recebido. Se
        ainda não constar do seu livro de endereços de carteiras, a Didit
        adiciona-a com propriedade verificada sob o nome da contraparte; se o
        livro já a contiver sob um nome de titular diferente, a transferência
        muda para COUNTERPARTY_MISMATCHED_DATA. Para uma transferência TRP
        recebida em UNCONFIRMED_OWNERSHIP, ON_HOLD ou
        COUNTERPARTY_MISMATCHED_DATA, a Didit envia a sua decisão para o VASP de
        origem: a aprovação devolve o endereço de pagamento (wallet_address, ou
        o endereço da entrada correspondente) e avança a transferência para
        COMPLETED, e a rejeição recusa-a. A mesma chamada também decide uma
        transferência recebida enviada por uma contraparte da GTR ou Sygna
        Bridge que aguarda a sua revisão (`UNCONFIRMED_OWNERSHIP`, `ON_HOLD` ou
        `COUNTERPARTY_MISMATCHED_DATA`): `confirmed: true` aprova-a (forneça
        `wallet_address` se a transferência não indicar nenhum) e `confirmed:
        false` recusa-a, e a resposta é enviada à rede depois, com novas
        tentativas. O VerifyVASP obtém a sua resposta quando a solicita, pelo
        que uma transferência VerifyVASP que necessitasse da sua revisão é
        recusada imediatamente e não pode ser decidida posteriormente.
      operationId: confirmTravelRuleOwnership
      parameters:
        - name: transaction_id
          in: path
          required: true
          description: >-
            UUID estável da Didit da transação que a sua aplicação detém para
            esta transferência: a transação do lado do beneficiário numa
            transferência por via INTERNAL, ou a transação que criou (de saída
            ou de entrada) quando a carteira da contraparte foi declarada como
            autocustodiada.
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TravelRuleOwnershipConfirmRequest'
            example:
              confirmed: true
      responses:
        '200':
          description: >-
            A transferência atualizada. Para uma transferência recebida, os
            dados originator_data/beneficiary_data da contraparte permanecem
            mascarados (`data_masked: true`) até que a propriedade seja
            confirmada; em seguida, `data_unmasked` regista quando, porquê e por
            quem.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TravelRuleTransferDetail'
        '400':
          description: >-
            Erro de validação: confirmed está em falta, uma aprovação TRP de
            entrada não tem wallet_address nem endereço alternativo, ou
            `confirmed: true` numa transferência declarada de carteira
            autocustodiada que não indica uma carteira de contraparte e nenhum
            `wallet_address` foi enviado.
          content:
            application/json:
              examples:
                No payment address:
                  value:
                    wallet_address:
                      - wallet_address is required to approve.
        '404':
          description: >-
            Transação desconhecida, ou a transação não tem nenhuma transferência
            Travel Rule.
        '409':
          description: >-
            A transferência não está a aguardar confirmação de propriedade,
            nenhuma entrada no livro de endereços de carteiras corresponde à
            carteira da contraparte, uma transferência INTERNAL de outro cliente
            Didit necessita de um comprovativo de controlo (uma mensagem
            assinada ou um depósito de teste) antes de poder ser confirmada, ou
            uma transferência de rede já foi respondida através da respetiva
            rede (uma transferência VerifyVASP, ou uma transferência GTR ou
            Sygna Bridge sobre a qual você ou a Didit já decidiram).
          content:
            application/json:
              examples:
                Not awaiting confirmation:
                  value:
                    detail: Transfer is not awaiting ownership confirmation.
                No matching address book entry:
                  value:
                    detail: wallet address entry no longer available
        '502':
          description: >-
            Apenas para transferências TRP de entrada: a Didit não conseguiu
            entregar a sua decisão ao VASP de origem, pelo que o estado da
            transferência não muda.
          content:
            application/json:
              examples:
                Callback not delivered:
                  value:
                    detail: >-
                      Counterparty inquiry-resolution callback could not be
                      delivered.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X POST
            https://verification.didit.me/v3/transactions/{transaction_id}/travel-rule/ownership/
            \
              -H 'x-api-key: YOUR_API_KEY' -H 'Content-Type: application/json' \
              -d '{"confirmed": true}'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.transactions.travel_rule.confirm_ownership(
                "11111111-2222-3333-4444-555555555555",
                confirmed=True,
            )
            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.confirmOwnership("11111111-2222-3333-4444-555555555555",
            {
              confirmed: true,
            });

            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.ConfirmOwnership(ctx, \"11111111-2222-3333-4444-555555555555\", didit.TravelRuleOwnershipConfirmRequest{\n\tConfirmed: true,\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.TravelRuleOwnershipConfirmRequest;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.transactions().travelRule().confirmOwnership("11111111-2222-3333-4444-555555555555",
            TravelRuleOwnershipConfirmRequest.builder()
                    .confirmed(true)
                    .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->confirmOwnership('11111111-2222-3333-4444-555555555555',
            [
                'confirmed' => true,
            ]);

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

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

            result = didit.transactions.travel_rule.confirm_ownership(
              "11111111-2222-3333-4444-555555555555",
              confirmed: true
            )
            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.ConfirmOwnershipAsync("11111111-2222-3333-4444-555555555555",
            new TravelRuleOwnershipConfirmRequest

            {
                Confirmed = true,
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    TravelRuleOwnershipConfirmRequest:
      type: object
      required:
        - confirmed
      properties:
        confirmed:
          type: boolean
          description: true para confirmar a propriedade, false para a negar.
        wallet_address:
          type: string
          default: ''
          description: >-
            Transferências TRP de entrada: o endereço de pagamento que a Didit
            devolve ao VASP de origem quando aprova. O valor predefinido é o
            endereço da entrada correspondente no livro de endereços, seguido de
            beneficiary_data.wallet_address. Numa transferência declarada de
            carteira autocustodiada que não indique uma carteira da contraparte,
            a carteira cuja propriedade verificou; sem ela, o pedido é rejeitado
            com 400. Ignorado para outras transferências.
    TravelRuleTransferDetail:
      type: object
      description: >-
        Objeto completo de transferência devolvido pelos endpoints de
        confirmação de propriedade e de finalização/cancelamento. Enquanto a
        propriedade da carteira de uma transferência recebida não estiver
        confirmada, os campos `originator_data` e `beneficiary_data` da
        contraparte são devolvidos mascarados (a primeira letra de cada palavra
        é mantida; a carteira, a blockchain e o encaminhamento do VASP
        permanecem legíveis) e `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: >-
            O canal através do qual a transferência foi encaminhada, ou null
            quando nenhum canal foi selecionado (por exemplo, abaixo do limiar,
            uma carteira de contraparte autocustodiada, um registo pós-depósito,
            ou nenhuma contraparte alcançável). INTERNAL significa que ambos os
            lados são aplicações da Didit; EMAIL significa que a contraparte foi
            alcançada através de uma ligação de recolha enviada por e-mail.
            TEST_VASP significa que o Didit Test VASP respondeu à transferência
            em sandbox. Através de GTR, VERIFYVASP e SYGNA, a Didit lê a
            resposta da contraparte a partir da resposta da rede ou
            consultando-a a cada 5 minutos. TRUST apenas envia, pelo que uma
            transferência TRUST permanece AWAITING_COUNTERPARTY até expirar. Um
            canal de rede só é utilizado quando tiver associado a sua própria
            adesão a essa rede. É escolhido após o retorno da criação da
            transação, pelo que é null nessa resposta.
        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: >-
                  A comparação de nomes decidida por esta entrada, junto a
                  `detail`. Ausente em entradas que não compararam qualquer
                  nome.
              reason:
                type: string
                description: >-
                  Presente apenas na entrada de uma transição causada por uma
                  entrega com falha: `email_undeliverable` ou `delivery_failed`,
                  o valor que `reason` da transferência reporta.
        counterparty_vasp:
          type: object
          nullable: true
          properties:
            name:
              type: string
            lei:
              type: string
            dd_score:
              type: integer
              description: >-
                Pontuação de diligência devida de 0 a 100, onde quanto mais
                alto, melhor. Mesma escala que no diretório VASP.
            dd_score_breakdown:
              type: object
              description: >-
                Contribuições por componente para dd_score, um objeto por
                componente como no diretório VASP (jurisdiction, verification,
                protocol, lei, history, essentials, responsiveness), cada um com
                {points, max, reason, detail}. {} até que a contraparte tenha
                sido avaliada.
              additionalProperties:
                type: object
                properties:
                  points:
                    type: number
                    description: Pontos atribuídos a este componente.
                  max:
                    type: integer
                    description: Pontos máximos que este componente pode atribuir.
                  reason:
                    type: string
                    description: Código legível por máquina do veredito do componente.
                  detail:
                    type: string
                    description: Motivo legível por humanos para os pontos atribuídos.
            dd_assessed_at:
              type: string
              format: date-time
              nullable: true
              description: >-
                Quando a avaliação de diligência devida foi executada pela
                última vez. Nulo até que a contraparte tenha sido avaliada.
        originator_data:
          type: object
          description: >-
            Parte ordenante. Para uma transferência de entrada, os valores da
            contraparte são ocultados até que a propriedade seja confirmada.
        beneficiary_data:
          type: object
          description: >-
            Parte beneficiária. Para uma transferência de entrada, os valores da
            contraparte são ocultados até que a propriedade seja confirmada.
        name_match:
          allOf:
            - $ref: '#/components/schemas/TravelRuleNameMatch'
          nullable: true
          description: >-
            A comparação de nomes que decidiu a transferência, ou nulo até que
            uma seja executada. Enquanto as partes estiverem mascaradas, e na
            cópia do outro cliente de uma troca INTERNAL, `transfer_name`,
            `compared_name`, `matched_names` e `mismatched_names` são ocultados.
            `score` e `matched` podem divergir: `matched` segue o rigor, `score`
            é a semelhança dos dois nomes completos.
        data_match:
          $ref: '#/components/schemas/TravelRuleDataMatch'
        mismatched_fields:
          type: array
          items:
            type: string
          description: >-
            Atalho para `data_match.mismatched_fields`. Vazio quando nada
            difere.
        data_unmasked:
          $ref: '#/components/schemas/TravelRuleDataUnmasked'
        data_masked:
          type: boolean
          description: >-
            Verdadeiro enquanto os dados pessoais da contraparte estiverem
            mascarados nesta resposta.
        created_at:
          type: string
          format: date-time
        delivery:
          nullable: true
          allOf:
            - $ref: '#/components/schemas/TravelRuleDelivery'
          description: >-
            O estado em que se encontra a mensagem mais recente que esta
            transferência deve à outra parte. Nulo quando a transferência nunca
            deveu nenhuma (por exemplo, abaixo de `threshold_amount`, uma
            carteira autocustodiada declarada ou um registo sunrise).
        discovery:
          type: array
          description: >-
            Como a Didit procurou a contraparte, uma entrada por passo
            executado. Vazio quando não foi executada qualquer deteção, por
            exemplo, numa transferência recebida.
          items:
            $ref: '#/components/schemas/TravelRuleDiscoveryStep'
        reason:
          type: string
          description: >-
            O motivo pelo qual uma transferência `COUNTERPARTY_VASP_NOT_FOUND`
            ou `COUNTERPARTY_VASP_NOT_REACHABLE` está bloqueada; `""` para
            qualquer outro estado. Uma falha na entrega determina-o primeiro,
            apenas em `COUNTERPARTY_VASP_NOT_REACHABLE`: `email_undeliverable`
            (o fornecedor de e-mail recusou o e-mail de conformidade e não resta
            nenhum endereço para tentar: quando foi enviado, num lembrete ou
            como uma devolução permanente comunicada posteriormente) ou
            `delivery_failed` (o canal que estava a efetuar a entrega falhou
            definitivamente: um canal de rede recusou a mensagem ou esgotou as
            tentativas, um host de identidade `TRP` não respondeu, ou o host
            `TRP` da contraparte não aceitou a consulta). Caso contrário, o
            rastreio de `discovery` determina-o: `awaiting_end_user` (nenhum
            passo identificou uma contraparte que a Didit consiga contactar),
            `directory_match_no_route` (um passo identificou um VASP de
            diretório que não tem rota), `picked_member_without_proven_wallet`
            (o utilizador final escolheu um cliente Didit que não comprovou o
            controlo da carteira), ou `no_directory_match` quando o rastreio não
            fornece outro motivo. Um novo envio faz avançar a transferência,
            pelo que o motivo é limpo. Consulte [Por que motivo uma
            transferência está
            bloqueada](/pt/transaction-monitoring/travel-rule#por-que-motivo-uma-transferência-está-bloqueada).
        next_actions:
          type: array
          description: >-
            O que faz a transferência avançar; `[]` para qualquer estado exceto
            `COUNTERPARTY_VASP_NOT_FOUND` ou `COUNTERPARTY_VASP_NOT_REACHABLE`.
            `email_undeliverable` disponibiliza `update_compliance_email` e, em
            seguida, `resend`. `delivery_failed` disponibiliza `resend`. Um
            motivo de descoberta disponibiliza `select_counterparty_vasp`,
            `declare_self_hosted`, `add_vasp_hint` e `resend`.
          items:
            $ref: '#/components/schemas/TravelRuleNextAction'
        chain_details:
          $ref: '#/components/schemas/TravelRuleChainDetails'
    TravelRuleNameMatch:
      type: object
      nullable: true
      description: >-
        A comparação de nomes que decidiu a transferência, ou nulo até que uma
        seja executada. Enquanto as partes estiverem mascaradas, e na cópia do
        outro cliente de uma troca INTERNAL, `transfer_name`, `compared_name`,
        `matched_names` e `mismatched_names` são ocultados. `score` e `matched`
        podem divergir: `matched` segue o rigor, `score` é a semelhança dos dois
        nomes completos.
      properties:
        score:
          type: integer
          minimum: 0
          maximum: 100
          description: >-
            Semelhança dos dois nomes completos, de 0 a 100. 0 quando qualquer
            um dos nomes estiver em branco.
        matched:
          type: boolean
          description: >-
            Se os nomes cumprem `strictness`. O resultado da transferência segue
            `data_match`, que compara todos os campos, pelo que uma
            transferência pode ser COUNTERPARTY_MISMATCHED_DATA enquanto isto
            for verdadeiro.
        method:
          type: string
          enum:
            - none
            - exact_token
            - token_subset
            - token_containment
            - sequence_ratio
          description: >-
            Como `matched` foi decidido: nenhum (`NONE`), token exato
            (`STRICT`), subconjunto de tokens (`DEFAULT`), contenção de tokens
            (`CONTAINS`) ou proporção de sequência (`FUZZY`).
        strictness:
          type: string
          enum:
            - NONE
            - STRICT
            - CONTAINS
            - DEFAULT
            - FUZZY
        compared_with:
          type: string
          enum:
            - wallet_holder
            - counterparty_vasp
          description: >-
            wallet_holder: o titular registado para a carteira.
            counterparty_vasp: o nome que a contraparte indicou na página de
            resposta por e-mail, ou a resposta do Didit Test VASP na sandbox.
        transfer_name:
          type: string
          description: O nome na transferência.
        compared_name:
          type: string
          description: O nome com o qual foi comparado.
        matched_names:
          type: array
          items:
            type: string
          description: Palavras de `transfer_name` encontradas em `compared_name`.
        mismatched_names:
          type: array
          items:
            type: string
          description: >-
            Palavras de `transfer_name` em falta em `compared_name`, seguidas de
            palavras de `compared_name` em falta em `transfer_name`.
    TravelRuleDataMatch:
      type: object
      nullable: true
      description: >-
        Comparação campo a campo dos dados das partes da transferência com o que
        a outra parte sabe sobre o titular da carteira. Indica campos e
        resultados, nunca valores, para que permaneça legível enquanto os dados
        da contraparte estiverem mascarados. Null até que uma comparação tenha
        sido executada.
      properties:
        matched:
          type: boolean
          description: True quando nenhum campo comparado difere.
        mismatched_fields:
          type: array
          items:
            type: string
            enum:
              - name
              - date_of_birth
              - address
              - account
          description: Os campos que diferem.
        fields:
          type: object
          description: >-
            Uma entrada por campo comparado para o tipo de entidade da parte
            (`name`, `date_of_birth`, `address`, `account`; uma empresa não tem
            `date_of_birth`).
          additionalProperties:
            type: object
            properties:
              result:
                type: string
                enum:
                  - matched
                  - mismatched
                  - not_compared
                description: >-
                  `not_compared` quando a regra é `NONE` ou um dos lados não tem
                  valor para o campo.
              strictness:
                type: string
                enum:
                  - NONE
                  - STRICT
                  - CONTAINS
                  - DEFAULT
                  - FUZZY
    TravelRuleDataUnmasked:
      type: object
      nullable: true
      description: >-
        Registo de auditoria do momento em que os dados da contraparte foram
        desmascarados. Nulo enquanto os dados ainda estiverem mascarados e para
        transferências de saída.
      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: >-
            O que confirmou a propriedade: ownership_confirmed (a sua
            confirmação através da consola ou da API), wallet_proof (uma prova
            de carteira no widget, ou uma transferência de entrada INTERNAL,
            definida quando é criada), address_book_match (uma carteira
            verificada do livro de endereços), own_verified_wallet (a carteira
            própria verificada do seu utilizador), inquiry_approved (a sua
            aprovação de um pedido TRP de entrada ou de uma mensagem GTR ou
            Sygna), known_payment_method (uma carteira com a qual o seu
            utilizador já pagou) ou travel_address (o Travel Address por
            carteira que nomeou a carteira).
        actor:
          type: string
          description: >-
            Quem o confirmou: o e-mail do utilizador da consola ou a etiqueta da
            chave de API. Em branco para uma decisão automática.
    TravelRuleDelivery:
      type: object
      description: >-
        O estado em que se encontra a mensagem mais recente que a transferência
        deve à outra parte. A Didit contacta a contraparte após o pedido que
        criou ou alterou a transferência ter retornado, pelo que este objeto
        indica se essa mensagem chegou ao destino: em fila, a ser enviada, a
        aguardar nova tentativa após um erro, entregue ou com falha. Uma falha
        da qual a rede ainda possa recuperar (sem resposta a tempo, ligação
        falhada, HTTP `408`, `429` ou `5xx`) é tentada novamente após 30
        segundos, 2 minutos, 10 minutos, 30 minutos e 1 hora. Quando uma
        primeira mensagem (`kind: SEND`) falha definitivamente, porque a rede a
        recusou ou a sexta tentativa também falhou, a transferência transita
        para `COUNTERPARTY_VASP_NOT_REACHABLE` com `last_error` na sua
        `timeline`; qualquer outra mensagem que falhe definitivamente é anotada
        na `timeline`. O `status` da transferência permanece a fonte da verdade
        para o intercâmbio em si.
      required:
        - kind
        - status
        - rail
        - attempts
        - last_error
        - next_attempt_at
        - delivered_at
      properties:
        kind:
          type: string
          enum:
            - SEND
            - ANSWER
            - TXID
            - CANCEL
            - POLL
          description: >-
            O que a mensagem transporta. `SEND`: a primeira mensagem da
            transferência para a contraparte (de saída; o canal é escolhido
            quando é enviada). `ANSWER`: a sua aceitação ou recusa, devida à
            rede requerente (de entrada). `TXID`: o hash da transação on-chain,
            após concluir a transferência. `CANCEL`: o cancelamento, após
            cancelá-la. `POLL`: uma consulta de estado a uma rede que o
            disponibilize, repetida a cada 5 minutos enquanto a transferência
            aguarda a contraparte.
        status:
          type: string
          enum:
            - QUEUED
            - SENDING
            - RETRYING
            - DELIVERED
            - FAILED
          description: >-
            `QUEUED`: a aguardar envio. `SENDING`: tentativa em curso.
            `RETRYING`: uma tentativa falhou e a próxima será executada em
            `next_attempt_at`. `DELIVERED`: o outro lado aceitou a mensagem.
            `FAILED`: o outro lado recusou-a, ou a última tentativa falhou.
        rail:
          type: string
          enum:
            - INTERNAL
            - TRP
            - GTR
            - TRUST
            - VERIFYVASP
            - SYGNA
            - EMAIL
            - ''
          description: >-
            O canal que transporta a mensagem. Vazio até que a Didit escolha um
            para uma primeira mensagem.
        attempts:
          type: integer
          minimum: 0
          description: >-
            Tentativas efetuadas até ao momento para esta mensagem. Uma mensagem
            que não seja uma sondagem de estado é tentada no máximo 6 vezes.
        last_error:
          type: string
          description: >-
            O tipo de falha ocorrida na última tentativa, `""` se não tiver
            ocorrido nenhuma: por exemplo `email undeliverable`, `trp identity
            endpoint unreachable` ou `trp transfer inquiry delivery failed`.
            Nunca inclui a resposta da própria contraparte, que permanece na
            `timeline` da transferência.

            Quando a GTR responde com um erro, o respetivo código de estado e
            mensagem são incluídos. Os corpos de resposta nunca são incluídos.
          example: email undeliverable
        next_attempt_at:
          type: string
          format: date-time
          nullable: true
          description: >-
            Quando a próxima tentativa é executada enquanto a mensagem estiver
            em `QUEUED` ou `RETRYING`.
        delivered_at:
          type: string
          format: date-time
          nullable: true
          description: Quando a outra parte recebeu a mensagem.
    TravelRuleDiscoveryStep:
      type: object
      description: >-
        Um passo da deteção de contraparte que a Didit executou para uma
        transferência de saída, na ordem em que foram executados. O primeiro
        passo que identifique um VASP com uma rota termina a cadeia.
      properties:
        step:
          type: string
          enum:
            - internal_address_book
            - wallet_attribution
            - network_lookup
            - customer_hint
            - end_user
          description: >-
            `internal_address_book`: outro cliente da Didit que provou o
            controlo da carteira de destino. `wallet_attribution`: a atribuição
            da carteira na análise de blockchain. `network_lookup`: uma rede que
            pode indicar qual VASP detém o endereço. `customer_hint`: o nome do
            VASP, LEI ou jurisdição que enviou em `beneficiary_data`.
            `end_user`: a contraparte que o utilizador final (ou você) escolheu,
            ou o pedido para escolher uma.
        outcome:
          type: string
          enum:
            - match
            - miss
            - skipped
          description: >-
            `match`: o passo indicou uma contraparte. `miss`: foi executado e
            não encontrou nenhuma. `skipped`: não pôde ser executado, e `reason`
            indica o motivo.
        reason:
          type: string
          description: >-
            Motivo legível por máquina, `""` numa correspondência:
            `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` ou `picked_member_without_proven_wallet`.
        vasp:
          type: string
          format: uuid
          nullable: true
          description: >-
            O VASP do diretório indicado pelo passo, quando este tiver indicado
            um.
        rail:
          type: string
          nullable: true
          description: O canal que alcança essa contraparte, quando o passo encontrou um.
        at:
          type: string
          format: date-time
    TravelRuleNextAction:
      type: object
      description: >-
        Um elemento que faz avançar uma transferência com
        `COUNTERPARTY_VASP_NOT_FOUND` ou `COUNTERPARTY_VASP_NOT_REACHABLE`.
        Consulte [Por que motivo uma transferência está
        bloqueada](/pt/transaction-monitoring/travel-rule#por-que-motivo-uma-transferência-está-bloqueada).
      properties:
        action:
          type: string
          enum:
            - select_counterparty_vasp
            - declare_self_hosted
            - add_vasp_hint
            - update_compliance_email
            - resend
          description: >-
            `select_counterparty_vasp`: o utilizador final escolhe o VASP de
            destino no widget de titularidade da carteira, ou você envia um
            PATCH com `action=beneficiary_vasp`. `declare_self_hosted`: o
            utilizador final declara a carteira como autocustodiada no widget.
            `add_vasp_hint`: indique à Didit quem é a contraparte, com um nome
            de VASP, LEI ou Travel Address (por exemplo, um `travel_address` na
            entrada do livro de endereços da carteira de destino) e, em seguida,
            reenvie. `update_compliance_email` e `resend` são valores de
            `action` de `PATCH /v3/transactions/{transaction_id}/travel-rule/`:
            forneça novamente o e-mail de conformidade da contraparte e execute
            o encaminhamento outra vez.
        url:
          type: string
          format: uri
          description: >-
            A ligação do widget de titularidade da carteira, em
            `select_counterparty_vasp` e `declare_self_hosted` enquanto a
            transferência tem uma sessão do widget aberta.
      required:
        - action
    TravelRuleChainDetails:
      type: object
      description: >-
        Como a blockchain da transferência designa as suas duas carteiras,
        quando se trata de mais do que um endereço a pagar a outro. Vazio (`{}`)
        para uma transferência numa blockchain baseada em contas (EVM, Solana,
        Tron), onde os dois endereços são as carteiras. A correspondência, o
        encaminhamento e o livro de endereços leem primeiro as carteiras a
        partir daqui.
      properties:
        chain:
          type: string
          description: >-
            Blockchain canónica, por exemplo, `BTC`, `XRP` ou `LIGHTNING` para
            uma transferência Lightning.
        shape:
          type: string
          enum:
            - utxo
            - memo
            - lightning
        originator:
          $ref: '#/components/schemas/TravelRuleChainSide'
        beneficiary:
          $ref: '#/components/schemas/TravelRuleChainSide'
        utxo:
          type: object
          description: >-
            Numa transferência UTXO: as entradas e saídas conforme armazenadas
            (quantias como cadeias decimais) e quais saídas a Didit interpretou
            como o quê.
          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: Saídas que pagam de volta a um endereço de entrada.
            beneficiary_output_index:
              type: integer
              nullable: true
              description: >-
                A saída que paga ao beneficiário; null quando não foi possível
                distingui-la.
        lightning:
          type: object
          description: >-
            Numa transferência Lightning: o conteúdo do pedido de pagamento.
            Sempre `kind` (`bolt11`, `bolt12_offer`, `bolt12_invoice`,
            `bolt12_invoice_request`, `lnurl`, `lightning_address`, `node_id` ou
            `unknown`); uma fatura BOLT11 adiciona `network`, `payee_node_id`,
            `payment_hash`, `amount_msat`, `created_at` e `expires_at`; uma
            cadeia BOLT12 adiciona `blinded_paths` e `payee_node_id`; um LNURL
            ou um Lightning Address adiciona o seu `domain`. Nada é resolvido
            através da rede: o pedido é apenas descodificado.
          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: >-
            Inconsistências de UTXO que merecem atenção: o ordenante declarado
            não é uma entrada, o beneficiário declarado não é uma saída, nenhuma
            saída individual de beneficiário pôde ser identificada ou a saída do
            beneficiário paga um montante diferente do indicado na transação.
        not_applicable_reason:
          type: string
          enum:
            - LIGHTNING_NO_PAYEE_IDENTIFIER
            - LIGHTNING_BOLT12_BLINDED_PAYEE
            - LIGHTNING_LNURL_NAMES_NO_PAYEE
          description: >-
            Numa transferência Lightning de saída cujo pedido de pagamento não
            indique um beneficiário: o motivo pelo qual a transferência é
            `NOT_APPLICABLE`. `LIGHTNING_NO_PAYEE_IDENTIFIER` (o pedido não
            indica o nó do beneficiário ou não pôde ser descodificado),
            `LIGHTNING_BOLT12_BLINDED_PAYEE` (a oferta oculta o seu beneficiário
            através de caminhos ocultos), `LIGHTNING_LNURL_NAMES_NO_PAYEE` (um
            LNURL indica um serviço, não um beneficiário). O mesmo código abre a
            última entrada de `timeline` da transferência.
    TravelRuleChainSide:
      type: object
      description: >-
        A carteira de uma das partes, conforme a Didit a resolveu a partir dos
        dados da blockchain.
      properties:
        address:
          type: string
          description: >-
            A carteira. Numa rede memo, o endereço clássico (um endereço X do
            XRP é dividido no seu endereço clássico e na respetiva etiqueta); na
            Lightning, o ID do nó do beneficiário ou o Lightning Address.
        memo:
          type: string
          description: >-
            A tag ou memo de destino que faz parte da carteira; `""` quando não
            existe nenhum memo.
        source:
          type: string
          enum:
            - declared
            - x_address
            - largest_input
            - only_non_change_output
            - amount_match
            - invoice_payee
            - updated
          description: >-
            Origem da carteira: `declared` (o seu pedido), `x_address` (dividido
            a partir de um X-address de XRP), `largest_input` (o endereço de
            entrada UTXO que mais contribuiu), `only_non_change_output` (a única
            saída UTXO que não é troco), `amount_match` (a única saída UTXO que
            paga o montante da transferência), `invoice_payee` (o beneficiário
            indicado por um pedido de pagamento Lightning), `updated` (definido
            posteriormente com `action: update_originator_wallet`).
    TravelRuleUtxoEntry:
      type: object
      description: >-
        Uma entrada ou saída de uma transação UTXO, tal como a blockchain a
        registou.
      required:
        - address
      properties:
        address:
          type: string
          maxLength: 128
        amount:
          type: string
          nullable: true
          description: >-
            String decimal na própria unidade da moeda (BTC, não satoshis).
            Opcional.
          example: '0.0125'
        txid:
          type: string
          maxLength: 128
          description: Opcional. A transação que um input gasta.
        vout:
          type: integer
          nullable: true
          minimum: 0
          description: Opcional. O índice do output que é gasto por um input.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        A chave de API da sua aplicação, a partir de Programadores -> Chaves de
        API na Business Console. A chave principal tem acesso total. Uma chave
        nomeada pode ter o âmbito definido: nenhum, 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á
        incorreta, 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 o
        pedido veio de um endereço fora da sua lista de IP; 404 numa rota de
        sessão significa que a sessão está fora dos fluxos ou estados da chave.
        Uma chave sem acesso a multimédia recebe URLs de imagens, vídeos e PDFs
        como nulos, e uma chave sem permissão de escrita em sessões recebe
        ligações de sessão e tokens como nulos. Consulte
        https://docs.didit.me/console/api-keys.

````

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