Test outbound data exchange in Sandbox
Submit an outbound Travel Rule transaction and trigger deterministic statuses by varying the transaction data.
Before running outbound Sandbox Travel Rule tests, make sure that you have the following set up correctly:
- Switch your environment to Sandbox mode.
- Enable your Travel Rule rules in the Sandbox environment.
- Configure webhook handling for your test environment.
- Use the same request structure as in your outbound flow.
How outbound Sandbox testing works
When you submit a Travel Rule transaction in Sandbox:
- You create an outbound transaction with the pre-defined wallet addresses, asset values, and VASP identifiers, as described in the Test VASP transaction data table.
- Sumsub routes the transaction through a deterministic test scenario.
- System returns the expected Travel Rule status for that scenario.
In most cases, the outcome depends on:
- Wallet address.
- Asset and chain.
- Beneficiary name.
- Whether the counterparty is marked as hosted or unhosted.
- Whether a specific test VASP identifier is provided.
Recommended testing workflow
Use this order when validating your integration:
- Test a successful
completedscenario. - Test
awaitingCounterparty. - Test
unconfirmedOwnership. - Test
counterpartyVaspNotReachable. - Test
counterpartyVaspNotFound. - Test
awaitingCounterparty->expired. - Test
completed->finished. - Test
completed->cancelled.
This sequence lets you verify basic success handling first, then intermediate states, then fallback and timeout states, and finally post-completion terminal transitions.
Scenario summary
The following sections show the information that will be used for the test VASP based on the expected status or type of transaction.
completed
Use this scenario to verify that the test VASP can complete the Travel Rule exchange successfully.
|
Test VASP data |
Expected status |
What this tests |
|---|---|---|
|
Address 0x7DF6AF1C17AC9F86F8B3FBBC25253B8B5DF2F3A1
Asset ETH
Beneficiary data John Smith
Beneficiary VASP Sumsub test Vasp
|
completed
|
|
{
"txnId": "txn id",
"type": "travelRule",
"applicant": {
// applicant's data
},
"counterparty": {
"externalUserId": "91nmqhhnnbacvstj7b",
"fullName": "John Smith", // Required
"type": "individual",
"dob": "1991-04-07",
"residenceCountry": "DEU",
"paymentMethod": {
"accountId": "0x7DF6AF1C17AC9F86F8B3FBBC25253B8B5DF2F3A1" // Required
},
"institutionInfo": {
"internalId": "66f6f954abba073927d11155" // Required
}
},
"info": {
"direction": "out",
"amount": 0.01,
"currencyCode": "ETH",
"currencyType": "crypto"
}
}awaitingCounterparty
Use this scenario to verify that your integration handles a pending counterparty state.
NoteDisable the rule Travel Rule: Wallet does not belong to the counterparty VASP if you want to observe
awaitingCounterpartyinstead of an automatic decline.
|
Test VASP data |
Expected status |
What this tests |
|---|---|---|
|
Address 0x5BB23977B6E52A7C79BCC5E55F1655B7A69C7622-12345
Asset ETH
Beneficiary data Any name
Beneficiary VASP Sumsub test Vasp
|
awaitingCounterparty
|
|
{
"txnId": "txn id",
"type": "travelRule",
"applicant": {
// applicant's data
},
"counterparty": {
"externalUserId": "91nmqhhnnbacvstj7b",
"fullName": "Any name",
"type": "individual",
"dob": "1991-04-07",
"residenceCountry": "DEU",
"paymentMethod": {
"accountId": "0x5BB23977B6E52A7C79BCC5E55F1655B7A69C7622-12345" // Required
},
"institutionInfo": {
"internalId": "66f6f954abba073927d11155" // Reqiered
}
},
"info": {
"direction": "out",
"amount": 0.01,
"currencyCode": "ETH",
"currencyType": "crypto"
}
}unconfirmedOwnership
Use this scenario to verify that the test VASP rejects wallet ownership.
|
Test VASP data |
Expected status |
What this tests |
|---|---|---|
|
Address 0X7B1E4CFE1659FB2FF41E70C89BC03A92895C76FE
Asset ETH
Beneficiary data Any name
Beneficiary VASP Sumsub test Vasp
|
unconfirmedOwnership
|
|
{
"txnId": "txn id",
"type": "travelRule",
"applicant": {
// applicant's data
},
"counterparty": {
"externalUserId": "91nmqhhnnbacvstj7b",
"fullName": "Any name",
"type": "individual",
"dob": "1991-04-07",
"residenceCountry": "DEU",
"paymentMethod": {
"accountId": "0X7B1E4CFE1659FB2FF41E70C89BC03A92895C76FE" // Reqiered
},
"institutionInfo": {
"internalId": "66f6f954abba073927d11155" // Reqiered
}
},
"info": {
"direction": "out",
"amount": 0.01,
"currencyCode": "ETH",
"currencyType": "crypto"
}
}counterpartyVaspNotReachable
Use this scenario to verify the fallback path for an identified but unreachable VASP.
|
Test VASP data |
Expected status |
What this tests |
|---|---|---|
|
Address Empty
Asset Empty
Beneficiary data Empty
Beneficiary VASP Sumsub test not reachable VASP
Beneficiary VASP ID 683584cd36898664230ee173
|
counterpartyVaspNotReachable
|
|
{
"txnId": "txn id",
"type": "travelRule",
"applicant": {
// applicant's data
},
"counterparty": {
"externalUserId": "91nmqhhnnbacvstj7b",
"fullName": "Any name",
"type": "individual",
"dob": "1991-04-07",
"residenceCountry": "DEU",
"paymentMethod": {
"accountId": "any"
},
"institutionInfo": {
"internalId": "683584cd36898664230ee173" // Required
}
},
"info": {
"direction": "out",
"amount": 0.01,
"currencyCode": "ETH",
"currencyType": "crypto"
}
}counterpartyVaspNotFound
Use this scenario to verify what happens when the counterparty cannot be identified.
|
Test VASP data |
Expected status |
What this tests |
|---|---|---|
|
Address Empty
Asset Empty
Beneficiary data Empty
Beneficiary VASP Empty
|
counterpartyVaspNotFound
|
|
{
"txnId": "txn id",
"type": "travelRule",
"applicant": {
// applicant's data
},
"counterparty": {
"externalUserId": "91nmqhhnnbacvstj7b",
"fullName": "Any name",
"type": "individual",
"dob": "1991-04-07",
"residenceCountry": "DEU",
"paymentMethod": {
"accountId": "any",
"type" : "unhostedWallet", // Required
},
},
"info": {
"direction": "out",
"amount": 0.01,
"currencyCode": "ETH",
"currencyType": "crypto"
}
}awaitingCounterparty → expired
Use this scenario to verify timeout handling.
Note
- Configure the confirmation timeout in Sandbox.
- Make sure the transaction can first enter the
awaitingCounterpartystatus.
|
Test VASP data |
Expected status |
What this tests |
|---|---|---|
|
Address 0x5BB23977B6E52A7C79BCC5E55F1655B7A69C7622
Asset ETH
Beneficiary data Any name
Beneficiary VASP Sumsub test Vasp
|
awaitingCounterparty
->
expired
|
|
NoteTo test this VASP data exchange, use the example provided here.
completed → finished
Use this scenario to verify the final blockchain-link step.
NoteMake sure to enrich the completed transaction with any blockchain transaction ID.
|
Test VASP data |
Expected status |
What this tests |
|---|---|---|
|
Address 0x5BB23977B6E52A7C79BCC5E55F1655B7A69C7622-TEST
Asset ETH
Beneficiary data Any name
Beneficiary VASP Blank field for the VASP name
|
completed
->
finished
|
|
NoteTo test this VASP data exchange, use the example provided here.
completed → canceled
Use this scenario to verify cancellation after a completed Travel Rule exchange.
NoteCancel the transaction instead of enriching it with a blockchain transaction ID.
|
Test VASP data |
Expected status |
What this tests |
|---|---|---|
|
Address bc1q080rkmk3kj86pxvf5nkxecdrw6nrx3zzy9xl7q
Asset BTC
Beneficiary data Any name
Beneficiary VASP Blank field for the VASP name
|
completed
->
canceled
|
|
NoteTo test this VASP data exchange, use the example provided here.
Updated about 2 hours ago