How to Send USDC with Ripple Payments Direct
Ripple Payments Direct delivers Circle USDC to Ethereum and Solana wallets via ETH_WALLET or SOL_WALLET and a quote-then-pay API; Identity Management v3 allows one active instrument per identity.
Ripple Payments Direct supports direct delivery of Circle-issued USDC to Ethereum and Solana wallet addresses. The service uses ETH_WALLET and SOL_WALLET financial instruments, a quote-then-pay API, and two supported corridors named ETH_USDC and SOLANA_USDC. Identity Management v3 limits each identity to a single active financial instrument.
Financial instruments for these rails must specify currency as USDC and include a walletAddress plus cryptoInstitutionName inside the ethWallet or solWallet object. Ethereum wallet addresses must be 42 characters and match the 0x hex pattern. Solana addresses use base58 and range from 32 to 44 characters. cryptoInstitutionName values are configured at the tenant level and must match the venue string provided by the account team.
Operators create beneficiary and originator identities with POST /v3/identities and then attach one financial instrument per identity with POST /v3/identities/{identity-id}/financial-instruments. Business beneficiaries must provide businessName, address and a registration entry; the only accepted business registration document type for these rails is INCORPORATION_CERTIFICATE. Individual beneficiaries require firstName, lastName and address. Setting validatePayoutRails on an identity causes missing payout-related PII to fail validation before instrument creation.
Because Identity Management v3 permits only one active instrument per identity, replace a wallet by deleting the existing instrument before posting a new one. Attempting to add a second active instrument returns a 422 USR_120 error. If concurrent wallets are required, operators must create a separate identity with a unique internalId.
Operators obtain pricing with POST /v2/quotes/quote-collection. For digital-asset delivery set payoutCategory to CRYPTO and include destinationBlockchainNetwork (for example “Ethereum” or “Solana”), quoteAmount and quoteAmountType, sourceCurrency, destinationCurrency set to USDC, and payinCategory (PRE_FUNDING, CREDIT_FUNDING or JIT_FUNDING). Select an ACTIVE quoteId from the response; quotes expire and must be refreshed if stale. JIT_FUNDING quotes begin in AWAITING_FUNDING until ledger funding arrives before jitFundingExpiresAt.
Create payments with POST /v3/payments including quoteId, beneficiaryIdentityId and beneficiaryFinancialInstrumentId, and add originatorIdentityId for third-party flows when needed. Operators should poll GET /v3/payments/{paymentId} and GET /v3/payments/{paymentId}/states until the payment reaches COMPLETED or a terminal state such as FAILED, RETURNED or DECLINED.
Ripple documents ETH_USDC and SOLANA_USDC as real-time, global rails that support B2B and B2C flows. Ripple does not publish fixed per-transaction limits for these rails; exchange and wallet providers may impose deposit caps or other constraints. Operators must verify venue-level limits and Travel Rule obligations and include them in operational runbooks.
Payments Direct USDC payouts are distinct from RLUSD minting, Circle-hosted payout orchestration, Bridge Liquidation Addresses and BVNK card flows. Before production, enable ETH_WALLET and/or SOL_WALLET on the tenant, collect exact cryptoInstitutionName strings from the account team, create UAT identities with validatePayoutRails set, practice DELETE-then-POST instrument replacement, and test quote and payment flows end to end.








