Supported providers
| Provider | Value | Use case |
|---|---|---|
| M-Pesa B2C | MPESA-B2C | Send money directly to an M-Pesa mobile wallet |
| M-Pesa B2B | MPESA-B2B | Pay to an M-Pesa PayBill or Till number |
| PesaLink | PESALINK | Transfer to a Kenya bank account |
| P2P | P2P | Transfer between Kulmi Pay wallets |
| Airtime | AIRTIME | Top up airtime for a mobile number |
| RTGS | RTGS | High-value real-time gross settlement transfers |
How disbursements work
Every disbursement follows a two-step flow: initiate, then approve. Step 1 — Initiate: You callPOST /api/v1/send-money/initiation/ with your payment details. Kulmi Pay validates the request, creates a payment file, and returns a file_id and tracking_id. The file starts in the PREVIEW-AND-APPROVE state — nothing has been sent yet.
Step 2 — Approve: You call POST /api/v1/send-money/approve/ with the file_id to release the payment. Kulmi Pay then processes each transaction and updates the file status to PROCESSING, then COMPLETED or FAILED.
If you want to skip the manual approval step, set requires_approval: "NO" in your initiation request. Kulmi Pay will approve and queue the payment automatically.
Batch processing
You can include multiple recipients in a single initiation request by passing an array of transactions. All transactions in a batch share the samefile_id and are processed together. This is useful for payroll runs, bulk vendor payments, or any scenario where you’re paying many recipients at once.
Explore disbursements
Send money
Initiate a disbursement to M-Pesa, PesaLink, or another supported provider.
Approve or cancel
Release a payment file for processing, or cancel it before it goes out.
Bank codes
Find the bank code for any Kenyan bank when sending via PesaLink.
API reference
Full request and response reference for all disbursement endpoints.
