Skip to main content

Kenya

CurrencyKES
Country codeKE (the default. You don't need to send country)
Phone format2547XXXXXXXX, 2541XXXXXXXX, 07XXXXXXXX or 01XXXXXXXX

Collect​

MethodEndpointGuide
M-Pesa STK PushPOST /payment/mpesa-stk-push/Guide
Checkout (M-Pesa, card, Apple Pay, Google Pay, PesaLink)POST /checkout/Guide
Customer account numbers (bank or paybill)POST /payment/create_customer_reference/Guide
Co-op agent depositPOST /payment/coop-agent-deposit/Guide

M-Pesa STK Push​

curl -X POST https://api.intasend.com/api/v1/payment/mpesa-stk-push/ \
-H "Authorization: Bearer $INTASEND_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{
"amount": 100,
"phone_number": "254712345678",
"api_ref": "order-123"
}'

Send money​

providerPays toRequired fieldsLimits
MPESA-B2CM-Pesa phoneaccountMin KES 10
MPESA-B2BTill / paybillaccount, account_type, account_reference (paybill)Whole shillings
PESALINKBank (instant)account, bank_codeKES 100 to 999,999
RTGSBank (high value)account, bank_code, nameMin KES 100
EFTBankaccount, bank_code, nameMin KES 100
AIRTIMEAirtimeaccount (phone)Live only
KPLCPrepaid electricity tokenaccount (meter), notify_phone
INTASENDIntaSend accountaccount

M-Pesa (B2C)​

curl -X POST https://api.intasend.com/api/v1/send-money/initiate/ \
-H "Authorization: Bearer $INTASEND_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{
"currency": "KES",
"provider": "MPESA-B2C",
"requires_approval": "NO",
"callback_url": "https://example.com/intasend/payouts",
"transactions": [
{
"name": "Jane Doe",
"account": "254712345678",
"amount": "150",
"narrative": "Salary"
}
]
}'

Till and paybill (B2B)​

curl -X POST https://api.intasend.com/api/v1/send-money/initiate/ \
-H "Authorization: Bearer $INTASEND_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{
"currency": "KES",
"provider": "MPESA-B2B",
"transactions": [
{
"account": "888880",
"account_type": "PayBill",
"account_reference": "12345678",
"amount": "500",
"narrative": "Bill"
},
{
"account": "174379",
"account_type": "TillNumber",
"amount": "200",
"narrative": "Stock"
}
]
}'

Get bank_code from GET /send-money/bank-codes/ke/. Use RTGS above KES 999,999.

curl -X POST https://api.intasend.com/api/v1/send-money/initiate/ \
-H "Authorization: Bearer $INTASEND_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{
"currency": "KES",
"provider": "PESALINK",
"transactions": [
{
"name": "John Doe",
"account": "0123456789012",
"bank_code": "68",
"amount": "1000",
"narrative": "Invoice 22"
}
]
}'

Some bank routes need an OTP confirmation per transaction.

KPLC tokens​

curl -X POST https://api.intasend.com/api/v1/send-money/initiate/ \
-H "Authorization: Bearer $INTASEND_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{
"currency": "KES",
"provider": "KPLC",
"transactions": [
{
"account": "37123456789",
"amount": "500",
"notify_phone": "254712345678"
}
]
}'

Validate before paying​

M-Pesa, till/paybill and PesaLink accounts can be looked up first:

curl -X POST https://api.intasend.com/api/v1/send-money/validate-accounts/ \
-H "Authorization: Bearer $INTASEND_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{
"provider": "MPESA-B2B",
"account": "888880",
"account_type": "PayBill"
}'