Language

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 NameA/C No. Character LimitFormatCommentCopy for validation failure messages
Absa10digitsNumbers only. No letters. No special characters.Absa Bank account numbers must be 10 digits long.
Co-operative Bank14digitsNumbers only. No letters. No special characters.Co-operative Bank account numbers must be 14 digits long.
Family Bank12digitsNumbers only. No letters. No special characters.Family Bank account numbers must be 12 digits long.
I&M Bank14digitsNumbers only. No letters. No special characters.I&M Bank account numbers must be 14 digits long.
KCB10digitsNumbers only. No letters. No special characters.Kenya Commercial Bank account numbers must be 10 digits long.
Middle East Bank (MEB)13digitsNumbers only. No letters. No special characters.Middle East Bank account numbers must be 13 digits long.
National Bank of Kenya14digitsNumbers only. No letters. No special characters.National Bank of Kenya account numbers must be 14 digits long.
NCBA10 OR 12digitsNumbers only. No letters. No special characters. Either 10 or 12. No 11.NCBA account numbers must be 10 or 12 digits long.
Prime Bank10digitsNumbers only. No letters. No special characters.Prime Bank account numbers must be 10 digits long.
SBM Bank13digitsNumbers only. No letters. No special characters.SBM Bank account numbers must be 13 digits long.
Sidian Bank14digitsNumbers only. No letters. No special characters.Sidian Bank account numbers must be 14 digits long.
Stanbic13digitsNumbers only. No letters. No special characters.Stanbic Bank account numbers must be 13 digits long.
Standard Chartered13digitsNumbers only. No letters. No special characters.Standard Chartered account numbers must be 13 digits long.