Skip to main content

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

  1. Know your recipients - Choose channels based on recipient preferences
  2. Monitor channel health - Track success rates and response times
  3. Implement fallbacks - Have backup channels ready
  4. Consider costs - Balance speed vs. transaction fees
  5. Test thoroughly - Validate each channel before production
  6. Stay updated - Channel availability can change
  • [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