curl --request POST \
--url https://20b9-41-90-209-232.ngrok-free.app/v1/fx/quotes \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"from": "USD",
"to": "NGN"
}
'{
"object": "fx_quote",
"id": "e6bd10ee-6e53-4aaa-9cd0-a2bb980cf73e",
"from": "USD",
"to": "NGN",
"amount_from": 10000,
"amount_to": 1550000,
"scale_from": 2,
"scale_to": 2,
"rate": "155.00",
"expires_at": "2026-10-27T13:02:00Z",
"valid_for_seconds": 90
}{
"error": {
"type": "authentication_error",
"code": "invalid_api_key",
"message": "Invalid API key provided."
}
}FX Quote
Lock a firm rate. Use purpose: swap for internal transfers between
your books, then pass the returned id as quote_id to POST /swaps.
Omit purpose (or leave empty) for a payout quote.
curl --request POST \
--url https://20b9-41-90-209-232.ngrok-free.app/v1/fx/quotes \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"from": "USD",
"to": "NGN"
}
'{
"object": "fx_quote",
"id": "e6bd10ee-6e53-4aaa-9cd0-a2bb980cf73e",
"from": "USD",
"to": "NGN",
"amount_from": 10000,
"amount_to": 1550000,
"scale_from": 2,
"scale_to": 2,
"rate": "155.00",
"expires_at": "2026-10-27T13:02:00Z",
"valid_for_seconds": 90
}{
"error": {
"type": "authentication_error",
"code": "invalid_api_key",
"message": "Invalid API key provided."
}
}Authorizations
Secret API key from Settings → Developers → API keys.
Example: Authorization: Bearer sk_test_…
Body
Source book currency (ISO 4217 or stablecoin code).
"USD"
Destination book currency.
"NGN"
Source amount in Ledger minor units (cents/kobo). Set exactly
one of amount_from or amount_to.
10000
Destination amount in Ledger minor units. Set exactly one of amount_from or amount_to.
Omit for a payout quote. Set to swap when the quote will be
passed to POST /swaps.
swap Response
Firm quote
Object type discriminator.
fx_quote Firm quote id — pass as quote_id to payouts or swaps.
Source currency.
Destination currency.
Debit amount in Ledger minor units.
Credit amount in Ledger minor units at the locked rate.
Decimal places for from (usually 2).
Decimal places for to.
Locked mid-market-style rate as a decimal string (to per 1 from).
When this quote can no longer be used.
Seconds remaining at creation time.