Public TRP API for VASP-to-VASP Travel Rule data exchange.
Public TRP API for VASP-to-VASP Travel Rule data exchange.
This section describes the public endpoints of the Travel Rule Protocol (TRP) Registry API. These endpoints allow third-party systems and Virtual Asset Service Providers (VASPs) to discover, identify and register participants in the TRP network.
The API follows REST conventions and returns responses in JSON format. All requests should be made over HTTPS.
The TRP API enables VASPs to:
TRP follows global compliance standards (FATF, IVMS101) and ensures secure, encrypted communication between VASPs.
Every integration follows one simple flow:
Before calling any protected endpoint, your system must generate a JWT access token using your API Key. This ensures:
The access token is short-lived (TTL ≈ 1 hour) for security reasons. Pass it as Authorization: Bearer <jwt> on every protected endpoint.
https://trp.travel-rule.com/
http://localhost:3000/
High-level Travel Rule transfer operations from the originator VASP perspective. Transfers can flow two ways depending on what was provided at initiation:
OPEN_VASP — beneficiary VASP is reachable via Travel Address.EMAIL — beneficiary VASP is unknown; we send an email so the recipient can self-attest.Main Travel Rule operation. Submits originator and beneficiary applicants, asset, amount, and optional routing info (travelAddress or email).
| Provided fields | Resulting flow |
|---|---|
travelAddress | OPEN_VASP |
only email (top-level or beneficiary.email) | EMAIL |
APPROVED originator status.OPEN_VASP flow, queues an INQUIRY callback to the beneficiary VASP endpoint (extracted from the Travel Address).EMAIL flow, sends a confirmation email and flips isEmailDelivered once Mailjet acks.Encoded Travel Address routing the request to the beneficiary VASP.
Top-level recipient email (used in EMAIL flow if beneficiary.email is empty).
Asset amount as a decimal string (e.g. 0.05). The backend validates only the length range (1..20) on this endpoint — pattern validation kicks in on the transfers/inquiry callback.
Shared fields available for both natural and legal applicants. These properties are accepted on the originator and beneficiary objects of POST /transfers/initiate regardless of personType.
Applicant date of birth. ISO-8601 date.
IVMS101 address type — Home / Business / Geographic.
IVMS101 national-identifier type. LEIX for legal entities (LEI), CCPT for passport, etc.
VASP-internal account identifier for this applicant.
On-chain wallet address belonging to this applicant.
Contact email. Not persisted on the Applicant record in the database — used at request time (e.g. EMAIL flow) and forwarded to email notifications.
true if this applicant is a self-hosted (non-custodial) wallet owner.
VASP that holds (or self-hosts on behalf of) this applicant. Used to identify the counterparty service provider when it cannot be resolved from a Travel Address.
Discriminator. Must be natural.
Shared fields available for both natural and legal applicants. These properties are accepted on the originator and beneficiary objects of POST /transfers/initiate regardless of personType.
Applicant date of birth. ISO-8601 date.
IVMS101 address type — Home / Business / Geographic.
National identifier value (passport number, LEI, etc.).
IVMS101 national-identifier type. LEIX for legal entities (LEI), CCPT for passport, etc.
VASP-internal account identifier for this applicant.
On-chain wallet address belonging to this applicant.
Contact email. Not persisted on the Applicant record in the database — used at request time (e.g. EMAIL flow) and forwarded to email notifications.
true if this applicant is a self-hosted (non-custodial) wallet owner.
VASP that holds (or self-hosts on behalf of) this applicant. Used to identify the counterparty service provider when it cannot be resolved from a Travel Address.
Discriminator. Must be natural.
https://trp.travel-rule.com/transfers/initiate
http://localhost:3000/transfers/initiate
curl -i -X POST \
https://trp.travel-rule.com/transfers/initiate \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"travelAddress": "ta1qexamplebeneficiaryvasp1ahjk23",
"asset": "BTC",
"amount": "0.05",
"callback": "https://my-vasp.com/trp/callbacks",
"dti": "4H95J0R2X",
"originator": {
"personType": "natural",
"externalId": "cust_42",
"firstName": "Bob",
"lastName": "Marley",
"middleName": "Robert",
"dateOfBirth": "1985-02-06",
"placeOfBirth": "Kingston",
"addressType": "HOME",
"streetName": "Hope Road",
"buildingNumber": "56",
"buildingName": "Tuff Gong House",
"postCode": "KIN 6",
"townName": "Kingston",
"country": "JM",
"countrySubDivision": "Saint Andrew",
"nationalId": "A12345678",
"nationalIdType": "CCPT",
"countryOfIssue": "JM",
"accountNumber": "ACC-ORIG-001",
"walletAddress": "bc1qoriginatoraddressxx",
"email": "bob@example.com",
"isSelfHosted": false,
"vasp": {
"name": "My VASP Inc."
}
},
"beneficiary": {
"personType": "natural",
"externalId": "cust_77",
"firstName": "Alice",
"lastName": "Liddell",
"middleName": "Pleasance",
"dateOfBirth": "1990-01-15",
"placeOfBirth": "London",
"addressType": "HOME",
"streetName": "Baker Street",
"buildingNumber": "221B",
"postCode": "NW1 6XE",
"townName": "London",
"country": "GB",
"countrySubDivision": "England",
"nationalId": "PB1234567",
"nationalIdType": "CCPT",
"countryOfIssue": "GB",
"walletAddress": "bc1qbeneficiaryaddressxx",
"email": "alice@example.com",
"isSelfHosted": false,
"vasp": {
"name": "Wonderland Exchange"
}
}
}'{ "status": true, "data": { "transferId": "0193abc4-1234-7890-abcd-ef1234567890", "status": "PENDING", "createdAt": "2026-05-11T08:00:00.000Z" } }
https://trp.travel-rule.com/transfers/{transferPublicId}/comments
http://localhost:3000/transfers/{transferPublicId}/comments
curl -i -X GET \
'https://trp.travel-rule.com/transfers/{transferPublicId}/comments' \
-H 'Authorization: Bearer <YOUR_JWT_HERE>'{ "status": true, "data": [ { … } ] }
https://trp.travel-rule.com/transfers/{transferPublicId}/comments
http://localhost:3000/transfers/{transferPublicId}/comments
curl -i -X POST \
'https://trp.travel-rule.com/transfers/{transferPublicId}/comments' \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: multipart/form-data' \
-F text=string \
-F files=string{ "status": true, "data": { "id": 0, "text": "string", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "author": { … }, "canEdit": true, "attachments": [ … ] } }
https://trp.travel-rule.com/transfers/{transferPublicId}/comments/{commentId}
http://localhost:3000/transfers/{transferPublicId}/comments/{commentId}
curl -i -X PATCH \
'https://trp.travel-rule.com/transfers/{transferPublicId}/comments/{commentId}' \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"text": "Updated comment text."
}'{ "status": true, "data": { "id": 0, "text": "string", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "author": { … }, "canEdit": true, "attachments": [ … ] } }