Collection Initiation
Create customer collection request under authenticated merchant context.
Getting Started
This sandbox gives one developer workspace for all three offerings: LipaPay (core collections), LipaAirtime (airtime service), and LipaDisbursement (payout service). Build and test each product flow before production onboarding.
Register in sandbox, sign in, then test all products in the API testing lab (after sign-in) and submit KYC for live portal credentials (after sign-in). After approval, LipaPay emails production portal access — not instant keys here.
After submission, LipaPay compliance reviews your application and contacts you by email with live portal access when approved.
| Item | Value | Purpose |
|---|---|---|
| Account onboarding | Register and activate account | Ensures access follows your merchant activation workflow. |
| Developer login | Sign in with approved credentials | Unlocks authenticated product areas, API keys, KYC, and testing tools. |
LipaPay is the core product used for payment collections and secure checkout-related operations. Standard flow is: authenticate, initiate payment, then track transaction status.
Create customer collection request under authenticated merchant context.
Use bank-oriented initiation path when checkout channel requires bank flow.
Reconcile asynchronous processing and confirm final transaction outcome.
LipaAirtime uses the same sandbox auth model and collection-style request contract. Submit airtime request data, capture reference/control number, then perform status verification for reconciliation.
Detailed Airtime documentation: Airtime overview and Airtime API reference.
Use /api/sandbox/disbursement/* for register, login, payment, and list payments. Responses match the LipaDisbursement production API (data, wallet, token on login).
POST payment with msisdn, amount, and name after Bearer login; wallet debited with MNO charge rules.
Track pending-to-complete lifecycle and reconciliation states.
Validate callback payload handling before production webhook onboarding.
Detailed Disbursement documentation: Disbursement overview and Disbursement API reference.
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 }
]
}
}
API reference — status & callbacks Interactive testers Sign in for testing lab
Browse docs publicly, or register / sign in to use the Testing Lab and save your sandbox merchant profile.