---
title: Introduction
description: 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](/guides/payout-batches).
- **Share a payment link.** See [Hosted checkouts](/guides/hosted-checkouts).
- **Buy airtime and data** for a mobile number. See [Utility purchases](/guides/utility-purchases).
- **Settle** your wallet to your own accounts, on a schedule or now. See [Settlements](/guides/settlements).
- **Pay another business** from your wallet by its handle. See [Wallet transfers](/guides/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](/guides/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](/guides/utility-purchases): those send real airtime and data in test too.

Build and check everything in test first. When it works, follow [Going live](/guides/going-live).

## What to read next

**[Quickstart](/guides/quickstart)**

Make your first collection.

**[Authentication](/guides/authentication)**

Get and refresh a token.

**[Webhooks](/guides/webhooks)**

Get told when a payment changes.

**[API reference](/reference)**

Every route, request and response.

## Conventions

- Money is a decimal string in major units, such as `"120.00"`. See [Money and fees](/guides/money-and-fees).
- Errors look like `{"error":{"code":"...","message":"..."}}`. See [Errors](/guides/errors).
- Every response has a `Request-Id` header. Quote it if you contact support.
- Each key has a rate limit. Past it you get `429 rate_limited` with a `Retry-After` header. Wait that many seconds, then retry.
