For the complete documentation index, see llms.txt. This page is also available as Markdown.

Fiat to Merchant balance

An NGN (fiat) deposit crediting your USD merchant balance. This is the collections flow: a user pays in local currency and you hold the value in USD.

Every response on this page is a sandbox capture — hence "Sandbox Bank" in the bank list and the depositSandboxForcedFlow field on the deposit leg.

1

Call Get available currencies

NGN takes deposits over bank, and its pairs includes merchant_balance. So NGN → merchant balance USD over bank is legal. Airtime is payout-only, so it cannot be the deposit leg here.

2

Call Get order limits

  • depositPaymentChannel: "bank"

  • depositCurrencyType: "fiat"

  • depositCurrencyCode: "NGN"

  • depositCountryIsoCode: "NG"

  • payoutPaymentChannel: "merchant_balance"

  • payoutCurrencyType: "merchant_balance"

  • payoutCurrencyCode: "USD"

Example response
{
  "deposit": {
    "min": 1523,
    "max": 761469,
    "minUsd": 1,
    "maxUsd": 500,
    "step": 1,
    "supportsDecimals": false
  },
  "payout": {
    "min": 1,
    "max": 500,
    "minUsd": 1,
    "maxUsd": 500,
    "step": 0.01,
    "supportsDecimals": true
  }
}

The user can pay 1,523 to 761,469 NGN, crediting 1 to 500 USD. We want 100 USD credited.

KYC applies to the person paying — run the KYC flow against their email and country, passing the amounts.

3

Call Create quote

Example request
{
  "deposit": {
    "paymentChannel": "bank",
    "currencyType": "fiat",
    "currencyCode": "NGN",
    "countryIsoCode": "NG"
  },
  "payout": {
    "paymentChannel": "merchant_balance",
    "currencyType": "merchant_balance",
    "currencyCode": "USD",
    "amount": 100
  }
}

For you to be credited 100 USD the user pays 152,206 NGN. The fees come off the deposit leg: 2.5% platform and 1% merchant — that merchant_fee is yours.

Required fields, all on the deposit leg:

  • phoneNumber

  • bankCode (from the enum options)

  • bankAccountNumber

The payout leg needs nothing — the destination is your own balance.

Sandbox tip: set depositSandboxForcedFlow to force a success, a failure, an underpayment or an overpayment. It is the easy way to exercise your error paths without moving real funds. Read the values from the field's own options array — they differ by offer, and the merchant-balance leg publishes no forced-flow field at all.

4

Call Create order

Send only the fields the quote asked for — there is no wallet address in this flow.

The recipient* values are the agent's account — where the user sends the money — not the bankAccountNumber you collected, which is the user's own.

5

The user transfers the exact amount

In production a bank transfer also carries a narration the user must copy. Show every entry of transferDetails as it comes.

6

Call Confirm order

fieldsToConfirmOrder is empty, so the order ID is all you need.

{
  "orderId": "692ee4bba60e213546387b1e"
}
7

We validate the deposit and credit your balance

8

Wait for "payout_successful"

Then Get merchant balances shows the new total.

Last updated