Live in Pakistan · settling payments right now

Take payments the way Pakistan actually pays.

One API for EasyPaisa and JazzCash — collections and payouts. No bank integration, no paperwork stack, no waiting months for approval. Get your keys today and take a real payment this afternoon.

EP EasyPaisa JC JazzCash · No setup fee  ·  No monthly fee  ·  Pay only when money moves
Balance +2,412.50Settled to your account
Webhook delivered200 OK · 180 ms
pay.pakpay.org
Paying Ali Traders
PKR 2,500.00
Order INV-10428
Choose how to pay
EP EasyPaisaPay from your wallet
JC JazzCashPay from your wallet
Continue to pay PKR 2,500.00
Waiting for approval
Confirm the payment in your EasyPaisa app
Payment successful
Settled to Ali Traders in 41 seconds
AmountPKR 2,500.00
PAKPAY fee (3.5%)− 87.50
Credited to balance PKR 2,412.50
0
Payments processed
0
Volume settled
0
Active merchants
0
Median settlement
How it works

Four calls and you are taking money

Your server creates a payment, we host the checkout, the customer pays from their wallet, and we tell your server the moment the money lands.

1 · Create the payment

POST an amount and your own order ID. You get back a hosted checkout URL, ready to open.

2 · Customer pays

A clean PAKPAY page takes them to EasyPaisa or JazzCash. Nothing sensitive touches your server.

3 · We notify you

A signed JSON webhook hits your endpoint the instant it confirms. Retried for six hours if you are down.

4 · Withdraw anytime

Your balance builds up in the panel. Send it to your own wallet number — automatically.

Built for developers

One request in. One webhook back.

No SDK to install, no OAuth dance, no sandbox that behaves differently from production. Sign your parameters, POST them, redirect the customer. That is the whole integration.

  • HMAC-SHA256 signed both directions
  • Idempotent — retry safely with the same order ID
  • Optional IP whitelist per merchant
  • Every request visible in your panel logs
Full API reference
curl -X POST https://pakpay.org/api/v1/create.php \
  -d api_key=pk_live_xxx \
  -d order_id=INV-10428 \
  -d amount=2500.00 \
  -d return_url=https://yourstore.pk/thanks \
  -d sign=$SIGN

# { "status": true,
#   "payment_url": "https://pakpay.org/pay/?t=…",
#   "fee": 87.50, "net_amount": 2,412.50 }
$p = [
    'api_key'    => PAKPAY_PUBLIC,
    'order_id'   => 'INV-10428',
    'amount'     => '2500.00',
    'return_url' => 'https://yourstore.pk/thanks',
];
ksort($p);
$q = [];
foreach ($p as $k => $v) $q[] = "$k=$v";
$p['sign'] = hash_hmac('sha256', implode('&', $q), PAKPAY_SECRET);

$r = json_decode(file_get_contents(
    'https://pakpay.org/api/v1/create.php', false,
    stream_context_create(['http' => [
        'method'  => 'POST',
        'header'  => 'Content-Type: application/x-www-form-urlencoded',
        'content' => http_build_query($p),
    ]])
), true);

header('Location: ' . $r['payment_url']);
import crypto from 'node:crypto';

const p = {
  api_key:    process.env.PAKPAY_PUBLIC,
  order_id:   'INV-10428',
  amount:     '2500.00',
  return_url: 'https://yourstore.pk/thanks',
};

const base = Object.keys(p).sort().map(k => `${k}=${p[k]}`).join('&');
p.sign = crypto.createHmac('sha256', process.env.PAKPAY_SECRET)
               .update(base).digest('hex');

const res = await fetch('https://pakpay.org/api/v1/create.php', {
  method:  'POST',
  headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
  body:    new URLSearchParams(p),
});

const { payment_url } = await res.json();
import hmac, hashlib, requests

p = {
    "api_key":    PAKPAY_PUBLIC,
    "order_id":   "INV-10428",
    "amount":     "2500.00",
    "return_url": "https://yourstore.pk/thanks",
}

base = "&".join(f"{k}={p[k]}" for k in sorted(p))
p["sign"] = hmac.new(
    PAKPAY_SECRET.encode(), base.encode(), hashlib.sha256
).hexdigest()

r = requests.post("https://pakpay.org/api/v1/create.php", data=p).json()
redirect(r["payment_url"])
Pricing

Work out exactly what you keep

No setup fee, no monthly fee, no minimum volume. Drag the slider — these are our real rates.

Payment amount
PKR 2,500
PKR 100PKR 100,000

Doing serious volume? Rates are set per merchant and we will review yours before you launch.

On a collection
Customer paysPKR 2,500.00
PAKPAY fee · 3.5% 87.50
You receive PKR 2,412.50
If you withdraw it
Withdrawal fee · 2% + 20 68.25
Lands in your wallet PKR 2,344.25
What you get

Everything a payments team asks for

Not a thin wrapper. A real gateway with a real ledger behind it.

Signed both ways

Every request you send is HMAC-SHA256 signed with your secret, and so is every webhook we send back. Optional IP whitelisting locks it down further.

A real ledger

Every rupee in and out is a ledger line with a running balance. Nothing about your money is a black box you have to email us about.

Retries that work

If your endpoint is down we retry after 1m, 5m, 15m, 1h and 6h — and you can replay any delivery by hand from the panel.

Failed payouts refund

If a withdrawal is rejected by the network, the full amount goes straight back to your balance. You are never left short.

Live dashboard

Volume, success rate, fees and settlement in one screen — filterable by date, wallet, status or customer number.

Keys you control

Rotate your secret key whenever you want. Nothing is emailed in plain text and nothing is stored where we can read it back.

Merchant panel

Watch the money as it moves

Included free with every account. No extra dashboard fee, no per-seat pricing.

pakpay.org/merchant
Available balance
PKR 184,320
Collected today
42,500
Lifetime
2.4M
Success rate
96%
OrderMethodAmountNetStatus
INV-10428EasyPaisa 2,500.002,412.50 Success
INV-10427JazzCash 7,900.007,623.50 Success
INV-10426EasyPaisa 1,200.00 Pending
INV-10425JazzCash 15,000.0014,475.00 Success
FAQ

Questions people actually ask

How fast can I go live?
If your business checks out, the same day. Message us, we create your account, and you get a public key, a secret key and the docs. The integration itself is one POST to create a payment and one endpoint to receive the webhook.
Do I need my own EasyPaisa or JazzCash merchant account?
No — that is the entire point. PAKPAY handles the wallet relationships, so you integrate once and get both.
When does the money reach me?
Your PAKPAY balance is credited the moment a payment confirms, usually inside a minute. You then withdraw that balance to your own EasyPaisa or JazzCash number whenever you like.
What happens if a payout fails?
The full amount goes straight back to your PAKPAY balance and you get a payout.failed webhook explaining why. You are never left short.
How do I know a webhook really came from you?
Every payload carries a sign field — an HMAC-SHA256 of the sorted payload using your secret key. Recompute it and compare before you credit anything. The docs show the exact code in four languages.
Can I test before going live?
Yes. Create small real payments against your keys and watch them flow through the merchant panel, then check the webhook delivery log to confirm your handler is behaving. There is no separate sandbox that lies to you.
What does it cost to start?
Nothing. No setup fee, no monthly fee, no minimum. You pay 3.5% when you collect and 2% + PKR 20 when you withdraw.

Ready to take your first payment?

Free account, no setup fee, and you keep your own wallet numbers.

Get a free merchant account Telegram @Emmie905