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

Fiat to Crypto

An NGN (fiat) deposit paying out POLYGON_USDT (crypto) — the classic on-ramp.

1

Call Get available currencies

NGN takes deposits over bank and pays out over bank or airtime — airtime is payout-only, so it cannot be the deposit leg. POLYGON_USDT allows both directions, and NGN's pairs includes crypto. So NGN → POLYGON_USDT over bank is legal.

2

Call Get order limits

  • depositPaymentChannel: "bank"

  • depositCurrencyType: "fiat"

  • depositCurrencyCode: "NGN"

  • depositCountryIsoCode: "NG"

  • payoutPaymentChannel: "crypto"

  • payoutCurrencyType: "crypto"

  • payoutCurrencyCode: "POLYGON_USDT"

Example response
{
  "deposit": {
    "min": 1556,
    "max": 311184,
    "minUsd": 1,
    "maxUsd": 200,
    "step": 1,
    "supportsDecimals": false
  },
  "payout": {
    "min": 1,
    "max": 200,
    "minUsd": 1,
    "maxUsd": 200,
    "step": 0.000001,
    "supportsDecimals": true
  }
}

The user wants 100 POLYGON_USDT, which is inside the payout window. Check their KYC tier with the KYC flow — pass the amounts so the answer covers this order.

3

Call Create quote

Set the amount on one leg only. Here it is the payout, because the user asked for a crypto amount.

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

To receive 100 POLYGON_USDT the user must deposit 153,128 NGN. Collect the required fields from both legs:

  • phoneNumber

  • bankCode (from the enum options)

  • bankAccountNumber

  • blockchainWalletAddress

4

Call Create order

The recipient* details are the agent's account — where the user sends the money. They are not the bankAccountNumber you collected, which is the user's own account and only identifies who is paying.

5

The user transfers the exact amount, with the narration

The narration is how the payment is matched. A transfer without it, or from a different account than the one they gave, will not be recognised.

6

Call Confirm order

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

Example request
{
  "orderId": "68728fa56ff494df5f39faf5"
}
7

We validate the deposit and send the payout

8

Wait for "payout_successful"

Handle the order-status-change webhook, or poll Get order.

Last updated