Skip to content

This workflow covers outgoing transfers where PII (Personally Identifiable Information) is not required. The Travel Rule message is created with counterparty information before submitting the transfer intent.

Prerequisites

Process flow

BlockchainNotabeneCustodyCustomerBlockchainNotabeneCustodyCustomeralt[Screening failed][Screening passed or notconfigured]alt[AUTO_APPROVED][AUTO_REJECTED]1. Create Travel Rule messageForward to NotabeneReturn transfer detailsReturn suggestedIntentId, travelRuleId2. Get transfer statusReturn status (no PII requirements)3. Create Transfer Order Intent (using suggestedIntentId)4. Screen risk (if configured)AUTO_REJECTED (no Travel Rule check)5. Travel Rule check6. Compliance decision7. Execute transactionNotify settlementNotify rejection
BlockchainNotabeneCustodyCustomerBlockchainNotabeneCustodyCustomeralt[Screening failed][Screening passed or notconfigured]alt[AUTO_APPROVED][AUTO_REJECTED]1. Create Travel Rule messageForward to NotabeneReturn transfer detailsReturn suggestedIntentId, travelRuleId2. Get transfer statusReturn status (no PII requirements)3. Create Transfer Order Intent (using suggestedIntentId)4. Screen risk (if configured)AUTO_REJECTED (no Travel Rule check)5. Travel Rule check6. Compliance decision7. Execute transactionNotify settlementNotify rejection

Step 1: Create Travel Rule message

Create a Travel Rule message with counterparty information:

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

Request body:

FieldTypeDescription
originatorobjectOriginator identifier (contains @id - DID or identifier for the party)
beneficiaryobjectBeneficiary identifier (contains @id - DID or identifier for the party)
assetstringAsset identifier (e.g., bip122:000000000019d6689c085ae165831e93/slip44:0). See Notabene asset registry for supported formats.
amountstringTransfer amount
refstringReference identifier for the transfer
agentsarrayAgents involved in the transfer. Each agent has @id, for, and role (values: VASP, Custodian, SettlementAddress, SourceAddress, Gateway, Unknown)

Response:

FieldTypeDescription
createTransfer201Response.transferobjectTransfer details from Notabene
suggestedIntentIdstring (uuid)The intent ID to use when creating the transfer intent
travelRuleIdstringThe Travel Rule message ID for status checks

Step 2: Get transfer status

Check the transfer status to verify the Travel Rule message was created:

GET /v1/domains/{domainId}/compliance/travel-rule/providers/{provider}/messages/{travelRuleId}

Unlike the with PII workflow, there are no PII requirements to fulfill when PII is not required.

Step 3: Create Transfer Order intent

Create the Transfer Order intent using the suggestedIntentId returned in Step 1.

Transfer Order intent payload:

FieldTypeRequiredDescription
payload.accountIdstring (uuid)YesSource account ID
payload.ledgerIdstringNoLedger identifier
payload.parameters.operationobjectYesTransfer operation details including destination, amount, and type
payload.typestringYesMust be v0_CreateTransferOrder
Critical

Use the suggestedIntentId from Step 1 when creating the intent. This links the compliance check to your transaction.

Step 4: Risk screening

If transaction screening is configured (Chainalysis or Elliptic), Ripple Custody screens the transaction first.

  • If screening fails (high risk score): The transaction is immediately rejected. No Travel Rule check occurs.
  • If screening passes: The workflow proceeds to the Travel Rule check.

Step 5: Travel Rule check

Notabene verifies counterparty information.

Step 6: Compliance decision

Ripple Custody evaluates the results:

Screening ResultTravel Rule ResultDecision
ApprovedApprovedAUTO_APPROVED
RejectedAUTO_REJECTED (Travel Rule skipped)
ApprovedRejectedAUTO_REJECTED
InconclusiveInconclusiveNEED_EXPLICIT_DECISION

If the decision is NEED_EXPLICIT_DECISION, manual review is required in Ripple Custody.

If only one check is configured (screening only or Travel Rule only), the decision is based on that single check.

Step 7: Execution and settlement

  • If AUTO_APPROVED: Transaction executes on blockchain, then Notabene is notified of settlement.
  • If AUTO_REJECTED: Intent closes, then Notabene is notified of rejection.

Verify transfer status

Poll the Travel Rule transfer status to confirm successful execution:

GET /v1/domains/{domainId}/compliance/travel-rule/providers/{provider}/messages/{travelRuleId}

Key response fields:

FieldTypeDescription
transfer.statusstringNotabene transfer status (e.g., SETTLED, REJECTED)
transfer.directionstringOUTGOING for this workflow

Next steps