Skip to main content
Use the samples below to experiment with the POST /v1/quote endpoint. Each tab shows the request payload and the success response for a different corridor.

Endpoint

POST {{baseURL}}/v1/quote

Required headers

HeaderDescriptionRequiredExample
x-api-keyWorkspace API key.✅ YesYOUR_API_KEY
Content-TypeMedia type of the request body.✅ Yesapplication/json

Requests and responses

Convert 100,000 NGN to EUR

curl --request POST '{{baseURL}}/v1/quote' \
  --header 'x-api-key: YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
    "paymentChannel": "BANK_TRANSFER",
    "source": {
      "amount": 100000,
      "country": "NG",
      "currency": "NGN"
    },
    "target": {
      "country": "DK",
      "currency": "EUR"
    }
  }'

Convert 100,000 NGN to GBP

curl --request POST '{{baseURL}}/v1/quote' \
  --header 'x-api-key: YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
    "paymentChannel": "BANK_TRANSFER",
    "source": { "amount": 100000, "country": "NG", "currency": "NGN" },
    "target": { "country": "GB", "currency": "GBP" }
  }'

Convert 500,000 NGN to USD

curl --request POST '{{baseURL}}/v1/quote' \
  --header 'x-api-key: YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
    "paymentChannel": "BANK_TRANSFER",
    "source": { "amount": 500000, "country": "NG", "currency": "NGN" },
    "target": { "country": "US", "currency": "USD" }
  }'

Convert 5,000 NGN domestically

curl --request POST '{{baseURL}}/v1/quote' \
  --header 'x-api-key: YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data '{
    "paymentChannel": "BANK_TRANSFER",
    "source": { "amount": 5000, "country": "NG", "currency": "NGN" },
    "target": { "country": "NG", "currency": "NGN" }
  }'

Response field reference

Quotes expire 10 minutes after creation unless otherwise stated. If expiresInSeconds hits zero, request a new quote.

General attributes

FieldTypeDescription
messageStringOverall result of the request.
statusStringsuccess or error.
data.idStringQuote identifier required when creating payouts.

Source (send) details

FieldTypeDescription
source.currencyStringCurrency being debited.
source.countryStringCountry where funds originate.
source.amountNumberAmount the sender pays before fees.

Target (receive) details

FieldTypeDescription
target.currencyStringCurrency being delivered.
target.countryStringDestination country.
target.amountNumberAmount the recipient receives.

Rates, fees, and rules

FieldTypeDescription
rateNumberExchange rate applied.
fee.amountNumberFees charged on this quote.
rules[].categoryStringRule category (e.g. LIMIT).
rules[].transaction.minimumNumberMinimum transaction size allowed.
rules[].transaction.maximumNumberMaximum transaction size allowed.

Expiry and settlement

FieldTypeDescription
summary.totalNumberTotal debit amount including fees.
settlementTimeStringEstimated delivery time for the payout.
quoteCurrencyStringCurrency context for the quote rate.
expiresInSecondsNumberTime remaining before the quote becomes invalid.

Error handling

StatusMessageCauseNext steps
400Invalid country or currency ISO codeCountry/currency combination is not supported.Align to the corridors enabled for your workspace.
400Invalid Payment Channel, check docs or contact supportpaymentChannel isn’t supported for the corridor.Switch to a supported channel before retrying.
400Required field missing or invalid requestMissing or malformed required fields.Validate payload fields prior to calling the API.
400Minimum target amount for transaction is {minimum_transaction_amount}Target amount is below the minimum allowed.Increase the amount to meet the stated minimum.
400Maximum target amount for transaction is {maximum_transaction_amount}Target amount exceeds the maximum allowed.Reduce the amount to fall under the limit.
400Transaction target amount {transaction_amount} requires invoiceAmount crosses invoice documentation threshold.Attach the required invoice before requesting the quote.
401API key missing or incorrectAuthentication header missing/invalid.Include the proper API key for the environment.
403Quote route not available, contact supportQuote endpoint disabled for your workspace.Contact support to enable the route.
403Access denied: IP address not whitelistedRequest comes from a non-whitelisted IP.Add the IP inside the dashboard allowlist.
429API rate limit exceededToo many quote requests in a short period.Implement retries with exponential backoff.
500Service temporarily unavailableTemporary outage or maintenance.Retry after a delay; escalate if it persists.

Best practices

  • Keep the quoteId from the response and use it immediately when you call the payout API.
  • Inspect the rules array to decide whether to prompt the user for a different amount.
  • When running demos, delete sensitive logs that may contain your API key before sharing.