---
title: "Creates a TravelRule message for a transfer"
method: POST
path: "/v1/domains/{domainId}/compliance/travel-rule/providers/{provider}/messages"
tags: ["Compliance"]
---

# Creates a TravelRule message for a transfer

`POST /v1/domains/{domainId}/compliance/travel-rule/providers/{provider}/messages`

## Request

- Base URL: `https://docs.ripple.com` (the document declares no server; this is the origin it was published from)
- URL: `https://docs.ripple.com/v1/domains/{domainId}/compliance/travel-rule/providers/{provider}/messages`
- Auth: HTTP bearer

## Path parameters

- `domainId` string, uuid, required
- `provider` 'NOTABENE', required

## Request body

- ComplianceCreateTransferRequest: Request to create a travel rule transfer
  - `originator` ComplianceTransferPartyIdentifier, required: Identifier for a party in a transfer
    - `@id` string, required: DID or identifier for the party
  - `beneficiary` ComplianceTransferPartyIdentifier, required: Identifier for a party in a transfer
    - `@id` string, required: DID or identifier for the party
  - `asset` string, required: Asset identifier (e.g., bip122:000000000019d6689c085ae165831e93/slip44:0)
  - `amount` string, required: Transfer amount
  - `ref` string, required: Reference identifier for the transfer
  - `agents` ComplianceAgent[], required: Agents involved in the transfer (e.g., VASP, SourceAddress, SettlementAddress)
    - `@id` string, required: The DID identifier of the agent
    - `for` string: The party this agent is acting for
    - `role` 'VASP' | 'Custodian' | 'SettlementAddress' | 'SourceAddress' | 'Gateway' | 'Unknown', required: The role of the agent
  - `settlementId` string: Settlement identifier for the transfer
  - `transactionValue` object: The fiat value of the transaction
    - `amount` string, required: The fiat amount
    - `currency` string, required: The currency code (e.g., USD)
  - `blockchainAnalyticsAlias` string: Optional analytics alias

## Response `200`

OK

- ComplianceInitiateTravelRuleResponse: Response from creating a travel rule transfer
  - `createTransfer201Response` ComplianceCreateTransfer201Response: Direct response from the travel rule provider when creating a transfer
    - `transfer` ComplianceTransfer: Travel rule transfer details from the provider
      - `@id` string, uuid: The ID of the transfer
      - `id` string, uuid: The ID of the transfer (alternative field name)
      - `status` 'OUTGOING' | 'INCOMING' | 'REJECTED' | 'AUTHORIZED' | 'FLAGGED' | 'SETTLED' | 'FLAGGED-SETTLEMENT' | 'RETURNED' | 'FROZEN' | 'CLEARED': The status of the transfer
      - `direction` 'INCOMING' | 'OUTGOING': The direction of the transfer
      - `ref` string: The reference provided in the request
      - `asset` string: The asset being transferred
      - `amount` string: The amount being transferred
      - `originator` ComplianceTransferParty: Party information in a transfer
        - `@id` string: The DID identifier of the party
        - `accountNumber` string: The account number of the party
        - `name` string: The name of the party
      - `beneficiary` ComplianceTransferParty: Party information in a transfer
        - `@id` string: The DID identifier of the party
        - `accountNumber` string: The account number of the party
        - `name` string: The name of the party
      - `agents` ComplianceAgent[]
        - `@id` string, required: The DID identifier of the agent
        - `for` string: The party this agent is acting for
        - `role` 'VASP' | 'Custodian' | 'SettlementAddress' | 'SourceAddress' | 'Gateway' | 'Unknown', required: The role of the agent
      - `settlementId` string: The transaction id of the settlement transaction
      - `isTravelRule` boolean: Whether the transfer requires travel rule compliance
      - `presentationDefinitionUrl` string: URL for the presentation definition
      - `createdAt` string, date-time: When the transfer was created
      - `updatedAt` string, date-time: When the transfer was last updated
      - `settledAt` string, date-time: When the transfer was settled
      - `rejectedAt` string, date-time: When the transfer was rejected
      - `rejectionReason` string: Reason for rejection if the transfer was rejected
  - `suggestedIntentId` string, uuid: The intentId the client needs to initiate the intent with
  - `complianceTravelRuleId` string, uuid: The id associated with this travel rule record on Compliance side

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not Found
- `500`: Internal Server Error

---

[API](https://skmtc.dev/ripple/apis/ripple-custody-api.md) - [All operations](https://skmtc.dev/ripple/apis/ripple-custody-api/llms.txt) - [OpenAPI document](https://skmtc.dev/ripple/apis/ripple-custody-api/revisions/c6f0ad6b70c0?raw)
