> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kemypay.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Countries and operators

> Read the live list, the status of each operator, the limits and your price

[`GET /mobile-money/countries`](https://docs.kemypay.com/api-reference/catalog/countries) returns the countries open to your account, their operators, and for each operator and currency: the live status, the minimum and maximum amount, the decimals and **your all-in price**. That is everything you need to build a payment screen.

```bash theme={null}
curl "https://api.kemypay.com/v1/mobile-money/countries?country=CMR" \
  -H "Authorization: Bearer sk_live_YOUR_KEY"
```

```json theme={null}
{
  "country": "CMR",
  "name": "Cameroon",
  "currencies": ["XAF"],
  "operators": [
    {
      "operator": "ORANGE_CMR",
      "name": "Orange",
      "currency": "XAF",
      "decimals": 0,
      "collection": { "status": "closed", "available": false, "min_amount": "1.00", "max_amount": "1000000.00",
                      "fee": { "percent": "3.27", "fixed_tiers": [], "fixed_currency": null } },
      "payout":     { "status": "operational", "available": true, "min_amount": "1.00", "max_amount": "1000000.00",
                      "fee": { "percent": "2", "fixed_tiers": [], "fixed_currency": null } },
      "refund":     { "status": "operational", "available": false, "min_amount": "1.00", "max_amount": "1000000.00", "fee": null }
    }
  ]
}
```

## Codes

* Countries use **ISO 3166-1 alpha-3** codes (`CMR`, `CIV`, `COD`), currencies ISO 4217 (`XAF`, `XOF`, `KES`).
* Each operator has a **stable code**: brand and country, for example `MTN_CMR` or `ORANGE_CIV`. **Store this code**, not the name.

## Read the status before you show an operator

| `status` | Meaning | `available` |
| - | - | - |
| `operational` | Works normally | `true` |
| `delayed` | Problems at the operator. Payouts and refunds are queued; collections are not offered | `true` for payouts and refunds, `false` for collections |
| `closed` | The operator rejects every request right now | `false` |
| `unavailable` | This operation does not exist for this operator | `false` |

**Use `available`.** Hide an operator from your payment screen when `collection.available` is `false`, and offer the others of the country. A closed operator is often back within minutes or hours.

Payouts and refunds are not open yet: their status is shown for information, and refunds have no price yet (`fee: null`).

## Amounts and decimals

* `min_amount` and `max_amount` apply to **what the customer pays**, per transaction.
* `decimals` is the number of decimals accepted **by this operator**. `0` means whole amounts only (`5000`, not `5000.50`).

> [!WARNING]
>
> Decimals depend on the **operator**, not only on the currency. In Uganda, `MTN_UGA` accepts 2 decimals and `AIRTEL_UGA` none, both in UGX. Round to the `decimals` of the operator your customer picked.

## Countries enabled for your account

Every country is enabled by default. A country disabled for your account disappears from the list, and asking for it returns `422 COUNTRY_NOT_SUPPORTED`. Contact [support](mailto:hi@kemypay.com) if you need it.

## Best practices

> **Cache the list for a few minutes**
>
> Operator data is refreshed every 10 minutes on our side. Cache it on your server instead of calling the API on every page view.

> **Never hardcode limits, decimals or prices**
>
> Operators change them, sometimes without notice. Read them from the API.

> **Not sure which operator a number belongs to?**
>
> Call [`POST /mobile-money/predict-operator`](https://docs.kemypay.com/api-reference/collections/predict-operator), or leave `operator` empty when you request a payment: we guess it from the number.

See the full list in [Supported countries](https://docs.kemypay.com/supported-countries/mobile-money.md).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.