Statuses & Reconciliation

In distributed payment networks like M-Pesa and PesaLink, an API response acknowledging receipt of a request is not confirmation that money has moved. Lipafy provides deterministic status tracking from initial proposal to final telecom reconciliation.


📊 Complete Status Reference

StatusCategoryDescriptionWallet Ledger State
DRAFTInitialIntent prepared; pending policy engine evaluation.No funds locked
PENDING_APPROVALHoldExceeds autonomous limits; waiting for human or multi-sig approval.No funds locked
APPROVEDReadyPolicy checks and required approvals completed. Queued for execution.Available balance committed
PROCESSINGIn-FlightDispatched to Safaricom/PesaLink network. Awaiting telecom callback.Escrow Hold Active
SUCCEEDEDFinalTelecom network confirmed success with verified receipt code.Permanent Ledger Debit
FAILEDFinalDeclined by network (e.g. invalid phone, insufficient float, recipient timeout).Escrow Hold Released
CANCELLEDFinalCancelled by an authorized operator or expired in approval queue.Escrow Hold Released

⚠️ Common Error Codes & Resolutions

Error CodeHTTP StatusRoot CauseRecommended Action
INSUFFICIENT_FUNDS402Workspace available balance is lower than total debit (amount + fee).Top up workspace balance via M-Pesa or Bank transfer.
POLICY_VIOLATION_DAILY_CAP403Cumulative 24-hour spend exceeds workspace spending policy.Wait for rolling window reset or request policy adjustment from Admin.
BENEFICIARY_NOT_ALLOWLISTED403The requested PayBill or phone number is not in the policy allowlist.Add the shortcode/phone to your approved beneficiary registry.
IDEMPOTENCY_CONFLICT409Reused an idempotency key with different amount or destination details.Generate a fresh UUID Idempotency-Key for distinct payment requests.
TELECOM_TIMEOUT504Safaricom/Bank network took > 30s to return status.Do not re-debit. Intent remains in PROCESSING until background polling resolves.