Hosted checkout
A fast, branded page that lets the customer pick their wallet. Mobile first, in Nepali and English, because that is where Nepal pays.
A product company in Kathmandu. We take the problems Nepali businesses live with every day and build the software properly: payments first, education next.
Chapter 01
eSewa wants a base64 payload. Khalti wants a pidx handshake. Fonepay wants an HMAC-SHA512 over nine fields in a fixed order. None of them agree on what "paid" means.
Return URLs, verification calls, retries, reconciliation spreadsheets. The work is identical from one merchant to the next, and nobody gets to keep it.
One API, one hosted checkout, one webhook contract, one reconciliation view. The wallets stay where they are. The mess does not.
Chapter 02 · Milaap
Amount, reference, return URL. Milaap answers with a checkout link. Idempotency keys mean a retry can never charge twice.
A hosted checkout, mobile first, in Nepali and English. Each wallet's redirect, signing and return handling is ours to maintain, not yours.
A browser redirect is not proof. Milaap confirms every payment with the wallet server-to-server before it is marked successful.
A signed webhook, retried on failure, and a ledger your finance team can reconcile against the wallet's settlement file.
Milaap · Capabilities
Milaap works with every major wallet in Nepal
Chapter 03 · Products
One integration for every wallet in Nepal: hosted checkout, a single API, signed webhooks and automatic reconciliation. In early access with partners today.
Admissions, fees, attendance, results and parent communication in one place. Fee collection runs on Milaap. Live soon.
We are talking to cooperatives, clinics and logistics teams about the tools they wish existed. If your sector runs on spreadsheets and phone calls, tell us.
Chapter 04 · Trust
Every payment is confirmed with the wallet server-to-server before it is marked paid. The browser is never trusted with money.
Wallet credentials are encrypted with AES-256-GCM under a key held outside the database, and never displayed again. Not to support, not to us.
Payment events and admin actions are append-only. What you see in a dispute is what happened, in the order it happened.
Hosted in-country, with retention and access designed around NRB expectations. Milaap never holds your funds; wallets settle to your own bank. [CONFIRM WITH NRB / LEGAL ADVISER]
Chapter 05 · Developers
Predictable resources and one request shape. Create a payment, redirect, get a result. Whichever wallet the customer chose.
Every wallet has a simulator, so you can test success, failure and expiry without real money. Retry a request safely and you get the same payment back, never a duplicate.
Typed events, an HMAC signature on every delivery, retries on failure. payment.succeeded, payment.failed, payment.expired. Nothing else to guess at.
# Create a payment and get a checkout URL
curl https://api.milaap.app/v1/payments \
-H "Authorization: Bearer sk_test_••••••••" \
-H "Idempotency-Key: order_8841" \
-d amount=245000 \
-d currency=NPR \
-d reference="order_8841" \
-d return_url="https://shop.example/thanks"
# → 201 Created
{
"id": "pay_01JCK9Q2W3X4Y5Z6A7B8C9D0E1",
"status": "created",
"checkout_url": "https://pay.milaap.app/c/pay_01JCK9…"
}
import Milaap from "@milaap/node";
const milaap = new Milaap(process.env.MILAAP_SECRET_KEY);
const payment = await milaap.payments.create({
amount: 245000, // paisa
currency: "NPR",
reference: "order_8841",
returnUrl: "https://shop.example/thanks",
}, { idempotencyKey: "order_8841" });
res.redirect(payment.checkoutUrl);
// Verify NP-Signature: t=<unix>,v1=<hmac>
import { createHmac, timingSafeEqual } from "node:crypto";
function verify(body, header, secret) {
const { t, v1 } = Object.fromEntries(
header.split(",").map((kv) => kv.split("="))
);
const expected = createHmac("sha256", secret)
.update(`${t}.${body}`).digest("hex");
return timingSafeEqual(Buffer.from(v1), Buffer.from(expected));
}
Chapter 06 · Pricing
No setup fee, no monthly minimum to start. Wallet fees are charged by the wallet and passed through at cost.
Free
Build and test with every wallet simulator. No card, no contract.
1.2% + NPR 2 per successful payment
For shops, services and SaaS going live with digital payments.
Custom
Volume pricing, SLAs and dedicated support for platforms and marketplaces.
Indicative pricing while Milaap is in early access. Final rates are confirmed in your agreement before go-live.
FAQ
No. Each wallet settles directly into the bank account on your merchant agreement with that wallet. Milaap sees the payment, not the funds.
Yes. You keep your own merchant agreements and rates with each wallet. Milaap connects to them with your credentials and removes the integration work.
The checkout shows the wallet as unavailable and the others stay live. Pending payments are re-checked with the wallet until they resolve or expire.
Yes. Payment links are created in the dashboard and shared anywhere. The API is there when you are ready for a deeper integration.
Milaap is in early access with a full sandbox. Production onboarding is being done partner by partner. Ask us and we will tell you plainly where we are.
Chapter 07 · Company
Nuvora Labs
We started with payments because taking a digital payment in Nepal should be as easy for a shop in Pokhara as it is for a startup in Bengaluru. Kampus is next, and the lab does not stop there.
We are small on purpose. The people who designed the system run it in production.
Milaap is launching soon: one integration for eSewa, Khalti, connect IPS and Fonepay. Kampus follows, for schools and colleges.
Enquiries open when Milaap launches.