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

# Prova de la Travel Rule al sandbox: guia de proves

> Prova al sandbox de Didit tots els resultats de la Travel Rule amb el VASP de prova: acceptació, rebuig, discrepància de noms i timeout.

Un aplicació de sandbox intercanvia dades de la Travel Rule amb una sola contrapart: el **Didit Test VASP**, un VASP de prova integrat a la plataforma. Respon a cada transferència com li indiquis, mitjançant el mateix codi que gestiona una contrapart real, de manera que pots observar cada estat, cada entrada de la cronologia i cada webhook d'un intercanvi abans de posar-te en producció.

Res del que enviïs en sandbox surt de Didit. No es contacta mai amb cap xarxa, cap destinatari de correu electrònic ni cap altre client de Didit, i no es cobra res.

## Abans de començar

1. Utilitza la clau d'API d'una aplicació **sandbox**. Les aplicacions en producció mai no arriben al Didit Test VASP.
2. Activa la Travel Rule amb un nom legal:

```bash theme={null}
curl -X PUT https://verification.didit.me/v3/travel-rule/settings/ \
  -H "x-api-key: YOUR_SANDBOX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"is_enabled": true, "legal_name": "Example CASP Sandbox"}'
```

3. Opcionalment, subscriu una destinació del webhook a `travel_rule.status.updated`. Sandbox l'envia, marcat com a `"environment": "sandbox"`.

## El Didit Test VASP

`GET /v1/sandbox/scenarios/` retorna el perfil del VASP de prova i tots els escenaris de l'objecte `travel_rule`, de manera que les proves poden llegir els valors dels activadors en lloc de codificar-los.

| Camp | Valor |
| - | - |
| `legal_name` | `Didit Test VASP` |
| `lei` | `DIDITESTVASP00000001`, ben format però no registrat |
| `jurisdiction` | `GB` |
| `compliance_email` | Una adreça sota `didit.test` a la qual no s'envia mai cap correu |
| `travel_address` | Una Travel Address sota un host `.test`, mai accessible |
| `network_codes` | Codis de prova que mai no es marquen |
| `default_scenario` | `accept` |
| `inbound_scenarios` | `["accept", "name_mismatch"]` |

Tots els valors són dades de prova. El VASP de prova no és membre de cap xarxa de la Travel Rule, i cap resultat en sandbox demostra que es pugui arribar a una contrapart o xarxa real.

## Escenaris de sortida

Cada transacció `travelRule` de sortida d'una aplicació sandbox que necessiti un intercanvi va al VASP de prova. Tria el resultat amb l'adreça de cartera del beneficiari (les majúscules i minúscules no importen), o amb un nom de beneficiari amb el format `Didit Test VASP <suffix>`; la cartera preval quan s'indiquen totes dues coses. Sense cap de les dues, o amb un sufix que la taula no llista, la transferència es completa (`accept`).

Una transferència que no necessita cap intercanvi mai no arriba al VASP de prova: una per sota del teu `threshold_amount`, una a la cartera verificada del teu usuari, i una a la cartera de la contrapart de la qual has declarat que és autoallotjada. Un VASP de contrapart que tu o el teu usuari final heu triat manualment del directori es jutja segons les rutes que tindria una aplicació en producció: quan la seva entrada en té alguna (un endpoint `TRP` verificat, una xarxa per on envia la teva aplicació o un contacte de compliment), la transferència va al VASP de prova; quan no en té cap, la transacció acaba amb `COUNTERPARTY_VASP_NOT_FOUND`, com passaria en una aplicació en producció.

| Escenari | Sufix del nom | Cartera (ETH) | Acaba en |
| - | - | - | - |
| `accept` | cap | `0xc00c4cd93ff83953ce3347b33656d68ab8f35cfb` | `COMPLETED`, després `FINISHED` quan informis de `payment_txn_id` |
| `decline` | `Decline` | `0x7694c5b0213859ef409107853a36ff7c85835f18` | `COUNTERPARTY_VASP_GENERAL_DECLINE` |
| `name_mismatch` | `Name Mismatch` | `0x501b7a0886e31f516aaf54fa99107d2377bd2d3e` | `COUNTERPARTY_MISMATCHED_DATA`, segons la teva regla de noms (amb `NONE` es completa) |
| `not_reachable` | `Not Reachable` | `0xf0e986c1a1c3ae41629bf5cdcee0a67dd1eb0cce` | `COUNTERPARTY_VASP_NOT_REACHABLE` després de la programació de reintents real (30 segons, i després 2, 10, 30 i 60 minuts, aproximadament una hora i 45 minuts en total), i després es pot reenviar |
| `timeout` | `Timeout` | `0xb63a1b1d4bee82d109332187cbf5b657eb7da498` | `EXPIRED` en la primera comprovació un cop vençut el termini d'un minut, és a dir, en uns 15 minuts; el teu `timeout_outcome` s'aplica després |
| `self_hosted` | `Self Hosted` | `0x33dcc2a7e69cf965f7f4eaf6ba657bcb078a2b65` | `UNCONFIRMED_OWNERSHIP`, i després `COMPLETED` quan es registri la prova de titularitat de la cartera |

```bash theme={null}
curl -X POST https://verification.didit.me/v3/transactions/ \
  -H "x-api-key: YOUR_SANDBOX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "transaction_id": "sbx-tr-accept-001",
    "transaction_category": "travelRule",
    "transaction_details": {
      "direction": "outbound",
      "action_type": "transfer",
      "amount": "0.25",
      "currency": "ETH",
      "currency_kind": "crypto"
    },
    "subject": { "entity_type": "individual", "vendor_data": "user-042", "full_name": "Jane Doe" },
    "travel_rule_details": {
      "status": "AWAITING_COUNTERPARTY",
      "beneficiary_data": {
        "wallet_address": "0xc00c4cd93ff83953ce3347b33656d68ab8f35cfb",
        "name": "Carlos Ruiz"
      }
    }
  }'
```

La `rail` de la transferència és `TEST_VASP`, i la llista de transferències indica `Didit Test VASP` com a VASP del beneficiari. Segueix-la als webhooks `travel_rule.status.updated`, o llegeix `GET /v3/transactions/{transaction_id}/`.

* **`name_mismatch`** compara el nom del beneficiari que has enviat amb el nom del titular que respon el VASP de prova, segons la teva regla de noms per al tipus d'entitat del beneficiari (`matching_rules.individual.name` o `matching_rules.company.name`, que segueixen `name_matching_strictness` fins que els defineixis). La transferència i l'entrada de la cronologia que la va decidir porten `name_match` (amb `compared_with: "counterparty_vasp"`) i `data_match` amb `mismatched_fields: ["name"]`.
* **`not_reachable`** manté la transferència en `AWAITING_COUNTERPARTY` mentre reintenta, amb `delivery.status` `RETRYING` i `last_error` `test VASP is not answering`, i després la passa a `COUNTERPARTY_VASP_NOT_REACHABLE`. Envia `{"action": "resend"}` després per tornar-la a executar.
* **`self_hosted`** fa que el VASP de prova respongui que la cartera és autoallotjada. Registra la prova amb el [widget de titularitat de la cartera](https://docs.didit.me/ca/transaction-monitoring/wallet-ownership-widget.md) (generat per a tu mentre `auto_wallet_verification` està activat) o amb [`POST .../travel-rule/ownership/`](https://docs.didit.me/ca/management-api/travel-rule/confirm-ownership) amb `{"confirmed": true}`: la cartera s'afegeix a la teva llibreta d'adreces amb el nom del beneficiari, i la coincidència de noms decideix la transferència. Una coincidència la completa i marca la cartera com a verificada; `{"confirmed": false}` la rebutja.

## Transferències entrants del VASP de prova

Per provar el costat receptor, demana al VASP de prova que t'enviï una transferència amb `POST /v3/travel-rule/test-vasp/inbound/`. Indica una de les carteres de la [llibreta d'adreces](https://docs.didit.me/ca/transaction-monitoring/travel-rule.md#llibreta-d’adreces-de-carteres) de la teva pròpia aplicació: la transferència es decideix pel mateix camí d'entrada que una transferència real, amb la teva llibreta d'adreces, el teu mode de titularitat i les teves regles de nom.

```bash theme={null}
curl -X POST https://verification.didit.me/v3/travel-rule/test-vasp/inbound/ \
  -H "x-api-key: YOUR_SANDBOX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "beneficiary_wallet_address": "0xYourDepositWallet",
    "scenario": "accept",
    "reference": "sbx-inbound-001"
  }'
```

| Camp | Descripció |
| - | - |
| `beneficiary_wallet_address` | Obligatori, fins a 128 caràcters. Usa una de les carteres de la teva pròpia llibreta d'adreces: qualsevol altra cartera es registra com a `ON_HOLD`. |
| `scenario` | `accept` (per defecte): el VASP de prova indica el titular de la cartera. `name_mismatch`: indica algú amb qui cap titular coincideix. |
| `chain`, `amount`, `currency` | Opcionals. Per defecte `ETH`, `1` i `ETH`. |
| `reference` | Opcional, fins a 128 caràcters. Si tornes a enviar la mateixa `reference`, es retorna la primera resposta (`201`) i no es registra res de nou. |

La resposta `201` inclou `transaction_id`, `txn_id`, `scenario`, `travel_rule_status`, `detail`, `test_vasp: true` i la transferència `travel_rule`. Una aplicació de producció rep `400` (`"The Didit Test VASP is only available on sandbox applications."`), un altre `scenario` rep `400`, i una aplicació amb Travel Rule desactivat rep `409`.

| La teva entrada de cartera | `accept` | `name_mismatch` |
| - | - | - |
| Cap en aquella cadena | `ON_HOLD` | `ON_HOLD` |
| Titularitat no demostrada per al teu [mode de titularitat](https://docs.didit.me/ca/transaction-monitoring/travel-rule.md#modes-de-validació-de-la-titularitat) | `UNCONFIRMED_OWNERSHIP` | `UNCONFIRMED_OWNERSHIP` |
| Verificada | `COMPLETED` mentre `inbound_auto_accept` estigui activat; si no, `ON_HOLD` | `COUNTERPARTY_MISMATCHED_DATA` (amb la regla de nom `NONE`, igual que `accept`) |

Decideix una transferència que està pendent mitjançant [`POST .../travel-rule/ownership/`](https://docs.didit.me/ca/management-api/travel-rule/confirm-ownership), com faries amb una de real: `{"confirmed": true}` la completa i `{"confirmed": false}` la rebutja.

Un dipòsit que informes tu mateix amb `POST /v3/transactions/` no és un que hagi enviat el VASP de prova: es manté a `AWAITING_COUNTERPARTY` esperant el seu VASP d'origen, i la seva cronologia indica l'endpoint anterior. No dispara cap webhook fins que caduca després de `confirmation_timeout_hours`. [`POST /v3/travel-rule/inbound/`](https://docs.didit.me/ca/management-api/travel-rule/register-inbound) continua liquidant un registre posterior al dipòsit contra la teva llibreta d'adreces, igual que en una aplicació de producció.

## Webhooks al sandbox

`travel_rule.status.updated` s'envia en les aplicacions sandbox a cada canvi d'estat, amb `"environment": "sandbox"`. Una transferència que ha respost el VASP de prova també porta `rail: "TEST_VASP"`, `test_vasp: true` i `test_vasp_scenario`. La resta del sandbox es comporta tal com es descriu a [Monitoratge de transaccions al sandbox](https://docs.didit.me/ca/integration/sandbox-testing.md#monitoratge-de-transaccions-en-sandbox): les regles no s'avaluen, no s'envien `transaction.created` ni `transaction.status.updated`, i no es factura res.

## Què no demostra el sandbox

* Que una contrapart real, una pertinença a una xarxa o l'amfitrió TRP públic de Didit funcionin. Cap d'ells no és contactat.
* Que les teves credencials de xarxa siguin vàlides. Una connexió a una xarxa es demostra amb el seu primer intercanvi en producció.
* Les rutes del [directori](https://docs.didit.me/ca/transaction-monitoring/travel-rule.md#directori) de VASP reals: en una aplicació sandbox cada ruta apareix com a `unavailable` amb `reason: sandbox_application`, i cada fila amb `reachable: false`.

Consulta [Xarxes de Travel Rule](https://docs.didit.me/ca/transaction-monitoring/travel-rule-networks.md) per veure a què arriba cada xarxa en producció avui.


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