Introduction
What the iSmartPay API does, and how test and live differ.
The iSmartPay API lets your business take money from customers and send money to them. Payments run over mobile money.
You can:
- Collect. Ask a customer to pay you. They approve on their phone.
- Pay out. Send money from your wallet to a customer’s mobile money account.
- Pay out in bulk. Send up to 100 payouts in one request. See Payout batches.
- Share a payment link. See Hosted checkouts.
- Buy airtime and data for a mobile number. See Utility purchases.
- Settle your wallet to your own accounts, on a schedule or now. See Settlements.
- Pay another business from your wallet by its handle. See Wallet transfers.
- Check fees, limits and balance before you move money.
- Get webhooks when a payment changes state, and catch up on any you missed. See Transactions and events.
All routes live under /v1. Requests and responses are JSON. Every call carries a bearer token.
Test and live
iSmartPay runs two separate environments: test and live. You use one account for both, and verify your business once.
- Each has its own base URL and its own console.
- Each has its own keys and its own webhook endpoints.
- A key only works in the environment that made it. A test key sent to live is rejected with
403 environment_mismatch, and so is a live key sent to test. - Test moves no real money, except for utility purchases: those send real airtime and data in test too.
Build and check everything in test first. When it works, follow Going live.
What to read next
Quickstart
Make your first collection.
Authentication
Get and refresh a token.
Webhooks
Get told when a payment changes.
API reference
Every route, request and response.
Conventions
- Money is a decimal string in major units, such as
"120.00". See Money and fees. - Errors look like
{"error":{"code":"...","message":"..."}}. See Errors. - Every response has a
Request-Idheader. Quote it if you contact support. - Each key has a rate limit. Past it you get
429 rate_limitedwith aRetry-Afterheader. Wait that many seconds, then retry.