Send money
Money out of your Wallet to one recipient or many, in real-time or by the next banking day, from the Dashboard or your code.
Overview
Sending money from your PayMongo Wallet transfers funds to a recipient's bank account or e-wallet. Philippine registered banks and e-wallets can be sent via InstaPay or PESONet — the two domestic transfer rails supervised by the Bangko Sentral ng Pilipinas (BSP).
Every account gets one free transfer per week. Volume-based rates are available — see PayMongo Pricing or contact [email protected] for more info.
This page covers single-recipient transfers. For sending to multiple recipients in one operation — payroll runs, batch payouts, bulk disbursements — see Disbursements.
Which rail to use
| InstaPay | PESONet | |
|---|---|---|
| Speed | Real-time (usually instant) | Same or next banking day |
| Hours | 24/7, including weekends and holidays | Banking days only |
| Per-transaction limit | PHP 50,000 | PHP 10,000,000 |
| Best for | Urgent or smaller payments | Larger amounts, non-time-sensitive |
The rail is determined by the receiving institution you select. If the recipient's bank supports InstaPay, the transfer routes through InstaPay automatically. If the amount exceeds PHP 50,000, use PESONet.
Before you start
Make sure you have:
- An activated PayMongo Wallet with sufficient balance, including the PHP 10.00 transfer fee.
- The recipient's bank or e-wallet name, account name, and account number. Mismatched or invalid details are the most common cause of failed transfers — double-check before submitting.
- Access to your registered email — Dashboard transfers require a one-time PIN (OTP) sent to the email on your account.
Send from the Dashboard
The Dashboard is the fastest way to send a single transfer without writing any code.
- Log in to your PayMongo Dashboard and go to the Wallet Dashboard.
- Click Send Funds in the upper right.
- Fill in the recipient details: bank or e-wallet, account name, account number, and amount.
- Click Continue, review the details, then click Submit.
- Enter the OTP sent to your registered email to authorize the transfer.
The transfer appears in your Wallet transaction history immediately. Status updates as the funds move through the rail.
Send via the API
Use this section to automate single transfers via the API. For batch transfers to up to 1,000 recipients, see Disbursements - Local Disbursements.
1. Get the receiving institution ID
Fetch the list of supported banks and e-wallets to find the correct bank_id for your recipient:
curl https://api.paymongo.com/v1/wallets/receiving_institutions \
-u {{secret_key}}:The response returns an array of institutions. Match your recipient's bank name to find its id.
2. Create the transfer
curl -X POST https://api.paymongo.com/v1/wallets/{{wallet_id}}/transactions \
-u {{secret_key}}: \
-H "Content-Type: application/json" \
-d '{
"data": {
"attributes": {
"amount": 5000000,
"description": "Payment to supplier",
"type": "send_payment",
"receiver": {
"bank_id": "{{bank_id}}",
"bank_account_number": "{{account_number}}",
"bank_account_name": "{{account_name}}"
},
"callback_url": "https://your-domain.com/webhooks/paymongo"
}
}
}'Amount is in cents. PHP 50,000 =
5000000.
Include a callback_url to receive a webhook when the transfer status changes — this is the recommended way to track completion without polling.
3. Track the transfer
Handle the webhook payload delivered to your callback_url, or poll Retrieve a Wallet Transaction by the transaction ID returned in the create response.
Additional reading
For more info on what you can do with our API, see our full Wallets API documentation .
Transfer statuses
| Status | Meaning | What to do |
|---|---|---|
pending | Accepted by PayMongo, not yet confirmed by the rail | Wait — allow up to 20 min for InstaPay, up to one banking day for PESONet |
succeeded | Funds credited to the recipient | Confirm delivery with your recipient if required. No further action needed. |
failed | Transfer did not complete | Check the error reason and retry once resolved |
Note
A
pendingstatus is not an error condition. Do not retry apendingtransfer — it may still complete successfully.
Related reading
- Disbursements — batch sending to multiple recipients at once, with full error handling and QR flow documentation.
- Manage your balance — view your balance and top up before sending.
- Key concepts — how rails, transfers, and wallet limits work.
Updated about 4 hours ago