Prima di iniziare
- Usa la chiave API di un’applicazione sandbox. Le applicazioni in produzione non raggiungono mai il VASP di test.
- Attiva Travel Rule con un nome legale:
- Facoltativamente, iscrivi una destinazione webhook a
travel_rule.status.updated. La sandbox la consegna, contrassegnata con"environment": "sandbox".
Il Didit Test VASP
GET /v1/sandbox/scenarios/ restituisce il profilo del VASP di test e ogni scenario nel suo oggetto travel_rule, così i tuoi test possono leggere i valori di trigger invece di scriverli nel codice:
Ogni valore è un dato di test. Il VASP di test non è membro di alcuna rete Travel Rule, e nessun risultato in sandbox dimostra che una controparte o una rete reale sia raggiungibile.
Scenari in uscita
Ogni transazionetravelRule in uscita di un’applicazione sandbox che richiede uno scambio va al VASP di test. Scegli l’esito tramite l’indirizzo wallet del beneficiario (non conta la distinzione tra maiuscole e minuscole) oppure tramite un nome del beneficiario nella forma Didit Test VASP <suffix>; se sono impostati entrambi, prevale il wallet. Se non c’è né l’uno né l’altro, oppure se il suffisso non compare nella tabella, il trasferimento si completa (accept).
Un trasferimento che non richiede uno scambio non raggiunge mai il VASP di test: uno al di sotto della tua threshold_amount, uno verso il wallet verificato del tuo utente e uno il cui wallet della controparte hai dichiarato in autocustodia. Un VASP controparte che tu o il tuo utente finale avete scelto manualmente dalla directory è valutato con le stesse rotte di un’applicazione in produzione: se la sua voce ne ha una (un endpoint TRP verificato, una rete su cui invia la tua applicazione oppure un contatto di compliance), il trasferimento va al VASP di test; se non ne ha, il trasferimento termina con COUNTERPARTY_VASP_NOT_FOUND, come accadrebbe su un’applicazione in produzione.
rail del trasferimento è TEST_VASP, e nell’elenco dei trasferimenti Didit Test VASP compare come VASP beneficiario. Seguilo nei webhook travel_rule.status.updated, oppure leggi GET /v3/transactions/{transaction_id}/.
name_mismatchconfronta il nome del beneficiario che hai inviato con il nome del titolare che il VASP di test restituisce, secondo la tua regola sul nome per il tipo di entità del beneficiario (matching_rules.individual.nameoppurematching_rules.company.name, che seguononame_matching_strictnessfinché non le imposti). Il trasferimento e la voce della cronologia che lo ha deciso riportanoname_match(concompared_with: "counterparty_vasp") edata_matchconmismatched_fields: ["name"].not_reachablemantiene il trasferimento inAWAITING_COUNTERPARTYmentre riprova, condelivery.statusRETRYINGelast_errortest VASP is not answering, poi lo porta aCOUNTERPARTY_VASP_NOT_REACHABLE. Invia successivamente{"action": "resend"}per eseguirlo di nuovo.self_hostedfa rispondere al VASP di test che il wallet è in autocustodia. Registra la prova con il widget di verifica della proprietà del wallet (generato per te finchéauto_wallet_verificationè attivo) oppure conPOST .../travel-rule/ownership/inviando{"confirmed": true}: il wallet viene aggiunto alla tua rubrica degli indirizzi con il nome del beneficiario e il confronto del nome determina l’esito del trasferimento. Una corrispondenza lo completa e contrassegna il wallet come verificato;{"confirmed": false}lo rifiuta.
Transferencias entrantes desde el VASP de prueba
Para probar el lado receptor, pide al VASP de prueba que te envíe una transferencia conPOST /v3/travel-rule/test-vasp/inbound/. Indica una de las wallets de tu propio libro de direcciones de la aplicación: la transferencia se decide con la misma ruta entrante que una real, contra tu libro de direcciones, tu modo de titularidad y tus reglas de nombre.
La respuesta
201 incluye transaction_id, txn_id, scenario, travel_rule_status, detail, test_vasp: true y la transferencia travel_rule. Una aplicación en producción recibe 400 ("The Didit Test VASP is only available on sandbox applications."), otro scenario recibe 400, y una aplicación con Travel Rule desactivada recibe 409.
Decide una transferencia pendiente mediante
POST .../travel-rule/ownership/, igual que con una real: {"confirmed": true} la completa y {"confirmed": false} la rechaza.
Un depósito que tú mismo registras con POST /v3/transactions/ no es uno que haya enviado el VASP de prueba: permanece en AWAITING_COUNTERPARTY a la espera de su VASP originador, y su cronología menciona el endpoint anterior. No envía ningún webhook hasta que caduca tras confirmation_timeout_hours. POST /v3/travel-rule/inbound/ sigue liquidando un registro posterior al depósito contra tu libro de direcciones, como en una aplicación en producción.
Webhooks en sandbox
travel_rule.status.updated se envía para las aplicaciones sandbox en cada cambio de estado, con "environment": "sandbox". Una transferencia a la que respondió el VASP de prueba incluye además rail: "TEST_VASP", test_vasp: true y test_vasp_scenario. El resto del sandbox se comporta como se describe en Monitorización de transacciones en sandbox: las reglas no se evalúan, no se envían transaction.created ni transaction.status.updated, y no se factura nada.
Lo que el sandbox no demuestra
- Que una contraparte real, una pertenencia a una red o el host público TRP de Didit funcionen. No se contacta con ninguno de ellos.
- Que tus credenciales de red sean válidas. Una membresía conectada queda demostrada mediante su primer intercambio en producción.
- Las rutas del directorio de VASP reales: en una aplicación sandbox cada ruta aparece como
unavailableconreason: sandbox_application, y cada fila conreachable: false.