Send money from your KES account
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.
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
application/json
application/json
curl -X POST "https://example.com/v1/transfers" \ -H "Content-Type: application/json" \ -d '{ "rail": "mpesa", "destination": { "accountNumber": "254712345678", "accountName": "Jane Wanjiku" }, "amount": { "currency": "KES", "value": "1500.00" }, "idempotencyKey": "trf-2026-09-11-000123" }'{ "id": "bd9f1e6a-0000-4000-8000-000000000010", "status": "awaiting_confirmation", "rail": "mpesa", "amount": { "currency": "KES", "value": "1500.00" }, "fee": { "currency": "KES", "value": "1500.00" }, "destination": { "accountNumber": "254712345678", "accountName": "Jane Wanjiku", "bankCode": "11" }, "nameVerification": "verified", "verifiedAccountName": "JANE WANJIKU", "partnerReference": "PS-TRF-000123", "failureCode": "PROVIDER_REJECTED", "createdAt": "2026-09-11T00:00:00.000Z", "confirmedAt": "2026-09-11T00:02:00.000Z", "settledAt": "2026-09-11T00:05: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" }}Send N transfers under one confirmation POST
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.
Send USDT from your wallet to a registered destination POST
Validates the destination against your wallet allowlist (only an active wallet may receive value), checks the amount against our minimum and your caps, then writes the instruction and sends a confirmation code to your registered person. Nothing reaches the chain until that code is verified via POST /v1/confirmations/:id.