{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-products/wallet/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["admonition"]},"type":"markdown"},"seo":{"title":"Travel Rule transactions","description":"User guides, API reference, and support resources.","siteUrl":"https://docs.ripple.com","lang":"en-US","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"travel-rule-transactions","__idx":0},"children":["Travel Rule transactions"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This page explains what happens to transfers that a ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/user-interface/travel-rule/travel-rule-setup#create-a-travel-rule-policy-rule"},"children":["Travel Rule policy rule"]}," covers, and what your compliance team does in Notabene."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"outbound-transfers","__idx":1},"children":["Outbound transfers"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Policy checks."]}," The transfer passes its limit checks and any step-up approvals."]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Travel Rule message."]}," Wallet-as-a-Service creates a Travel Rule message in Notabene with the originator and beneficiary information. If Notabene decides that the Travel Rule doesn't apply, the transfer continues immediately. For example, the amount might be less than the threshold for your jurisdiction."]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Approval in Notabene."]}," Your compliance team reviews and sends the message from the Notabene dashboard. Wallet-as-a-Service doesn't send outbound messages automatically."]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Hold."]}," The transaction stays in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POLICY_CHECK_PENDING"]}," until the message reaches the rule's ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/user-interface/travel-rule/travel-rule-setup#release-levels"},"children":["release level"]},". In the console, the transaction shows status ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Pending"]},", with ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Policy checks pending"]}," in the timeline."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"img","attributes":{"src":"/assets/travel-rule-transaction-pending.eb54ef4dfda4c137c79ccbf72a33d419ccd19726a5408450d2898e9ce768f237.0ba50ef8.png","alt":"A 1 XRP payment to a counterparty address, pending with Policy checks pending in the timeline"},"children":[]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Release or rejection."]}," At the release level, the transaction moves to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POLICY_CHECK_PASSED"]}," and continues to signing. After signing, Wallet-as-a-Service sends the transaction hash to Notabene. If the exchange fails, the transaction moves to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["REJECTED"]},"."]}]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"warning","name":"Transfers time out after 24 hours"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If the message doesn't reach the release level in 24 hours, Wallet-as-a-Service cancels it in Notabene and rejects the transfer with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TRAVEL_RULE_TIMEOUT"]},". Make sure your compliance team sends messages from the Notabene dashboard well before the timeout."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The counterparty can reject the message ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["after"]}," Wallet-as-a-Service releases the transfer, for example when the release level is ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Message sent"]},". In that case, Wallet-as-a-Service doesn't reverse the on-chain transfer. Follow up with the counterparty in Notabene."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"rejection-reasons","__idx":2},"children":["Rejection reasons"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A rejected transfer's reason text starts with a Travel Rule reason code, followed by a detail message. In the console, the transaction shows status ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Violation"]},", and the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Problems"]}," section shows the reason. In the API, the reason is in the transaction's ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["reasons"]}," array."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"img","attributes":{"src":"/assets/travel-rule-rejected-missing-data.40705e74df6092592b53a326e6412a84d43409d79c39de953dfc6ba54812ac11.0ba50ef8.png","alt":"A rejected payment with status Violation and the problem TRAVEL_RULE_MISSING_DATA: destination has no custodian VASP DID, so it cannot be classified"},"children":[]}]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Reason code"},"children":["Reason code"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Cause"},"children":["Cause"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"What to do"},"children":["What to do"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TRAVEL_RULE_NOT_CONFIGURED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Your organization has no working Notabene connection."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/user-interface/travel-rule/travel-rule-setup#connect-your-notabene-account"},"children":["Connect Notabene"]}," and submit a new transaction."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TRAVEL_RULE_MISSING_DATA"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The destination isn't a saved address, has no custodian details, or belongs to an individual counterparty."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/user-interface/travel-rule/travel-rule-setup#prepare-your-address-book"},"children":["Prepare the address"]}," and submit a new transaction."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TRAVEL_RULE_REJECTED_BY_COUNTERPARTY"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The beneficiary VASP rejected the transfer."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Check the reason in Notabene with the counterparty."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TRAVEL_RULE_ADDRESS_NOT_RECOGNISED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The beneficiary VASP declined the transfer, for example because it doesn't recognize the destination address."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Confirm the destination and custodian with the counterparty."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TRAVEL_RULE_CANCELLED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Someone canceled the message in Notabene."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["If you still want to send the funds, submit a new transaction."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TRAVEL_RULE_TIMEOUT"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The message didn't reach the release level in 24 hours."]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Check the message in Notabene and submit a new transaction."]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["You can't retry a rejected transaction. Fix the cause and submit a new transaction."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"inbound-travel-rule-messages","__idx":3},"children":["Inbound Travel Rule messages"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["When a counterparty VASP sends a Travel Rule message to your VASP DID, Wallet-as-a-Service answers it automatically. You don't need an inbound rule for this."]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["The address is one of your wallets:"]}," Wallet-as-a-Service confirms the address to the originator. Your compliance team then accepts or declines the message in the Notabene dashboard."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["The address isn't one of your wallets:"]}," Wallet-as-a-Service rejects the message with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TRAVEL_RULE_BENEFICIARY_ADDRESS_NOT_OURS"]},"."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Wallet-as-a-Service never accepts an inbound message for you."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"inbound-deposits","__idx":4},"children":["Inbound deposits"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If a wallet has an inbound Travel Rule rule, Wallet-as-a-Service checks every deposit the rule covers with Notabene:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Result"},"children":["Result"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"What happens"},"children":["What happens"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Your compliance team accepted the matching message"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Wallet-as-a-Service credits the deposit normally."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["No matching message exists"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Wallet-as-a-Service freezes the deposit with reason ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TRAVEL_RULE_MISSING_INBOUND_MESSAGE"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A message exists, but your compliance team hasn't accepted it yet"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Wallet-as-a-Service freezes the deposit with reason ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TRAVEL_RULE_INBOUND_NOT_ACCEPTED"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Wallet-as-a-Service couldn't check the deposit"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Wallet-as-a-Service freezes the deposit with reason ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TRAVEL_RULE_MISSING_DATA"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TRAVEL_RULE_NOT_CONFIGURED"]},"."]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Travel Rule freezes use freeze type ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FREEZE_TYPE_TRAVEL_RULE"]},". The freeze reason also includes the Notabene status, for example ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["TRAVEL_RULE_MISSING_INBOUND_MESSAGE: INCOMPLETE"]},". In the console, the transaction shows a ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Transaction frozen"]}," banner with the reason and the time of the freeze."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"img","attributes":{"src":"/assets/travel-rule-deposit-frozen.06f4d8f2b7dc7dbb94d4bfb197b0e0efbdecfffe581ffc05f5da97e46400421b.0ba50ef8.png","alt":"A 5 XRP deposit with the Transaction frozen banner and reason TRAVEL_RULE_MISSING_INBOUND_MESSAGE: INCOMPLETE"},"children":[]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Automatic release."]}," When your compliance team later accepts the matching message in Notabene, Wallet-as-a-Service releases the deposit automatically."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Manual release."]}," Users with the right permission can also unfreeze the deposit themselves. See ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/user-interface/transactions/manage-transactions#freeze-and-unfreeze-transactions"},"children":["Freeze and unfreeze transactions"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Manual freezes stay."]}," If a user froze the deposit manually, an automatic Travel Rule release doesn't lift that freeze."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Inbound rule matchers apply to the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["sender"]},". For example, an inbound rule with a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["COUNTERPARTY_ID"]}," matcher checks only deposits from that counterparty."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"related-documentation","__idx":5},"children":["Related documentation"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/user-interface/travel-rule/travel-rule-overview"},"children":["Travel Rule overview"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/user-interface/travel-rule/travel-rule-setup"},"children":["Set up Travel Rule"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/products/wallet/changelogs/policy-engine-v2-transaction-status-changes"},"children":["Policy Engine v2: transaction status changes"]}]}]}]},"headings":[{"value":"Travel Rule transactions","id":"travel-rule-transactions","depth":1},{"value":"Outbound transfers","id":"outbound-transfers","depth":2},{"value":"Rejection reasons","id":"rejection-reasons","depth":3},{"value":"Inbound Travel Rule messages","id":"inbound-travel-rule-messages","depth":2},{"value":"Inbound deposits","id":"inbound-deposits","depth":2},{"value":"Related documentation","id":"related-documentation","depth":2}],"frontmatter":{"title":"Travel Rule transactions","seo":{"title":"Travel Rule transactions"}},"lastModified":"2026-09-24T12:38:12.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/products/wallet/user-interface/travel-rule/travel-rule-transactions","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}