Money leaving an OPay wallet rides public rails — Raast, the State Bank of Pakistan's instant payment system, plus the 1-Link interbank network for bank transfers and bill collection. The account itself opens against a single mobile number and, from that point, keeps a running ledger: every top-up, utility bill, P2P send and PayPak card swipe lands in one authenticated history. That ledger is the thing most teams want out of OPay. Reaching it cleanly is an interface-integration job, and it is the kind of job we ship as runnable source.
The short version: the wallet's per-user records are structured and consistent, and the counterparty detail on transfers is unusually rich because Raast and IBAN identifiers travel with each send. We read the consented session the way the app's own client does, normalize what comes back, and hand you the result as code plus documentation. The route below that we would actually run is the protocol-analysis one — it is the only path that reaches the full ledger with counterparty detail intact.
What the OPay wallet actually stores
These map to surfaces a user can already see inside the app. Field names are confirmed against the live session during the build; the domains and granularity below come from the app's own description and screens.
| Data domain | Where it surfaces in OPay | Granularity | What an integrator does with it |
|---|---|---|---|
| Wallet balance & account | Home / wallet screen | Real-time, per account in PKR | Show live balance, reconcile against an internal ledger |
| Transaction ledger | Activity / history | Per entry, timestamped, typed | Statement export, bookkeeping sync, dispute lookups |
| Money transfers | Send money flow | Per transfer with counterparty IBAN, Raast ID or wallet handle | Payout reconciliation, beneficiary records |
| Mobile load & bundles | Top-up screen | Per purchase by operator (Telenor, Zong, Ufone, Jazz) | Expense categorization, recharge audit |
| Utility & government bills | Bill payment (via 1-Link PSID) | Per bill with biller and consumer number | Accounts-payable reconciliation, receipt archive |
| PayPak debit card | Card section | Per card transaction within Pakistan | Card-statement sync, spend monitoring |
| Profile & KYC status | Account / profile | Per-user identity attributes | Onboarding checks, account-status gating |
Routes to the data
Three apply to OPay. Pakistan has no live open-banking mandate to consent through, so the practical work sits in the first two.
Protocol analysis of the consented session
We observe how the OPay client authenticates and calls its backend — the OTP step, the bearer token it carries, the balance and ledger requests — then reimplement those calls in your stack. This reaches everything in the table with counterparty detail intact. It is moderate effort up front and needs a re-validation pass when the app updates. Access is arranged with you during onboarding: the build runs against a consenting account you control, or a test number we agree on. This is the route we recommend, because it is the only one that returns the full typed ledger rather than a flattened view.
User-consented credential / session automation
Where you have the account holder's clear permission, we drive an authenticated session — the user supplies the OTP, we automate the reads inside that authorized session. Lower build cost, slightly less durable, and it depends on the consent staying current. Useful when one or a few accounts need pulling on a schedule rather than a fleet.
Native in-app records as a fallback
If a build only needs a periodic snapshot, the receipts and history a user can view in the app are a thin fallback we can capture and structure. It is the least complete option — query options are limited and backfill is shallow — so we treat it as a backstop, not the main path of an integration.
A look at the session flow
Illustrative shape of a balance-plus-ledger pull for OPay. Exact paths, headers and field names are confirmed against the live session during the build — this is the structure, not a contract.
# Illustrative only. Auth runs inside the account holder's
# consented session; the user provides the OTP.
POST /api/v1/auth/login
{ "msisdn": "+92XXXXXXXXXX", "device_id": "<bound>" }
-> 200 { "txn_ref": "...", "otp_required": true }
POST /api/v1/auth/verify-otp
{ "txn_ref": "...", "otp": "######" }
-> 200 { "access_token": "...", "refresh_token": "...",
"expires_in": 900 }
# wallet balance (Authorization: Bearer access_token)
GET /api/v1/wallet/balance
-> 200 { "currency": "PKR", "available": 0, "ledger": 0 }
# transaction ledger, cursor-paged
GET /api/v1/wallet/transactions?cursor=&limit=50
-> 200 { "items": [
{ "id": "...", "type": "P2P|BANK|TOPUP|BILL|CARD",
"amount": 0, "counterparty": "...", "raast_id": null,
"iban": null, "status": "SUCCESS", "created_at": "..." }
], "next_cursor": "..." }
# token nears expiry -> refresh; a 401 mid-run triggers
# a single re-auth, then the cursor read resumes.
The handling that matters here is the short token life and the typed ledger. We page on the cursor, refresh before expiry, and key entries on a stable id so a re-run does not double-count.
What lands with you
Concrete artifacts, each tied to a surface above:
- An OpenAPI / Swagger spec covering the auth, balance and ledger calls as we observe them on OPay.
- A protocol and auth-flow report: the OTP login, the bearer-token lifecycle, refresh behaviour and the 401 path.
- Runnable source for the key endpoints in Python or Node.js — balance read, cursor-paged ledger, transfer-record parsing with Raast ID and IBAN capture.
- A normalized schema that folds P2P, bank, top-up, bill and PayPak card rows into one transaction shape.
- Automated tests against recorded responses, so a later app change shows up as a failing test rather than silent drift.
- Interface documentation plus consent-and-retention guidance for running it under SBP-regulated, user-consented access.
You can take this as the source-code package and host it yourself, or call our hosted endpoints and skip the upkeep.
Where teams use this
- A bookkeeping or expense tool that needs a Pakistani wallet's spend and bill history folded in alongside bank feeds.
- A lender or BNPL underwriter reading a consenting applicant's OPay transfer and top-up cadence as an income signal.
- A merchant or marketplace reconciling OPay payouts and Raast receipts against its own order ledger.
- A personal-finance app pulling balance and categorized history for a user who banks mostly through their wallet.
What we plan for on an OPay build
The judgment calls that decide whether this holds up:
- Short-lived tokens. The session token expires inside minutes, so we design the sync around a refresh cycle and a single clean re-auth on a 401, rather than letting a long pull die halfway.
- Mixed counterparty identifiers. A transfer can carry an IBAN, a Raast ID (a mobile number linked to an IBAN at the SBP), or a wallet handle. We normalize all three into one counterparty field so downstream code does not branch on the rail.
- 1-Link as the bill source. Utility and government-fee payments are facilitated through OPay's aggregator partner, 1-Link, and PSIDs originate on official portals; we parse the biller and consumer-number detail OPay records without treating 1-Link's data as OPay's own.
- App updates. The client front end changes; we keep the recorded-response tests so a shifted field surfaces as a failure, and we re-validate the flow as part of maintenance.
Access, the consenting account or test number, and any paperwork are arranged with you as part of getting started — not a checklist you clear before we begin.
Consent and the SBP rulebook
OPay operates as an electronic money institution under the State Bank of Pakistan, and routes bill collection through 1-Link — both stated in its own Play listing and disclaimer. Pakistan's open-banking direction is still being shaped by the SBP, and the Personal Data Protection Bill 2023 remains a draft pending in the National Assembly, so there is no statutory data-sharing mandate to lean on yet. The dependable basis is the account holder's own authorization. We work to that: consent from the user whose wallet is read, consent records kept, access logged, data pulled down to what the integration needs and no more, with an NDA where the engagement calls for one. If a Pakistani open-banking or open-finance regime is finalized later, an integration built on documented session analysis is straightforward to re-point at it.
Pricing and how we ship
A working OPay integration takes us one to two weeks end to end. The source-code package — runnable endpoints, the OpenAPI spec, tests and interface docs — is from $300, paid after delivery, once you have it in hand and you are satisfied it works. If you would rather not host anything, call our endpoints and pay per call, with no upfront fee. Either way you hand us only the app name and what you need from its data; we work out the route and build it. Tell us what you need from OPay and we will scope it.
Screens we mapped
From the app's Play Store gallery — the surfaces the integration reads against. Tap to enlarge.
Other Pakistani wallets in the same field
OPay sits among a crowded set of Pakistani wallets and money apps. A single integration layer usually wants several of these normalized to one shape; named here for context, neutrally.
- JazzCash — the largest mobile-money wallet, holding balances, transfers and a wide biller catalogue.
- Easypaisa — Telenor-linked wallet and microfinance bank with savings, transfers and bill records.
- SadaPay — fee-light digital account popular with freelancers; cards and transfer history.
- NayaPay — newer wallet with virtual cards and per-transaction spend detail.
- UPaisa — Ufone's branchless wallet for transfers, top-ups and bills.
- Zindagi — a digital wallet aimed at everyday transfers and payments.
- UBL Omni — a bank-backed branchless banking wallet with agent and account records.
- HBL Konnect — HBL's branchless wallet for transfers, bills and cash points.
- X-Pay — a payment app used for online and wallet transfers in Pakistan.
Questions integrators ask about OPay
Can a build tell Raast transfers apart from card, top-up and bill activity in the OPay ledger?
Yes. The wallet history carries a type on each entry, so a normalized feed can split P2P and bank transfers (which route over Raast and 1-Link) from mobile top-ups, utility-bill payments and PayPak card activity. We confirm the exact type codes against the live session and map them to a stable schema during the build.
What identifies the other party on an OPay transfer record?
It depends on the rail. Bank transfers carry an IBAN and bank name; Raast transfers can carry a Raast ID, which is the recipient's mobile number linked to an IBAN at the State Bank of Pakistan; wallet-to-wallet transfers carry the counterparty wallet handle. We capture whichever identifier the record exposes and normalize them into one counterparty field.
Pakistan has no in-force open-banking mandate yet — what legal basis does the integration run on?
The account holder's own authorization. Pakistan's open-banking direction is still being shaped by the State Bank of Pakistan and the Personal Data Protection Bill 2023 has not been enacted, so the dependable basis is consent from the user whose wallet is being read, with consent records, access logging and data minimization built into the integration.
We only need an OPay statement pulled monthly — does that change how you build it?
It shrinks it. A monthly pull means a scheduled session, a cursor-paged read of the ledger since the last run, and a written file rather than a hot endpoint, so the consent-refresh and token-expiry handling can be lighter. We size the build to the cadence you actually need rather than running a live sync you would not use.
Sources and how this was checked
Compiled from the app's own Play Store listing and disclaimer, plus the State Bank of Pakistan's payment-systems pages and the 1-Link site, in June 2026. Primary references:
- OPay - Send Money Fast on Google Play — features, SBP and 1-Link disclaimer.
- State Bank of Pakistan — Raast Person to Person — Raast ID and IBAN linking.
- State Bank of Pakistan — Electronic Money Institutions — EMI regulation and licensing.
- 1-Link — the interbank aggregator behind bill collection.
Reviewed June 2026 by the OpenBanking Studio integration desk.
App profile: OPay - Send Money Fast
OPay - Send Money Fast (package team.opay.pay.pakistan, per its Play listing) is a Pakistani digital wallet operated by OPay, described in its listing as a financial-service company regulated by the State Bank of Pakistan. The app opens a wallet against a mobile number and supports adding cash from banks and other wallets, mobile load and bundle purchases for Telenor, Zong, Ufone and Jazz, utility and government-fee bill payment through aggregator partner 1-Link, money transfer to banks and other wallets, and a no-annual-fee PayPak debit card usable within Pakistan. It is published for Android and iOS.