End-to-end Travel Rule lifecycle
A high-level narrative of the Travel Rule message lifecycle from intent to record-keeping.
This overview follows a Travel Rule message from customer intent through message exchange, synchronous decisioning, counterparty response, and record-keeping. It is designed as a shared map for compliance, operations, and engineering teams.
From here, jump into the detailed outgoing transactions overview, the incoming transactions workflow, and the Rule Engine.
What you'll learn
- The typical lifecycle from intent and withdrawal to Travel Rule messaging
- How the synchronous response becomes the first decision point
- How counterparty status updates support two-way communication
- Where record-keeping and evidence capture fit into the flow
Status lifecycle
The initial outgoing Travel Rule submission is synchronous: you get an immediate response to your Create Transaction call. Counterparty responses are asynchronous and arrive later via webhooks or polling.
For normal Travel Rule message exchange, the API owns the initial status:
- When you create an
OUTGOINGTravel Rule message, CryptoSwift sets the initial status automatically. - When you receive an
INCOMINGTravel Rule message from another VASP, CryptoSwift also sets the initial status automatically.
After the message exists, the relevant counterparty can update the status to communicate the workflow outcome:
- Outgoing pre-transaction flow - The originator VASP can update its
OUTGOINGmessage toCANCELLEDwhen it decides not to broadcast the on-chain transaction, or add thetransactionHashwhen it proceeds with the payment. - Incoming response flow - The beneficiary VASP can update its
INCOMINGmessage toCONFIRMEDorDECLINEDwhen responding to the incoming Travel Rule message.
These status updates are reflected back to the counterparty, so both VASPs see the same outcome and can keep their internal holds, release decisions, and audit records aligned.
In a pre-transaction flow, the originator adds the hash after broadcast to link the Travel Rule record to the reported transfer. The hash completes the required sender-side write for the proceed path; it does not prove final settlement or finish delivery or counterparty review. In a post-transaction flow, the hash is present at creation, and CANCELLED cannot undo a broadcast transfer. In both flows, monitor later CONFIRMED, DECLINED, delivery, and exception updates via webhooks or polling.
The exception is local backfill. If you create an INCOMING Travel Rule message for yourself because the originator did not send one, you can choose the status during creation or update it later. This is a record-keeping workflow for your own books, not a message received from the originator VASP.
Status update flows
The sequence diagrams below show how status and settlement updates move between the originator VASP, beneficiary VASP, and CryptoSwift.
Pre-transaction flow
Post-transaction flow
The synchronous response is the first decision point
For post-transaction workflows, the synchronous response confirms that the Travel Rule message was created with a hash after broadcast; the transfer need not be finally confirmed on-chain. For pre-transaction workflows, the response becomes an immediate decision point before funds move.
Depending on your setup, the synchronous response can provide:
- Travel Rule message status
- counterparty routing or delivery context
- Travel Rule Risk Score
- Rule Engine decision outcome
Use that response to decide whether to:
- proceed immediately
- wait for a defined period
- send the transaction for review
- block and cancel the transaction before settlement
If you configure the Rule Engine, CryptoSwift evaluates those policies as part of message creation and returns the outcome in the same decision window. Even when the synchronous response is enough to continue, you must still process later asynchronous updates because the counterparty response and final lifecycle state can change afterwards.
How to interpret statuses
- PENDING - The message has been created but is waiting for routing context or additional data, as CryptoSwift has been unable to identify the beneficiary VASP. This is common when the beneficiary wallet address is unknown to CryptoSwift at submission time.
- DELIVERED - The message reached the counterparty VASP. From here, a response is expected asynchronously.
- CONFIRMED / DECLINED - The beneficiary VASP reviewed an
INCOMINGmessage and confirmed or declined the Travel Rule data. ForDECLINED,statusReasoningis required. - CANCELLED - The originator VASP cancelled an
OUTGOINGpre-transaction flow before broadcasting the on-chain payment. This is a terminal compliance-logged state and requires a non-emptystatusReasoning. - FAILED - The message could not be processed due to a system error. Indicates an internal issue within CryptoSwift that needs to be resolved by the CryptoSwift team.
Operational expectations
- Sync - The initial outgoing response is synchronous and should be treated as a decision point. In addition to
PENDINGorDELIVERED, your integration may use returned routing, risk, and workflow outcomes to decide what happens next. - Async -
CONFIRMED,DECLINED, orCANCELLEDarrives later via webhook or polling. If the initial response isPENDING, aDELIVEREDstatus update can arrive asynchronously once routing is resolved. - Incoming responsibilities - When you receive a Travel Rule message, the initial status of the message is set by CryptoSwift. Make sure to update the status to
CONFIRMEDorDECLINEDso the originator VASP receives an outcome and your audit trail stays complete. - Backfilled incoming records - When you create an
INCOMINGmessage for yourself, you may set the status during creation or update it later because the record represents your own backfilled evidence, not a counterparty-delivered Travel Rule message.
Next steps
- Outgoing transactions overview
- Travel Rule Risk Score
- Rule Engine
- Incoming transactions workflow
- Required Travel Rule data