Simulate Bank Transfers

The simulator works only in the test environment. No real money is moved, and it cannot be used with live (production) account numbers.

When you integrate Paga Engine, your customers pay you by sending a bank transfer to an account number you generated for them. In the test environment there is no real bank behind those account numbers, so you can't make a real transfer to test your integration.

The Bank Transfer Simulator solves this. It lets you pretend to be a customer sending money to a test account number, so you can see exactly what your system receives when a real payment comes in.

Open Bank Transfer Simulator


When to use it

Use the simulator to test any Paga Engine flow where a customer pays by bank transfer, for example:

  • Persistent Payment Accounts – a dedicated account number assigned to a customer that they can pay into any time.
  • Payment Requests – a one-time account number generated for a specific payment or invoice.
  • Checkout Gateway Transfer – a one-time account number generated for a specific payment on Paga Checkout Gateway

It's especially useful for checking that:

  • your webhook / callback URL receives payment notifications correctly,
  • your system credits the right customer with the right amount,
  • you handle underpayments, overpayments, and duplicate payments the way you expect.

Before you start

Make sure you have:

  1. A test (sandbox) account on the Paga Developer Portal. - beta-business.paga.com
  2. Your test API credentials (public key, secret key, and hash key).
  3. A test account number generated through the Paga Engine API — for example, by calling Register Persistent Payment Account or Request Payment in the test environment.
  4. A callback URL configured for your test business, so you can receive the payment notification.
💡

Tip: If you're testing locally, use a tunnelling tool (such as ngrok) to expose your local server so Paga can reach your callback URL.


How to simulate a bank transfer

Step 1: Generate a test account number

Use the Paga Engine API in the test environment to create an account number. Save the accountNumber returned in the response — this is what your "customer" will pay into.

Step 2: Open the simulator

Go to

Open Bank Transfer Simulator

Step 3: Fill in the transfer details

FieldWhat to enter
Recipient Paga account numberThe test account number from Step 1.
AmountThe amount the customer is "sending", in Naira (e.g. 5000).
CurrencyNGN
Sender bankSelect Access Bank
Narration (optional)A short description, e.g. Invoice 1023.

Step 4: Submit

Click Trigger Deposit. The simulator behaves as though a real bank transfer just arrived in that account.

Step 5: Check your integration

Within a few seconds you should see:

  • A payment notification sent to your callback URL.
  • The transaction showing in your test dashboard / transaction history.
  • Your own system updating the customer's balance, order, or invoice (if your integration handles this).

Test scenarios worth trying

ScenarioHow to simulate itWhat to check
Exact paymentSend the exact amount requested.Payment is marked as complete.
UnderpaymentSend less than the requested amount.Your system handles partial payment correctly.
OverpaymentSend more than the requested amount.Extra amount is handled as you intend.
Repeat paymentSend twice to the same persistent account.Both payments are credited; no duplicates are lost.
Duplicate notificationRe-trigger or replay the same callback.Your system doesn't credit the customer twice (use the transaction reference to de-duplicate).
Invalid accountEnter an account number that doesn't exist.The simulator shows an error; nothing is sent to your callback.

Troubleshooting

I didn't receive a callback.

  • Check that your callback URL is set correctly for your test business.
  • Make sure the URL is publicly reachable (not localhost without a tunnel).
  • Confirm your server returns an HTTP 200 response quickly.

The simulator says the account number is invalid.

  • Make sure the account number was generated in the test environment, not live.
  • Check it was created with the same business/credentials you're testing with.

The amount in my system is wrong.

  • Confirm you're reading the amount field from the notification and not a value stored from the original request.

Going live

Once everything works with the simulator:

  1. Switch to your live API credentials and base URL.
  2. Update your callback URL for the live environment.
  3. Make a small real transfer to confirm everything works end to end.

Need help? Contact the Paga integrations team.