Logo GenukaGenuka Pay
API Reference

Payouts API

Initiate disbursements, inspect payout state, and manage recipient payout flows.

Introduction

Use payouts when your product needs to disburse funds to users, suppliers, merchants, or operational partners.

Create Payouts

Send money using either a saved payment method or direct recipient details.

Recipient Flexibility

Support both recurring recipients and one-off disbursement flows.

Operational Tracking

Inspect the current payout state and react to downstream provider changes.

Required Headers

Authenticated Payout Request
X-Public-Key: YOUR_PUBLIC_KEY
X-Timestamp: UNIX_TIMESTAMP
X-Signature: HMAC_SHA256_SIGNATURE

Endpoints

  • GET /api/v1/payouts
  • POST /api/v1/payouts
  • GET /api/v1/payouts/balance
  • GET /api/v1/payouts/{id}
  • POST /api/v1/payouts/{id}/cancel
  • POST /api/v1/payouts/{id}/retry

Create a Payout

Endpoint
POST /api/v1/payouts

Main Request Fields

ParameterTypeRequiredDescription
amountnumberYesPayout amount
currencystringYesISO currency code
countrystringNoRecipient country
payment_method_idstringConditionalExisting saved payout method
recipient_phonestringConditionalRecipient number in E.164 format, e.g. +237677001122
operator_codestringConditionalRecipient operator for direct payout
recipient_first_namestringNoRecipient first name
recipient_last_namestringNoRecipient last name
external_idstringNoMerchant reference
descriptionstringNoBusiness context
metadataobjectNoAdditional merchant metadata

You must provide either:

  • payment_method_id
  • or recipient_phone with operator_code

Valid operator codes are listed in Countries and operators. An unknown or inactive operator_code is rejected with a 422.

Example Request

Create a Direct Payout
curl -X POST "{{BASE_URL}}/api/v1/payouts" \
  -H "X-Public-Key: YOUR_PUBLIC_KEY" \
  -H "X-Timestamp: UNIX_TIMESTAMP" \
  -H "X-Signature: HMAC_SHA256_SIGNATURE" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 25000,
    "currency": "XAF",
    "recipient_phone": "+237677001122",
    "operator_code": "MTN_MOMO",
    "recipient_first_name": "Jean",
    "recipient_last_name": "Mballa",
    "external_id": "payout_9001",
    "description": "Vendor settlement"
  }'

Retrieve a Payout

Endpoint
GET /api/v1/payouts/{id}

Use this endpoint to inspect the latest known payout state after initiation.

Cancel a Payout

Endpoint
POST /api/v1/payouts/{id}/cancel

Cancellation depends on both current internal state and downstream provider state.

Operational Guidance

  • save recipient methods when you need recurring disbursement flows
  • keep external_id aligned with your ledger or payout batch identifiers
  • consume payout webhooks for final state synchronization
  • separate business refusal handling from transient provider failures

Production recommendation

Treat payouts as asynchronous operations. Use direct request responses for immediate UX feedback, but use event delivery and later reconciliation for final accounting.

Retry a Payout

Endpoint
POST /api/v1/payouts/{id}/retry

Retries a failed payout without creating a new transaction.

Available Balance

Endpoint
GET /api/v1/payouts/balance

Your settlement account's payable balance, in the corridor's currency.

Statuses

StatusDescription
AWAITING_APPROVALWaiting for approval before execution
INITIATEDApproved, not yet sent to the operator
PROCESSINGSent, being processed
SUCCESSFunds delivered to the recipient
FAILEDFailed. Can be retried.
EXPIREDNo operator response within the allowed window
CANCELLEDCancelled before execution

Payout minimums vary by operator — read min_payout_amount from the coverage endpoint rather than hard-coding them.

How is this guide?

Last updated on