Skip to main content

Documentation Index

Fetch the complete documentation index at: https://developers.kulmipay.com/llms.txt

Use this file to discover all available pages before exploring further.

Send Money lets you disburse funds from a KulmiPay wallet to one or many recipients. Use it for salaries, supplier payments, customer refunds, agent commissions, marketplace settlements, and wallet-to-wallet transfers. The flow is built around a payment file. You initiate a file with one or more transactions, optionally approve it, then track its status until every transaction is complete or failed.

Supported payout types

Payout typeProvider valueUse case
M-Pesa B2CMPESA-B2CSend to a customer’s M-Pesa wallet
M-Pesa B2BMPESA-B2BPay an M-Pesa PayBill or Till number
Bank payoutsPESALINKSend to a Kenyan bank account through PesaLink
KulmiPay P2PP2PTransfer between KulmiPay wallets/accounts

How it works

1

Initiate a payment file

Call POST /api/v1/send-money/initiate/ with the provider, currency, and transactions array.
2

Approve or auto-approve

If requires_approval is "YES", approve the file with POST /api/v1/send-money/approve/ and include the returned transaction IDs. If it is "NO", KulmiPay queues the file immediately.
3

Track transaction status

Call POST /api/v1/send-money/status/ with the tracking_id, or listen for callbacks on your callback_url.

API limits

The transactions field is an array, so you can submit multiple recipients in one request. Use batches for payroll, vendor payouts, and other bulk workflows. For large batches, keep your own batch_reference and per-transaction idempotency_key values so you can reconcile safely and avoid duplicate payouts during retries.

Authentication

Send Money endpoints require a secret key:
Authorization: Bearer ISSecretKey_live_xxxxxxxxxxxxxxxx
Use sandbox keys with https://sandbox.kulmipay.com while testing, then switch to live keys with https://app.kulmipay.com.

PHP SDK example

<?php

require_once __DIR__ . "/vendor/autoload.php";

use KulmiPay\KulmiPayPHP\Transfer;

$transfer = new Transfer();
$transfer->init([
    "token" => "ISSecretKey_live_xxxxxxxxxxxxxxxx",
]);

$transactions = [
    [
        "name" => "Jane Doe",
        "account" => "254712345678",
        "amount" => "1000",
        "narrative" => "Refund",
        "idempotency_key" => "refund-1001",
    ],
];

$response = $transfer->mpesa("KES", $transactions, "YES");
$status = $transfer->status($response->tracking_id);
Use $transfer->mpesa_b2b(...) for M-Pesa Till or PayBill payouts, $transfer->bank(...) for PesaLink bank payouts, and $transfer->p2p(...) for KulmiPay wallet transfers.

Next steps

M-Pesa B2C

Send money directly to M-Pesa wallets.

M-Pesa B2B

Pay M-Pesa Till and PayBill numbers.

Bank Payouts

Send money to Kenyan bank accounts through PesaLink.

Transaction Status

Track payout files and individual transactions.

KulmiPay P2P

Transfer funds between KulmiPay wallets or accounts.