PayFlow

Money arrives while you are still reading this.

PayFlow takes JazzCash and EasyPaisa payments from your own checkout — one signed API call, one dashboard, one settlement into your bank account. No bank integration project, no monthly fee.

10%
per completed payment.
Nothing monthly, nothing to start.
2
API calls end to end.
Or one, and a redirect.
3 days
to your bank account,
itemised line by line.

Three ways to be paid, one integration

Every method below is the same two API calls: create a payment, then charge it. Rupees only, for now.

JazzCash

The customer approves the payment on their handset. You are told the moment they do.

EasyPaisa

Same flow, same API call, one different endpoint. Nothing else in your integration changes.

Scan to pay

A QR code any wallet app can read — for a counter, an invoice, or a printed bill.

One percentage, and nothing underneath it

Taken from each completed payment. Nothing on failed payments, nothing monthly, nothing to start.

10%

per completed payment, in rupees. The rate is snapshotted onto the payment when it completes, so a change never reaches one already taken.

On a 10,000 rupee sale

worked live
Customer pays
PKR 10,000.00
Our fee
PKR 1,000.00
You receive
PKR 9,000.00

Both figures appear on every payment in your dashboard and on every statement, so a settlement can be checked line by line. Completed payments are gathered into a statement and settled to your bank account on a 3-business-day cycle.

It works with what you already have

Plain REST over HTTPS, JSON or form-encoded, signed with HMAC-SHA256. No SDK to install, no library to keep up to date, nothing that has to run on your server but a POST.

Sign the request

Join the values with a pipe, in the documented order, and sign the result with your API secret.

$string = "PGW-M-000123|1999.99|PKR|ORDER-4417|buyer@example.com|1757000000";
$signature = hash_hmac('sha256', $string, $secret);

Any language with an HMAC function does this in two lines. The reference publishes a signing string, a secret and the digest they produce, so you can prove your implementation before you send a live request.

Or send them to our page

Create the payment and redirect. The checkout is ours to keep working on every handset — wallet choice, mobile number, confirmation and the wait, all of it.

POST /api/v1/payments/
→ { "checkout_url": "…/pay/PGW-…" }

Redirect the customer there.

The page holds a payment open for 25 minutes, then expires it. You are told the outcome by webhook either way, so you never have to guess.

Questions

The ones support is asked most, answered without a hedge.

Which currencies can I charge in?

Pakistani rupees only. The API rejects anything else outright rather than converting it, so there is never a question about what a customer was charged.

Do I have to build a payment page?

No. Create the payment and redirect the customer to the checkout we host; it handles wallet choice, the mobile number, the confirmation wait and the result. If you would rather keep the customer on your own site, call the charge endpoints yourself — both routes use the same API.

How do I know a payment actually succeeded?

We send you a signed webhook the moment a payment reaches a final state, and retry it if your server does not acknowledge. The status endpoint is always authoritative, so a missed webhook is never a lost payment. One rule matters: a 202 means the customer has not approved it yet. Wait for completed before you release anything.

When do I get my money?

Completed payments are gathered into a statement and paid out to your verified bank account on a rolling cycle, currently 3 business days. Every statement itemises the payments in it alongside the fee taken, so it reconciles against your own records without a phone call.

What do you need to verify my business?

Your CNIC, your business details, and the bank account you want to be paid into. Until that is done and approved your account can sign in and read the docs, but payments are declined — we will not take money we have no verified way to send onward.

Is there a sandbox I can test against?

Not yet, and we would rather say so than point you at something that does not exist. Two things make the first integration safe anyway: the reference page publishes a real signing string, secret and digest so you can verify your HMAC before you send a single request, and a payment you create but never charge costs nothing and expires by itself.

What if my server is down when a webhook arrives?

We try 3 times, spaced out over the following minutes. After that the delivery is left recorded as failed and the payment is unaffected — ask the status endpoint whenever you come back up.

Still unsure about something? support@payflow.com reaches a person.

Start taking payments this week

Create the account now and read the reference while you wait for verification. Nothing is charged until you take your first payment.

Create an account

Already with us? Sign in · Terms · Privacy