Payment Docs
PayoutsAfrica

Kenya

Mobile money and bank account payouts in KES

Before you start

This payout destination is not enabled for all merchants. Check availability with your manager, and make sure your merchant balance is sufficient before creating a payout.

Overview

CurrencyCountry codeDestinationpaymentType
KESKEMobile money: M-Pesa, Airtel, T-KashSIM
KESKEBank transferBANK_ACCOUNT

Every operator or bank method is a separate payout service. Get the services enabled for you with GET /v1/payouts/services and pass the serviceId of the one you need; without it your default service is used.

The recipient must be a client of the operator of the selected service: a payout through an MTN service cannot reach an Orange wallet.

The required set depends on the service enabled for you. If a field it needs is missing, the phone does not match the country or the payment type does not match the service, the payout is rejected with 400 before it is created and nothing is debited. Send userEmail whenever you have it.

account fields

FieldTypeRequiredDescription
namestring✅ YesRecipient name
requisitesstring✅ YesRecipient requisites: card number, phone number, PIX key, etc., depending on paymentType
userIdstring✅ YesUser ID in your system
FieldTypeRequiredDescription
requisitesstring✅ YesRecipient wallet phone in the international format, digits only, without +: 254712345678
userEmailstring⚠️ Depends on the serviceRecipient email
userIpstring❌ NoRecipient IP address

Request example

curl -X POST "https://api.1capital.capital/v1/payouts" \
  -H "Content-Type: application/json" \
  -H "X-Api-Token: YOUR_API_TOKEN" \
  -d '{
    "amount": 5000,
    "currency": "KES",
    "paymentType": "SIM",
    "serviceId": 123,
    "externalId": "payout-123",
    "account": {
      "name": "John Doe",
      "requisites": "254712345678",
      "userId": "user_12345",
      "userEmail": "john.doe@example.com"
    },
    "note": "Payout for order #1234"
  }'

Get the bank code

Bank transfer services need the recipient bank. Request the bank list for the service and pass the chosen id as account.bankName:

curl -X GET "https://api.1capital.capital/v1/payouts/banks?serviceId=123" \
  -H "X-Api-Token: YOUR_API_TOKEN"
{
  "data": [
    { "id": "000013", "name": "Example Bank" },
    { "id": "000014", "name": "Another Bank" }
  ]
}

account fields

FieldTypeRequiredDescription
namestring✅ YesRecipient name
requisitesstring✅ YesRecipient requisites: card number, phone number, PIX key, etc., depending on paymentType
userIdstring✅ YesUser ID in your system
FieldTypeRequiredDescription
requisitesstring✅ YesRecipient bank account number
bankNamestring✅ YesRecipient bank: the id from GET /v1/payouts/banks?serviceId=…
userEmailstring❌ NoRecipient email
userIpstring❌ NoRecipient IP address

Request example

curl -X POST "https://api.1capital.capital/v1/payouts" \
  -H "Content-Type: application/json" \
  -H "X-Api-Token: YOUR_API_TOKEN" \
  -d '{
    "amount": 5000,
    "currency": "KES",
    "paymentType": "BANK_ACCOUNT",
    "serviceId": 123,
    "externalId": "payout-123",
    "account": {
      "name": "John Doe",
      "requisites": "0123456789012",
      "userId": "user_12345",
      "bankName": "000013"
    },
    "note": "Payout for order #1234"
  }'

Send KES amounts as whole numbers: some services do not accept fractional amounts.

Response

The response is a standard payout object with the CREATED status. Store the id to track the payout.

Payout object fields

The final status usually arrives within a few minutes.

Next steps

On this page