Institution Integration
Kuickpay provides bill payment infrastructure to institutions, making their bills payable across all Kuickpay channels — mobile apps, internet banking, ATMs, and more. Two integration paths are available: End-to-End (you expose APIs, Kuickpay calls them) and Hybrid (you call Kuickpay's APIs).
Generated October 20, 2026 — see the live docs for the full interactive reference.
1. End-to-End Integration — you build these APIs
You build two REST endpoints on your server. Kuickpay calls them automatically whenever a consumer pays through any channel. Authentication uses username/password headers you provide to Kuickpay during onboarding. Always call Bill Inquiry before Bill Payment to confirm bill details with the consumer.
(your endpoint)Bill Inquiry — API Specification
Kuickpay calls this endpoint when a consumer wants to inquire about your bill.
Request (Kuickpay sends this)
| Field | Type | Req | Max Len | Description |
|---|---|---|---|---|
| consumer_number | numeric | Yes | 18 | Consumer/account number sent by Kuickpay. First 5 digits identify your biller. Numeric characters only. |
| bank_mnemonic | string | No | 7 | Short code of the payment channel (e.g. MCB, HBL, UBL). Optional. |
| reserved | string | No | 100 | Optional metadata. Can be empty string. |
Response (you return this)
| Field | Type | Req | Max Len | Description |
|---|---|---|---|---|
| response_Code | string | Yes | 2 | Two-digit result code. "00" = success. |
| response_description | string | Yes | 100 | Human-readable result message. |
| consumer_detail | string | Yes | 50 | Customer name. No special characters. |
| bill_status | string | Yes | 1 | "U" = Unpaid, "P" = Paid, "B" = Blocked. Omit when response_Code is "01". |
| due_date | string | Yes | 8 | Bill due date, YYYYMMDD. |
| amount_within_due_date | AN14 | Yes | 14 | 13-digit amount, left-padded with zeros (last 2 digits = minor units), + a +/- sign. E.g. "0000000250000+" = Rs. 2,500.00. |
| amount_after_due_date | AN14 | Yes | 14 | Same AN14 format as amount_within_due_date. |
| billing_month | string | Yes | 4 | Billing period, YYMM (e.g. "2506"). |
| date_paid | string | No | 8 | Date paid, YYYYMMDD, if already paid. |
| amount_paid | string | No | 12 | Amount paid in paisa, if applicable. |
| tran_auth_id | numeric | No | 6 | Transaction auth ID returned after successful payment. Numeric only. |
| contact_number | string | Yes | 15 | Consumer contact number. |
| string | Yes | 100 | Consumer email address. | |
| institution_id | string | Yes | 10 | Your biller institution ID. |
| institution_name | string | Yes | 50 | Your institution name. |
response_Code is "01" (not found), return only response_Code and response_description — omit bill_status and all bill detail fields.Response Codes
| Code | Meaning |
|---|---|
| 00 | Bill found successfully. |
| 01 | Consumer number not found. |
| 02 | Voucher is blocked or inactive. |
| 03 | Unknown error or bad request. |
| 04 | Invalid data — wrong credentials or malformed request. |
| 05 | Server error — your API or ERP system failed internally. |
(your endpoint)Bill Payment — API Specification
Kuickpay calls this endpoint after the consumer confirms payment. Mark the bill as paid and return a confirmation.
Request (Kuickpay sends this)
| Field | Type | Req | Max Len | Description |
|---|---|---|---|---|
| consumer_number | numeric | Yes | 18 | Consumer/account number. Numeric characters only. |
| bank_mnemonic | string | No | 7 | Short code of the payment channel. Optional. |
| tran_auth_id | numeric | Yes | 6 | Transaction auth ID generated by the payment channel. Numeric only. Used for idempotency. |
| paid_amount | string | Yes | 12 | Amount paid in paisa (e.g. "250000" = Rs. 2,500). |
| tran_date | string | Yes | 8 | Transaction date, YYYYMMDD. |
| tran_time | string | Yes | 6 | Transaction time, HHMMSS. |
| reserved | string | No | 100 | Optional. |
Response (you return this)
| Field | Type | Req | Max Len | Description |
|---|---|---|---|---|
| response_Code | string | Yes | 2 | "00"=Success, "01"=Invalid Voucher Number, "03"=Already Paid, "05"=Error. |
| response_description | string | Yes | 100 | Human-readable result message. |
| Identification_parameter | string | Yes | 50 | Your internal payment reference. Returned as-is by Kuickpay. |
tran_auth_id has already been processed before marking a bill as paid — if a duplicate is received, return response_Code: "03". If a bill is already paid and the customer attempts repayment, validate consumer number, date paid, tran_auth_id, and amount paid all together. Do not restrict tran_auth_id to a single consumer number.Response Codes
| Code | Meaning |
|---|---|
| 00 | Success. |
| 01 | Invalid Voucher Number. |
| 02 | Voucher is blocked. Payment not allowed. |
| 03 | Already paid — duplicate tran_auth_id received. |
| 04 | Invalid data — missing/wrong fields or bad credentials. |
| 05 | Server error — your API or ERP system failed internally. |
2. Hybrid Integration — you call these APIs
You have customer data but no public API endpoints. Push invoices into Kuickpay via Insert Voucher, the consumer pays through any channel, and you pull payment status via Payment Inquiry or Bulk Inquiry.
Sandbox Base URL
https://uat-adminapi.kuickpay.com/api/insertPPMVoucherInsert Voucher
Create a bill voucher for your customer. Once inserted, the customer can pay through any Kuickpay channel using the voucher number returned in response_description.
Authentication
usernameProvided by KuickpaypasswordProvided by Kuickpay| Field | Type | Req | Max Len | Description |
|---|---|---|---|---|
| institutionID | string | Yes | 5 | Your Kuickpay-assigned institution ID. |
| registrationNumber | string | Yes | — | Your internal registration/reference number for this consumer. |
| head1 … head10 | string | No | — | Description of fee heads 1–10 (e.g. "Fee", "Charges"). head1 is required; leave the rest empty if unused. |
| amount1 … amount10 | number | No | — | Amount for each corresponding head, in PKR. amount1 is required; 0 for unused heads. |
| totalAmount | number | Yes | — | Sum of amount1–amount10, in PKR. |
| dueDate | string | Yes | — | Bill due date, YYYY-MM-DD. |
| amountAfterDueDate | number | Yes | — | Amount payable after due date, in PKR. |
| expiryDate | string | Yes | — | Voucher expiry date, YYYY-MM-DD. |
| issueDate | string | Yes | — | Voucher issue date, YYYY-MM-DD. |
| voucherMonth | string | Yes | 2 | Billing month, MM (e.g. "08"). |
| voucherYear | string | Yes | 4 | Billing year, YYYY (e.g. "2026"). |
| name | string | Yes | — | Consumer's full name. |
| mobile | string | Yes | — | Consumer's mobile number. |
| string | No | — | Consumer's email address. | |
| branch | string | No | — | Branch code or name. |
Response
{
"response_Code": "00",
"response_description": "00008260900045228",
"responseCode_Detail": "228"
}/api/PaymentInquiryPayment Inquiry
Check the payment status of a voucher created via Insert Voucher. Call periodically to update your payment records.
Authentication
X-API-KEYYour API keyIN-IDYour Institution Initiator ID| Field | Type | Req | Description |
|---|---|---|---|
| consumer_number | string | Yes | The consumer/voucher number used when creating the invoice. |
| reserved | string | No | Optional metadata. |
Response
{
"response_Code": "00",
"response_description": "Success",
"consumer_detail": "John Doe",
"bill_status": "Paid",
"due_date": "2025-06-30",
"amount_within_due_date": "250000"
}/api/BillPaymentBulkInquiryBulk Inquiry
Fetch all settled transactions for your institution on a given date. Useful for daily reconciliation.
Authentication
usernameProvided by KuickpaypasswordProvided by Kuickpay| Field | Type | Req | Max Len | Description |
|---|---|---|---|---|
| institutionID | string | Yes | — | Your Kuickpay institution ID. |
| transactionDate | string | Yes | 8 | Date to fetch settled transactions for, yyyyMMdd (e.g. "20260831"). |
response_Code reflects the request status; transactionList[] holds the settled transactions and count their total./api/GetBillersGet Billers
Returns all active billers and their mnemonic codes for use in the endpoints above.
Authentication
X-API-KEYYour API keyIN-IDYour Institution Initiator ID/api/sendSMS · /api/sendEmail · /api/sendEmailNewNotifications
Send SMS and email notifications to your customers — bill reminders, payment confirmations, or any message.
Send SMS
| Field | Type | Req | Description |
|---|---|---|---|
| mobile_number | string | Yes | Customer mobile number (Pakistani format, e.g. 03001234567). |
| message | string | Yes | SMS message text. Max 160 characters for single SMS. |
| reserved | string | No | Optional metadata. |
Send Email
| Field | Type | Req | Description |
|---|---|---|---|
| string | Yes | Customer email address. | |
| subject | string | Yes | Email subject line. |
| body | string | Yes | Email body content. Plain text. |
| reserved | string | No | Optional metadata. |
Send Email (New) — supports HTML + attachments
| Field | Type | Req | Description |
|---|---|---|---|
| string | Yes | Customer email address. | |
| subject | string | Yes | Email subject line. |
| body | string | Yes | Email body. Supports basic HTML. |
| attachments | string[] | No | Base64-encoded attachment files. |
| reserved | string | No | Optional metadata. |
Response (all three endpoints)
{
"response_Code": "00",
"response_description": "Notification Sent Successfully",
"reserved": ""
}/api/UpdateSAFStatusUpdate SAF Status
Update the Store and Forward (SAF) status for a transaction queued when the biller system was temporarily unavailable. Call once you have confirmed the final outcome.
Authentication
X-API-KEYYour API keyIN-IDYour Institution Initiator ID| Field | Type | Req | Description |
|---|---|---|---|
| tran_auth_id | string | Yes | Transaction auth ID of the SAF transaction to update. |
| status | string | Yes | New status: "SUCCESS" or "FAILED". |
| reserved | string | No | Optional metadata. |