17STK Push resultM-Pesa error 17: M-Pesa system internal error
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
Safaricom's system (or the receiving shortcode / Party B) was temporarily unable to process the transaction — a transient M-Pesa-side error, not a problem with your request.
How to fix it
This is transient, but it is NOT proven that no charge was raised. Confirm the payment's final state with GET /status/:id (or the webhook) before charging again; 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://tuma.co.ke/common-mpesa-daraja-api-error-codes-explanation-and-mitigation/
- https://www.kenzobe.com/blog/mpesa-daraja-api-errors
- 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.