Language
Tools
Step 5: Send Money to external recipients
Seamlessly disburse payments to your suppliers and employees using the K2 Connect API. Suppliers can receive payments via there Bank Account, Till, or Paybill, while employees can be paid directly into their Bank Accounts or Mobile Wallets.
We will immediately send the money if the destination already exists. If it does not, we will create the destination first before sending the money.
POST https://sandbox.kopokopo.com/api/v2/send_money
Accept: application/json
Content-Type: application/json
Authorization: Bearer 0Sn0W6kzNicvoWhDbQcVSKLRUpGjIdlPSEYyrHqrDDoRnQwE7Q
{
"destinations": [
{
"type": "mobile_wallet",
"nickname": "Jane Doe",
"phone_number": "254900000000",
"network": "Safaricom",
"amount": 1000,
"description": "Reason for payment",
"favourite": true
},
{
"type": "mobile_wallet",
"nickname": "John Doe",
"phone_number": "254900111111",
"network": "Safaricom",
"amount": 1000,
"description": "Reason for payment",
"favourite": true
}
],
"source_identifier": "4321",
"currency": "KES",
"metadata": {
"customerId": "8675309",
"notes": "Salary payment for September 2025"
},
"_links": {
"callback_url": "https://dummy_callback_url/send_money_result"
}
}
HTTP/1.1 201 Created
Location: https://sandbox.kopokopo.com/api/v2/send_money/d76265cd-0951-e511-80da-0aa34a9b2388
your_input = {
destination_type: "bank_account",
destination_reference: "c7f300c0-f1ef-4151-9bbe-005005aa3747",
currency: "KES",
value: 20000,
description: "Salary payment for May 2018",
category: "salaries",
tags: ["tag 1", "tag 2"],
metadata: {
customer_id: "8675309",
notes: "Salary payment for May 2018"
},
callback_url: "https://dummy_callback_url/payment_result"
}
# Using K2Connect - https://github.com/kopokpo/k2-connect-ruby (Recommended)
k2_pay = K2Pay.new('your_access_token')
k2_pay.create_payment(your_input)
k2_pay.payments_location_url # => "https://sandbox.kopokopo.com/api/v2/send_money/d76265cd-0951-e511-80da-0aa34a9b2388"
var destinations = [{
type: "bank_account",
bank_branch_ref: "c7f300c0-f1ef-4151-9bbe-005005aa3747",
account_name: "John Doe",
account_number: "123456789",
nickname: "JD",
amount: "20000",
description: "Salary payment for May 2018",
favourite: true,
}]
var sendMoneyOpts = {
sourceIdentifier: "43219",
currency: "KES",
destinations: destinations,
metadata: {
customerId: "8675309",
notes: "Salary payment for May 2018"
},
callbackUrl: "https://dummy_callback_url/payment_result",
accessToken: 'myRand0mAcc3ssT0k3n'
}
// Using Kopo Kopo Connect - https://github.com/kopokopo/k2-connect-node (Recommended)
const SendMoneyService = K2.SendMoneyService
SendMoneyService.sendMoney(sendMoneyOpts)
.then((response) => {
console.log(response) // => 'https://sandbox.kopokopo.com/api/v2/send_money/d76265cd-0951-e511-80da-0aa34a9b2388
})
.catch((error) => {
console.error(error);
});
send_money_request = {
"type": "bank_account",
"nickname": "JD",
"account_name": "John Doe",
"account_number": "123456789",
"bank_branch_ref": "c7f300c0-f1ef-4151-9bbe-005005aa3747",
"amount": 20000,
"description": "Salary payment for May 2018",
"favourite": True
}
# Using k2-connect - https://github.com/kopokopo/k2-connect-python (Recommended)
send_money_service = k2connect.SendMoney(access_token=access_token)
send_money_location = send_money_service.create_payment(send_money_request)
send_money_location # => 'https://sandbox.kopokopo.com/api/v2/send_money/d76265cd-0951-e511-80da-0aa34a9b2388'
<?
// Using KopoKopoConnect - https://github.com/kopokopo/k2-connect-php (Recommended
$sendMoneyService = $K2->SendMoneyService();
$sendMoneyRequest = [
"destinations" => [
[
"type" => "mobile_wallet",
"amount" => 1000,
"network" => "Safaricom",
"nickname" => "External Wallet 1",
"favourite" => true,
"description" => "Sending money to external mobile wallet 1",
"phoneNumber" => "25490000000"
],
[
"type" => "mobile_wallet",
"amount" => 1000,
"network" => "Safaricom",
"nickname" => "External Wallet 2",
"favourite" => false,
"description" => "Sending money to external mobile wallet 2",
"phoneNumber" => "254900111222"
]
],
"currency" => "KES",
"sourceIdentifier" => "4321",
"metadata" => [
"notes" => "Salary payment for September 2025"
],
"callbackUrl" => "https://dummy_callback_url/send_money_result",
"accessToken" => "myRand0mAcc3ssT0k3n"
];
$response = $sendMoneyService->sendMoney($sendMoneyRequest);
print_r($response); // Array([status] => success, [location] => https://sandbox.kopokopo.com/api/v2/send_money/1854d8ad-3c3c-4842-a965-5d8ea7a3cad7)
// Not Supported
// This feature is not currently available in the Flutter SDK.
// Please use one of the other SDKs (PHP, Ruby, Python, NodeJs) or the REST API.
Bank validation rules
Different banks have different account number formats. To ensure successful bank payments, make sure to follow the validation rules below.
| Bank Name | A/C No. Character Limit | Format | Comment | Copy for validation failure messages |
|---|---|---|---|---|
| Absa | 10 | digits | Numbers only. No letters. No special characters. | Absa Bank account numbers must be 10 digits long. |
| Co-operative Bank | 14 | digits | Numbers only. No letters. No special characters. | Co-operative Bank account numbers must be 14 digits long. |
| Family Bank | 12 | digits | Numbers only. No letters. No special characters. | Family Bank account numbers must be 12 digits long. |
| I&M Bank | 14 | digits | Numbers only. No letters. No special characters. | I&M Bank account numbers must be 14 digits long. |
| KCB | 10 | digits | Numbers only. No letters. No special characters. | Kenya Commercial Bank account numbers must be 10 digits long. |
| Middle East Bank (MEB) | 13 | digits | Numbers only. No letters. No special characters. | Middle East Bank account numbers must be 13 digits long. |
| National Bank of Kenya | 14 | digits | Numbers only. No letters. No special characters. | National Bank of Kenya account numbers must be 14 digits long. |
| NCBA | 10 OR 12 | digits | Numbers only. No letters. No special characters. Either 10 or 12. No 11. | NCBA account numbers must be 10 or 12 digits long. |
| Prime Bank | 10 | digits | Numbers only. No letters. No special characters. | Prime Bank account numbers must be 10 digits long. |
| SBM Bank | 13 | digits | Numbers only. No letters. No special characters. | SBM Bank account numbers must be 13 digits long. |
| Sidian Bank | 14 | digits | Numbers only. No letters. No special characters. | Sidian Bank account numbers must be 14 digits long. |
| Stanbic | 13 | digits | Numbers only. No letters. No special characters. | Stanbic Bank account numbers must be 13 digits long. |
| Standard Chartered | 13 | digits | Numbers only. No letters. No special characters. | Standard Chartered account numbers must be 13 digits long. |
© 2026 Kopo Kopo, Inc.
