KashierDevelopersKashier Developers
Accept payments

InstaPay

Collect payments over InstaPay with QR or request to pay

Collect a payment over InstaPay, Egypt's instant payment network, by generating a QR code the customer scans or by pushing a request to pay to a payer address you already know.

InstaPay is a first-class payment method: you select it with paymentMethod.type = "instapay". It is a collection rail, not a card rail, so it has no tokenization, no recurring and no authorize/capture. It does support refund, cancel and transaction force closure.

The flow is:

  1. You initiate a collection — GENERATE_QR for a scan-to-pay QR code, or INITIATE_R2P to push a pay request to a payer address.
  2. The customer approves the request in their bank or wallet app.
  3. Kashier notifies you through the standard server webhook.

Initiate a collection

An InstaPay collection is a Direct API order: you post it to the same POST /v3/orders endpoint used for cards and wallets, and pick the collection method with apiOperation.

Headers

KeyDescription
Kashier-HashOrder hash generated in hashing.
Content-Typeapplication/json

Operations

OperationCollection method
GENERATE_QRQR code the customer scans to pay
INITIATE_R2PRequest to pay, pushed to a known payer address

You do not choose the provider. InstaPay is selected with paymentMethod.type = "instapay"; which acquirer that resolves to is set up on your account by Kashier, not per request.

InstaPay fields

The paymentMethod.instapay object:

FieldTypeRequiredDescription
validityStringYesValidity period of the collection request. Required for both GENERATE_QR and INITIATE_R2P — without it the request fails with request.paymentMethod?.instapay?.validity is required for IPN generate QR.
payerAddressStringYes for INITIATE_R2PThe payer's InstaPay address. Only sent when the operation is INITIATE_R2P.
tipBooleanNoSet to true to allow a tip on the collection.
convenienceFeeNumberNoConvenience fee to add to the collection.
refundSourceStringNoCarried for refund flows.

Request

{
  "apiOperation": "INITIATE_R2P",
  "interactionSource": "ECOMMERCE",
  "order": {
    "reference": "<your order id>",
    "amount": 100.00,
    "currency": "EGP"
  },
  "paymentMethod": {
    "type": "instapay",
    "instapay": {
      "payerAddress": "payer@instapay",
      "validity": "30"
    }
  },
  "merchantId": "MID-XXXXX-XXX"
}

For a QR collection, send "apiOperation": "GENERATE_QR" and omit paymentMethod.instapay.payerAddress.

Supported operations

OperationType
GENERATE_QRInitiate
INITIATE_R2PInitiate
REFUNDPost-payment
CANCELPost-payment
TRANSACTION_FORCE_CLOSUREPost-payment

Tokenization, recurring and authorize/capture are not available on InstaPay. See refunds and void for the shared post-payment contract.

Results and response codes

A successful InstaPay collection reaches you as status: SUCCESS with transactionResponseCode 00 ("Approved") — the same approved code as any other payment. Every other code is a FAILURE and carries the InstaPay code itself, for example 20903.

InstaPay uses its own five-digit code space, separate from the card and ISO codes in payment reason codes. Match on the exact code.

CodeMeaning
00000Success
20101Payer Payment Address is not registered
20102Invalid validity period
20103Declined, Merchant Collection Limits Exceeded
20201Declined by Consumer
20202Declined, Payment Order Expired
20203Declined, Merchant Collection Limits Exceeded
20204Declined by Consumer bank
20301Refund Declined, Applicable Refund amount for this transaction has been exceeded
20302Transaction has already been refunded
20303Invalid Merchant Reference Number
20304Invalid Original Transaction ID
20305Refund Declined, insufficient funds
20306Refund Declined, invalid Merchant Access Permission
20307Refund Declined, Original transaction exceeded refund duration
20308Refund In Progress
20309Refund Declined
20310Refund not concluded, please inquire the refund
20401Invalid Merchant Reference Number
20402Cannot be cancelled, cancellation window has expired. Kindly use refund option
20501Invalid Merchant Reference Number
20502Declined by Consumer
20503Declined, Payment Order Expired
20504Declined, Merchant Collection Limits Exceeded
20901Invalid JSON structure or field format
20902Invalid version number
20903Invalid request signature
20904Your request cannot be processed please try again later
20905Merchant is suspended or blocked, please refer back to your bank
20906Invalid Merchant ID
20907Invalid Acquirer Merchant ID
20908Invalid Acquirer Bank ID
20909Duplicated Merchant Reference Number
20999Service currently not available, Please try again later

Note

Only the 2xxxx codes above are mapped. A code outside this table falls back to the general message set and can arrive as k_default, so treat an unknown InstaPay code as a plain failure rather than looking it up.

Webhooks

InstaPay has no webhook event of its own. Kashier notifies you with the standard server webhook, where event is the operation — pay, refund and so on. See webhooks.

On this page