Cross-Border Payments
Send international payments using stablecoins as a settlement layer.
Use SpherePay to facilitate cross-border payments by using stablecoins as an efficient settlement layer. This can significantly reduce costs and settlement times compared to traditional international wire transfers.
How It Works
Cross-border payments with stablecoins follow a two-step process:
Sender (Country A): USD → [SpherePay On-Ramp] → USDC
↓
[Blockchain Transfer - Near Instant]
↓
Recipient (Country B): USDC → [Local Off-Ramp] → Local FiatSpherePay handles the USD ↔ USDC conversion. You or your partner handles the local fiat off-ramp in the destination country.
Advantages
| Traditional Wire | Stablecoin Settlement |
|---|---|
| 3-5 business days | Minutes (blockchain) + local settlement |
| $25-50 wire fees | Lower fees |
| Opaque FX rates | Transparent on-chain |
| Limited visibility | Full tracking on blockchain |
Current Limitations
Caution
Geographic Restrictions: SpherePay currently supports USD rails in the United States only. For cross-border payments, you'll need a local partner or alternative solution for the destination country's fiat off-ramp.
SpherePay can handle:
- ✅ USD → USDC conversion (on-ramp in US)
- ✅ USDC → USD conversion (off-ramp in US)
- ✅ Stablecoin transfers between wallets
You'll need to handle:
- ❌ Local fiat rails in other countries (EUR, GBP, MXN, etc.)
- ❌ Local regulatory compliance
Implementation Pattern
Step 1: On-Ramp (Sender Side)
Convert the sender's USD to USDC:
curl -X POST https://api.spherepay.co/v2/transfer \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"customerId": "customer_sender",
"type": "onRamp",
"sourceAmount": "1000.00",
"sourceCurrency": "USD",
"destinationCurrency": "USDC",
"destinationNetwork": "solana",
"bankAccountId": "bank_sender",
"walletId": "wallet_settlement"
}'Step 2: Blockchain Transfer
Transfer USDC to the recipient's wallet (or your partner's settlement wallet):
curl -X POST https://api.spherepay.co/v2/transfer \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"customerId": "customer_sender",
"type": "cryptoToCrypto",
"sourceAmount": "1000.00",
"sourceCurrency": "USDC",
"sourceNetwork": "solana",
"destinationCurrency": "USDC",
"destinationNetwork": "solana",
"sourceWalletId": "wallet_settlement",
"destinationAddress": "recipient_wallet_address"
}'Step 3: Off-Ramp (Recipient Side)
If the recipient is US-based, use SpherePay to convert back to USD:
curl -X POST https://api.spherepay.co/v2/transfer \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"customerId": "customer_recipient",
"type": "offRamp",
"sourceAmount": "1000.00",
"sourceCurrency": "USDC",
"sourceNetwork": "solana",
"destinationCurrency": "USD",
"walletId": "wallet_recipient",
"bankAccountId": "bank_recipient"
}'For non-US recipients, use a local partner or exchange for the final fiat conversion.
Use Case: Remittances
For remittance platforms:
- Collect USD from sender in the US
- Convert to USDC via SpherePay on-ramp
- Transfer USDC to your partner's settlement wallet in destination country
- Partner converts USDC to local currency and disburses to recipient
async function processRemittance(senderId, recipientCountry, amount) {
// Step 1: On-ramp USD to USDC
const onRamp = await createTransfer({
customerId: senderId,
type: 'onRamp',
sourceAmount: amount,
sourceCurrency: 'USD',
destinationCurrency: 'USDC',
destinationNetwork: 'solana',
bankAccountId: senderBankAccount,
walletId: settlementWallet,
});
// Wait for on-ramp completion
await waitForTransfer(onRamp.id);
// Step 2: Transfer to destination partner
const partnerWallet = getPartnerWallet(recipientCountry);
const cryptoTransfer = await createTransfer({
customerId: senderId,
type: 'cryptoToCrypto',
sourceAmount: amount,
sourceCurrency: 'USDC',
sourceNetwork: 'solana',
destinationCurrency: 'USDC',
destinationNetwork: 'solana',
sourceWalletId: settlementWallet,
destinationAddress: partnerWallet,
});
// Notify partner of incoming settlement
await notifyPartner(recipientCountry, cryptoTransfer.id, amount);
return { onRamp, cryptoTransfer };
}Compliance Requirements
Sender Side (US)
- KYC verification — All senders must complete KYC
- Source of funds — May require documentation for large amounts
Recipient Side
- Local regulations — Partner must comply with local money transmission laws
- KYC/AML — Recipient verification per local requirements
- Reporting — Cross-border transaction reporting as required
Best Practices
- Choose the right network: Use Solana or Base for lower fees and faster finality
- Monitor FX rates: If converting to non-USD, track rates for pricing accuracy
- Build redundancy: Have backup partners for destination countries
- Track end-to-end: Poll transfer status and use blockchain monitoring for full visibility
- Handle failures gracefully: Build retry and refund logic
Settlement Times
| Leg | Time |
|---|---|
| USD → USDC (ACH) | 2-3 business days |
| USD → USDC (Wire) | Same/next business day |
| USDC transfer (blockchain) | Seconds to minutes |
| USDC → Local Fiat | Depends on local partner |
Total time with wire: As fast as same-day for the SpherePay portion.
Coming Soon
SpherePay is actively expanding international support. Check our Changelog for updates on:
- Additional fiat currencies (EUR, GBP, MXN)
- International customer support
- Direct cross-border rails
Related Guides
- Transfers API — Detailed transfer documentation
- KYC Flow — Customer onboarding