# Payout providers

The `provider` field picks the payout rail. IntaSend then routes the payment to the best
available processor for that provider, currency and country.

| `provider` | Pays to | Countries | Currency | Key fields |
|---|---|---|---|---|
| `MPESA-B2C` | M-Pesa phone number | KE | KES | `account` = phone. Minimum KES 10. |
| `MPESA-B2B` | M-Pesa till or paybill | KE | KES | `account`, `account_type`, plus `account_reference` for paybills |
| `PESALINK` | Bank account (instant) | KE | KES | `account`, `bank_code`. Min KES 100, max KES 999,999. |
| `RTGS` | Bank account (high value) | KE | KES | `account`, `bank_code`, `name`. Min KES 100. |
| `EFT` | Bank account | KE | KES | `account`, `bank_code`, `name`. Min KES 100. |
| `INTASEND` | Another IntaSend account | Any | Any wallet currency | `account` = recipient's IntaSend account |
| `AIRTIME` | Airtime top-up | KE | KES | `account` = phone. **Live only.** |
| `KPLC` | Kenya Power prepaid token | KE | KES | `account` = meter number, `notify_phone` |
| `INTASEND-XB` | Cross-border mobile money (bank in NG) | UG, TZ, RW, GH, NG, CD, SN, CI, BF, CM, and more | Local currency | `country`, `account` in international format |
| `INTASEND-XB-BANK` | Bank account in Uganda | UG | UGX | `account`, `bank_code`, `name` |

For request examples per country, see **[Countries](https://developers.intasend.com/countries)**.

## Phone number format

- **Kenya (M-Pesa, airtime):** `2547XXXXXXXX`, `07XXXXXXXX` and `7XXXXXXXX` are all accepted.
- **Cross-border (`INTASEND-XB`):** use the full international format **without** `+`,
  for example `256772123456` (UG), `255754123456` (TZ), `250788123456` (RW), `233241234567` (GH).

The `account` field accepts digits only.

## M-Pesa B2B (till and paybill)

```json
{
  "currency": "KES",
  "provider": "MPESA-B2B",
  "transactions": [
    {"name": "KPLC", "account": "888880", "account_type": "PayBill", "account_reference": "12345678", "amount": "500", "narrative": "Bill"},
    {"account": "174379", "account_type": "TillNumber", "amount": "200"}
  ]
}
```

B2B amounts are rounded to whole shillings.

## Bank transfers (Kenya)

Use `PESALINK` for instant transfers up to KES 999,999, and `RTGS` for higher values. Get the
`bank_code` from [`GET /send-money/bank-codes/ke/`](https://developers.intasend.com/guides/send-money/validate-accounts/#bank-codes).

```json
{
  "currency": "KES",
  "provider": "PESALINK",
  "transactions": [
    {"name": "John Doe", "account": "0123456789012", "bank_code": "68", "amount": "1000", "narrative": "Invoice 22"}
  ]
}
```

PesaLink amounts are rounded to whole shillings, and narratives are shortened to 20 characters.
Some bank routes need an [OTP confirmation](https://developers.intasend.com/guides/send-money/approval-and-otp/#otp-confirmation) per transaction.

## IntaSend wallet transfers

`INTASEND` moves funds instantly to another IntaSend account's settlement wallet in the same
currency. It works for every wallet currency, including USD, EUR and GBP.

## KPLC tokens

```json
{
  "currency": "KES",
  "provider": "KPLC",
  "transactions": [{"account": "37123456789", "amount": "500", "notify_phone": "254712345678"}]
}
```

IntaSend validates the meter before paying. The token is sent to `notify_phone`.

## Limits

All payouts are also subject to your account tier limits (per transaction and per day) and to your
wallet balance, including charges. Requests that exceed them fail with a clear error message.
See [Errors](https://developers.intasend.com/guides/errors/).
