
Take the payment.Skip the screenshot.
Customers pay from their own bank app. Your bank's alert confirms the order in seconds.
- 92%
- of payments use no card
- 40–50%
- fewer returns when prepaid
Customers pay from the app they already have: 46 banks, wallets and microfinance banks. You receive into NayaPay or Meezan.
Three things break selling online in Pakistan. DPay was built for all three.
The sale dies between “advance bhejo” and “screenshot verify ho gaya”.
Someone finds you on Instagram, moves to WhatsApp, and wants the thing. Then it starts: send PKR 250 advance, send the screenshot, wait while somebody opens the bank app and looks for it. By the time you answer, they have cooled off, and a screenshot is the cheapest thing on the internet to fake, so sometimes you ship for free.
You send one link instead. They pay from their own bank app, and your bank's own alert, never their screenshot, confirms the order in seconds. Nobody waits, and nothing can be edited in Photoshop.

Your customer never has to reach for a debit card. Neither do you.
Most people here never use a card online. Only 8% of Pakistani e-commerce payments actually go through one; the other 92% move by wallet or bank account, from the app already open on their phone. Put a card form in front of them and most are gone before they start. And to show that form at all you would need a merchant account, paperwork, and a cut of every sale.
Your customer opens the bank or wallet app they already use and transfers. No card, no card details typed, no new account to create. DPay is a checkout for how Pakistan actually pays: 46 banks and wallets, no merchant account and no percentage of your sales, with the money landing in your own NayaPay or Meezan account.
Source: State Bank of Pakistan, e-commerce payments by channel.

A COD order that travels both ways is not an order. It is a bill.
Cash on delivery is around two thirds of Pakistani e-commerce, and a quarter of those parcels come back: wrong address, nobody home, or an order that was never real. You pay the courier out, you pay the courier back, and the stock returns opened or not at all.
Ask for PKR 100–200 as a confirming advance. Someone who transfers is a real buyer, and prepaid orders come back 40–50% less often. DPay makes that advance a single link, verified before the parcel moves. The advance is not the sale, it is the filter.
Source: Reported Pakistani COD return rates and prepaid comparisons, 2025.

One request in. One webhook out. The bank does the rest.
Your server posts an amount and a description. DPay returns a hosted checkout URL and a reference like DPAY-8F4K29.
They choose which bank or wallet they are paying from, see your receiving account and the exact amount, and transfer as they normally would.
It searches your connected inbox for that bank's notification inside the payment window, parses it, and runs the six required checks.
A signed payment.succeeded webhook reaches your server. Fulfil the order. If anything is unclear, the payment waits for your review instead of guessing.
curl https://dpay.com.pk/api/v1/payment_sessions \
-H "Authorization: Bearer dpay_live_sk_…" \
-H "Idempotency-Key: ORD-1042" \
-d '{ "amount_decimal": "18500",
"description": "Chelsea boots, tan, 42",
"order_id": "ORD-1042",
"customer": { "email": "ayesha@example.pk" },
"success_url": "https://yourstore.pk/thanks" }'
→ { "id": "dpay_ps_x7k2…", "status": "awaiting_payment",
"reference": "DPAY-8F4K29",
"checkout_url": "https://dpay.com.pk/pay/dpay_ps_x7k2…" }DPay-Signature: t=1788950400,v1=6f1c…e2a9
DPay-Event-Id: evt_k3m9x1qv7a2p
{ "type": "payment.succeeded",
"data": { "object": {
"id": "dpay_ps_x7k2…", "status": "succeeded",
"amount": 1850000, "order_id": "ORD-1042",
"provider": "nayapay",
"verification": { "status": "matched", "confidence": 0.94,
"matched_signals": ["merchant_account", "amount",
"time_window", "provider", "customer_bank"] }
} } }Six things must be true. Amount alone never approves a payment.
The one mistake a payment gateway cannot make is shipping something nobody paid for. So every required check has to pass on a single bank credit, and that credit is then locked to the order, so it can never be claimed twice.
The customer's declared bank and last 4 digits are bonus signals: they raise confidence and break ties, but never approve a payment on their own.

Not just a checkout. The whole back office, built around bank transfer.

Name your business, add the NayaPay or Meezan account you already have, and connect the inbox its alerts arrive in. No merchant account, no paperwork, no waiting for approval.

Put your logo, your colour and a line of trust on the page your customers pay on, so what they land on looks like what they came from.

An invoice goes out with its PDF attached the moment you create it. When the transfer lands, it marks itself paid and the receipt reaches your customer.
- Hosted checkout
A page you send or redirect to. The customer picks their own bank, sees your details and a reference, and pays from their own app.
- Your brand on the checkoutGrowth and Scale
Your logo, your accent colour and a line of trust: an official number, or the year you opened. A page that looks like the shop they came from is a page people finish paying on.
- Payment links
Reusable links for a product or a price. Every open is a fresh checkout with its own reference.
- Invoices
Line items, sequential numbers, a due date and a hosted page with one Pay button. Paid invoices mark themselves.
- Subscriptions
Recurring billing without a card: an invoice goes out every month and the customer pays it by transfer.
- Customers
Built automatically from every verified payment that carried an email: totals, history, the bank they pay from.
- Analytics
Volume by day, success rate, checkout funnel, verify time per provider, where customers pay from.
- Webhooks
Signed with HMAC-SHA256, retried for six hours, deduplicated by event id. Your order confirms itself.
- An API your AI can read
One reference that is also llms.txt and a copy-paste prompt for Claude or Cursor, so you can integrate in an afternoon.
The whole product on every plan. Pay for payments, not a percentage.
No percentage of your sales, no card on file. Plans run 30 days and you pay for them the way your customers pay you: by transfer. Higher plans raise the limits, unlock live API keys, and from Growth put your own brand on the checkout.
Try DPay with real payments
- 25 payments a month
- 1 receiving account
- Test API keys
- DPay-branded checkout
- Checkout, links, invoices, subscriptions, analytics
For a shop taking orders every day
- 500 payments a month
- 2 receiving accounts
- Live API keys and webhooks
- DPay-branded checkout
- Checkout, links, invoices, subscriptions, analytics
For a store that has found its market
- 2,500 payments a month
- 5 receiving accounts
- Live API keys and webhooks
- Your logo and colour on the checkout
- Checkout, links, invoices, subscriptions, analytics
For platforms and high-volume sellers
- 10,000 payments a month
- Unlimited receiving accounts
- Live API keys and webhooks
- Your logo and colour on the checkout
- Checkout, links, invoices, subscriptions, analytics
Full details, limits and how billing works on the pricing page.
REST over JSON, bearer keys, signed webhooks. Integrate in an afternoon.
Idempotent creates, cursor pagination, and webhooks signed with HMAC-SHA256 and retried for six hours. Test keys and a sandbox let you run a full payment end to end without moving money. The whole reference is published as llms.txt, and the Developers page generates a ready-to-paste integration prompt for Claude or Cursor with your test key already in it.
const { t, v1 } = parse(req.headers["dpay-signature"]);
const expected = hmacSHA256(secret, `${t}.${rawBody}`);
if (!timingSafeEqual(expected, v1)) return 400;
if (event.type === "payment.succeeded") fulfil(event.data.object.order_id);Designed so there is nothing to steal, delay or lose.
Money moves bank to bank. DPay has no wallet, no balance, no payout schedule, and no ability to move your money.
Gmail access is read-only and searched only for alerts from known bank senders inside each payment's window. Nothing else is read.
Inbox tokens are AES-256-GCM encrypted. API keys are stored as SHA-256 hashes and shown once. Full account numbers never leave checkout.
Every event is HMAC-SHA256 signed with a timestamp, retried with backoff, and carries an idempotency id.
Straight answers.
Does DPay hold my money?+
No. Customers transfer directly from their bank or wallet into your own NayaPay or Meezan account. DPay only reads the bank's alert to confirm it arrived. There is nothing to settle and nothing to withdraw.
Which banks can my customers pay from?+
Any of the 46 Pakistani banks, wallets and microfinance banks in the checkout: Easypaisa, JazzCash, SadaPay, HBL, UBL, Meezan and the rest. They pay from the app they already use; the money lands in your account.
How fast is verification?+
It depends on how fast your bank emails you. NayaPay alerts arrive within seconds, so payments confirm within seconds. Meezan's alerts take three to five minutes. DPay checks every few seconds while the customer waits.
What if two customers pay the same amount at the same time?+
DPay will not guess. It marks the payment as needing review and shows you both transfers; you pick the right one with a click. A single bank credit can only ever be matched to one order.
Do I need a card machine, a merchant account or paperwork?+
No. You need a NayaPay or Meezan account that receives money and the Gmail inbox its alerts arrive in. Setup takes a few minutes.
What does it cost?+
Free covers 25 payments a month with test API keys. Paid plans start at PKR 1,500 for 30 days and raise the monthly limit; every plan includes every feature. You pay for DPay the same way your customers pay you: by transfer.
How do refunds work?+
Because DPay never holds funds, a refund is a transfer from you back to your customer, from your own bank. DPay gives you the verified record to work from. Our own plan fees have a 7-day refund window; see the refund policy.
Take your first verified payment today.
A NayaPay or Meezan account, the Gmail its alerts arrive in, and five minutes. The Free plan is enough to see it work.