One API call puts a PIN prompt on your customer's phone. Safaricom settles the money to your own shortcode — we never hold it. No Daraja app, no Safaricom paperwork, no go-live wait.
Most people are taking their first payment within ten minutes.
Email, phone and a password. Nothing to pay, nothing to install.
Your paybill, Buy Goods till, or a bank account. That is where the money lands.
Each destination gets its own API key pair. The secret is shown once.
One POST, and we notify your server with a signed webhook when it settles.
This is not a simplified excerpt — it is the entire request.
# Send the prompt curl -X POST https://api.airtimedeal.co.ke/v1/initatestk \ -H "X-API-Key: pk_live_..." \ -H "X-API-Secret: sk_live_..." \ -H "Content-Type: application/json" \ -d '{"amount":100,"msisdn":"0712345678","reference":"INV-001"}' # We POST this to your webhook once the customer pays { "event": "payment.completed", "reference": "INV-001", "amount": 100, "mpesa_receipt": "SGH7XY12AB", "msisdn": "254712345678" }
Every callback is stored before it is applied, and a reconciler settles anything Safaricom failed to deliver. A dropped callback delays a payment; it never loses one.
Signed with HMAC-SHA256 and retried with backoff for six hours. Failed deliveries are visible in your dashboard and can be replayed with one click.
Safaricom retries what it thinks we missed. Only a pending payment is ever updated, so your totals stay honest.
Send a real prompt to your own phone from the dashboard and watch it settle, through the exact code path your integration will use.