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 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.
Request
- Base URLhttps://sandbox.onlink.africa
- AuthAPI key in header X-OnLink-Key
Request body
Example request
{
"rail": "mpesa",
"destination": {
"accountNumber": "254700000000",
"accountName": "Jane Wanjiku",
"bankCode": "11",
"bankName": "Equity Bank",
"branchCode": "001",
"swift": {
"bic": "BARCKENXXXX",
"bankCity": "Nairobi",
"bankCountry": "Kenya",
"chargeType": "OUR",
"accountCurrency": "KES"
}
},
"amount": {
"currency": "KES",
"value": "1500.00"
},
"partnerReference": "ACME-TRF-000123",
"idempotencyKey": "trf-2026-09-11-000123",
"paymentPurposeId": "SALA",
"senderAddress": "1 Kenyatta Ave, Nairobi",
"remark": "September rent"
}Response
The instruction was created. Normally a confirmation code is sent and the response carries a confirmation object. When OnLink has enabled confirmation waiving for your account and, in production, the API key has an IP allowlist, the transfer is created already confirmed, executes immediately, and the response carries no confirmation object.
Example response
{
"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": "254700000000",
"accountName": "Jane Wanjiku",
"bankCode": "11"
},
"nameVerification": "verified",
"verifiedAccountName": "JANE WANJIKU",
"partnerReference": "ACME-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",
"webhookDelivery": {
"status": "delivered",
"attempts": 1,
"lastAttemptAt": "2026-09-11T00:00:02.000Z"
},
"waiverNotApplied": "key_without_ip_allowlist"
}
}Changes
No recorded changes to this operation across all 1 revision of this API.