Payfazz Agen data API: saldo, QRIS and PPOB
Payfazz: Pulsa, PPOB, QRIS&EDC is the merchant-agent app from PT Payfazz Teknologi Nusantara — Fazz Indonesia's Fazz Agen product, live since 2016 — that Indonesian warungs, pulsa kiosks, laundry shops, minimarkets and online sellers use to sell prepaid credit and data, PLN tokens, BPJS/PDAM/Telkom bills, DANA/OVO/GoPay/LinkAja/Maxim top-ups, and bank transfers to 130+ banks, and to accept QRIS plus mini-EDC card payments. Agents register with a mobile number, set a six-digit account PIN, fund Saldo Simpanan (shown as Deposit Balance, now branded Payfazz Wallet and optionally merged with Cashfazz) via a Bank Sahabat Sampoerna virtual account or a retail outlet, then print thermal receipts and order a QRISuara soundbox or EDC Mini from the same home screen. Modal Payfazz working capital, framed in-app with PT Modal Rakyat Indonesia, sits behind e-KTP KYC, liveness and a store visit. Copy is Bahasa Indonesia with an English locale, amounts are IDR, and the Play listing is Indonesia-only — a 4.09 rating across 273,072 reviews and 5 million-plus installs — competing with GoPay Merchant, DANA Bisnis and BukuWarung for the same MSME till.
Deposit-balance floats on the merchant home stamp depositBalance next to a Cashfazz-merged cashfazzBalance, then gate further funding with balanceCloseToLimit and Bank Sahabat Sampoerna virtual-account top-ups that mint virtualAccountNumber. Terima QRIS plates carry nmid and a static-versus-dynamic qrisType; inbound scans settle as disbursementAmount after serviceFee. PPOB receipts attach operator, meterNumber, serialToken and adminFee; customer bank sends list accountHolderName, accountNumber and transferFee.
e-KTP rows hold nikNumber and motherMaidenName before liveness; Modal Payfazz bills expose loanLimit, tenorDays and lateFee. Agent-network and ERP bots reconcile nightly mutasiType credited/debited rows against QRIS settlements, while lending stacks watch Modal utilization when float runs short. openData Studio turns that surface into callable open data.
Screenshots
API surface
Request/response examples are illustrative, reconstructed from the app's interface — not a live capture.
Phone OTP session
POST
/v1/agen/session/otposintExchanges the SMS OTP for an accessToken that gates later wallet, PPOB, QRIS and Modal Payfazz calls.
Auth: Unauthenticated. Body carries phoneNumber and otp; the returned accessToken is sent as Authorization Bearer on later calls. Money-moving screens also prompt the six-digit account PIN.
- phoneNumber
- otp
- deviceId
- accessToken
- refreshToken
- agentId
- newUser
- pinSet
POST /v1/agen/session/otp HTTP/1.1 Content-Type: application/json { "phoneNumber": "081234567890", "otp": "1234", "deviceId": "dvc-8c21f0ab" }{ "accessToken": "<session-token>", "refreshToken": "<refresh-token>", "agentId": "AGT-10482", "newUser": false, "pinSet": true }Deposit wallet snapshot
GET
/v1/wallets/depositopenbankingReads the home-strip Deposit Balance (Payfazz Wallet) and the optional Cashfazz pocket that merge into Total Wallet.
Auth: Bearer accessToken from phone OTP login
- agentId
- depositBalance
- cashfazzBalance
- totalWallet
- currency
- balanceCloseToLimit
- balanceExceedsLimit
- cashfazzLinked
- walletName
GET /v1/wallets/deposit HTTP/1.1 Authorization: Bearer <access-token>{ "agentId": "AGT-10482", "depositBalance": 1850000, "cashfazzBalance": 250000, "totalWallet": 2100000, "currency": "IDR", "balanceCloseToLimit": false, "balanceExceedsLimit": false, "cashfazzLinked": true, "walletName": "Payfazz Wallet" }Wallet mutations ledger
GET
/v1/wallets/deposit/mutationsopenbankingPages the MUTATIONS ledger, splitting credited (Mutasi Masuk) from debited (Mutasi Keluar) rows against runningBalance.
Auth: Bearer accessToken from phone OTP login
- mutationId
- mutasiType
- amount
- runningBalance
- description
- orderId
- transactionDate
- nextCursor
GET /v1/wallets/deposit/mutations?cursor=0&limit=20&mutasiType=all HTTP/1.1 Authorization: Bearer <access-token>{ "items": [ { "mutationId": "MUT-20261020-8812", "mutasiType": "credited", "amount": 500000, "runningBalance": 1850000, "description": "Top up VA Bank Sahabat Sampoerna", "orderId": "ORD-552190", "transactionDate": "2026-10-20T08:14:22+07:00" } ], "nextCursor": "20" }Deposit virtual-account top-up
POST
/v1/wallets/deposit/topup-vaopenbankingMints a Bank Sahabat Sampoerna virtual-account number so the agent can fund Deposit Balance, returning adminFee and expiry.
Auth: Bearer accessToken from phone OTP login; six-digit account PIN on confirm
- topUpAmount
- paymentMethod
- bankCode
- couponCode
- topUpId
- virtualAccountNumber
- accountHolderName
- bankName
- adminFee
- totalPayment
- expiredAt
- status
POST /v1/wallets/deposit/topup-va HTTP/1.1 Authorization: Bearer <access-token> Content-Type: application/json { "topUpAmount": 500000, "paymentMethod": "VIRTUAL_ACCOUNT", "bankCode": "SAHABAT_SAMPOERNA", "couponCode": null }{ "topUpId": "TU-77821", "virtualAccountNumber": "8830123456789012", "accountHolderName": "PT PAYFAZZ TEKNOLOGI NUSANTARA", "bankName": "Bank Sahabat Sampoerna", "topUpAmount": 500000, "adminFee": 1500, "totalPayment": 501500, "expiredAt": "2026-10-20T09:14:22+07:00", "status": "WAITING" }Mobile prepaid (pulsa) purchase
POST
/v1/ppob/prepaid/mobileopendataSells a prepaid pulsa/data denom to a customer number, returning orderId, serialNumber, transactionCost and the agent's selling-price markup.
Auth: Bearer accessToken from phone OTP login; six-digit account PIN on confirm
- phoneNumber
- operator
- denom
- sellingPrice
- saveCustomer
- customerName
- orderId
- productType
- transactionCost
- agentProfit
- serialNumber
- transactionStatus
- transactionDate
POST /v1/ppob/prepaid/mobile HTTP/1.1 Authorization: Bearer <access-token> Content-Type: application/json { "phoneNumber": "081234567890", "operator": "TELKOMSEL", "denom": 50000, "sellingPrice": 51500, "saveCustomer": true, "customerName": "Budi" }{ "orderId": "ORD-662101", "productType": "MOBILE_PREPAID", "phoneNumber": "081234567890", "operator": "TELKOMSEL", "denom": 50000, "transactionCost": 50200, "sellingPrice": 51500, "agentProfit": 1300, "serialNumber": "S/N-8810293", "transactionStatus": "SUCCESSFUL", "transactionDate": "2026-10-20T08:21:03+07:00" }PLN prepaid token
POST
/v1/ppob/pln/prepaidopendataBuys a PLN prepaid token against a meter / customer ID and returns the 20-digit serialToken, kWh and PLN-recommended selling price for the thermal receipt.
Auth: Bearer accessToken from phone OTP login; six-digit account PIN on confirm
- meterNumber
- customerId
- subscriberName
- tarifDaya
- denom
- adminFee
- kwhAmount
- serialToken
- recommendedSellingPrice
- orderId
- productType
- transactionStatus
POST /v1/ppob/pln/prepaid HTTP/1.1 Authorization: Bearer <access-token> Content-Type: application/json { "meterNumber": "32123456789", "denom": 100000 }{ "orderId": "ORD-662188", "productType": "PLN_PREPAID", "meterNumber": "32123456789", "customerId": "551234567890", "subscriberName": "SITI AMINAH", "tarifDaya": "R1/1300", "denom": 100000, "adminFee": 3000, "kwhAmount": 67.5, "serialToken": "1234-5678-9012-3456-7890", "recommendedSellingPrice": 103000, "transactionStatus": "SUCCESSFUL" }Bank transfer for customers
POST
/v1/transfers/bankopenbankingSends an IDR bank transfer to a destination account (BCA/BRI/BNI/Mandiri and 130+ others), quoting transferFee and shippingCost before debiting Deposit Balance.
Auth: Bearer accessToken from phone OTP login; six-digit account PIN on confirm; basic e-KTP verification required for financial features
- bankCode
- accountNumber
- accountHolderName
- transferAmount
- saveAccount
- savedAccName
- orderId
- bankName
- transferFee
- shippingCost
- totalPayment
- transactionStatus
- transactionDate
POST /v1/transfers/bank HTTP/1.1 Authorization: Bearer <access-token> Content-Type: application/json { "bankCode": "BCA", "accountNumber": "1234567890", "accountHolderName": "ADA PUTRI", "transferAmount": 1500000, "saveAccount": true, "savedAccName": "Ada" }{ "orderId": "ORD-770214", "bankName": "BCA", "accountNumber": "1234567890", "accountHolderName": "ADA PUTRI", "transferAmount": 1500000, "transferFee": 1000, "shippingCost": 2500, "totalPayment": 1503500, "transactionStatus": "PROCESSING", "transactionDate": "2026-10-20T08:40:11+07:00" }Static QRIS plate
GET
/v1/qris/staticopendataReturns the printable static QRIS Tempel plate (NMID, store name, EMV payload) that disburses inbound scans straight into Deposit Balance.
Auth: Bearer accessToken from phone OTP login; QRIS merchant registration must be active
- nmid
- storeName
- qrisType
- qrisName
- status
- qrPayload
- qrImageUrl
- directDisbursement
- disbursementDestination
GET /v1/qris/static HTTP/1.1 Authorization: Bearer <access-token>{ "nmid": "ID2025123456789", "storeName": "Warung Sari", "qrisType": "STATIC", "qrisName": "QRIS Tempel", "status": "ACTIVE", "qrPayload": "00020101021126...", "qrImageUrl": "https://files.example/qris/AGT-10482.png", "directDisbursement": true, "disbursementDestination": "DEPOSIT_BALANCE" }Dynamic QRIS charge
POST
/v1/qris/dynamicopenfinanceMints a one-off QRIS Atur Harga code for a keyed-in payment amount, with a cancel-in timer, that settles into Deposit Balance.
Auth: Bearer accessToken from phone OTP login; six-digit account PIN on confirm
- transactionAmount
- storeName
- orderId
- qrisType
- qrisName
- qrPayload
- cancelInSeconds
- status
- disbursementDestination
POST /v1/qris/dynamic HTTP/1.1 Authorization: Bearer <access-token> Content-Type: application/json { "transactionAmount": 75000, "storeName": "Warung Sari" }{ "orderId": "QR-99012", "qrisType": "DYNAMIC", "qrisName": "QRIS Atur Harga", "transactionAmount": 75000, "qrPayload": "00020101021226...", "cancelInSeconds": 180, "status": "WAITING", "disbursementDestination": "DEPOSIT_BALANCE" }QRIS payment settlement detail
GET
/v1/qris/transactions/{orderId}openfinanceLoads one Terima QRIS payment: NMID, fees and the disbursementAmount credited to Deposit Balance (Accepted vs Disbursed).
Auth: Bearer accessToken from phone OTP login
- orderId
- transactionTime
- disbursementTime
- qrisType
- disbursementType
- storeName
- customerName
- nmid
- transactionAmount
- serviceFeePercent
- serviceFee
- disbursementFeePercent
- disbursementFee
- disbursementAmount
- status
GET /v1/qris/transactions/QR-99012 HTTP/1.1 Authorization: Bearer <access-token>{ "orderId": "QR-99012", "transactionTime": "2026-10-20T08:44:10+07:00", "disbursementTime": "2026-10-20T08:44:18+07:00", "qrisType": "DYNAMIC", "disbursementType": "INSTANT", "storeName": "Warung Sari", "customerName": "Rina", "nmid": "ID2025123456789", "transactionAmount": 75000, "serviceFeePercent": 0.7, "serviceFee": 525, "disbursementFeePercent": 0.0, "disbursementFee": 0, "disbursementAmount": 74475, "status": "SETTLED" }e-KTP basic verification
POST
/v1/kyc/ektposintSubmits the four-step basic verification (e-KTP photo, 16-digit NIK, face liveness, occupation & income) that unlocks bank transfer and other financial features.
Auth: Bearer accessToken from phone OTP login
- nikNumber
- fullName
- birthPlace
- dob
- motherMaidenName
- ktpImageRef
- livenessSessionId
- occupation
- sourceOfFunds
- monthlySalary
- kycId
- kycStatus
- verificationType
- maxProcessingDays
- livenessPassed
POST /v1/kyc/ektp HTTP/1.1 Authorization: Bearer <access-token> Content-Type: application/json { "nikNumber": "3171xxxxxxxxxxxx", "fullName": "BUDI SANTOSO", "birthPlace": "Jakarta", "dob": "1990-04-12", "motherMaidenName": "SRI WAHYUNI", "ktpImageRef": "img-ktp-10482", "livenessSessionId": "vh-8c21", "occupation": "Pedagang", "sourceOfFunds": "Usaha", "monthlySalary": "5000000-10000000" }{ "kycId": "KYC-44190", "kycStatus": "SUBMITTED", "verificationType": "BASIC", "maxProcessingDays": 1, "livenessPassed": true, "submittedAt": "2026-10-20T08:50:00+07:00" }Modal Payfazz loan snapshot
GET
/v1/loans/modalopenfinanceReads the Modal Payfazz working-capital line: limit, outstanding bill, tenor, lateFee and auto-renew flag used to fund PPOB when Deposit Balance is short.
Auth: Bearer accessToken from phone OTP login; cooperative / store-visit activation must be complete
- activationStatus
- loanLimit
- availableLimit
- outstandingPrincipal
- loanBillTotal
- lateFee
- tenorDays
- autoRenew
- dpd
- loanPurpose
- currency
GET /v1/loans/modal HTTP/1.1 Authorization: Bearer <access-token>{ "activationStatus": "ACTIVE", "loanLimit": 10000000, "availableLimit": 6500000, "outstandingPrincipal": 3500000, "loanBillTotal": 3720000, "lateFee": 0, "tenorDays": 30, "autoRenew": true, "dpd": 0, "loanPurpose": "BUSINESS_CAPITAL", "currency": "IDR" }
Data categories
- balances
- transactions
- payments
- qris
- ppob
- kyc
- lending
Where teams use this data
PPOB agent working-capital recon
A distributor ERP pulls depositBalance, mutasiType rows and pulsa/PLN orderId receipts each night so the agent's float, serialToken stock and sellingPrice markup match the warehouse ledger.
QRIS settlement ops for multi-warung brands
A franchise ops bot reprints nmid plates, watches disbursementAmount versus transactionAmount after serviceFee, and flags dynamic QRIS charges that stay WAITING past cancelInSeconds.
Bank-transfer exception desk
A support desk matches customer accountHolderName / accountNumber sends against PROCESSING rows and KYC nikNumber so mis-keyed BCA/BRI destinations can be held before Deposit Balance moves.
Modal Payfazz utilization watch
A lending-ops dashboard tracks loanLimit, availableLimit, dpd and lateFee so revolving autoRenew is paused when the warung's PPOB volume drops or the store-visit activation lapses.
Frequently asked questions
What agent data does Payfazz expose?
The reconstructed surface covers Deposit Balance (depositBalance, cashfazzBalance, mutations), pulsa and PLN token orders (operator, denom, meterNumber, serialToken), QRIS plates and settlements (nmid, qrisType, disbursementAmount), customer bank transfers, e-KTP KYC (nikNumber) and the Modal Payfazz working-capital line (loanLimit, lateFee).
How does the app authenticate agents?
Agents sign in with a mobile number and SMS OTP; the client keeps an accessToken as a Bearer header. Money-moving screens (top-up, pulsa, transfer, dynamic QRIS) also prompt the six-digit account PIN set at registration. Bank transfer and Modal Payfazz further require basic e-KTP verification.
Can I get QRIS settlements, not just the NMID plate?
Yes. Static QRIS Tempel returns nmid and a printable payload; each inbound payment then carries transactionAmount, serviceFee, disbursementType (instant vs non-instant) and disbursementAmount credited to Deposit Balance, with status Accepted or Disbursed.
Is this a public Payfazz developer API?
No. These are first-party calls the Fazz Agen app makes after login to render its own wallet, PPOB, QRIS and Modal screens — reconstructed from those features, not a published partner API.
Apps similar to Payfazz: Pulsa, PPOB, QRIS&EDC
- BukuWarung Apps for MSMEs — BukuWarung is an Indonesian MSME app for bookkeeping that also lets payment agents sell phone credit, PLN electricity tokens, e-wallet top-ups, data packages and monthly bills.
- GoPay Merchant: QRIS — GoPay Merchant is GoTo's Indonesian shop app for issuing a QRIS plate, accepting scans from GoPay, DANA, OVO, ShopeePay and banks, and withdrawing settlements to a bank account.
- DANA Kasir — DANA Kasir is the till app for DANA Bisnis merchants, used to share static or dynamic QR codes, log in-and-out transactions in real time, and skip a separate EDC terminal.
- Mitra Bukalapak — Mitra Bukalapak is a B2B app for Indonesian stalls and kiosks to sell mobile credit, PPOB bills (PLN, BPJS, PDAM, Telkom/IndiHome), game vouchers, bank transfers and e-wallet top-ups.
- Mitra Shopee: Kirim Uang, PPOB — Mitra Shopee is an agent app for bank transfers, ShopeePay/DANA/GoPay/OVO/LinkAja top-ups, telco credit and data, PLN tokens, and BPJS, PDAM and Telkom bill pay.
- Bisatopup - Agen Pulsa & PPOB — Bisatopup is a PPOB agent app for selling Telkomsel, Indosat, XL, Axis and Smartfren credit, PLN tokens, PDAM/BPJS/internet bills, OVO/GoPay/DANA/ShopeePay top-ups and game vouchers.
- Kios Pulsa - Agen Pulsa Murah — Kios Pulsa is an Indonesian agent app for mobile credit, data plans, PLN tokens, game vouchers and multi-bill payments including PLN, BPJS, PDAM, Telkom, TV and multifinance.
Topics
- Payfazz API
- Fazz Agen
- QRIS NMID
- PPOB pulsa
- PLN token
- Saldo Simpanan
- Modal Payfazz
- Indonesian MSME payments
- EDC Mini
- QRISuara
Need this app's data API integrated?
We deliver scoped integrations for any named app — from USD 500 with source-code handoff, or hosted access billed per call. Tell us the data you need.
- NDA + SOW on every engagement
- Delivery in 3–7 days
- Payment only after acceptance
- Work scoped to authorized use