Fonepay has one of the widest bank-app reaches of any single payment method in Nepal: its Dynamic QR can be scanned by almost any Nepali bank or wallet app, and confirmation is instant with no redirect. If you are building a checkout, adding Fonepay is one of the highest-impact things you can do. This guide explains how Fonepay works for developers, what a direct integration involves, and the simpler path that also gives you eSewa and Khalti.
Last verified: 30 August 2026, against Fonepay's published business, settlement, and FAQ pages. Fonepay's public site explains merchant QR well and the API only in outline: Dynamic QR access is requested from Fonepay directly, and the public pages say nothing about credentials, callbacks, or a sandbox, which is why developers keep asking the same questions in public. The answers below are the ones we could verify.
What Fonepay is, for developers
Fonepay is a major Nepali payment network, licensed by Nepal Rastra Bank as a Payment System Operator. For an online checkout, the piece you care about is the Dynamic QR: you generate a QR code for a specific amount and order, the customer scans it with their own bank or wallet app, and you get a confirmation once they pay. There is no wallet balance to top up and no redirect away from your site.
What a direct Fonepay integration involves
Going straight to Fonepay is doable, but it is more than a single API call:
- Merchant onboarding, then a separate Dynamic QR request. You enrol as a Fonepay QR merchant through your bank or Fonepay's online enrolment form; Dynamic QR is a separate request to Fonepay, and Fonepay's public pages do not describe what you receive after it or how.
- Generating a Dynamic QR per transaction. For each order you build a QR request with the amount and order details, authenticated with the merchant credentials you were issued.
- Handling the result server-side. When the customer pays, you confirm the payment on your server before you treat the order as paid. Never rely on what the browser shows.
- Doing it all again for eSewa and Khalti. Each provider has its own onboarding, credentials, and signing scheme, so a "one wallet" integration does not cover the customers who use a different one.
On fees, there is a common question worth clearing up: there is no separate "Fonepay API cost" to pay per call. Fonepay's published merchant-QR schedule is Rs 0 per transaction, and your commercial terms are agreed with Fonepay through your bank. Two things do carry charges: instant settlement (Rs 5 per settlement, Fonepay's published price) and card-funded QR payments (a small percentage set by your acquiring bank).
Settlement: when the money reaches your bank
Fonepay publishes this, so here it is in one place:
| Option | Price | What happens |
|---|---|---|
| Multi-session settlement | Free | Three scheduled settlements a day into your bank account |
| Instant settlement | Rs 5 per settlement | Each payment settles on its own, as it happens |
| On-request withdrawal | Free | Withdraw to your bank whenever you want from the Business app; whatever is left settles automatically at the end of the day |
Which of these your account is set to depends on how it was configured when you enrolled, so ask your bank or Fonepay in writing. Fonepay settlement options goes deeper.
Becoming a Fonepay merchant first
The API is useless without a merchant account, and that is where most delays happen. Fonepay QR itself is free to accept and the network claims over 1.7 million merchants. Enrolment is either through your bank ("reach out to your bank to register for Fonepay QR", in Fonepay's words) or through Fonepay's online merchant enrolment form. Dynamic QR is a separate step: Fonepay's business page asks you to email them with the subject "Request for Dynamic QR" or call 01-5970044, and nothing public describes the credentials or a test environment, so ask for both in that first message. The walk-through, including what the portal and the Business app do, is in Fonepay merchant registration.
The simpler path: one API for Fonepay, eSewa, and Khalti
Instead of building and maintaining three separate provider integrations, you can accept all of them through PayBridgeNP with a single API. You create one checkout session and either let the customer pick their method or send them straight to Fonepay:
import { PayBridgeNP } from "@paybridge-np/sdk";
const paybridge = new PayBridgeNP({ apiKey: process.env.PAYBRIDGENP_API_KEY });
// Create a checkout and send the customer straight to Fonepay
const session = await paybridge.checkout.create({
amount: 100000, // NPR 1,000.00, in paisa
currency: "NPR",
provider: "fonepay",
flow: "redirect",
returnUrl: "https://yourstore.com/order/confirm",
customer: { name: "Ram Sharma", email: "ram@example.com" },
});
// Send the customer to session.checkout_url
// Confirm the payment from the webhook, never from the return URL
console.log(session.checkout_url);
Drop the provider and flow fields and the customer gets a hosted page where they choose between Fonepay, eSewa, and Khalti themselves. Either way, it is one integration, one dashboard, and one set of webhooks. Every payment settles straight to your own provider merchant accounts, because PayBridgeNP never holds your funds.
Building your own QR checkout
If you want the Fonepay QR embedded inside your own checkout UI rather than a hosted page, PayBridgeNP has a Direct QR API that returns an embeddable QR plus a live event stream, so your page can update the moment the customer pays.
Confirming a Fonepay payment correctly
This is the part most tutorials get wrong. A customer landing back on your success page is not proof that they paid: anyone can open that URL. Confirm the payment on your server first, using a signed webhook or by reading the payment back from the API. We cover exactly how to do this in confirming payments and verifying webhooks.
Next Steps
- See the Fonepay provider page for setup, pricing, and going live, or check live Fonepay status.
- Read the developer API guide for the full request and response shapes.
- Learn how to confirm payments and verify webhooks so you never mark an order paid by mistake.
- Get your API keys in the PayBridgeNP dashboard and try the full flow in sandbox mode. The eSewa and Khalti sandboxes are genuinely free test environments. Sandbox-mode Fonepay is different: it uses your real Fonepay credentials and moves real money, so PayBridgeNP caps it at Rs 1,000 per payment and Rs 5,000 per month to keep test costs tiny.
Related Articles
- Nepal Payment Gateway API: Integration Guide for Developers
- eSewa vs Khalti vs Fonepay: Which to Accept?
- Confirming Payments in Nepal: Verify Webhooks, Don't Trust the Redirect
- Fonepay Merchant Registration: QR, Portal, API and Costs (2026)
- Ask Claude or ChatGPT about your eSewa, Khalti, and Fonepay payments