Send N transfers under one confirmation
A loop over POST /v1/transfers behind a single confirmation code (spec §2.3). Each item is validated exactly as a single transfer would be; a failed item is reported with its refusal reason and the rest proceed. Nothing reaches the bank until the one code is verified via POST /v1/confirmations/:id.
Authorization
partner-key In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
curl -X POST "https://example.com/v1/transfers/batch" \ -H "Content-Type: application/json" \ -d '{ "idempotencyKey": "batch-2026-09-16-000001", "items": [ { "rail": "mpesa", "destination": { "accountNumber": "254712345678", "accountName": "Jane Wanjiku" }, "amount": { "currency": "KES", "value": "1500.00" }, "idempotencyKey": "trf-2026-09-11-000123" } ] }'{ "id": "be9f1e6a-0000-4000-8000-000000000040", "status": "awaiting_confirmation", "itemCount": 0, "acceptedCount": 0, "failedCount": 0, "items": [ { "transferId": "bd9f1e6a-0000-4000-8000-000000000010", "idempotencyKey": "trf-2026-09-16-000123", "accepted": true, "failureCode": "TRANSFER_NAME_MISMATCH" } ], "createdAt": "2026-09-16T00:00:00.000Z", "confirmedAt": "2026-09-16T00:02:00.000Z", "confirmation": { "id": "df9f1e6a-0000-4000-8000-000000000030", "channel": "email", "deliveredTo": "o***@partner.co.ke", "expiresAt": "2026-09-11T00:15:00.000Z", "resendAvailableAt": "2026-09-11T00:00:15.000Z" }}Ask a payer to send you KES over M-PESA POST
Sends an STK Push prompt to the number you name. The payer approves it on their own handset with their PIN — there is no OTP for you to handle and no way for you to complete it on their behalf. The deposit lands in your own KES account, which is resolved from your verified business and is not something you can specify. This returns as soon as the prompt is out, so treat the response as pending: the completion signal is the credit.received webhook, and a prompt the payer declines or ignores produces no event at all. There is no idempotency key. A repeated call is a second prompt, and if the payer approves both then both deposits land and each raises its own credit.received.
Send money from your KES account POST
Validates the destination, verifies the beneficiary name where the rail supports it, checks your caps and balance, then writes the instruction and sends a confirmation code to your registered person. Nothing reaches the bank until that code is verified via POST /v1/confirmations/:id.