Skip to main content

Crypto Travel Rule data

What is crypto Travel Rule data?

Crypto Travel Rule data is the originator and beneficiary information a regulated firm sends to the receiving firm when a customer’s crypto transfer goes from one to the other, the crypto version of the rule banks follow for wire transfers (often called the FATF Travel Rule).

Exchanges, custodian banks and custody platforms send it through a Travel Rule network, and their compliance teams have to show that every outgoing transfer that needed a message had one.

Goldsky spots each transfer leaving your wallets and delivers it to your systems; sending the messages stays with your Travel Rule provider, and matching transfers to messages and following up the gaps stay with your team.

You can build it two ways: stream every outgoing transfer from your wallets to your systems with Turbo Pipelines, or call the Feeds transfers API for each hot wallet’s outgoing transfers.

Who uses crypto Travel Rule data?

Crypto exchanges, custodian banks and custody and wallet platforms that send customer withdrawals to other regulated firms.

How crypto Travel Rule matching works

The diagram follows one customer withdrawal from the moment it’s booked to your team chasing any transfer left without a message, and shows who does each step. Your setup may differ.

Your business, step 1: Withdrawal bookedA customer sends to another regulated firm
Your business, step 2: Travel Rule providerSend the messageSender and recipient details, before the funds
Blockchains, step 3: Funds leaveThe transfer settles from your wallet
Your business, step 4: Travel Rule providerConfirm with the hashThe transaction hash follows the message
Goldsky, steps 5–6: TurboSpot outgoing transfersEach one from your wallets posts to you
Your business, step 7: Match to the messagePaired on the transaction hash
Your business, step 8: Chase the gapsYour team follows up unmatched transfers
  • Goldsky
  • Your provider

Ways to match transfers to Travel Rule messages

The pipeline pushes each outgoing transfer from every wallet on your list as it’s detected; the transfers API returns one wallet’s transfers when your matching system calls it.

Best for
Many wallets, with each transfer pushed as it’s detected
Products
Turbo
What you run
The destination: your database, queue or bucket, or a Postgres database Goldsky hosts
What you write
Pipeline YAML and SQL; TypeScript transforms when needed
Where your data lives
In your own database or systems
How results reach you
Pushed to you
Best for
A few hot wallets, checked on a timer
Products
Feeds
What you run
Nothing; you call an endpoint and keep what you need
What you write
REST requests
Where your data lives
Hosted by Goldsky
How results reach you
Returned when you call

Option 1: Match transfers to Travel Rule messages by streaming outgoing transfers

A pipeline watches every wallet you list, catches each transfer leaving them and posts it to your webhook endpoint or writes it to your database, where your system pairs it with its Travel Rule message.

When to stream outgoing transfers

You send from many hot and deposit wallets and want each outgoing transfer pushed to your matching system as soon as it’s detected.

What you’ll need

  • Goldsky Turbo
  • A Travel Rule provider connected to a messaging network
  • The addresses of your hot and deposit wallets
  • A webhook endpoint or database to receive outgoing transfers
  • Your withdrawal records and the messages your provider sent
  1. Book the customer’s withdrawal

    The withdrawal record holds who is sending, to whom and how much, which is what the message has to carry.

    Your platform records the customer, the destination address, the receiving firm and the amount before anything is sent. If the receiving firm isn’t identified at this point, the message can’t be addressed, and the transfer goes out with nothing to match.

  2. Send the Travel Rule message

    The receiving firm needs the sender’s and the recipient’s details to run its own checks.

    Your Travel Rule provider sends the originator and beneficiary details to the receiving firm over its network and keeps a record of what it sent and when. Open protocols such as the Travel Rule Protocol (TRP) send this message before the funds move, so the receiving firm can check the details and, where the protocol allows, turn the transfer down before it happens.

  3. Send the funds from your wallet

    The withdrawal itself moves on the chain, from one of your hot wallets to the receiving firm’s address.

    Once the transaction is in a block, anyone can see it. For a short time the chain can still replace its newest blocks (a reorg), so a transfer seen once isn’t final yet.

  4. Confirm the message with the transaction hash

    The message went out before the transfer existed, so it has to be tied to the transfer once the funds are sent.

    Your system passes the transaction hash to your Travel Rule provider once the transfer is sent, and the provider forwards it to the receiving firm as a confirmation of the message and records it beside the message. A message that never gets its hash leaves both firms matching by address and amount, which can pair the wrong transfers.

  5. Spot every transfer leaving your wallets

    Handled by Goldsky Turbo

    You can only match a message to a transfer you know about, so every outgoing transfer has to be caught.

    The check covers every wallet you send from, including new ones, and records each transfer with its hash, sender, recipient, token and amount. A wallet left off the list sends transfers nobody checks.

    With Goldsky, you can keep your wallet addresses in a Turbo Pipelines dynamic table, which lives in a Postgres database, and keep only transfers whose sender is on it with dynamic_table_check(). Adding a wallet is an insert into that table.

    Learn about dynamic tables (opens in a new tab)
  6. Deliver each transfer to your matching system

    Handled by Goldsky Turbo

    Your matching system has to receive each transfer in a form it can act on.

    Delivery can repeat after a network error, and a transfer undone by a reorg arrives later as a correction, so the receiving side needs a stable ID for each transfer. Without one, a repeat looks like a second withdrawal with no message.

    The Turbo Pipelines webhook sink posts each row to your endpoint and retries until it gets a 2xx response. Your endpoint checks the row’s id before recording it and applies the correction records a reorg sends.

    Set up the webhook sink (opens in a new tab)
  7. Match each transfer to its message

    A transfer with a matching message is covered; one without is a gap your team has to explain.

    Your system pairs each transfer with the message whose confirmation carries the same transaction hash. A message still waiting for its hash, or a transfer whose hash no message carries, stays open in your records until the other side turns up or your team looks into it.

  8. Chase the transfers left unmatched

    An outgoing transfer without a message, or a message without a transfer, needs an explanation before your next review.

    Your compliance team works through the exceptions: send a late message, correct a wrong one, or record why none was needed, such as a transfer below your threshold. Gaps left open pile up and are harder to explain the older they get.

What to know about streaming outgoing transfers

  • Goldsky runs the pipeline; you run the endpoint or database it writes to and the code that matches transfers to messages.
  • Transfers are pushed when they’re detected, before they’re final, so your matching decides how long to wait.
  • A webhook endpoint can receive the same transfer twice and gets reorg corrections as separate records, so it deduplicates on the transfer id and applies the corrections itself.
  • Your wallet list lives in a table the running pipeline reads, so adding a wallet needs no redeploy.

Option 2: Match transfers to Travel Rule messages with a wallet transfers API

Your matching system calls the Feeds transfers endpoint for each hot wallet on a timer and gets back the wallet’s outgoing transfers, newest first, with the counterparty and token details. There’s no pipeline or receiving endpoint to run.

When to use a wallet transfers API

You send from a handful of hot wallets and your matching runs on a timer, so fetching each wallet’s recent transfers is enough.

What you’ll need

  • Goldsky Feeds
  • A Travel Rule provider connected to a messaging network
  • The addresses of your hot wallets
  • A scheduler that calls the API for each wallet
  • Your withdrawal records and the messages your provider sent
  1. Book the customer’s withdrawal

    The withdrawal record holds who is sending, to whom and how much, which is what the message has to carry.

    Your platform records the customer, the destination address, the receiving firm and the amount before anything is sent. If the receiving firm isn’t identified at this point, the message can’t be addressed, and the transfer goes out with nothing to match.

  2. Send the Travel Rule message

    The receiving firm needs the sender’s and the recipient’s details to run its own checks.

    Your Travel Rule provider sends the originator and beneficiary details to the receiving firm over its network and keeps a record of what it sent and when. Open protocols such as the Travel Rule Protocol (TRP) send this message before the funds move, so the receiving firm can check the details and, where the protocol allows, turn the transfer down before it happens.

  3. Send the funds from your wallet

    The withdrawal itself moves on the chain, from one of your hot wallets to the receiving firm’s address.

    Once the transaction is in a block, anyone can see it. For a short time the chain can still replace its newest blocks (a reorg), so a transfer seen once isn’t final yet.

  4. Confirm the message with the transaction hash

    The message went out before the transfer existed, so it has to be tied to the transfer once the funds are sent.

    Your system passes the transaction hash to your Travel Rule provider once the transfer is sent, and the provider forwards it to the receiving firm as a confirmation of the message and records it beside the message. A message that never gets its hash leaves both firms matching by address and amount, which can pair the wrong transfers.

  5. Look up each hot wallet’s outgoing transfers

    Handled by Goldsky Feeds

    Your matching system finds new withdrawals by fetching each wallet’s recent outgoing transfers.

    The lookup covers every wallet you send from and every token you allow, for the window since the last check. A gap between windows, or a token left out, means a transfer is never checked.

    Feeds returns a wallet’s native and ERC-20 transfers from its transfers endpoint, newest first. Ask with direction=out and a from time just before your last check, and set include_unknown_price=true so transfers of tokens with no price aren’t left out.

    Read the transfers endpoint reference (opens in a new tab)
  6. Match each transfer to its message

    A transfer with a matching message is covered; one without is a gap your team has to explain.

    Your system pairs each transfer with the message whose confirmation carries the same transaction hash. A message still waiting for its hash, or a transfer whose hash no message carries, stays open in your records until the other side turns up or your team looks into it.

  7. Chase the transfers left unmatched

    An outgoing transfer without a message, or a message without a transfer, needs an explanation before your next review.

    Your compliance team works through the exceptions: send a late message, correct a wrong one, or record why none was needed, such as a transfer below your threshold. Gaps left open pile up and are harder to explain the older they get.

What to know about using a wallet transfers API

  • Your system pulls, so a transfer is matched only after your next call, and how current the check is depends on how often you call.
  • Each request covers one wallet, so the number of calls grows with the number of wallets you send from.
  • A transfer undone by a reorg stops appearing in responses with no flag, so your matching re-checks recent transfers before closing them.
  • Native and ERC-20 transfers are covered; other token types need a different source.

How to check transfers to and from self-hosted wallets

Spot transfers to and from wallets no regulated firm runs, collect the details yourself and check that your customer controls the wallet.

Your Travel Rule or analytics provider tells you when the other side of a transfer is a wallet no regulated firm runs. When your rules call for proof that your customer controls that wallet, a pipeline watches for the small test payment you ask them to send from it and posts it to your compliance system.

What you’ll need

  • Goldsky Turbo
  • A Travel Rule or blockchain analytics provider that flags self-hosted addresses
  • An address of yours that receives test payments
  • A database for the list of wallets waiting to be checked
  • A webhook endpoint in your onboarding or compliance system
  1. Find out whether the other side is self-hosted

    A transfer to another regulated firm carries a Travel Rule message; a wallet your customer runs has nobody to receive one.

    Your Travel Rule provider checks whether a regulated firm runs the address, using identifiers from its messaging network, blockchain analytics and other data providers. Where none of them can tell, you ask your customer.

  2. Collect the sender and recipient details

    With no firm on the other side, the details a message would carry come from your own customer.

    Your customer gives the details for both sides of the transfer, and you keep them with the transfer so it can be identified later. A transfer with no details recorded can’t be shown to have been checked.

  3. Ask the customer to prove they control the wallet

    Above the threshold your rules set, you confirm that the self-hosted wallet really is your customer’s.

    Common ways are a message signed with the wallet’s key, or a small amount you set, sent from the wallet to an address of yours. The right method depends on what the wallet can do and how risky the transfer is, so record which one you used.

  4. Receive the test payment

    Only whoever holds the wallet’s key can send a payment from it.

    The test amount moves from the customer’s wallet to your address like any other transfer. For a short time the chain can still replace its newest blocks (a reorg), so a payment seen once isn’t final yet.

  5. Spot the test payment from the wallet under review

    Handled by Goldsky Turbo

    Your team needs to know as soon as the payment arrives from the wallet being checked, and from no other.

    The check matches the sender to the wallet under review, the recipient to your address and the amount to what you asked for. A payment from a different wallet, or of a different amount, proves nothing, and a repeated delivery mustn’t count twice.

    With Goldsky, the wallets under review can sit in a Turbo Pipelines dynamic table, so the pipeline keeps only transfers whose sender is on it and whose recipient is your test address. The webhook sink posts each match to your endpoint, which ignores a row id it has already recorded.

    Learn about dynamic tables (opens in a new tab)
  6. Mark the wallet verified and keep the record

    Once you’re satisfied the wallet is your customer’s, later transfers to it needn’t repeat the check.

    Record the wallet, the method and the result, then release or hold the transfer under your rules. Keep watching a verified wallet’s risk, and take it off your verified list if there are signs your customer no longer controls it.

What you control

Your team
  • Book the customer’s withdrawal
  • Match each transfer to its message
  • Chase the transfers left unmatched
Your providers
  • Travel Rule provider

Questions and answers

What is the Travel Rule in crypto?

The Travel Rule requires regulated crypto firms, such as exchanges and custodians, to send identifying details about the sender and the recipient along with a transfer to another regulated firm. It applies to crypto the rule banks already follow for wire transfers, under a standard set by the Financial Action Task Force (FATF) that each country writes into its own law. Thresholds, which transfers are covered and the details required vary by country.

What is Travel Rule compliance?

Travel Rule compliance means sending the required sender and recipient details with each covered outgoing transfer, receiving them for incoming ones, and being able to show which transfers had a message. Firms usually exchange the messages through a Travel Rule provider, and their compliance teams decide which transfers are covered. Matching each outgoing transfer on the chain to its message is how a team finds the transfers that went without one.

Does the Travel Rule apply to self-hosted wallets?

In the EU it does: the Transfer of Funds Regulation covers transfers between a crypto-asset service provider (CASP) and a self-hosted wallet, one no regulated firm runs. The provider collects the sender and recipient details from its own customer, and for transfers over EUR 1,000 it checks that the customer owns or controls the wallet, for example with a signed message or a small test payment, as the European Banking Authority’s Travel Rule guidelines describe. Other countries set their own rules.

Security and deployment

  • SOC 2 Type IIIndependently audited security controls.
  • Dedicated infrastructureSingle-tenant options for production workloads.
  • Data residencyCloud, on-premises or co-located.

Match outgoing transfers to Travel Rule messages with Goldsky

We’ll map it to your systems and show you what Goldsky runs, so your team builds the product, not the pipelines underneath it.

© Endless Sky Inc. All rights reserved.

PrivacyTermsSecurity

System status