Khalti vs eSewa for SaaS billing: integration, coverage and verification
A practical comparison for engineering teams: KPG-2 initiate/lookup vs ePay v2 form + HMAC, which banks you reach, and how each payment must be verified before you mark anything paid.

You will end up integrating both. The useful question is how they differ in the places that bite: coverage, flow and verification.
Coverage
eSewa is a wallet: the customer pays from their eSewa balance or a linked bank. Khalti is a wallet and an aggregator: its KPG-2 checkout can open Khalti wallet, e-banking or mobile banking at a partner bank, connectIPS or SCT. Khalti exposes the live bank list at `/api/v5/bank/` (e-banking and mobile-checkout variants), which is why a checkout can say “pick your bank” and send the customer straight to Nabil or NIC Asia.
Flow
Khalti KPG-2 is server-initiated: POST `/api/v2/epayment/initiate/` with amount, order and return URL; you get a `pidx` and a `payment_url`; after the customer returns you call `/api/v2/epayment/lookup/` with the pidx. eSewa ePay v2 is a signed form post: you compute an HMAC-SHA256 over `total_amount,transaction_uuid,product_code`, redirect to the form endpoint, and eSewa redirects back with a base64 payload whose signature you must recompute and compare.
Verification is where projects go wrong
Neither return URL is proof of payment. For Khalti, treat `lookup` as the source of truth. For eSewa, verify the response signature and call the status-check endpoint if the callback is late or the amount formatting differs — a known gotcha is that eSewa serialises `1000.0` as a JSON number, so re-encoding it before hashing yields a different HMAC. Tola Pay verifies both server-side before an invoice is marked paid; your code never sees a gateway.
Fees and settlement
Both charge a per-transaction service fee set in the merchant agreement (Khalti also notes a one-time API charge and free transfers from the merchant dashboard to your bank). Neither publishes per-merchant rates; get them in writing from your account manager and model them per rail.
Which to lead with
Show both and let the customer decide. In practice Khalti wins for bank-account payers (because of the bank channels) and eSewa for wallet-first consumers. A hosted checkout that renders both — plus cards for foreign buyers and bank transfer for B2B — removes the choice from your roadmap.
Payments · 28 Oct 2026
Payments · 24 Oct 2026
Engineering · 5 Oct 2026