Payment methods
Last updated: 2026-07-17
Select a payment method from the account catalog before creating a payment. Availability depends on the direction, market, environment, and request context.
Request enum values
| Value | Pay-in | Payout | Notes |
|---|---|---|---|
PAYMENT_METHOD_BANK_ACCOUNT | Yes | Yes | Use bank discovery when the flow needs a bank code |
PAYMENT_METHOD_BANK_TRANSFER | Yes | No | Hosted or direct pay-in; optional public submethod moniepoint |
PAYMENT_METHOD_MOBILE_MONEY | Yes | Yes | Use operator discovery when merchant-side selection is required |
PAYMENT_METHOD_MOBILE_MONEY_TRANSFER | Yes | No | Customer-initiated transfer; discover the inbound rail with pay-in operator discovery |
PAYMENT_METHOD_TEST | Non-production only | Non-production only | Use only for test flows |
PAYMENT_METHOD_CARD | No | No | The enum exists, but merchant create operations reject it |
Discover availability
GET /merchant/api/v1/catalog returns the markets enabled for your account.
Each market contains countryCode, currencyCode, methodsIn, and
methodsOut.
Catalog values such as mobile_money, mobile_money_transfer, bank_transfer,
and bank_account are discovery tokens. Payment requests use the corresponding
PAYMENT_METHOD_* enum value.
After choosing a market and method:
- use pay-in bank or operator discovery for a direct inbound flow;
- use payout bank or operator discovery for an outbound flow;
- reuse returned bank and operator codes exactly as returned.
Do not hard-code account availability from this page. Discover it at runtime and handle a method becoming unavailable before payment creation.
Test method controls
PAYMENT_METHOD_TEST is available only in non-production environments. For a
direct pay-in or payout, send a testDetails object with one of these status
values:
testDetails.status | Resulting paymentOrder.status |
|---|---|
pending | PAYMENT_ORDER_STATUS_PENDING |
completed | PAYMENT_ORDER_STATUS_COMPLETED |
failed | PAYMENT_ORDER_STATUS_FAILED |
cancelled | PAYMENT_ORDER_STATUS_CANCELLED |
expired | PAYMENT_ORDER_STATUS_EXPIRED |
The optional error value forces the test request to fail instead of returning
the selected payment outcome. The optional providerError value supplies a
simulated partner failure detail when the selected negative outcome uses one.
These controls do not reproduce production accounting effects; use them to test
request and status-handling paths only.
Keep request context aligned
Use the selected market country and currency when creating the payment. Send
the same paymentMethod, trafficVertical, and customerSegment context in
discovery and create requests.
For standard mobile-money pay-ins and payouts, treat the returned public CAPS
operator as opaque and reuse it exactly. Hosted standard mobile money sends it
when the selected market requires an operator. Mobile money transfer always
discovers and sends a transfer rail code: use mobileMoneyOperator for hosted
initialization or mobileMoneyTransferDetails.operator for direct creation.
Voucher-based standard mobile-money pay-ins add a voucher PIN only when the
selected route requires one.