Preventing transaction duplication is rather beneficial for Travel Rule compliance.
Before submitting a new transaction, you can check whether the mirrored transaction—inbound or outbound—already exists in the system (e.g., if the originating VASP is also a Sumsub client using the Travel Rule solution).
To query specific Travel Rule transactions, use the following API method. On that method page, you can find comprehensive information on the request parameters and supported filters for search options.
Request examples
The following are the examples of requests that you can use to check if a transaction has been created, and is awaiting your response by a counterparty VASP.
Query inbound transactions
The following request checks whether a Travel Rule inbound transaction with a specific crypto hash and sender wallet already exists.
curl -X GET \
'https://api.sumsub.com/resources/kyt/txns/query/-;data.type=travelRule;data.applicant.paymentMethod.accountId=0x611Fb08528080848Dd3439242fdfg993d18ADd95dsd;data.info.direction=in;data.info.paymentTxnId=000000000000000000013f2851d71e6ea8dfcc9151654ca4cbbbfd759122589f?order=-createdAt&limit=1' \
-H 'accept: application/json'
Query outbound transactions
The following request checks whether a Travel Rule outbound transaction with a specific wallet address already exists.
curl -X GET \
'https://api.sumsub.com/resources/kyt/txns/query/-;data.type=travelRule;data.info.direction=out;data.applicant.paymentMethod.accountId=1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa?order=-createdAt&limit=1' \
-H 'accept: application/json'
Response examples
The following are the response examples you may receive.
Response to a query on inbound transactions
{
"list": {
"items": [
{
"id": "6819f6b44b2fcfce0998006f",
"counterpartyApplicantId": "6814dfa5e18b86f3c28c6df3",
"externalUserId": "9bdb40f8-ffcd-48fd-b5e9-96307e5d69ac",
"clientId": "Peter",
"data": {
"txnId": "93b54a42-bdce-4c5a-94ea-cf765fa9e448",
"txnDate": "2025-05-06 11:47:00+0000",
"applicant": {
"externalUserId": "9bdb40f8-ffcd-48fd-b5e9-96307e5d69ac",
"type": "individual",
"paymentMethod": {
"accountId": "0x611Fb08528080123Dd3439242fdfg912318ADd123sd"
}
},
"counterparty": {
"externalUserId": "level-33333628-b84d-422d-933e-7712311edef6",
"type": "individual",
"type": "travelRule",
"info": {
"type": "transfer",
"direction": "in",
"amount": 5.0,
"currencyCode": "ETH",
"currencyType": "crypto",
"cryptoParams": {
"cryptoChain": ""
},
"amountInDefaultCurrency": 7961.783439490446,
"defaultCurrencyCode": "EUR",
"paymentTxnId": "000000000000000000013f2851d71e6ea8123c9151654ca4cbbb12359122589f"
}
},
"score": 0,
"createdAt": "2025-05-06 11:47:00+0000",
"travelRuleInfo": {
"protocolName": "sns",
"protocolAttempts": {
"sns": "onHold"
},
"applicant": {
"externalUserId": "9bdb40f8-ffcd-48fd-b5e9-96307e5d69ac"
},
"counterparty": {
"externalUserId": "level-33333628-b84d-422d-933e-7779011edef6"
},
"status": "onHold",
"applicantVaspId": "64dce00a631b6e786efbfe2a",
"counterpartyVaspId": "66f2a4c22e0e380f3a2b65a6"
},
"mirrored": true,
"txnInactive": false
}
],
"totalItems": 1
}
}
Response to a query on outbound transactions
{
"list": {
"items": [
{
"id": "67f416cf4146933cc3772c51",
"applicantId": "67f416cf4146933cc3772c4d",
"externalUserId": "c9v4s10j5aexoonp113hdr",
"clientId": "Peter",
"data": {
"txnId": "zksfizob8cv63n9ulbpfm",
"txnDate": "2025-04-07 18:17:51+0000",
"applicant": {
"externalUserId": "c9v4s10j5aexoonp113hdr",
"fullName": "John Posek",
"firstName": "John",
"lastName": "Posek",
"nameType": "birthName",
"dob": "1992-05-08",
"placeOfBirth": "Paris, France",
"address": {
"subStreet": "1",
"street": "Rue de Rivoli",
"town": "Paris",
"postCode": "75001",
"country": "FRA",
"formattedAddress": "Rue de Rivoli, 1, Paris, France, 75001"
},
"type": "individual",
"paymentMethod": {
"type": "account",
"accountId": "1A1zP1eP5QG1232DMPTfTL5SLmv7123fNa"
},
"institutionInfo": {
"internalId": "64dce00a631b6e786efbfe2a"
},
"idDoc": {
"number": "FR12334129",
"country": "FRA",
"idDocType": "PASSPORT",
"registrationAuthority": "Ille-de-France 01"
},
"residenceCountry": "FRA"
},
"counterparty": {
"externalUserId": "xo7vtj7bawplhugvxc2zr",
"fullName": "Jack Posek",
"firstName": "Jack",
"lastName": "Posek",
"nameType": "birthName",
"dob": "1991-04-07",
"placeOfBirth": "Berlin, Germany",
"address": {
"subStreet": "60",
"street": "Chauseestr.",
"town": "Berlin",
"postCode": "10115",
"country": "DEU",
"formattedAddress": "Chauseestr., 60, Berlin, Germany, 10115"
},
"type": "individual",
"paymentMethod": {
"type": "",
"accountId": "bc1q080rkmk3kj86123f5nkxec1236nrx31239xl7q"
},
"institutionInfo": {
"internalId": "6601340978488d7ad23cde6f"
},
"idDoc": {
"number": "DE42234023",
"country": "DEU",
"idDocType": "PASSPORT",
"registrationAuthority": "BerlinMitte"
},
"residenceCountry": "DEU"
},
"type": "travelRule",
"info": {
"type": "transfer",
"direction": "out",
"amount": 2.0,
"currencyCode": "FTM",
"currencyType": "crypto",
"defaultCurrencyCode": "EUR"
}
},
"score": 0,
"createdAt": "2025-04-07 18:17:51+0000",
"travelRuleInfo": {
"protocolName": "sns",
"protocolAttempts": {
"sns": "awaitingCounterparty"
},
"applicant": {
"externalUserId": "c9v4s10j5aexoonp113hdr",
"fullName": "John Posek",
"address": {
"subStreet": "1",
"street": "Rue de Rivoli",
"town": "Paris",
"postCode": "75001",
"country": "FRA",
"formattedAddress": "Rue de Rivoli, 1, Paris, France, 75001"
}
},
"counterparty": {
"externalUserId": "xo7vtj7bawplhugvxc2zr",
"fullName": "Jack Posek",
"address": {
"subStreet": "60",
"street": "Chauseestr.",
"town": "Berlin",
"postCode": "10115",
"country": "DEU",
"formattedAddress": "Chauseestr., 60, Berlin, Germany, 10115"
}
},
"status": "awaitingCounterparty",
"applicantVaspId": "64dce00a631b6e786efbfe2a",
"counterpartyVaspId": "6601340978488d7ad23cde6f"
},
"txnInactive": false
}
],
"totalItems": 190
}
}