This guide covers enabling Travel Rule compliance in Ripple Custody using Notabene.
Travel Rule (Notabene) and transaction screening (Chainalysis/Elliptic) can be used independently or together. For maximum compliance coverage, enable both—when both are enabled, transactions must pass both checks before execution.
Complete these steps before configuring the integration:
- Ripple Custody v1.30 or later
- Compliance domain configured (contact your partner engineer if not already set up)
Register as a VASP with Notabene and complete their onboarding process:
- Create account at notabene.id and complete KYB verification
- Set up your DIDdoc for VASP discovery and PII encryption (see Notabene's DID documentation)
- Obtain API credentials (
client_idandclient_secret) for both sandbox and production.
Notabene registration typically takes 1-2 weeks. Start this process early.
Have the following ready before configuring the provider connection:
| Item | Description |
|---|---|
| Notabene credentials | client_id and client_secret for sandbox and production |
| VASP DID | Your decentralized identifier (e.g., did:web:your-domain.com) |
| Audience | The Notabene API audience for your environment: https://api.notabene.dev (sandbox) or https://api.notabene.id (production) |
Create the Notabene provider connection yourself using the Ripple Custody API. You submit your credentials directly to your Ripple Custody deployment. You don't share them with Ripple.
POST /v1/domains/{domainId}/compliance/providersRequest body:
{
"provider": "NOTABENE",
"credential": {
"clientId": "<your Notabene client_id>",
"clientSecret": "<your Notabene client_secret>",
"entityDid": "did:web:your-domain.com",
"audience": "https://api.notabene.dev"
}
}This example connects the Notabene sandbox (https://api.notabene.dev). Start with sandbox credentials, complete the verification steps, and connect with your production credentials and the production audience (https://api.notabene.id) when you're ready to go live.
Treat your Notabene client_secret like any other secret: submit it only through this API. Don't share it with anyone, including Ripple support or partner engineers, and don't send it over email or chat.
Confirm the connection is active:
GET /v1/domains/{domainId}/compliance/provider-connectionThe connection status must be CONNECTED. If the connection is missing or paused, Ripple Custody skips Travel Rule checks and routes affected transfers to manual review.
Counterparty VASPs confirm that a deposit address belongs to you before they send a Travel Rule message to it. Ripple Custody registers your wallet addresses with Notabene for you:
- When you first connect your Notabene account, Ripple Custody registers the addresses of all your existing wallets.
- When you create a new wallet, Ripple Custody registers its address as part of wallet creation.
You don't need to upload addresses yourself. To check what's registered, list the relationships for your domain as described at the end of this step.
If you need to register additional addresses, for example addresses that Ripple Custody doesn't manage, Notabene provides two ways to do this:
- Upload addresses in Notabene. Use the Notabene Dashboard or Notabene's address upload API to register single addresses or a CSV of addresses. See Upload CSV or register single address in the Notabene documentation.
- Create a relationship. A Notabene relationship links two DIDs. To declare address ownership,
fromis the wallet address expressed as adid:pkhDID andtois your VASP DID. See Confirm address and Relationships in the Notabene documentation.
Ripple Custody proxies the Notabene relationship API so you can create relationships without calling Notabene directly:
POST /v1/domains/{domainId}/compliance/travel-rule/providers/NOTABENE/relationshipsRequest body:
| Field | Type | Required | Description |
|---|---|---|---|
from | string (DID) | No | DID of the source entity. Defaults to the entityDid from your provider connection. |
to | string (DID) | Yes | DID of the target entity. |
Both fields are DIDs, not raw wallet addresses. To list the relationships registered for your domain, including the ownership proofs attached to each, call GET /v1/domains/{domainId}/compliance/travel-rule/providers/NOTABENE/relationships. You can filter by from, to, or custodian DID.
After configuration, verify the integration:
Create a Travel Rule message using the API:
POST /v1/domains/{domainId}/compliance/travel-rule/providers/NOTABENE/messagesNotabene is the only supported Travel Rule provider, so the
providerpath segment is alwaysNOTABENE. Confirm the response containssuggestedIntentIdandcomplianceTravelRuleId.Submit PII if required for the transfer.
Create a transfer intent using the
suggestedIntentIdfrom step 1. Always create the Travel Rule message before the intent. Ripple Custody doesn't create a Notabene transfer from a transfer intent on its own.Check the compliance decision — verify the transaction is approved, rejected, or flagged as expected.
Test incoming transfers — send a test transaction to a registered address and confirm:
- Funds are quarantined
- Travel Rule check initiates
- Funds release when approved
- Travel Rule compliance — Concepts and architecture.
- Send assets without PII — Outgoing transfers when PII is not required.
- Send assets with PII — Outgoing transfers when PII is required.
- Receive assets with Travel Rule — Incoming transfer handling.