4999STK Push resultM-Pesa error 4999: Still waiting for the customer's PIN
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 STK prompt is live on the customer's phone and they have not entered their M-Pesa PIN yet. This is NOT a failure — the payment is still in flight and can still succeed. Retrying now would push a SECOND prompt and can double-charge the customer.
How to fix it
Keep polling GET /status/:id (or wait for the webhook). Do NOT retry the charge and do NOT tell the customer it failed — this payment is still live and can still succeed.
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 API