DeveloperPayment gatewayNepal

Fonepay API Integration in Nepal: A Developer's Guide

How Fonepay's Dynamic QR payments work, what integrating Fonepay actually involves, and how to accept Fonepay through one API alongside eSewa and Khalti.

July 18, 2026Updated August 30, 20266 min readPayBridgeNP Team
Fonepay API Integration in Nepal: A Developer's Guide

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:

  1. 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.
  2. 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.
  3. 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.
  4. 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:

OptionPriceWhat happens
Multi-session settlementFreeThree scheduled settlements a day into your bank account
Instant settlementRs 5 per settlementEach payment settles on its own, as it happens
On-request withdrawalFreeWithdraw 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


Ready to accept payments in Nepal?

Connect eSewa, Khalti, and Fonepay with a single API. Free to start, with no fund-holding and no new bank accounts.