Fiat Trading

Use Case

Fiat Trading converts Nigerian naira (NGN) to and from crypto over the standard trading endpoints. Any pair with NGN on one side is supported — NGN/USDT, NGN/USDC and NGN/BTC, in both directions.

It is a two-step flow: request a quote to lock a rate, then submit an order that executes against that quote.

One side of the pair must be NGN.

side is relative to base_currency. SELL gives away the base, BUY receives it. If in doubt, put what you are spending in base_currency and use SELL.

quantity is always an amount of base_currency, in major units (whole naira, not kobo; whole USDT, not micro-units).

Minimum ₦500, maximum ₦10,000,000 per conversion.

quote_id is required — the rate has to be locked before we move money. Quotes are short-lived and single-use.


Create Fiat Trading Quote

Use Case

Lock a rate for a naira conversion. The response carries the id used as quote_id on the order, the price, and an expires_at. Quotes are short-lived, so execute promptly.

Create Fiat Trading Quote

Request Body
1
base_currencyStringRequired

The asset you are spending, and the currency the quantity is expressed in. One side of the pair must be NGN — for example NGN when buying crypto with naira, or USDT when selling stablecoins for naira.

2
quote_currencyStringRequired

The asset on the other side of the pair — what you receive. Supported against NGN: USDT, USDC, and BTC.

3
sideStringRequired

The direction of the trade, relative to base_currency. 'SELL' spends the base_currency and receives the quote_currency; 'BUY' does the reverse. When in doubt, set base_currency to what you are spending and use 'SELL'.

4
quantityStringRequired

How much of base_currency to convert, in major units (whole naira, not kobo). Must be between ₦500 and ₦10,000,000 per conversion. Sent as a string to preserve precision.

Sample Request

Response Fields
1
successBoolean

True when the quote was generated successfully. Check this before reading data.

2
messageString

Human-readable status message describing the result.

3
quoteObject

The locked quote object, returned under data. Its id and price are what you submit on the order.

4
idUUID

Unique identifier for this quote. Pass it as quote_id when you create the order — this is how the rate gets locked to your execution.

5
base_currencyString

The asset being spent, echoed back from your request.

6
quote_currencyString

The asset being received, echoed back from your request.

7
sideString

The trade direction, returned uppercase ('SELL' or 'BUY') regardless of the case you sent.

8
quantityString

The amount of base_currency this quote covers, in major units.

9
priceString

The locked exchange rate for the conversion, expressed as quote_currency per unit of base_currency. This is the rate you will get if you execute before it expires.

10
expires_atDate

UTC timestamp after which the quote can no longer be executed. Quotes are short-lived (seconds), so request one only when you are ready to place the order.

11
created_atDate

UTC timestamp when the quote was generated.

12
original_quantityString

The full quantity the quote was created for, before any of it was executed. Stays constant for the life of the quote.

13
consumed_quantityString

How much of the quote has already been executed by an order. Starts at 0 for a fresh quote.

14
remaining_quantityString

How much is still executable: original_quantity minus consumed_quantity. Reaches 0 once the quote is fully used.

15
is_exhaustedBoolean

True once remaining_quantity hits 0 and the quote can no longer be executed. A quote is single-use for a full conversion.

16
exchangeObject

Details of the underlying exchange leg for crypto-to-crypto quotes. Null for NGN pairs, which settle from Bitnob's own liquidity.

17
timestampDate

UTC server time when this response was generated.

Sample Response

Create Fiat Trading Order

Use Case

Execute a locked quote. Pass the quote_id from the quote step. Without it the order is rejected. A quote can only be executed once; pass your own reference for idempotency, or the quote id serves as one.

Create Fiat Trading Order

Request Body
1
base_currencyStringRequired

The asset being spent. Must match the quote you are executing — a mismatch is rejected.

2
quote_currencyStringRequired

The asset being received. Must match the quote.

3
sideStringRequired

The trade direction, 'SELL' or 'BUY'. Must match the quote.

4
quantityStringRequired

The amount of base_currency to convert, in major units. Must match the quantity the quote was issued for.

5
priceStringRequired

The locked price returned on the quote. Passing it back confirms the rate you are executing at.

6
quote_idUUIDRequired

The id of the quote to execute against. Required for NGN pairs — without it the order is rejected, because the rate must be locked before funds move. A quote can only be executed once.

7
quantity_in_base_unitsBooleanOptional

Not supported on NGN pairs. Send false or omit it — quantity is always interpreted as major units. Sending true returns a validation error.

8
referenceStringOptional

Your own idempotency key for tracking and safe retries. If you omit it, the quote_id is used as the idempotency key instead.

Sample Request

Response Fields
1
successBoolean

True when the order was accepted and submitted. Check this before reading data.

2
messageString

Human-readable status message describing the result.

3
orderObject

The submitted order object, returned under data. Its status tells you whether the conversion completed.

4
idUUID

Unique identifier for this order. Use it to look the order up later.

5
base_currencyString

The asset that was spent, echoed from the request.

6
quote_currencyString

The asset that was received, echoed from the request.

7
sideString

The trade direction, returned uppercase ('SELL' or 'BUY').

8
order_typeString

How the order was executed. 'market' for a quote-executed NGN conversion, which fills immediately at the locked rate.

9
quantityString

The amount of base_currency the order was placed for, in major units.

10
priceString

The effective execution price applied, expressed as base_currency per unit of quote_currency for this fill.

11
statusString

The order's state. 'filled' means the conversion completed and the received asset is in your balance.

12
created_atDate

UTC timestamp when the order was created.

13
updated_atDate

UTC timestamp of the last change to the order. An empty string means it has not changed since creation.

14
filled_quantityString

The amount of quote_currency actually delivered to your balance from this conversion.

15
remaining_quantityString

The base_currency amount still outstanding on the order. '0' means it filled completely.

16
quote_idUUID

The id of the quote this order executed against, echoed back.

17
referenceString

The idempotency key associated with the order — your reference if you sent one, otherwise the quote_id.

18
fillsArray

Individual fill records for orders matched across multiple counterparties. Empty for an inline NGN conversion, which settles in a single step.

19
quote_consumptionObject

A summary of how much of the quote this order used. Null for an inline NGN conversion.

20
timestampDate

UTC server time when this response was generated.

Sample Response
Did you find this page useful?

Join our Discord