---
title: "Initiate B2C payout"
method: POST
path: "/b2c/payouts"
tags: ["B2C Payouts"]
---

# Initiate B2C payout

`POST /b2c/payouts`

Sends money directly to a customer's M-Pesa mobile number.

**Requirements before calling this endpoint:**
- Account KYC must be approved.
- B2C wallet must have sufficient balance.
- Minimum payout: KES 10.

Payouts are processed **asynchronously**. The initial response confirms the
payout was queued. The final result is delivered to your `callbackUrl` and the
transaction status updates to `SUCCESS` or `FAILED`.

On failure, the debited wallet balance is automatically reversed.

## Request body

- B2cPayoutRequest
  - `amount` number, required — Payout amount in KES. Minimum KES 10.
  - `currency` string — Currency code. Currently only `KES` is supported.
  - `phone` string, required — Recipient M-Pesa phone number.
  - `reference` string, required — Your reference for this payout (e.g. withdrawal ID).
  - `description` string — Short description of the payout purpose.
  - `channelId` string, uuid, nullable — Optional channel to use for this payout.
  - `callbackUrl` string, uri — HTTPS URL to receive the payout result. PalPluss POSTs the terminal transaction payload here when the status reaches `SUCCESS` or `FAILED`.

## Response `200`

Payout queued successfully. Transaction is in `PENDING` state.

- object
  - `success` boolean, required
  - `data` object, required — Response payload. Shape varies by endpoint.
    - `transactionId` string, uuid
    - `tenantId` string, uuid
    - `channelId` string, uuid, nullable
    - `type` string
    - `status` string
    - `amount` number
    - `currency` string
    - `phone` string
    - `reference` string
    - `description` string, nullable
    - `resultDescription` string
    - `createdAt` string, date-time
    - `updatedAt` string, date-time
  - `requestId` string, uuid, required — Unique identifier for this API request. Include in support tickets.

## Other responses

- `400` — Validation error — check the request body or parameters.
- `401` — Missing, invalid, or revoked API key.
- `402` — Service wallet balance is too low to cover the transaction fee.
- `403` — Access denied. Possible reasons: - `ACCOUNT_INACTIVE` — your account is not active. - `KYC_NOT_VERIFIED` — KYC approval is required before making B2C payouts.
- `409` — Conflict — wallet inactive or insufficient funds.
- `429` — Rate limit exceeded — 60 requests per minute per API key.

---

[API](https://skmtc.dev/palpluss/apis/palpluss-api.md) · [All operations](https://skmtc.dev/palpluss/apis/palpluss-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/palpluss/palpluss-api/revisions/33fd40a3b314/schema)
