### Configure environment variables for nodes Source: https://docs.ripple.com/products/wallet/user-interface/devices/set-up-and-run-cloudsign.md Example .env file configuration for the docker-compose setup. ```shell # cloudsign1 ENCRYPTION_KEY_1=c6516198ba86603e2fda776706b44373d5630cd2e89352772a9b75cda2df67ed PAIRING_KEY_1=eyJkZXZpY2VJZCI6ImQz...8ifQ== VOLUME_1=/tmp/cloudsign1 # cloudsign2 ENCRYPTION_KEY_2=0c92f60527b778f2f0036067429b3982d2c7f79ef657943f0e18c1e918362aa6 PAIRING_KEY_2=eyJkZXZpY2VJZCI6IjJm...8ifQ== VOLUME_2=/tmp/cloudsign2 # cloudsign3 ENCRYPTION_KEY_3=bf7e463d11347c486f4b8e79284a02e0543369009ff0d1efc1d2644fe63b21a7 PAIRING_KEY_3=eyJkZXZpY2VJZCI6Ijg5...8ifQ== VOLUME_3=/tmp/cloudsign3 ``` -------------------------------- ### Get state transitions response Source: https://docs.ripple.com/products/payments-direct-2/api-docs/developer-guides/create-a-payment.md Example JSON response showing the sequence of state transitions for a payment. ```json { "stateTransitions": [ { "updatedFrom": "QUOTED", "updatedTo": "INITIATED", "updatedAt": "2025-03-15T10:23:45Z" }, { "updatedFrom": "INITIATED", "updatedTo": "VALIDATING", "updatedAt": "2025-03-15T10:23:47Z" }, { "updatedFrom": "VALIDATING", "updatedTo": "TRANSFERRING", "updatedAt": "2025-03-15T10:23:55Z" }, { "updatedFrom": "TRANSFERRING", "updatedTo": "COMPLETED", "updatedAt": "2025-03-15T10:25:12Z" } ] } ``` -------------------------------- ### Get available balances response Source: https://docs.ripple.com/products/payments-direct-2/api-docs/developer-guides/get-ledger-balances-and-transactions.md Example JSON response showing available and reserved balances for a specific currency. ```json { "timestamp": "2025-03-15T10:30:00.000000Z", "balances": [ { "fundingType": "FUNDED", "currency": "USD", "availableBalance": 50000.00, "reservedBalance": 2500.00 } ] } ``` -------------------------------- ### Get Account Statement cURL Request Source: https://docs.ripple.com/products/payments-odl/introduction/concepts/using-on-demand-liquidity.md Example of using cURL to perform the Get Account Statement request. ```bash curl -X GET https://https://sf-bank.ripplenet.com/v4/statement/bitstamp_usd@rn.xrapid.mycorp?start-date=2020-03-18T20:30:00Z&end-date=2020-03-18T22:45:00Z -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsieGN1cnJlbnQiXSwic2NvcGUiO' -H 'Content-Type: application/json' ``` -------------------------------- ### Complete Luna HSM Configuration Example Source: https://docs.ripple.com/products/custody/deployment/integrate-kms/on-premise-hsm/thales-luna.md Full configuration example demonstrating both notary and vault components using environment variable placeholders for sensitive data. ```yaml # production.yaml - Complete Luna HSM Configuration # Global settings harmonize: repository: base: "my-registry.example.com/harmonize" urls: base: "custody.example.com" tls: true # Notary configuration components: notary: enabled: true platform: kms_luna kms_luna: host: "luna-hsm.example.com" port: "1792" slot: "0" pin: "${NOTARY_PIN}" # Injected from secrets manager client: certificate: | -----BEGIN CERTIFICATE----- ${LUNA_CLIENT_CERT} -----END CERTIFICATE----- key: | -----BEGIN PRIVATE KEY----- ${LUNA_CLIENT_KEY} -----END PRIVATE KEY----- server: certificate: | -----BEGIN CERTIFICATE----- ${LUNA_SERVER_CERT} -----END CERTIFICATE----- # Vault configuration (uses same partition as Notary) harmonize: vaults: "00000000-0000-0000-0000-000000000000": enabled: true platform: kms_luna notary_public_key: "ed25519:${NOTARY_PUBLIC_KEY}" # Set after Notary initialization kms_luna: host: "luna-hsm.example.com" port: "1792" slot: "0" # Same partition as Notary pin: "${PARTITION_PIN}" client: certificate: | -----BEGIN CERTIFICATE----- ${LUNA_CLIENT_CERT} -----END CERTIFICATE----- key: | -----BEGIN PRIVATE KEY----- ${LUNA_CLIENT_KEY} -----END PRIVATE KEY----- server: certificate: | -----BEGIN CERTIFICATE----- ${LUNA_SERVER_CERT} -----END CERTIFICATE----- ``` -------------------------------- ### Install XRPL Python Library Source: https://docs.ripple.com/products/stablecoin/developer-resources/rlusd-on-the-xrpl.md Commands to initialize a project directory and install the necessary XRPL Python dependencies. ```shell mkdir xrpl-rlusd-trustline cd xrpl-rlusd-trustline pip install xrpl-py ``` -------------------------------- ### User Conflict Response Example Source: https://docs.ripple.com/products/custody/support/change-history/migration-guide-v115 Example JSON response from the GET /internal/v1/users/conflicts endpoint showing both sameAlias and samePublicKey conflict types. ```json { "sameAlias":[ { "domainId": "8a0b02c3-fdd8-452e-bc6e-ef07a335ec7e", "alias": "op1@ripple.com", "userIds":[ "497f6eca-6276-4993-bfeb-53cbbbba6f08", "47ecb890-2e2b-4d53-9428-bf08f2ee56dc" ] } ], "samePublicKey":[ { "publicKey": "MFkw...NfPfw/q9YW74Q==", "users":[ { "domainId": "8a0b02c3-fdd8-452e-bc6e-ef07a335ec7e", "alias": "op2@ripple.com", "userId": "497f6eca-6276-4993-bfeb-53cbbbba6f08" }, { "domainId": "89hd02c3-fdd8-452e-bc6e-ef07a335ec7e", "alias": "op1@ripple.com", "userId": "hks86eca-6276-4993-bfeb-53cbbbba6f08" } ] } ] } ``` -------------------------------- ### Get Account Statement HTTP Request Source: https://docs.ripple.com/products/payments-odl/introduction/concepts/using-on-demand-liquidity.md Example of an HTTP GET request to retrieve account statement data for a specific RippleNet account. ```http GET v4/statement/bitstamp_usd@rn.xrapid.mycorp?start-date=2020-03-18T20:30:00Z&end-date=2020-03-18T22:45:00Z HTTP/1.1 Host: https://sf-bank.ripplenet.com Content-Type: application/json Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsieGN1cnJlbnQiXSwic2NvcGUiO ``` -------------------------------- ### Deployment Configuration JSON Source: https://docs.ripple.com/products/custody/deployment/integrate-kms/advanced-secret-management.md Example structure for the 'config' key containing deployment and infrastructure settings. ```json { "deployment": { "vault": { "release-name": "vault-01", "construct-id": "00000000-0000-0000-0000-000000000001" } }, "custody": { "environment": "https://api.your-instance.custody.example.com/" }, "infrastructure": { "aws": { "region": "us-east-1", "ec2-iam-role": "vault-role", "vpc": { "create-new": false, "id": "vpc-abc123", "subnet-id": "subnet-def456" } } } } ``` -------------------------------- ### Configure internal and external AMQP settings Source: https://docs.ripple.com/products/custody/deployment/reference/amqp.md Example configuration demonstrating internal AMQP for core components and external AMQP for event processing. ```yaml harmonize: internalAmqp: enabledForCoreComponents: true username: "user" vhost: "harmonize" sslEnabled: true externalAmqp: enabledForCoreComponents: false host: "events-rabbitmq.example.com" port: 5671 username: "events" password: "SECURE_PASSWORD" vhost: "events" sslEnabled: true amqpProtocolVersion: "v1" ``` -------------------------------- ### Get Account Statement Response Examples Source: https://docs.ripple.com/products/payments-odl/change-history.md JSON response examples for PAYMENT and TRANSFER transaction types showing the inclusion of sender_address and receiver_address fields. ```http { "transaction_id": "51405ec1-edbd-4953-aefe-5f2178ab6cf0", "transaction_type": "PAYMENT", "transaction_state": "EXECUTED", "balance_change": "9999.99000000", "balance_result": "32456.51000000", "created_at": "2021-12-17T03:58:45.528Z", "end_to_end_id": "03915", "internal_id": "a5ab9e7d-731a-4b2b-84f4-05e4a2f570dd", "venue_id": "074aad75-cade-4aa0-90eb-d20a10376c39", "transaction_hash": "b9bd8018-754e-4a78-9351-ab3e08fecd4d", "returns_payment_with_id": null, "returned_by_payment_with_id": null, "balance_change_created_at": "2021-12-17T03:58:45.528Z", "sender_address": "rn.hkg.mycorp", "receiver_address": "rn.sgp.othercorp" } ``` ```http { "transaction_id": "51405ec1-edbd-4953-aefe-5f2178ab6cf0", "transaction_type": "TRANSFER", "transaction_state": "EXECUTED", "balance_change": "9999.99000000", "balance_result": "32456.51000000", "created_at": "2021-12-17T03:58:45.528Z", "end_to_end_id": "03915", "internal_id": "a5ab9e7d-731a-4b2b-84f4-05e4a2f570dd", "venue_id": "074aad75-cade-4aa0-90eb-d20a10376c39", "transaction_hash": "b9bd8018-754e-4a78-9351-ab3e08fecd4d", "returns_payment_with_id": null, "returned_by_payment_with_id": null, "balance_change_created_at": "2021-12-17T03:58:45.528Z", "sender_address": null, "receiver_address": null } ``` -------------------------------- ### Get current user API response Source: https://docs.ripple.com/products/custody/governance/users/manage-users-and-roles.md Example JSON response from the Get current user endpoint, showing public key and domain associations. ```json { "publicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE7ItVC+y2KpbztcRjPLDs8QmDVz7yI7ElQA70Sz+cLcBI6041aObPvcNqps8eTYe2jhc2Kb5qgNgoACB3SqpYIA==", "domains": [ { "id": "67241e7d-f345-459e-9293-475693c45d85", "alias": "My root domain", "userReference": { "id": "61aaa805-f9b8-11eb-b158-dcfb48cfb3cb", "alias": "operator@example.com" } } ] } ``` -------------------------------- ### Install SDK via Maven Source: https://docs.ripple.com/products/custody/get-started/integrate-via-sdk.md Command to install the SDK JAR file into the local Maven repository. ```bash mvn install:install-file -Dfile=./sdk-{sdk-version}.jar -DgroupId=com.metaco -DartifactId=sdk -Dversion={sdk-version} -Dpackaging=jar -DpomFile=./sdk-{sdk-version}.xml ``` -------------------------------- ### List Query Request Source: https://docs.ripple.com/products/custody/identity-and-access/authentication/authenticate-api-requests.md Example of a GET request to retrieve a list of entities. ```http GET /v1/domains Authorization: Bearer ``` -------------------------------- ### Complete BlockSafe HSM Configuration Example Source: https://docs.ripple.com/products/custody/deployment/integrate-kms/on-premise-hsm/blocksafe.md A comprehensive example showing both notary and vault configurations in a single production.yaml file. ```yaml # production.yaml - Complete BlockSafe HSM Configuration # Global settings harmonize: repository: base: "my-registry.example.com/harmonize" urls: base: "custody.example.com" tls: true # Notary configuration components: notary: enabled: true platform: kms_blocksafe kms_blocksafe: secretRef: "custody-blocksafe-credentials" # Or inline configuration (not recommended for production): # device: "3001@192.168.1.100" # slot: 0 # pin: "${SLOT_PIN}" # Vault configuration (uses same slot as Notary) harmonize: vaults: "00000000-0000-0000-0000-000000000000": enabled: true platform: kms_blocksafe notary_public_key: "ed25519:${NOTARY_PUBLIC_KEY}" kms_blocksafe: secretRef: "custody-blocksafe-credentials" # Or inline configuration (not recommended for production): # device: "3001@192.168.1.100" # slot: 0 # Same slot as Notary # pin: "${SLOT_PIN}" ``` -------------------------------- ### Production Environment Request Example Source: https://docs.ripple.com/products/payments-odl/api-docs/ripplenet/best-practices/authentication.md A successful authentication request example targeting the production environment. ```json POST https://auth.rnc.ripplenet.com/oauth/token Content-Type: application/json { "grant_type": "client_credentials", "client_id": "{YOUR_CLIENT_ID}", "client_secret": "{YOUR_CLIENT_SECRET}", "audience": "urn:ripplexcurrent-prod:{YOUR_TENANT_ID}" } ``` -------------------------------- ### Get Payments Response Source: https://docs.ripple.com/products/payments-odl/api-docs/ripplenet/resources/amend-outbound-instructions.md Example response showing a payment with the recoverable failure label. ```json { "payment_id": "98d08b9e-4885-48e4-9e09-8f457859e142", "contract_hash": "abc65fad5e00aac237a44f22e7919046bc2ac2df3b955", "payment_state": "EXECUTED", "internal_info": { "internal_id": "6b0a4263-f9b9-48f3-910d-005b6873cb5e", "connector_role": "RECEIVING", "labels": [ { "label": "OUTBOUND_TRANSFER_FAILED_RECOVERABLY" } ] }, "modified_at": "2020-01-08T00:58:49.129Z", ... ``` -------------------------------- ### Initialize TypeScript project Source: https://docs.ripple.com/products/stablecoin/developer-resources/rlusd-on-the-xrpl.md Commands to create a directory and initialize a Node.js project for XRPL development. ```shell mkdir xrpl-rlusd-trustline cd xrpl-rlusd-trustline npm init -y ``` -------------------------------- ### API Request with Authorization Header Source: https://docs.ripple.com/products/payments-direct-2/api-docs/get-started/authentication.md Example of an authenticated GET request to the payments endpoint. ```http GET https://api.ripple.com/v2/payments/{YOUR_PAYMENT_ID} Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJ ``` -------------------------------- ### Detail Query Request Source: https://docs.ripple.com/products/custody/identity-and-access/authentication/authenticate-api-requests.md Example of a GET request to retrieve a specific entity by its ID. ```http GET /v1/domains/{domainId} Authorization: Bearer ``` -------------------------------- ### Ledger Configuration Example Source: https://docs.ripple.com/products/custody/deployment/reference/ledgers.md Example of defining multiple ledger network entries within a deployment values file. Ensure all required endpoint fields are provided for each enabled ledger family. ```yaml harmonize: ledgers: bitcoin: mainnet: enabled: true url: "http://bitcoin-rpc.example.com:8332" user: "" password: "" fallbackFeeRate: 100 ethereum: mainnet: enabled: true uri: "https://ethereum-node.example.com" xrpl: mainnet: enabled: true uri: "https://xrpl-node.example.com" substrate: polkadot: enabled: true ws: "wss://substrate-ws.example.com" sidecar: "https://substrate-sidecar.example.com" stellar: mainnet: enabled: true url: "https://stellar-horizon.example.com" passphrase: "" ``` -------------------------------- ### Create Namespaces and Apply Network Policies Source: https://docs.ripple.com/products/custody/deployment/integrate-kms/production-best-practices.md Use these commands to establish the recommended namespace structure and enforce network isolation between components. ```bash # Create namespaces kubectl create namespace custody-core kubectl create namespace custody-vaults kubectl create namespace custody-networks kubectl create namespace custody-monitoring # Apply network policies (restrict cross-namespace traffic) kubectl apply -f network-policies/ ``` -------------------------------- ### Configure notification and email settings in YAML Source: https://docs.ripple.com/products/custody/deployment/reference/notifications.md Example deployment values file demonstrating the structure for enabling email notifications and configuring the notification service component. ```yaml harmonize: notifications: email: enabled: true sender: "noreply@example.com" smtp: host: "smtp.example.com" port: "587" username: "" password: "" components: notification: enabled: true replicas: 1 resources: limits: cpu: 1000m memory: 1024Mi requests: cpu: 100m memory: 256Mi service: main: ports: http: port: 80 targetPort: 3000 ``` -------------------------------- ### Get Transaction Request Source: https://docs.ripple.com/products/stablecoin/api/transactions.md Example request to retrieve a transaction, requiring a Bearer token for authorization. ```http GET /v1/stablecoin/transactions/550e8400-e29b-41d4-a716-446655440000 Authorization: Bearer ``` -------------------------------- ### Configure Syslog settings Source: https://docs.ripple.com/products/custody/deployment/reference/telemetry-configuration.md Example YAML configuration for enabling and defining Syslog connection parameters. ```yaml syslog: enabled: true host: 'my-syslog-receiver-hostname.com' port: '54526' gatewayName: harmonize_syslog ``` -------------------------------- ### Sample Paginated API Response Source: https://docs.ripple.com/products/payments-odl/api-docs/ripplenet/best-practices/pagination.md A full example of a paginated response from the GET /v4/transfers endpoint. ```json { "first": true, "last": false, "number": "0", "numberOfElements": "5", "size": "5", "totalElements": "18", "totalPages": "4", "sort": [ { "direction": "DESC", "property": "lastModifiedDate", "ignoreCase": false, "nullHandling": "NATIVE", "ascending": false, "descending": true } ], "content": [ { "transfer_id": "59d96a63-1c41-43ab-af10-7bf961d73457", "state": "EXECUTED", "owner_address": "test.cloud.blueprint2", "sender_address": "trans_eur_receiver@test.cloud.blueprint2", "receiver_address": "conct_eur_sender@test.cloud.blueprint2", "amount": "1000000000.000000000", "internal_id": null, "end_to_end_id": null, "sending_fee": null, "created_at": "2021-02-16T08:20:59.842Z", "user_info": [], "labels": [] }, { "transfer_id": "2e6f1167-e91a-43dd-be81-716088884549", "state": "EXECUTED", "owner_address": "test.cloud.blueprint2", "sender_address": "conct_eur_sender@test.cloud.blueprint2", "receiver_address": "trans_eur_receiver@test.cloud.blueprint2", "amount": "900000.000000000", "internal_id": null, "end_to_end_id": null, "sending_fee": null, "created_at": "2021-02-16T07:29:35.036Z", "user_info": [], "labels": [] }, { "transfer_id": "89b6668c-7a81-485b-99b4-bc924f29140a", "state": "EXECUTED", "owner_address": "test.cloud.blueprint2", "sender_address": "conct_eur_sender@test.cloud.blueprint2", "receiver_address": "trans_eur_receiver@test.cloud.blueprint2", "amount": "99999000000.000000000", "internal_id": null, "end_to_end_id": null, "sending_fee": null, "created_at": "2021-02-16T07:29:07.781Z", "user_info": [], "labels": [] }, { "transfer_id": "594ceb52-4db1-4bbd-9956-141e7d3f032a", "state": "COMPLETED", "owner_address": "test.cloud.blueprint1", "sender_address": "trans_usd_sender@test.cloud.blueprint1", "receiver_address": "conct_usd_sender@test.cloud.blueprint1", "amount": "3.000000000", "internal_id": "456", "end_to_end_id": "123", "sending_fee": null, "created_at": "2021-01-04T09:33:35.105Z", "user_info": [ { "node_address": "test.cloud.blueprint1", "state": "EXECUTED", "json": {}, "created_at": "2021-01-04T09:33:35.106Z" } ], "labels": [] }, { "transfer_id": "827da53b-8086-4d1b-8d0f-d8d18ac46051", "state": "COMPLETED", "owner_address": "test.cloud.blueprint1", "sender_address": "trans_usd_sender@test.cloud.blueprint1", "receiver_address": "conct_usd_sender@test.cloud.blueprint1", "amount": "3.000000000", "internal_id": "456", "end_to_end_id": "123", "sending_fee": null, "created_at": "2020-12-02T13:52:40.909Z", "user_info": [ { "node_address": "test.cloud.blueprint1", "state": "EXECUTED", "json": {}, "created_at": "2020-12-02T13:52:40.909Z" } ], "labels": [] } ] } ``` -------------------------------- ### Deploy Core Services with Helm Source: https://docs.ripple.com/products/custody/deployment/install/first-time-installation.md Installs the core services using the provided configuration file within the specified namespace. ```bash helm install harmonize . \ -f production.yaml \ --namespace custody-core \ --create-namespace ``` -------------------------------- ### Production Environment Response Example Source: https://docs.ripple.com/products/payments-odl/api-docs/ripplenet/best-practices/authentication.md The expected JSON response containing the access token upon successful authentication. ```json { "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJ", "expires_in": 3600, "token_type": "Bearer", "scope": "keys:read keys:write payments:read payments:config quotes:read quote_collections:return quote_collections:write payments:accept payments:lock payments:reject payments:settle payments:finalize payments:fail payments:label payments:node_status payments:complete fxrates:read fxrates:write fee:read fee:write accounts:read accounts:write monitor:balances transfers:read transfers:label transfers:write user:read quote_collections:read exchange_transfers:write exchange_transfers_quote:write exchange_transfers:read exchange_transfers_complete:write account_liquidity:config request_for_payment:write request_for_payment:accept request_for_payment:fail request_for_payment:read user:write xvia:write" } ``` -------------------------------- ### Get payment by ID request Source: https://docs.ripple.com/products/payments-odl/api-docs/ripplenet/tutorials/non-orchestration/send-a-payment-advanced.md Use these examples to retrieve payment details and verify the current state of a transaction. ```json GET /v4/payments/43-bba3-f52c40c91e-d8a05234-8dbbf844/ HTTP/1.1 Host: north-bank.ripplenet.com Content-Type: application/json Authorization: Bearer 5ld1y ... ``` ```bash curl -X GET \ https://north-bank.ripplenet.com/v4/payments/43-bba3-f52c40c91e-d8a05234-8dbbf844/ \ -H 'Authorization: Bearer 5ld1y ...' \ -H 'Content-Type: application/json' ``` -------------------------------- ### Configure Telemetry via Helm Source: https://docs.ripple.com/products/custody/deployment/reference/telemetry-configuration.md Example configuration for enabling OTLP telemetry with a specific host and protocol. ```yaml harmonize: telemetry: type: 'otlp' protocol: 'https' host: 'my-telemetry-hostname.com' ``` -------------------------------- ### Requesting paginated data Source: https://docs.ripple.com/products/payments-odl/api-docs/ripplenet/best-practices/pagination.md Examples of standard GET requests for transfers, including the optional page parameter for pagination. ```http GET {ripplenet_base_url}/v4/transfers Authorization: Bearer eyJhbGciO...l0ZSIwIm ``` ```http GET {ripplenet_base_url}/v4/transfers?page=X Authorization: Bearer eyJhbGciO...l0ZSIwIm ``` -------------------------------- ### Run TypeScript script Source: https://docs.ripple.com/products/stablecoin/developer-resources/rlusd-on-the-xrpl.md Execute the trust line setup script using npm. ```shell npm start ``` -------------------------------- ### Example payoutExecutionDetails JSON object Source: https://docs.ripple.com/products/payments-direct-2/introduction/concepts/payment-execution-details.md Represents the structure of the payoutExecutionDetails object as returned in a Get Payment by ID response. ```json { "payoutExecutionDetails": { "paymentRailUsed": "FEDWIRE", "payoutStartTime": "2026-02-18T14:22:15.789Z", "payoutEndTime": "2026-02-18T14:25:30.123Z", "trackingReferences": [ { "referenceType": "IMAD", "value": "20260218MMQFMP2P003836", "displayName": "Input Message Accountability Data", "description": "A unique identifier assigned by the Fedwire system to each transaction." } ] } } ``` -------------------------------- ### Start CloudSign node for testing Source: https://docs.ripple.com/products/wallet/user-interface/devices/set-up-and-run-cloudsign.md Run a single CloudSign node in the foreground for testing purposes. ```bash docker run \ -v /path/to/volume:/var/cloudsign \ -e DB_ENCRYPTION_KEY_HEX=YOUR_ENCRYPTION_KEY \ -e PAIRING_KEY=YOUR_PAIRING_KEY \ -e LOG_LEVEL=debug \ --rm \ --name cloudsign-node \ -it 335650072995.dkr.ecr.eu-west-2.amazonaws.com/external/custody/cloudsign/app:1.12.0 ``` -------------------------------- ### Get payment by ID response Source: https://docs.ripple.com/products/payments-direct-2/api-docs/developer-guides/create-a-payment.md Example JSON response containing payment lifecycle information and destination details. ```json { "paymentId": "aa74f2f4-5996-4f0c-9d8a-7a5e1d51c502", "initiatedAt": "2025-03-15T10:23:45Z", "expiresAt": "2025-03-15T10:28:45Z", "lastStateUpdatedAt": "2025-03-15T10:24:15Z", "paymentState": "TRANSFERRING", "originator": { "originatorIdentityId": "c1e92b47-4579-4a7e-9c9a-02f3e3e4bb11", "sourceCountry": "US", "sourceCurrency": "USD", "sourceAmount": 10000, "payin": "PRE_FUNDING" }, "destination": { "destinationAmount": 204533.30, "destinationCountry": "MX", "destinationCurrency": "MXN", "beneficiaryIdentityId": "7ea3399c-1234-5678-8d8f-d320ea406630", "beneficiaryFinancialInstrumentId": "0e0d7b5a-7f2b-4c75-9bb9-8c4d0ff5f2a1", "payout": "BANK" } } ``` -------------------------------- ### Indexer deployment values configuration Source: https://docs.ripple.com/products/custody/deployment/reference/indexers.md Example of a deployment values file demonstrating configuration patterns for Bitcoin, Ethereum, Substrate, and Cardano indexers. ```yaml harmonize: ledgers: bitcoin: mainnet: enabled: true nodeEndpoint: "bitcoin-rpc.internal:8332" url: "https://bitcoin-indexer.example.com" user: "" password: "" fallbackFeeRate: 100 ethereum: mainnet: enabled: true uri: "https://ethereum-node.example.com" substrate: polkadot: enabled: true ws: "wss://substrate-ws.example.com" sidecar: "https://substrate-sidecar.example.com" cardano: mainnet: enabled: true http: "https://cardano-node.example.com" ws: "wss://cardano-ws.example.com" ``` -------------------------------- ### Example content metadata Source: https://docs.ripple.com/products/payments-odl/api-docs/ripplenet/reference/openapi/auditing/getaudits Example JSON string containing event metadata like IP address and URI. ```json "{\"ip\":\"0:0:0:0:0:0:0:1\",\"uri\":\"/internal/key_service/addresses/rn.us.ny.new_york/keys\"}" ``` -------------------------------- ### Get ledger transactions response Source: https://docs.ripple.com/products/payments-direct-2/api-docs/developer-guides/get-ledger-balances-and-transactions.md Example JSON response containing a list of ledger transactions with their respective operation types and balance impacts. ```json { "offset": "0", "pageSize": "25", "pageElements": "10", "total": "10", "statementTransactions": [ { "tenant": "acme-corp", "amount": "14.00", "currency": "USD", "operation": "DEBIT", "txnSource": "PAYMENTS", "status": "SUCCESS", "createdDttm": "2025-03-15T10:25:12.000000Z", "updatedDttm": "2025-03-15T10:25:12.000000Z", "availableBalanceBefore": "50014.00", "availableBalanceAfter": "50014.00" }, { "tenant": "acme-corp", "amount": "10000.00", "currency": "USD", "operation": "DEBIT", "txnSource": "PAYMENTS", "status": "SUCCESS", "createdDttm": "2025-03-15T10:25:10.000000Z", "updatedDttm": "2025-03-15T10:25:10.000000Z", "availableBalanceBefore": "50014.00", "availableBalanceAfter": "50014.00" }, { "tenant": "acme-corp", "amount": "10014.00", "currency": "USD", "operation": "RESERVE", "txnSource": "PAYMENTS", "status": "SUCCESS", "createdDttm": "2025-03-15T10:23:45.000000Z", "updatedDttm": "2025-03-15T10:23:45.000000Z", "availableBalanceBefore": "60014.00", "availableBalanceAfter": "50000.00" } ] } ``` -------------------------------- ### Stellar account initialization payload Source: https://docs.ripple.com/products/custody/accounts-and-assets/accounts/ledger-specific-settings/stellar-api.md Example JSON payload for creating a transaction order to initialize a Stellar account with a specified starting balance. ```json { "payload": { "id": "953d75b2-e384-46e9-8a72-a1ce753a50e2", "accountId": "953d75b2-e384-46e9-8a72-a1ce753a50e2", "parameters": { "operation": { "destination":{ "address": "GBDAE3PRVTN4GWYR7O4QW3Y6RFHU564RPFJ5CMYIMG3AYNJFDGW3L7O7", "type": "Address" }, "startingBalance":"10000000", "type": "CreateAccount" }, "memo": { "value": "Stellar account fund", "type": "Text" }, "feeStrategy": { "priority": "Low", "type": "Priority" }, "maximumFee": "200", "type": "Stellar" }, "description": "", "customProperties": {}, "type": "v0_CreateTransactionOrder" } } ``` -------------------------------- ### Configure Ledgers Source: https://docs.ripple.com/products/custody/deployment/install/first-time-installation.md Example YAML configuration for enabling and connecting to blockchain ledgers. ```yaml # production.yaml harmonize: ledgers: bitcoin-mainnet: enabled: true node: uri: "https://bitcoin-node.my-bank.local:8332" # For basic auth: "https://user:password@bitcoin-node.my-bank.local:8332" ethereum-mainnet: enabled: true node: uri: "https://mainnet.infura.io/v3/YOUR_INFURA_API_KEY" # Or self-hosted: "https://ethereum-node.my-bank.local:8545" ``` -------------------------------- ### Create a user Source: https://docs.ripple.com/products/custody/developer-experience/java-sdk/entities.md Shows how to create a user using a builder pattern or an action object chain. ```java var domainId = ""; var userId = ""; var userAlias = ""; var userRoles = List.of("admin"); var userPublicKey = ""; var userDescription = ""; var user = Users.CreateUser.builder() .id(userId) .alias(userAlias) .description(userDescription) .roles(userRoles) .publicKey(userPublicKey) .build(); harmonize.users(domainId) .create(user, Expire.hours(24)) .waitForSucceed(Timeout.minutes(1)); ``` ```java var domainId = ""; var userId = ""; var userAlias = ""; var userRoles = List.of("admin"); var userPublicKey = ""; var userDescription = ""; harmonize.users(domainId).create() .id(userId) .alias(userAlias) .description(userDescription) .roles(userRoles) .publicKey(userPublicKey) .submit() .waitForSucceed(Timeout.minutes(1)); ``` -------------------------------- ### Retrieve Public Key API Response Source: https://docs.ripple.com/products/custody/overview/security/data-integrity-and-audit-trail.md Example JSON response from the Get system properties API containing the platform's public key. ```json { "id": "CUSTODY_API_KEY", "value": { "publicKey": { "value": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE1WXjDbBcWEVmqObzEndfnug+nd4EOEqcXMY5a5I0XvfRq1+K6Z9K1DdZ2YgFIbuzdX2Z2kOfE/fcDj/QzF5IAw==", "type": "PublicKey" } } } ```