Search for existing Travel Rule transaction

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…

Overview

Use this method to search for an existing Travel Rule transaction that corresponds to a settled blockchain deposit.

It is read-only and has no side effects — it only looks up a transaction, it never creates or modifies one.

Required permissions

To use this method, you must have an app token with the View TM transactions permission. Travel Rule must also be enabled for your account — calling this method without it returns a 403.

Use case

VASPs should call this method for every deposit before initiating a Travel Rule exchange, to check whether a matching Travel Rule exchange already exists and avoid creating a duplicate.

📘

Notes

The search runs in two stages:

  1. Exact match on paymentTxnId (the on-chain transaction hash), if a transaction with that hash already exists.
  2. Fallback match by wallet addresses and asset/network, if no exact hash match is found. Among fallback candidates, transactions matching both amount and txnDate (within ±24 hours) are preferred.

The method returns at most one transaction — the most recent match. If nothing matches, it returns 200 with an empty list, not a 404.

Request example

curl -X POST
     'https://api.sumsub.com/resources/api/tr/txns/search' \
     -H 'Content-Type: application/json' \
     -H 'X-App-Token: <your-app-token>' \
     -H 'X-App-Access-Sig: <your-signature>' \
     -H 'X-App-Access-Ts: <unix-timestamp>' \
     -d '{
           "paymentTxnId": "0x6918fda9c3150ec0d3ff8778dd808b06894593741c2a0c4004fc12410f05f18c",
           "applicantWalletAddress": "0x6918b412c7b49d24b4bd27ac454df8477d7acf0d",
           "counterpartyWalletAddress": "0x6918c41830e938aeff75e077ff7de818ee3aaffe",
           "amount": 100,
           "currencyCode": "USDT",
           "cryptoChain": "TRX",
           "txnDate": "2026-09-08 10:32:23+0000",
           "direction": "in"
         }'

Response explained

The response is a JSON object containing a list with at most one matching transaction.

Root-level attributes

FieldTypeDescription
listObjectSearch result. See list attributes below.

list attributes

FieldTypeDescription
itemsArray of objectsThe matching transaction, if found. Empty if no transaction matches.
totalItemsInteger1 if a match was found, 0 otherwise.

items[] element fields

FieldTypeDescription
idStringUnique transaction identifier in the Sumsub system (kytTxnId).
externalTxnIdStringUnique transaction identifier in your own system.
reviewStatusStringReview status of the transaction.
travelRuleStatusStringTravel Rule protocol status of the transaction.
paymentTxnIdStringOn-chain transaction hash.
amountNumberTransaction amount.
currencyCodeStringAsset ticker (for example, USDT).
cryptoChainStringNetwork the transaction was made on (for example, TRX).
txnDateDateDeposit settlement time, in the format yyyy-MM-dd HH:mm:ss+0000.

Response examples

If a matching transaction is found, you will get a response like the one below.

{
  "list": {
    "items": [
      {
        "id": "6a9fe437c4f49400208ddf4d",
        "externalTxnId": "xwmlawlbczzwigsgta",
        "reviewStatus": "completed",
        "travelRuleStatus": "finished",
        "paymentTxnId": "0x6918a463be7c076d2387753cfc017a512018c9a372c8c72e0ccf2d9fb70bc1d2",
        "amount": 100.0,
        "currencyCode": "USDT",
        "cryptoChain": "TRX",
        "txnDate": "2026-09-08 10:32:23+0000"
      }
    ],
    "totalItems": 1
  }
}

If no transaction matches, you will get a 200 response with an empty list — this is not an
error:

{
  "list": {
    "items": [],
    "totalItems": 0
  }
}

If the request itself fails, you will receive an HTTP response containing an error code along
with a message explaining the error. For example, when a required field is missing:

{
  "code": 400,
  "correlationId": "0f587e62a96ce6b64809021d96abfa34",
  "description": "amount is required"
}

Response codes

StatusDescription
200Search completed; returns a match if found, or an empty list — see Response examples.
400Invalid request — for example, a required field is missing, or amount is not positive.
403Travel Rule is not enabled for your account, or the app token lacks the View TM transactions permission.
Body Params
string
required

On-chain transaction hash of the deposit.

string
required

Deposit (beneficiary) wallet address of the client's customer.

number
required

Received amount. Must be positive.

string
required

Asset ticker (for example, USDT). Case-insensitive.

string
required

Deposit settlement time, in the format yyyy-MM-dd HH:mm:ss+0000.

string
required

Transaction direction: in for deposits, out for withdrawals.

string

Sender wallet address, when known. May be unavailable on UTXO chains.

string

Network (for example, TRX).

Response
200
Language
Credentials
Header
LoadingLoading…
Response
Click Try It! to start a request and see the response here!