Patterns
Pattern A: Collect up-front
Collect Travel Rule information at the moment a new destination address is saved. The address cannot be used for above-threshold transfers until valid metadata is attached. Use this when: most of your transfers are likely to cross the $3,000 threshold, or you’d rather collect once and avoid interrupting users at transaction time. Recommended for most integrations.Pattern B: Try-catch on transaction
Save the destination address without Travel Rule metadata. Attempt the withdrawal or orchestration. If the transaction crosses the threshold, the API returns a403 with a typed error. Collect the metadata, PUT it onto the destination address, and retry.
Use this when: most of your transfers are under $3,000 and you want to avoid front-loading data collection. Common for retail/consumer flows.
Mixing patterns
You can use both. A common approach: Pattern A for addresses tagged as “business” (likely high-value), Pattern B for addresses tagged as “personal” (likely small transfers).Examples
Crypto Withdrawal
Pattern A — $5,000 USDG withdrawal to a Coinbase account.1
Resolve the receiving VASP
See Response:The user picks Coinbase, Inc. from your type-ahead. You capture
GET /v2/travelrule/vasps API reference.vasp.id = "0b3d9f1e-7c2a-4e8b-9f1a-2c3d4e5f6a7b".2
Save the destination address with Travel Rule metadata
3
Create the withdrawal
Travel Rule metadata is resolved from the saved address. See Request:The withdrawal is created. Paxos transmits the Travel Rule message to the receiving institution before broadcasting on-chain.
POST /v2/transfer/crypto-withdrawals API reference.Orchestration
1
Resolve the receiving VASP
Same as the crypto withdrawal example above.
2
Save the destination address with Travel Rule metadata
Same as the crypto withdrawal example above.
3
Create the orchestration
The orchestration references the saved address by Travel Rule metadata is resolved from the saved destination address at execution time.
(network, address). See POST /v2/orchestration/orchestrations API reference.Request:Testing the rejection flow
Before enforcement begins, above-threshold transfers don’t yet return the403, so there’s no natural way to exercise your Pattern B retry path. To trigger the error on demand, send the X-Paxos-Test-Travel-Rule-Reject header (any non-empty value) on a transaction request:
403 Travel Rule Information Required — regardless of amount or whether the destination already has Travel Rule metadata — so you can verify your catch → collect → PUT → retry handling end to end. It works on all four transaction endpoints:
- Create Crypto Withdrawal
- Create Crypto Withdrawal Fee
- Create Orchestration
- Create Orchestration Rule
Use this header only while testing in sandbox, and remove it for real transfers — it forces the rejection on the request that carries it.
Additional scenarios
Self-transfers (me-to-me)
Setbeneficiary.self = true and omit person_details and institution_details; the server resolves the end user’s details from their identity. For a self-transfer to an unhosted wallet, set custodian_type = PRIVATE and omit vasp. For a self-transfer to your own account at another VASP, set custodian_type = VASP and still provide vasp so Paxos can identify the receiving institution.
Unhosted/self-hosted wallets
Setcustodian_type to PRIVATE and omit vasp. No Travel Rule message is transmitted, but the metadata is still required to record the determination.
VASP not in the Paxos directory
Providevasp.custom_vasp_name and vasp.custom_vasp_website of the provider hosting the wallet. Paxos Compliance handles the off-directory Travel Rule obligation. Paxos continuously expands directory coverage based on customer transaction patterns.
Updating Travel Rule metadata on an existing address
CallPUT /v2/transfer/crypto-destination-address with either the id of the address or the crypto_network and address to update the travelrule_metadata object. Subsequent transactions to that address will use the updated metadata.