| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
Table of contents
- Overview
- Supported filters
- Recommended lookup flow
- Request examples
- Response explained
- Response examples
Overview
Use this endpoint to search for and retrieve specific Travel Rule transactions using supported flexible filters and query parameters.
It helps prevent duplicate Travel Rule processing by allowing you to check whether a corresponding (mirrored) transaction already exists in the system. This is particularly useful for inbound blockchain transfers, where the originating VASP may have already created a Travel Rule message using the same solution.
Before submitting a new inbound transaction for Travel Rule processing, query the system to determine whether a record already exists. If no matching transaction is found, proceed with creating a new Travel Rule transaction.
Supported filters
You can add filters directly in the PATH segment of the request. When combined with query parameters, they help in pagination, sorting, and selective field searching. See the request examples for clarity.
The table below includes and explains the filters that are currently supported.
| Field | Type | Description |
|---|---|---|
data.type | String | Transaction type. Must be travelRule, indicating transaction subject to Travel Rule requirements. |
data.txnDate | Date | Date and time when transactions occurred. Format ( Also, the following options are available: • • ⚠️ The value should be URL-encoded (for example, |
data.info.paymentTxnId | String | Crypto transaction hash identifying the transaction on the blockchain. |
data.info.direction | String | Transaction type. Possible values:
|
data.info.currencyCode | String | Currency code of the transaction in ISO 4217 (for fiat) or standard cryptocurrency symbol format (for example, USD, EUR, BTC, ETH). |
data.info.cryptoParams.cryptoChain | String | Blockchain network or chain used for crypto transactions (for example, BTC, ETH, TRX, BNB). |
data.info.amount | Double | Transaction amount in the specified Also, the following options are available: • • |
data.applicant.paymentMethod.accountId | String | Crypto wallet address or bank card number associated with the applicant. |
data.counterparty.paymentMethod.accountId | String | Crypto wallet address or bank account number of the counterparty involved in the transaction. |
NoteThe method is evolving and will support additional filters over time.
Recommended lookup flow
To locate an existing (mirrored) Travel Rule transaction, follow the lookup approach described below.
- Start by searching with
data.info.paymentTxnId. The on-chain transaction hash is typically the most reliable and unique identifier, and in most cases, it is sufficient to find the corresponding transaction. - If no results are returned—for example, if the originating VASP has not yet updated the transaction with the on-chain hash—perform a broader search using a combination of the following parameters:
data.typedata.txnDatedata.info.directiondata.info.currencyCodedata.info.cryptoParams.cryptoChaindata.info.amountdata.applicant.paymentMethod.accountIddata.counterparty.paymentMethod.accountId
Tips
- If you are unsure about the exact value of a parameter, omit it rather than guessing. Overly restrictive filters may lead to false negatives and prevent you from finding an existing Travel Rule record.
- For
data.info.amount, use thedata.info.amount__gteanddata.info.amount__lteoperators instead of an exact match. This helps avoid false negatives caused by floating-point precision differences between systems.
Request examples
To build a valid request, mind the following:
- Separate each filter using a semicolon (
;). - Each filter must follow the
key=valueformat.
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.
// 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'// Searches Travel Rule transactions with USDT/ETH currency where amount is from '100' to '500' which happened on '2025-10-07'.
curl -X GET \
'https://api.sumsub.com/resources/kyt/txns/query/-;data.info.direction=in;data.info.amount__gte=100;data.info.amount__lte=500;data.info.currencyCode=USDT;data.info.cryptoParams.cryptoChain=ETH;data.txnDate__gte=2025-10-07%2000%3A00%3A00;data.txnDate__lte=2025-10-07%2023%3A59%3A59;data.type=travelRule?order=-data.txnDate&limit=1' \
-H 'accept: application/json'Response explained
The response is a JSON file that represents the list of transactions found in accordance with the filters and parameters specified in the request.
| Field | Type | Description |
|---|---|---|
items | Array of objects | Each object corresponds to a specific transaction. You can see the structured transaction information on the following page. |
totalItems | Integer | Total number of existing transactions matching the criteria specified in the request. |
Response examples
If the request is successfully sent and processed, you will get a response like in the following example:
{
"list": {
"items": [
{
"id": "6819f6b44b2fcfce09980000",
"counterpartyApplicantId": "6814dfa5e18b86f3c28c6000",
"externalUserId": "9bdb40f8-ffcd-48fd-b5e9-96307e500000",
"clientId": "Peter",
"data": {
"txnId": "93b54a42-bdce-4c5a-94ea-cf765fa9e000",
"txnDate": "2025-05-06 11:47:00+0000",
"applicant": {
"externalUserId": "9bdb40f8-ffcd-48fd-b5e9-96307e5d6000",
"type": "individual",
"paymentMethod": {
"accountId": "0x611Fb08528080123Dd3439242fdfg912318ADd12000"
}
},
"counterparty": {
"externalUserId": "level-33333628-b84d-422d-933e-7712311ed000",
"type": "individual"
},
"type": "travelRule",
"info": {
"type": "transfer",
"direction": "in",
"amount": 5,
"currencyCode": "ETH",
"currencyType": "crypto",
"cryptoParams": {
"cryptoChain": ""
},
"amountInDefaultCurrency": 7961.783439490446,
"defaultCurrencyCode": "EUR",
"paymentTxnId": "000000000000000000013f2851d71e6ea8123c9151654ca4cbbb123591225000"
}
},
"score": 0,
"createdAt": "2025-05-06 11:47:00+0000",
"travelRuleInfo": {
"protocolName": "sns",
"protocolAttempts": {
"sns": "onHold"
},
"applicant": {
"externalUserId": "9bdb40f8-ffcd-48fd-b5e9-96307e5d6000"
},
"counterparty": {
"externalUserId": "level-33333628-b84d-422d-933e-7779011ed000"
},
"status": "onHold",
"applicantVaspId": "64dce00a631b6e786efbf000",
"counterpartyVaspId": "66f2a4c22e0e380f3a2b6000"
},
"mirrored": true,
"txnInactive": false
}
],
"totalItems": 1
}
}If the request fails (for example, incorrect data or filters provided), you will receive an HTTP response containing an error code along with a message explaining the error.
Example:
{
"code": 400,
"correlationId": "00000000000000000000000000000000",
"errorCode": 0,
"description": "Invalid parameters provided",
"type": "com.sumsub.commons.restler.exceptions.RestDslException"
}If no transactions matching the specified criteria are found, the response will contain an empty items array.
Example:
{
"list": {
"items": [],
"totalItems": 0
}
}