- Platform-level accounts: Hold pooled funds for your platform operations (rewards distribution, reconciliation, etc.)
- Customer accounts: Hold individual customer funds for their transactions
How internal accounts work
Internal accounts act as an intermediary holding account in the payment flow:- Deposit funds: You or your customers deposit money into internal accounts using bank transfers (ACH, wire, PIX, etc.) or crypto transfers
- Hold balance: Funds are held securely in the internal account until needed
- Send payments: You initiate transfers from internal accounts to external destinations
- Is denominated in a single currency (USD, EUR, etc.)
- Has a unique balance that you can query at any time
- Includes unique payment instructions for depositing funds
- Supports multiple funding methods depending on the currency
Retrieving internal accounts
List customer internal accounts
To retrieve all internal accounts for a specific customer, use the customer ID to filter the results:Response
Response
Filter by currency
You can filter internal accounts by currency to find accounts for specific denominations:List platform internal accounts
To retrieve platform-level internal accounts (not tied to individual customers), use the platform internal accounts endpoint:Understanding funding payment instructions
Each internal account includesfundingPaymentInstructions that tell your customers how to deposit funds. The structure varies by payment rail and currency:
US ACH or wire transfers
US ACH or wire transfers
SEPA EUR transfers
SEPA EUR transfers
Spark Stablecoin Funding
Spark Stablecoin Funding
Solana Stablecoin Funding
Solana Stablecoin Funding
Tron Stablecoin Funding
Tron Stablecoin Funding
Plasma Stablecoin Funding
Plasma Stablecoin Funding
Polygon Stablecoin Funding
Polygon Stablecoin Funding
Base Stablecoin Funding
Base Stablecoin Funding
Checking account balances
The internal account balance reflects all deposits and withdrawals. The balance includes:- amount: The balance amount in the smallest currency unit (cents for USD, centavos for MXN/BRL, etc.)
- currency: Full currency details including code, name, symbol, and decimal places
Example balance check
Response
Response
Displaying funding instructions to customers
When customers need to deposit funds themselves, display the funding payment instructions in your application:Retrieve the internal account
Extract payment instructions
fundingPaymentInstructions array and select the appropriate instructions based on your customer’s preferred payment method.Display instructions clearly
- Account holder name
- Bank name and routing information (account/routing number, CLABE, PIX key, etc.)
- Reference code (if provided)
- Any additional notes from
instructionsNotes
Monitor for deposits
INTERNAL_ACCOUNT.BALANCE_UPDATED webhook events when the internal account balance changes.Best practices
Display complete funding instructions
Display complete funding instructions
- Clear display of all banking details from
fundingPaymentInstructions - Copy-to-clipboard functionality for account numbers and reference codes
- Email/SMS confirmations with complete deposit instructions
Monitor account balances proactively
Monitor account balances proactively
Handle multiple currencies efficiently
Handle multiple currencies efficiently
Cache account data appropriately
Cache account data appropriately
Using internal accounts for ramps
Internal accounts play a critical role in both on-ramp and off-ramp flows:For on-ramps (Fiat → Crypto)
Internal accounts are optional for on-ramp flows using just-in-time (JIT) funding:- JIT funding: Quotes provide payment instructions directly; funds flow through without requiring an internal account
- Pre-funded model: Deposit fiat to internal account first, then create and execute conversion quotes
For off-ramps (Crypto → Fiat)
Internal accounts are essential for off-ramp flows:- Deposit crypto: Transfer Bitcoin or stablecoins to the internal account
- Hold balance: Crypto balance is held securely until conversion
- Execute conversion: Create and execute quote to convert crypto to fiat and send to bank account
Crypto funding for internal accounts
For off-ramp operations, fund internal accounts with cryptocurrency:Bitcoin (Lightning Network)
Internal accounts can receive Bitcoin via Lightning Network:- Spark address: Reusable address for multiple deposits
- Lightning invoice: Single-use invoice for specific amounts
Stablecoins
Internal accounts can also receive stablecoins via Lightning Network or Spark:Multi-currency balances
Internal accounts support both fiat and crypto balances:Example: Account with USD and BTC
Monitoring account balance changes
Subscribe toINTERNAL_ACCOUNT.BALANCE_UPDATED webhooks to receive real-time balance updates:
Ramp-specific use cases
Pre-funding for off-ramps
Maintain crypto balances for instant fiat conversions:Platform treasury management
Use platform-level internal accounts for pooled liquidity:Best practices for ramps
Choose the right funding model
Choose the right funding model
- On-ramps: Use JIT funding to avoid holding customer fiat
- Off-ramps: Pre-fund with crypto for instant fiat conversions
- High volume: Consider platform-level accounts for pooled liquidity
Monitor crypto price exposure
Monitor crypto price exposure
Implement balance alerts
Implement balance alerts
Next steps
- External Accounts - Configure destination accounts for conversions
- Fiat-to-Crypto Conversion - Build conversion flows
- Webhooks - Handle real-time notifications
Related resources
- Platform Configuration - Configure supported currencies
- Sandbox Testing - Test funding and conversions safely
- API Reference - Complete API documentation