9999STK Push resultM-Pesa error 9999: Error sending the STK prompt
This is an STK Push (Lipa na M-Pesa Online) result code — it comes back on the Daraja callback after the customer responds to the payment prompt.
What causes it
The push could not be delivered — commonly a transient M-Pesa error, or the request message exceeds the 182-character limit.
How to fix it
Shorten the request fields (especially TransactionDesc) to stay within 182 characters. Before charging again, confirm the payment's final state with GET /status/:id (or the webhook) — a delivery failure is not proof no charge was raised. Only start a new attempt with a NEW idempotency key once you have confirmed nothing moved.
How paylod handles this
With paylod you never parse this code by hand: the hosted M-Pesa callback decodes the STK Push result for you and returns a normalized status, so you handle a clean success or failed webhook instead of raw Daraja result codes.
See the paylod M-Pesa APIRelated M-Pesa error codes
Sources
- https://woodev.co.ke/common-m-pesa-api-errors/
- https://tuma.co.ke/common-mpesa-daraja-api-error-codes-explanation-and-mitigation/
- provenance (2026-07-18, codex security review): retryable changed true->false — 'safe to charge again' was set on non-authoritative community evidence; until no-debit is proven, false is the safe money call.