Initiate
Create payment (engine, portal, airtime, or disbursement). Capture every reference returned.
Operating model
Every product uses the same reliability pattern: push when the platform notifies you, pull when you query the latest state. Implement both before go-live.
Create payment (engine, portal, airtime, or disbursement). Capture every reference returned.
Customer completes USSD/bank/checkout or voucher flow.
Platform or engine notifies your endpoint with settlement payload.
Your backend queries status or getPayments if callback is late or ambiguous.
Mark order paid only when references match and amount/status are consistent.
| Product | Initiate | Pull (status) | Push (callback) | Key reference |
|---|---|---|---|---|
| LipaPay Ver2 | pay_mobile, initiate-payment/mno|bank, or initiate-secure-payment |
POST
/api/sandbox/transaction/status
After login — on-demand reconciliation when a callback is delayed or missing. |
GET or POST
/api/sandbox/callback
Simulates LipaPay engine settlement; updates in-memory txn then visible via status. |
reference (engine)controlNumber (portal MNO/bank)external_reference (secure) |
| LipaAirtime | POST /api/sandbox/airtime/customer/payments or balancerecharge |
GET
/api/sandbox/airtime/user
Wallet balance and profile pull — use callbackUrl to confirm recharge by controlNumber. |
POST
/api/sandbox/airtime/callbackUrl
Matches production Lipa_Airtime callbackUrl — marks pending recharge successful. |
controlNumber |
| LipaDisbursement | POST /api/sandbox/disbursement/payment |
POST
/api/sandbox/disbursement/getPayments
Pull model: list historical payouts for reconciliation (no push callback in sandbox). |
List/history only
Use getPayments and payment response txnid/refid in production integrations. |
txnidrefid (in response JSON) |
POST /api/sandbox/transaction/status
{
"ref_id": "CONTROL_OR_ENGINE_REF"
}
Authorization: Bearer <Sanctum token>
/api/sandbox/callback
{
"message": "success",
"code": "200",
"status": true,
"description": "Payment received",
"data": {
"providerType": "MNO",
"providerName": "Vodacom",
"amount": 1000,
"paymentReference": "YOUR_ENGINE_REFERENCE",
"payerMobile": "255712345678",
"transactionDate": "2026-05-29 12:00:00",
"transactionID": "TXN-ABC123",
"transactionChannel": "USSD"
}
}
POST /api/sandbox/airtime/callbackUrl
{
"controlNumber": "FROM_RECHARGE_RESPONSE",
"status": true
}
POST /api/sandbox/disbursement/getPayments
{
"payments": {
"data": [
{ "txnid": "…", "refid": "…", "amount": 1000 }
]
}
}
Interactive forms for /api/sandbox — same JSON as production, sandbox settlement only. LipaPay callback requires a prior pay_mobile with matching reference.
POST /api/sandbox/callback — updates txn; then verify with status.
Sign in to use the full testing lab flow: pay_mobile → callback → status with Sanctum token.
// Submit the form
POST /api/sandbox/airtime/callbackUrl — after wallet recharge returns controlNumber.
// Submit the form
POST /api/sandbox/transaction/status — requires Sanctum Bearer from POST /api/sandbox/login.
// Submit the form
Browse docs publicly, or register / sign in to use the Testing Lab and save your sandbox merchant profile.