Skip to main content
POST
Initiate a payout

Overview

POST /payment/payout initiates a pay-out: it sends money from your company’s pay-out wallet to a mobile-money account. Cartevo:
  1. Calculates the total cost (amount + payout fee).
  2. Verifies the pay-out wallet has sufficient balance.
  3. Reserves the funds atomically.
  4. Submits the disbursement to the operator.
  5. If the disbursement fails permanently, automatically refunds the reserved funds back to your wallet.
The call returns immediately with status: PENDING; the final outcome reaches you via webhook (or via notify_url).

When to use it

  • Disburse salaries, payouts, refunds, or commissions to end users.
  • Power any “send money” feature in your product.
For the reverse direction (charging an end user), use POST /payment/collect.

Prerequisites

  • Your company has a wallet for the requested (country, currency) pair.
  • The wallet’s payout_balance is at least amount + fee. (Use POST /wallets/calculate-transfer-fees — currently undocumented — or estimate from your fee schedule.)
  • The combination of country, currency, and operator is supported — see Payment guidelines.

Request

Headers

Body

Response

200 — Payout initiated

Lifecycle and atomic behavior

  • On PENDING / PROCESSING: the funds are reserved in your wallet but not yet visible as deducted.
  • On SUCCESS: the reserved funds are released to the operator. The recipient is credited.
  • On FAILED: the reserved funds are returned to your wallet automatically. No manual reconciliation needed.

Error responses

Webhooks fired

  • A status-update webhook is sent on each transition (PENDINGPROCESSINGSUCCESS/FAILED).
  • If you supplied notify_url, it receives the same updates.

Code examples

cURL
Node.js (axios)

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Body

application/json
operator
enum<string>
required
Available options:
mtn,
orange,
moov,
airtel,
mpesa,
afrimoney,
vodacom,
wave,
wligdicash,
expresso,
free,
tmoney,
celtiis,
coris
Example:

"mtn"

country
string
required
Pattern: ^[A-Z]{2}$
Example:

"CM"

phone_number
string
required
Example:

"237670000000"

amount
number
required
Required range: x >= 1
Example:

1000

currency
string
required
Example:

"XAF"

notify_url
string
Example:

"https://example.com/webhook/payout"

external_id
string

Idempotency key (up to 255 chars). Duplicate values are rejected with 400 after the first call. Auto-generated if omitted.

reference_id
string

Free-form reference shown in the dashboard (up to 255 chars).

lang
string

Two-letter language code for operator-side prompts (e.g. en, fr).

purpose
string

Free-form description of the payout's purpose.

Response

Payout initiated successfully

success
boolean
Example:

true

message
string
Example:

"Payout initiated successfully"

data
object