Initiate Payout
Payouts
Initiate Payout
Send money to a customer using Waftpay Payouts API.
POST
Initiate Payout
Overview
Use the Payouts API to disburse funds from your Waftpay wallet to a customer, vendor, or partner. Payouts are asynchronous: you receive an acceptance response immediately, then a final outcome via webhook. This call is idempotent. Reuse the sametransaction.reference to safely retry the same logical payout.
Authentication and signature
Required headers| Header | Required | Notes |
|---|---|---|
Authorization | Yes | Bearer <payout_token> (payout product token only) |
X-Custom-Signature | Yes | Base64 RSA signature. See Signature generation. |
Content-Type | Yes | application/json |
Request body
Top-level fields| Field | Type | Required | Notes |
|---|---|---|---|
transaction | object | Yes | Payout details and idempotency reference. |
originator | object | Yes | Sender details. |
recipient | object | Yes | Recipient details. |
callback_url | string | Yes | HTTPS URL for final status callbacks. |
meta | object | No | Arbitrary key/value metadata echoed in callbacks. |
| Field | Type | Required | Notes |
|---|---|---|---|
reference | string | Yes | Client-generated unique reference (idempotency key). |
amount | integer | Yes | Amount in major units (e.g., 1000 = 1000 KES). |
currency | string | Yes | ISO 4217 currency code (e.g., KES, USD). |
description | string | Yes | Short narrative for the payout. |
service_code | string | Yes | Service to use (e.g., MPESAB2C). |
timestamp | string | Yes | ISO 8601 UTC timestamp (must end with Z). |
| Field | Type | Required | Notes |
|---|---|---|---|
msisdn | string | Yes | MSISDN format (e.g., 2547XXXXXXXX). |
channel | string | Yes | Initiation channel (e.g., USSD, API). |
country | string | Yes | ISO 3166-1 country code (e.g., KE). |
name | string | Yes | Originator name. |
purpose | string | Yes | Reason for the payout. |
| Field | Type | Required | Notes |
|---|---|---|---|
reference | string | Yes | Client-generated reference for recipient-side tracking. |
account | string | Yes | Recipient account identifier (phone, wallet, bank account). |
name | string | Yes | Recipient full name. |
destination_code | string | Yes | Destination code for the recipient corridor or payout rail. |
Example request
Example response (accepted)
Notes
- Final outcome is delivered via webhook. See Webhooks overview.
- Errors follow the standard error shape. See Errors.
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
Base64 RSA signature over: transaction.reference + transaction.amount + originator.country + transaction.service_code
Body
application/json
