Saltar para o conteúdo principal
Uma aplicação sandbox troca dados da Travel Rule com uma única contraparte: o Didit Test VASP, um VASP de teste integrado na plataforma. Responde a cada transferência da forma que lhe indicar, através do mesmo código que trata uma contraparte real, para que possa acompanhar cada estado, entrada da cronologia e webhook de uma troca antes de passar para produção. Nada do que envia no sandbox sai da Didit. Nenhuma rede, destinatário de e-mail ou outro cliente da Didit é alguma vez contactado, e nada é cobrado.

Antes de começar

  1. Use a chave de API de uma aplicação sandbox. As aplicações de produção nunca chegam ao VASP de teste.
  2. Ative a Travel Rule com um nome legal:
  1. Opcionalmente, subscreva um destino de webhook para travel_rule.status.updated. O sandbox envia-o, marcado com "environment": "sandbox".

O VASP de teste da Didit

GET /v1/sandbox/scenarios/ devolve o perfil do VASP de teste e todos os cenários do seu objeto travel_rule, para que os seus testes leiam os valores de acionamento em vez de os fixarem no código: Todos os valores são dados de teste. O VASP de teste não é membro de nenhuma rede da Travel Rule, e nenhum resultado no sandbox mostra que uma contraparte ou rede real pode ser contactada.

Cenários de saída

Todas as transações travelRule de saída de uma aplicação sandbox que precise de uma troca são encaminhadas para o VASP de teste. Escolha o resultado através do endereço de carteira do beneficiário (as maiúsculas e minúsculas não importam) ou através de um nome de beneficiário no formato Didit Test VASP <suffix>; a carteira prevalece quando ambos estão definidos. Sem nenhum dos dois, ou com um sufixo que a tabela não lista, a transferência é concluída (accept). Uma transferência que não precisa de troca nunca chega ao VASP de teste: uma abaixo do seu threshold_amount, uma para a carteira verificada do seu utilizador e uma cuja carteira da contraparte tenha sido declarada por si como autocustodiada. Um VASP de contraparte que escolheu manualmente no diretório, por si ou pelo seu utilizador final, é avaliado pelas rotas que uma aplicação de produção usaria: quando a entrada tem uma (um endpoint TRP verificado, uma rede pela qual a sua aplicação envia ou um contacto de conformidade), a transferência vai para o VASP de teste; quando não tem nenhuma, a transferência termina em COUNTERPARTY_VASP_NOT_FOUND, como aconteceria numa aplicação de produção.
O rail da transferência é TEST_VASP, e a lista de transferências indica Didit Test VASP como VASP beneficiário. Acompanhe-a nos webhooks travel_rule.status.updated ou leia GET /v3/transactions/{transaction_id}/.
  • name_mismatch compara o nome do beneficiário que enviou com o nome do titular que o VASP de teste devolve, segundo a sua regra de nome para o tipo de entidade do beneficiário (matching_rules.individual.name ou matching_rules.company.name, que seguem name_matching_strictness até os definir). A transferência e a entrada da cronologia que a decidiu incluem name_match (com compared_with: "counterparty_vasp") e data_match com mismatched_fields: ["name"].
  • not_reachable mantém a transferência em AWAITING_COUNTERPARTY enquanto tenta novamente, com delivery.status RETRYING e last_error test VASP is not answering, e depois passa-a para COUNTERPARTY_VASP_NOT_REACHABLE. Envie {"action": "resend"} depois para a executar novamente.
  • self_hosted faz com que o VASP de teste responda que a carteira é autocustodiada. Registe a prova com o widget de verificação de propriedade da carteira (criado para si enquanto auto_wallet_verification estiver ativo) ou com POST .../travel-rule/ownership/ com {"confirmed": true}: a carteira é adicionada à sua agenda de endereços em nome do beneficiário, e a correspondência de nomes decide a transferência. Uma correspondência conclui-a e marca a carteira como verificada; {"confirmed": false} recusa-a.

Transferências recebidas do VASP de teste

Para testar o lado de receção, peça ao VASP de teste que lhe envie uma transferência com POST /v3/travel-rule/test-vasp/inbound/. Indique uma das carteiras do livro de endereços da sua aplicação: a transferência é decidida pelo mesmo caminho de entrada que uma real, com base no seu livro de endereços, no seu modo de propriedade e nas suas regras de nome.
A resposta 201 inclui transaction_id, txn_id, scenario, travel_rule_status, detail, test_vasp: true e a transferência travel_rule. Uma aplicação de produção recebe 400 ("The Didit Test VASP is only available on sandbox applications."), outro scenario recebe 400, e uma aplicação com a Travel Rule desativada recebe 409. Decida uma transferência que esteja a aguardar através de POST .../travel-rule/ownership/, como faria com uma real: {"confirmed": true} conclui-a e {"confirmed": false} recusa-a. Um depósito que você próprio reporta com POST /v3/transactions/ não é uma transferência enviada pelo VASP de teste: fica AWAITING_COUNTERPARTY à espera do seu VASP de origem, e a cronologia indica o endpoint acima. Não dispara nenhum webhook até expirar após confirmation_timeout_hours. POST /v3/travel-rule/inbound/ continua a liquidar um registo posterior ao depósito contra o seu livro de endereços, como numa aplicação de produção.

Webhooks no sandbox

travel_rule.status.updated é enviado para aplicações sandbox em cada alteração de estado, com "environment": "sandbox". Uma transferência a que o VASP de teste respondeu inclui também rail: "TEST_VASP", test_vasp: true e test_vasp_scenario. O resto do sandbox continua a comportar-se como descrito em Monitorização de transações no sandbox: as regras não são avaliadas, transaction.created e transaction.status.updated não são enviados, e nada é faturado.

O que o sandbox não comprova

  • Que uma contraparte real, uma adesão a uma rede ou o servidor TRP público da Didit funciona. Nenhum deles é contactado.
  • Que as suas credenciais de rede são válidas. Uma adesão ligada só é comprovada pela primeira troca em produção.
  • As rotas do diretório de VASPs reais: numa aplicação sandbox, cada rota aparece como unavailable com reason: sandbox_application, e cada linha com reachable: false.
Veja Redes de Travel Rule para saber o que cada rail alcança atualmente em produção.
Última modificação em 7 de novembro de 2026