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, unless OnLink has enabled confirmation waiving for your account and, in production, the API key has an IP allowlist, in which case the batch is returned already confirmed and is executed immediately.
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": "254700000000", "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", "webhookDelivery": { "status": "delivered", "attempts": 1, "lastAttemptAt": "2026-09-11T00:00:02.000Z" }, "waiverNotApplied": "key_without_ip_allowlist" }}Simulate a USDT deposit for a sell order (sandbox only) POST
Sandbox only. Behaves as if the USDT for this sell order arrived on chain, so you can test your integration end to end without sending any. Attach the transaction hash to the order first with PATCH /v1/orders/{id}. The body may be empty: the order's own amount is used. A different amount sends the order to review. Not available in production: the route answers 404 there.
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 confirmation contact, or to your webhook as confirmation.code_issued if OnLink has switched your account to webhook delivery. Nothing reaches the bank until that code is verified via POST /v1/confirmations/:id, unless OnLink has enabled confirmation waiving for your account and, in production, the API key has an IP allowlist, in which case the transfer is returned already confirmed and is executed immediately.