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.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".Save the destination address with Travel Rule metadata
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
Resolve the receiving VASP
Same as the crypto withdrawal example above.
Save the destination address with Travel Rule metadata
Same as the crypto withdrawal example above.
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.