Developers
Integrate in an afternoon.
A REST API with JSON, clear errors and signed webhooks for every change. Build against the sandbox, then switch one key to go live.
# Request a mobile money payment in Ethiopiacurl https://api.zafivo.com/v1/payments \-H "Authorization: Bearer sk_test_…" \-H "Idempotency-Key: 7f3c9a" \-d amount=150000 -d currency=ETB \-d method=mobile_money -d phone=+2519XXXXXXXX
201 Created
{"id": "pay_8Hq2Lx","status": "pending","provider": "telebirr","amount": 150000, "currency": "ETB"}
How a payment flows
Five stops, one request.
Customer
Pays by phone or card
Your app
One API call
Zafivo
Routes and confirms
Operator or bank
M-Pesa, telebirr, Visa…
Your account
Settled on schedule
Built for production
The details that keep payments correct.
- 01
One format
The same request for every country and method. Change the currency and the phone number, nothing else.
- 02
Signed webhooks
An event for every status change, signed so you can verify it came from Zafivo, and retried until you confirm.
- 03
Idempotency keys
Send the same key twice and get the same result: no double charges on slow or broken networks.
- 04
Sandbox
Test keys, test phone numbers and test cards for every country, with the responses each operator really sends.
- 05
Client libraries
Node.js, PHP, Python and Java, plus a Postman collection.
- 06
Status page
Live health of every operator, bank and network Zafivo connects to.
Webhooks
Know the moment money moves.
Subscribe once and receive every event for every country in the same format.
payment.pendingPOST · signedpayment.succeededPOST · signedpayment.failedPOST · signedrefund.succeededPOST · signedpayout.paidPOST · signedsettlement.createdPOST · signedGet your sandbox keys today.
Tell us what you are building and we will send test keys and a walkthrough of the API.