Pay-out
Send money to a mobile money account.
POST /api/v1/pay-out/transfer sends money out to a beneficiary's mobile money account — the reverse of a charge.
No idempotency protection on this endpoint
Unlike charges, transfers have no idempotencyKey field, and no
deduplication at any layer — not in the request body, not as a database
constraint. If your client retries a transfer request after a timeout
without checking first whether it already landed, you can send the money
twice. Check the transaction's status before retrying a transfer that
didn't get a clean response.
| Field | Type | Required | Description |
|---|---|---|---|
amount | number | Yes | Integer amount in the currency's base unit. Minimum 1. |
currency | string | Yes | ISO 4217 currency code, e.g. "XAF". |
paymentMethod | string | Yes | Provider code, e.g. "MTN_MOMO_CM". |
beneficiaryAccount | string | Yes | The phone number to credit. Max 100 characters. |
beneficiaryName | string | Yes | Max 255 characters. |
beneficiaryEmail | string | No | Max 255 characters. |
merchantReference | string | No | Your own reference, echoed back. |
description | string | No | Max 255 characters. |
curl -X POST https://api.orivantapay.com/api/v1/pay-out/transfer \
-H "X-API-KEY: sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"amount": 25000,
"currency": "XAF",
"paymentMethod": "MTN_MOMO_CM",
"beneficiaryAccount": "670000000",
"beneficiaryName": "Amina Ndongo",
"merchantReference": "payout-2024-001"
}'Response — 201 Created:
{
"success": true,
"code": "SUCCESS",
"message": "Transfert initié.",
"data": {
"reference": "PO-C3D4E5F6A1B2",
"status": "PENDING",
"amount": 25000,
"currency": "XAF",
"description": null,
"paymentMethod": "MTN_MOMO_CM",
"beneficiaryAccount": "670000000",
"beneficiaryName": "Amina Ndongo",
"beneficiaryEmail": null
},
"timestamp": "2026-09-05T10:00:00.000"
}Checking status
GET /api/v1/pay-out/check_status/{reference} — same shape as pay-in status, with beneficiary fields instead of payer fields and no type (transfers have only one shape, unlike pay-ins which distinguish checkout/charge/fund-collection).
Status values are the same PENDING/SUCCESS/FAILED/CANCELLED/REFUNDED set used everywhere else in the API.