Internal Accounts
Internal accounts are Lightspark managed accounts that hold funds within the Grid platform. They allow you to receive deposits and send payments to external bank accounts or other payment destinations. They are useful for holding funds on behalf or the platform or customers which will be used for instant, 24/7 quotes and transfers out of the system. Internal accounts are created for both:- Platform-level accounts: Hold pooled funds for your platform operations (rewards distribution, reconciliation, etc.)
- Customer accounts: Hold individual customer funds for their transactions
Internal accounts are automatically created when you onboard a customer, based
on your platform’s currency configuration. Platform-level internal accounts
are created when you configure your platform with supported currencies.
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:Request internal accounts for a customer
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:Platform internal accounts are useful for managing pooled funds, distributing
rewards, or handling platform-level operations.
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
For USD accounts, instructions include routing and account numbers:
Each internal account has unique banking details in the
bankAccountInfo
field, which ensures deposits are automatically credited to the correct
account.SEPA EUR transfers
SEPA EUR transfers
For EUR accounts, instructions use SEPA IBAN numbers:
Spark Stablecoin Funding
Spark Stablecoin Funding
For stablecoin accounts, instructions use Spark wallet addresses:
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
Fetch the balance of an internal account
Response
Response
Always check the
decimals
field in the currency object to correctly convert
between display amounts and API amounts. For example, USD has 2 decimals, so
an amount of 50000 represents $500.00.Displaying funding instructions to customers
When customers need to deposit funds themselves, display the funding payment instructions in your application:1
Retrieve the internal account
Fetch the customer’s internal account for their desired currency using the API.
2
Extract payment instructions
Parse the
fundingPaymentInstructions
array and select the appropriate instructions based on your customer’s preferred payment method.3
Display instructions clearly
Show the payment details prominently in your UI:
- Account holder name
- Bank name and routing information (account/routing number, CLABE, PIX key, etc.)
- Reference code (if provided)
- Any additional notes from
instructionsNotes
The unique banking details in each internal account automatically route
deposits to the correct destination.
4
Monitor for deposits
Set up webhook listeners to receive notifications when deposits are credited to the internal account. The account balance will update automatically.
You’ll receive
ACCOUNT_STATUS
webhook events when the internal account balance changes.Best practices
Display complete funding instructions
Display complete funding instructions
Ensure your customers have all the information needed to make deposits. Consider implementing:
- 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
Set up monitoring to alert customers when their balance is low:
Handle multiple currencies efficiently
Handle multiple currencies efficiently
If your platform supports multiple currencies, organize internal accounts by currency in your UI:
Cache account data appropriately
Cache account data appropriately
Internal account details (especially funding instructions) rarely change, so you can cache them safely. However, always fetch fresh balance data before initiating transfers.
External Accounts
External accounts represent bank accounts, crypto wallets, or other payment instruments outside of Grid for on-ramping or off-ramping funds.Characteristics
- Represent real-world accounts (bank accounts, crypto wallets)
- Used as funding sources or payout destinations
- Subject to verification and compliance screening
- Have associated beneficiary information
- Status indicates readiness for use
Supported Account Types
- US Bank Accounts
- IBAN (Europe)
- PIX (Brazil)
- CLABE (Mexico)
- UPI (India)
- Spark Wallet (Crypto)
Creating External Accounts
Creating a US bank account
External Account Status
External accounts progress through verification:- PENDING: Created, undergoing verification/screening
- ACTIVE: Verified, ready for transactions
- INACTIVE: Disabled (can be reactivated)
- REJECTED: Failed verification
ACCOUNT_STATUS
webhooks as status changes.
Using External Accounts
- As Destination (Payout)
- As Source (Funding)
Send funds from internal account to external account:Or via quote for cross-currency:
Account Combinations
Common patterns for combining internal and external accounts:Pattern 1: Prefunded Payouts
Use case: Send payouts from customer’s prefunded balance- Customer funds internal account via ACH
- Create quote: Internal USD → External EUR
- Execute quote
- Recipient receives EUR in their bank
Pattern 2: JIT Funded Payouts
Use case: On-demand payments without maintaining balance- Create quote with
source: {customerId}
- Grid provides payment instructions
- Customer sends funds to instructions
- Quote auto-executes when received
- Recipient receives payout
Pattern 3: Platform Rewards
Use case: Platform distributes Bitcoin rewards- Platform funds its own internal USD account
- Create quote: Platform Internal USD → Customer Spark Wallet
- Execute with
immediatelyExecute: true
- Customer receives BTC instantly
Pattern 4: Crypto On-Ramp
Use case: Customer buys Bitcoin- Customer links bank via Plaid
- Pull funds to internal USD account
- Create quote: Internal USD → External Spark Wallet
- Execute quote
- BTC delivered to customer’s wallet