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

InstaPayPESONet
SpeedReal-time (usually instant)Same or next banking day
Hours24/7, including weekends and holidaysBanking days only
Per-transaction limitPHP 50,000PHP 10,000,000
Best forUrgent or smaller paymentsLarger 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:

  1. An activated PayMongo Wallet with sufficient balance, including the PHP 10.00 transfer fee.
  2. 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.
  3. 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.

  1. Log in to your PayMongo Dashboard and go to the Wallet Dashboard.
  2. Click Send Funds in the upper right.
  3. Fill in the recipient details: bank or e-wallet, account name, account number, and amount.
  4. Click Continue, review the details, then click Submit.
  5. 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 BIC

Fetch the list of supported banks and e-wallets to find the correct provider_code (BIC) for your recipient's bank:

curl "https://api.paymongo.com/v1/wallets/receiving_institutions?provider=instapay" \
  -u {{secret_key}}:

The response returns an array of institutions. Match your recipient's bank name to find its provider_code — you'll use this as the destination_account.bic in the next step.

2. Create the transfer

curl -X POST https://api.paymongo.com/v2/batch_transfers \
  -u {{secret_key}}: \
  -H "Content-Type: application/json" \
  -d '{
    "transfers": [
      {
        "source_account": {
          "number": "{{wallet_account_number}}",
          "name": "{{your_account_name}}",
          "bic": "PAEYPHM2XXX"
        },
        "destination_account": {
          "number": "{{recipient_account_number}}",
          "name": "{{recipient_account_name}}",
          "bic": "{{provider_code}}"
        },
        "amount": 5000000,
        "currency": "PHP",
        "provider": "instapay",
        "description": "Payment to supplier",
        "callback_url": "https://your-domain.com/webhooks/paymongo"
      }
    ]
  }'
📘

Info

amount is in cents. PHP 50,000 = 5000000.

source_account.bic is always PAEYPHM2XXX for PayMongo wallets. Find your wallet_account_number in the Dashboard or via GET /v2/wallets/{{wallet_id}}.

The response includes a transfers array. Use transfers[0].id to track the individual transfer.

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 Transfer by the transfer ID returned in the create response:

curl https://api.paymongo.com/v2/transfers/{{transfer_id}} \
  -u {{secret_key}}:

Additional reading

For more info on what you can do with our API, see our full Transfers API documentation.


Transfer statuses

StatusMeaningWhat to do
pendingAccepted by PayMongo, not yet confirmed by the railWait — allow up to 20 min for InstaPay, up to one banking day for PESONet
succeededFunds credited to the recipientConfirm delivery with your recipient if required. No further action needed.
failedTransfer did not completeCheck the error reason and retry once resolved
🚧

Note

A pending status is not an error condition. Do not retry a pending transfer — 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.