Disbursement Channels
Understanding the various payment channels available in NextAPI for sending money to different recipients and destinations.
Channel Overview
NextAPI supports multiple disbursement channels to handle different payment scenarios:
Disbursement Channels
├── Digital Wallets
│ ├── GCash
│ ├── Maya
│ ├── GrabPay
│ └── Other E-Wallets
├── Bank Transfers
│ ├── InstaPay
│ ├── PESONet
│ └── SWIFT (International)
├── Cash Out
│ ├── Pawnshops
│ ├── Remittance Centers
│ └── Convenience Stores
└── Alternative Channels
├── Mobile Load
├── Bills Payment
└── Gift Cards
Digital Wallets
GCash
The most popular digital wallet in the Philippines:
{
"channel": "gcash",
"recipient": {
"type": "wallet",
"identifier": "09123456789",
"name": "Juan Dela Cruz"
},
"amount": 10000,
"currency": "PHP"
}
Features:
- Instant transfers (usually < 1 minute)
- 24/7 availability
- Low transaction fees
- High success rate (> 99%)
Limits:
- Minimum: ₱1.00
- Maximum: ₱100,000 per transaction
- Daily limit: ₱500,000
Maya
Formerly known as PayMaya:
{
"channel": "maya",
"recipient": {
"type": "wallet",
"identifier": "09123456789",
"name": "Maria Santos"
},
"amount": 5000,
"currency": "PHP"
}
Features:
- Instant transfers
- QR code payments
- Virtual card support
- International transfers available
Bank Transfers
InstaPay
Real-time electronic fund transfer:
{
"channel": "instapay",
"recipient": {
"type": "bank_account",
"account_number": "123456789012",
"account_name": "Juan Dela Cruz",
"bank_code": "BPI"
},
"amount": 50000,
"currency": "PHP"
}
Features:
- Real-time processing (under 1 minute)
- Available 24/7
- Supports 40+ banks
- High reliability
Limits:
- Minimum: ₱500.00
- Maximum: ₱50,000 per transaction
PESONet
Batch electronic fund transfer:
{
"channel": "pesonet",
"recipient": {
"type": "bank_account",
"account_number": "123456789012",
"account_name": "Juan Dela Cruz",
"bank_code": "BDO"
},
"amount": 100000,
"currency": "PHP"
}
Features:
- Lower fees for large amounts
- Same-day processing
- Supports all Philippine banks
- Ideal for payroll and bulk payments
Processing Times:
- Batch 1: 10:00 AM
- Batch 2: 2:00 PM
- Batch 3: 5:00 PM
Cash Out Channels
Pawnshops
Cebuana Lhuillier, Palawan Express, etc.:
{
"channel": "pawnshop",
"recipient": {
"type": "cash_out",
"provider": "cebuana",
"reference_number": "1234567890",
"name": "Juan Dela Cruz"
},
"amount": 25000,
"currency": "PHP"
}
Features:
- Nationwide coverage
- No bank account required
- ID verification needed
- Available in remote areas
Remittance Centers
Western Union, MLhuillier, etc.:
{
"channel": "remittance",
"recipient": {
"type": "remittance",
"provider": "western_union",
"tracking_number": "MTCN123456789",
"name": "Juan Dela Cruz",
"address": "Manila, Philippines"
},
"amount": 15000,
"currency": "PHP"
}
Channel Selection Guide
Use Digital Wallets When:
- Speed is critical (instant transfers needed)
- Amount is small to medium (under ₱100,000)
- Recipient has mobile wallet
- 24/7 availability required
Use Bank Transfers When:
- Amount is large (over ₱50,000)
- Recipient prefers bank deposit
- Business payments required
- Record keeping important
Use Cash Out When:
- Recipient has no bank account
- Remote area delivery needed
- Cash collection preferred
- Alternative to banks required
Channel Configuration
Default Channel Settings
{
"default_channel": "gcash",
"fallback_channels": ["maya", "instapay"],
"channel_preferences": {
"speed_priority": true,
"cost_minimization": false,
"availability_24_7": true
}
}
Automatic Channel Selection
{
"auto_select_channel": true,
"selection_criteria": {
"amount": "auto",
"recipient_type": "auto",
"time_of_day": "auto",
"cost_efficiency": "medium"
}
}
Error Handling
Channel-Specific Errors
// Wallet not found
{
"error": {
"code": "WALLET_NOT_FOUND",
"message": "Recipient wallet not found",
"channel": "gcash",
"suggestion": "Verify wallet number or try different channel"
}
}
// Bank account invalid
{
"error": {
"code": "INVALID_BANK_ACCOUNT",
"message": "Bank account validation failed",
"channel": "instapay",
"details": "Account number does not match bank format"
}
}
// Channel maintenance
{
"error": {
"code": "CHANNEL_UNAVAILABLE",
"message": "Payment channel temporarily unavailable",
"channel": "maya",
"retry_after": "2024-01-15T14:00:00Z"
}
}
Fallback Strategies
// Implement channel fallback
async function sendPayoutWithFallback(payout) {
const channels = ['gcash', 'maya', 'instapay'];
for (const channel of channels) {
try {
const result = await sendPayout({
...payout,
channel
});
return result;
} catch (error) {
if (error.code === 'CHANNEL_UNAVAILABLE') {
continue; // Try next channel
}
throw error; // Re-throw other errors
}
}
throw new Error('All channels failed');
}
Monitoring and Analytics
Channel Performance Metrics
{
"channel_metrics": {
"gcash": {
"success_rate": 99.5,
"average_time": 45, // seconds
"cost_per_transaction": 2.50,
"volume_today": 1500000
},
"instapay": {
"success_rate": 98.8,
"average_time": 120, // seconds
"cost_per_transaction": 15.00,
"volume_today": 2500000
}
}
}
Real-time Monitoring
// Get channel status
GET /v1/channels/status
// Response
{
"channels": {
"gcash": {
"status": "operational",
"response_time": 45,
"success_rate_24h": 99.2
},
"maya": {
"status": "degraded",
"response_time": 180,
"success_rate_24h": 95.1,
"issue": "High latency detected"
}
}
}
Best Practices
- Know your recipients - Choose channels based on recipient preferences
- Monitor channel health - Track success rates and response times
- Implement fallbacks - Have backup channels ready
- Consider costs - Balance speed vs. transaction fees
- Test thoroughly - Validate each channel before production
- Stay updated - Channel availability can change
Related Concepts
- [The Lifecycle of a Payout](./the-lifecycle-of-a-payout
- [Handle Payout Failures & Retries](../guides/how-to/handle-payout-failures-retries
- [Run Payroll (or any Mass Payout)](../guides/how-to/run-payroll-or-any-mass-payout