Passer au contenu principal
Une application sandbox n’échange des données Travel Rule qu’avec une seule contrepartie : le Didit Test VASP, un VASP de test intégré à la plateforme. Il répond à chaque transfert comme vous le lui demandez, par le même code que celui qui gère une contrepartie réelle. Vous pouvez ainsi observer chaque statut, chaque entrée de chronologie et chaque webhook d’un échange avant de passer en production. Rien de ce que vous envoyez en sandbox ne quitte Didit. Aucun réseau, aucun destinataire d’e-mail ni aucun autre client Didit n’est jamais contacté, et rien n’est facturé.

Avant de commencer

  1. Utilisez la clé API d’une application sandbox. Les applications de production n’atteignent jamais le VASP de test.
  2. Activez Travel Rule avec un nom légal :
  1. Vous pouvez éventuellement abonner une destination de webhook à travel_rule.status.updated. Le sandbox l’envoie, marqué "environment": "sandbox".

Le Didit Test VASP

GET /v1/sandbox/scenarios/ renvoie le profil du VASP de test et chaque scénario de son objet travel_rule. Vos tests peuvent ainsi lire les valeurs de déclenchement au lieu de les coder en dur. Toutes les valeurs sont des données de test. Le VASP de test n’est membre d’aucun réseau Travel Rule, et aucun résultat en sandbox ne montre qu’une contrepartie ou un réseau réel peut être atteint.

Scénarios sortants

Chaque transaction travelRule sortante d’une application sandbox qui nécessite un échange est envoyée au VASP de test. Choisissez l’issue avec l’adresse du portefeuille du bénéficiaire (la casse n’a pas d’importance) ou avec un nom de bénéficiaire de la forme Didit Test VASP <suffix>. Si les deux sont renseignés, le portefeuille prime. Si aucun des deux n’est renseigné, ou si le suffixe ne figure pas dans le tableau, le transfert se termine avec accept. Un transfert qui ne nécessite aucun échange n’atteint jamais le VASP de test : c’est le cas d’un montant inférieur à votre threshold_amount, d’un transfert vers le propre portefeuille vérifié de votre utilisateur, ou d’un transfert vers un portefeuille de contrepartie que vous avez déclaré auto-hébergé. Un VASP de contrepartie choisi manuellement dans l’annuaire par vous ou par votre utilisateur final est jugé selon les routes qu’une application de production utiliserait. Si son entrée en comporte une (un endpoint TRP vérifié, un réseau sur lequel votre application envoie, ou un contact de conformité), le transfert est envoyé au VASP de test. Si elle n’en comporte aucune, le transfert se termine avec COUNTERPARTY_VASP_NOT_FOUND, comme il le ferait sur une application de production.
Le rail de la transaction est TEST_VASP, et la liste des transferts indique Didit Test VASP comme VASP bénéficiaire. Suivez cette transaction dans les webhooks travel_rule.status.updated, ou lisez GET /v3/transactions/{transaction_id}/.
  • name_mismatch compare le nom du bénéficiaire que vous avez envoyé avec le nom du titulaire que le VASP de test renvoie, selon votre règle de nom pour le type d’entité du bénéficiaire (matching_rules.individual.name ou matching_rules.company.name, qui suivent name_matching_strictness tant que vous ne les définissez pas). Le transfert et l’entrée de chronologie qui l’a décidé portent name_match (avec compared_with: "counterparty_vasp") et data_match avec mismatched_fields: ["name"].
  • not_reachable maintient la transaction en AWAITING_COUNTERPARTY pendant les nouvelles tentatives, avec delivery.status à RETRYING et last_error à test VASP is not answering, puis la passe en COUNTERPARTY_VASP_NOT_REACHABLE. Envoyez ensuite {"action": "resend"} pour la relancer.
  • self_hosted fait répondre au VASP de test que le portefeuille est auto-hébergé. Enregistrez la preuve avec le widget de vérification de propriété du portefeuille (généré pour vous lorsque auto_wallet_verification est activé) ou avec POST .../travel-rule/ownership/ et {"confirmed": true} : le portefeuille est ajouté à votre carnet d’adresses sous le nom du bénéficiaire, et la correspondance des noms décide de la transaction. Une correspondance la complète et marque le portefeuille comme vérifié. {"confirmed": false} la refuse.

Transferts entrants depuis le VASP de test

Pour tester le côté réception, demandez au VASP de test de vous envoyer un transfert avec POST /v3/travel-rule/test-vasp/inbound/. Indiquez l’un des portefeuilles du carnet d’adresses de votre propre application : le transfert est traité par le même chemin entrant que pour un transfert réel, avec votre carnet d’adresses, votre mode d’actionnariat et vos règles de nom.
La réponse 201 contient transaction_id, txn_id, scenario, travel_rule_status, detail, test_vasp: true et le transfert travel_rule. Une application en production reçoit 400 ("The Didit Test VASP is only available on sandbox applications."), une autre valeur de scenario renvoie 400, et une application dont Travel Rule est désactivée reçoit 409. Prenez une décision concernant un transfert en attente avec POST .../travel-rule/ownership/, comme pour un transfert réel : {"confirmed": true} le finalise et {"confirmed": false} le refuse. Un dépôt que vous signalez vous-même avec POST /v3/transactions/ n’est pas un transfert envoyé par le VASP de test : il reste AWAITING_COUNTERPARTY dans l’attente de son VASP d’origine, et sa chronologie cite l’endpoint indiqué plus haut. Il ne déclenche aucun webhook avant son expiration, après confirmation_timeout_hours. POST /v3/travel-rule/inbound/ finalise toujours un enregistrement post-dépôt par rapport à votre carnet d’adresses, comme sur une application en production.

Webhooks en sandbox

travel_rule.status.updated se déclenche pour les applications sandbox à chaque changement de statut, avec "environment": "sandbox". Un transfert auquel le VASP de test a répondu porte aussi rail: "TEST_VASP", test_vasp: true et test_vasp_scenario. Le reste de la sandbox se comporte comme décrit dans Surveillance des transactions en sandbox : les règles ne sont pas évaluées, transaction.created et transaction.status.updated ne sont pas envoyés, et rien n’est facturé.

Ce que le sandbox ne prouve pas

  • Qu’une contrepartie réelle, une adhésion à un réseau ou l’hôte TRP public de Didit fonctionne. Aucun d’entre eux n’est contacté.
  • Que vos identifiants réseau sont valides. Une adhésion connectée est confirmée par son premier échange en production.
  • Les routes de l’annuaire des VASP réels : sur une application sandbox, chaque route affiche unavailable avec reason: sandbox_application, et chaque ligne affiche reachable: false.
Voir Réseaux Travel Rule pour ce que chaque rail atteint en production aujourd’hui.
Dernière modification le 7 novembre 2026