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
| Header | Description | Required | Example |
|---|---|---|---|
x-api-key | Workspace API key. | β Yes | YOUR_API_KEY |
Content-Type | Media type of the request body. | β Yes | application/json |
Requests and responses
Table of Contents
- Convert 100,000 NGN to EUR (Payout Example)
- Convert 100,000 NGN to GBP (Payout Example)
- Convert 500,000 NGN to USD (Payout Example)
- Convert 5,000 NGN domestically (Payout Example)
- Convert 2,000 NGN to SGD (Payout Example)
- Convert 10,000 NGN to KRW (Payout Example)
- Convert 100,000 NGN to CNY (Payout Example)
- Convert 100 USD to KRW (Payout Example)
- Convert 100 USD to THB (Payout Example)
- Convert 100 USD to MYR (Payout Example)
- Convert 100 USD to SGD (Payout Example)
- Convert 100 USD to VND (Payout Example)
- Convert 1,000 USD via Global SWIFT (Payout Example)
- Convert 125,000 NGN to CAD (Bank Transfer) (Payout Example)
- Convert 150,000 NGN to CAD (Interac) (Payout Example)
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"
}
}'
{
"message": "quote successfully created",
"status": "success",
"data": {
"id": "74bgf9ea-141e-13c7-ade9-xxxxxxxxxxxxx",
"source": { "currency": "NGN", "country": "NG", "amount": 100000 },
"target": { "currency": "EUR", "country": "DK", "amount": 61.72 },
"rate": 1620.21,
"fee": { "amount": 1000 },
"rules": [
{
"category": "LIMIT",
"appliedCurrency": "EUR",
"appliedCountry": "DK",
"transaction": { "minimum": 10, "maximum": 25000 },
"invoice": 25000
}
],
"summary": { "total": 101000 },
"settlementTime": "15 minutes",
"quoteCurrency": "EUR",
"expiresInSeconds": 600
}
}
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" }
}'
{
"message": "quote successfully created",
"status": "success",
"data": {
"id": "19agf2da-441e-54b7-cde9-xxxxxxxxxxxxx",
"source": { "currency": "NGN", "country": "NG", "amount": 100000 },
"target": { "currency": "GBP", "country": "GB", "amount": 52.5 },
"rate": 1904.76,
"fee": { "amount": 1000 },
"rules": [
{
"category": "LIMIT",
"appliedCurrency": "GBP",
"appliedCountry": "GB",
"transaction": { "minimum": 10, "maximum": 5000 },
"invoice": 5000
}
],
"summary": { "total": 101000 },
"settlementTime": "15 minutes",
"quoteCurrency": "GBP",
"expiresInSeconds": 600
}
}
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" }
}'
{
"message": "quote successfully created",
"status": "success",
"data": {
"id": "98agb1da-351e-54b7-cde9-xxxxxxxxxxxxx",
"source": { "currency": "NGN", "country": "NG", "amount": 500000 },
"target": { "currency": "USD", "country": "US", "amount": 335.5 },
"rate": 1490.31,
"fee": { "amount": 5000 },
"rules": [
{
"category": "LIMIT",
"appliedCurrency": "USD",
"appliedCountry": "US",
"transaction": { "minimum": 20, "maximum": 1000000 },
"invoice": 1000000
}
],
"summary": { "total": 505000 },
"settlementTime": "1 hour",
"quoteCurrency": "USD",
"expiresInSeconds": 600
}
}
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" }
}'
{
"message": "quote successfully created",
"status": "success",
"data": {
"id": "02fjf834-665g-77h8-ade9-xxxxxxxxxxxxx",
"source": { "currency": "NGN", "country": "NG", "amount": 5000 },
"target": { "currency": "NGN", "country": "NG", "amount": 5000 },
"rate": 1,
"fee": { "amount": 150 },
"rules": [],
"summary": { "total": 5150 },
"settlementTime": "Instant",
"quoteCurrency": "NGN",
"expiresInSeconds": 600
}
}
Convert 2,000 NGN to SGD
curl --request POST '{{baseURL}}/v1/quote' \
--header 'x-api-key: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"paymentChannel": "BANK_TRANSFER",
"source": { "amount": 2000, "country": "NG", "currency": "NGN" },
"target": { "country": "SG", "currency": "SGD" }
}'
{
"message": "quote successfully created",
"status": "success",
"data": {
"id": "sgd-quote-id-123456",
"source": { "currency": "NGN", "country": "NG", "amount": 2000 },
"target": { "currency": "SGD", "country": "SG", "amount": 3.50 },
"rate": 571.42,
"fee": { "amount": 50 },
"rules": [],
"summary": { "total": 2050 },
"settlementTime": "15 minutes",
"quoteCurrency": "SGD",
"expiresInSeconds": 600
}
}
Convert 10,000 NGN to KRW
curl --request POST '{{baseURL}}/v1/quote' \
--header 'x-api-key: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"paymentChannel": "BANK_TRANSFER",
"source": { "amount": 10000, "country": "NG", "currency": "NGN" },
"target": { "country": "KR", "currency": "KRW" }
}'
{
"message": "quote successfully created",
"status": "success",
"data": {
"id": "krw-quote-id-123456",
"source": { "currency": "NGN", "country": "NG", "amount": 10000 },
"target": { "currency": "KRW", "country": "KR", "amount": 14000 },
"rate": 1.4,
"fee": { "amount": 100 },
"rules": [],
"summary": { "total": 10100 },
"settlementTime": "15 minutes",
"quoteCurrency": "KRW",
"expiresInSeconds": 600
}
}
Convert 100,000 NGN to CNY
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": "CN", "currency": "CNY" }
}'
{
"message": "quote successfully created",
"status": "success",
"data": {
"id": "cny-quote-id-123456",
"source": { "currency": "NGN", "country": "NG", "amount": 100000 },
"target": { "currency": "CNY", "country": "CN", "amount": 434.78 },
"rate": 230.00,
"fee": { "amount": 500 },
"rules": [],
"summary": { "total": 100500 },
"settlementTime": "15 minutes",
"quoteCurrency": "CNY",
"expiresInSeconds": 600
}
}
Convert 100 USD to KRW
curl --request POST '{{baseURL}}/v1/quote' \
--header 'x-api-key: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"paymentChannel": "BANK_TRANSFER",
"source": { "amount": 100, "country": "US", "currency": "USD" },
"target": { "country": "KR", "currency": "KRW" }
}'
{
"message": "quote successfully created",
"status": "success",
"data": {
"id": "kr-usd-quote-id-sample",
"source": { "currency": "USD", "country": "US", "amount": 100 },
"target": { "currency": "KRW", "country": "KR", "amount": 143267.38 },
"rate": 1432.67,
"fee": { "amount": 0.77 },
"rules": [],
"summary": { "total": 100.77 },
"settlementTime": "15 minutes",
"quoteCurrency": "KRW",
"expiresInSeconds": 600
}
}
Convert 100 USD to THB
curl --request POST '{{baseURL}}/v1/quote' \
--header 'x-api-key: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"paymentChannel": "BANK_TRANSFER",
"source": { "amount": 100, "country": "US", "currency": "USD" },
"target": { "country": "TH", "currency": "THB" }
}'
{
"message": "quote successfully created",
"status": "success",
"data": {
"id": "779997685019",
"source": { "currency": "USD", "country": "US", "amount": 100 },
"target": { "currency": "THB", "country": "TH", "amount": 3304.41 },
"rate": 33.04,
"fee": { "amount": 0.77 },
"rules": [],
"summary": { "total": 100.77 },
"settlementTime": "15 minutes",
"quoteCurrency": "THB",
"expiresInSeconds": 600
}
}
Convert 100 USD to MYR
curl --request POST '{{baseURL}}/v1/quote' \
--header 'x-api-key: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"paymentChannel": "BANK_TRANSFER",
"source": { "amount": 100, "country": "US", "currency": "USD" },
"target": { "country": "MY", "currency": "MYR" }
}'
{
"message": "quote successfully created",
"status": "success",
"data": {
"id": "779997685832",
"source": { "currency": "USD", "country": "US", "amount": 100 },
"target": { "currency": "MYR", "country": "MY", "amount": 426.72 },
"rate": 4.26,
"fee": { "amount": 0.77 },
"rules": [],
"summary": { "total": 100.77 },
"settlementTime": "15 minutes",
"quoteCurrency": "MYR",
"expiresInSeconds": 600
}
}
Convert 100 USD to SGD
curl --request POST '{{baseURL}}/v1/quote' \
--header 'x-api-key: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"paymentChannel": "BANK_TRANSFER",
"source": { "amount": 100, "country": "US", "currency": "USD" },
"target": { "country": "SG", "currency": "SGD" }
}'
{
"message": "quote successfully created",
"status": "success",
"data": {
"id": "usd-sgd-quote-id-sample",
"source": { "currency": "USD", "country": "US", "amount": 100 },
"target": { "currency": "SGD", "country": "SG", "amount": 135.50 },
"rate": 1.355,
"fee": { "amount": 1.00 },
"rules": [],
"summary": { "total": 101.00 },
"settlementTime": "15 minutes",
"quoteCurrency": "SGD",
"expiresInSeconds": 600
}
}
Convert 100 USD to VND
curl --request POST '{{baseURL}}/v1/quote' \
--header 'x-api-key: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"paymentChannel": "BANK_TRANSFER",
"source": { "amount": 100, "country": "US", "currency": "USD" },
"target": { "country": "VN", "currency": "VND" }
}'
{
"message": "quote successfully created",
"status": "success",
"data": {
"id": "vn-usd-quote-id-sample",
"source": { "currency": "USD", "country": "US", "amount": 100 },
"target": { "currency": "VND", "country": "VN", "amount": 2500000 },
"rate": 25000,
"fee": { "amount": 1.00 },
"rules": [],
"summary": { "total": 101.00 },
"settlementTime": "15 minutes",
"quoteCurrency": "VND",
"expiresInSeconds": 600
}
}
Convert 1,000 USD via Global SWIFT
Use
SWIFT_CUSTOMER when the sender bears all charges, SWIFT_SHARED when charges are split, or SWIFT_BENEFICIARY when the beneficiary bears all charges. All channels use the same quote request format.curl --request POST '{{baseURL}}/v1/quote' \
--header 'x-api-key: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"paymentChannel": "SWIFT_CUSTOMER",
"source": { "amount": 1000, "country": "US", "currency": "USD" },
"target": { "country": "US", "currency": "USD" }
}'
{
"message": "quote successfully created",
"status": "success",
"data": {
"id": "d3267c84-2b3c-4d6e-9f8g-xxxxxxxxxxxx",
"source": { "currency": "USD", "country": "US", "amount": 1000 },
"target": { "currency": "USD", "country": "US", "amount": 1000 },
"rate": 1,
"fee": { "amount": 25 },
"rules": [],
"summary": { "total": 1025 },
"settlementTime": "1 hour",
"quoteCurrency": "USD",
"expiresInSeconds": 600
}
}
Convert 125,000 NGN to CAD (Bank Transfer)
curl --request POST '{{baseURL}}/v1/quote' \
--header 'x-api-key: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"paymentChannel": "BANK_TRANSFER",
"source": { "amount": 125000, "country": "NG", "currency": "NGN" },
"target": { "country": "CA", "currency": "CAD" }
}'
{
"message": "quote successfully created",
"status": "success",
"data": {
"id": "f1474828-6a2e-4ee8-xxxxxxxxxxxx",
"source": { "currency": "NGN", "country": "NG", "amount": 125000 },
"target": { "currency": "CAD", "country": "CA", "amount": 100 },
"rate": 1250,
"fee": { "amount": 500 },
"rules": [],
"summary": { "total": 125500 },
"settlementTime": "15 minutes",
"quoteCurrency": "CAD",
"expiresInSeconds": 600
}
}
Convert 150,000 NGN to CAD (Interac)
curl --request POST '{{baseURL}}/v1/quote' \
--header 'x-api-key: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"paymentChannel": "INTERAC",
"source": { "amount": 150000, "country": "NG", "currency": "NGN" },
"target": { "country": "CA", "currency": "CAD" }
}'
{
"message": "quote successfully created",
"status": "success",
"data": {
"id": "5392890f-cab6-40ee-8db2-xxxxxxxxxx",
"source": { "currency": "NGN", "country": "NG", "amount": 150000 },
"target": { "currency": "CAD", "country": "CA", "amount": 120 },
"rate": 1250,
"fee": { "amount": 500 },
"rules": [],
"summary": { "total": 150500 },
"settlementTime": "15 minutes",
"quoteCurrency": "CAD",
"expiresInSeconds": 600
}
}
Response field reference
Quotes expire 10 minutes after creation unless otherwise stated. If
expiresInSeconds hits zero, request a new quote.General attributes
| Field | Type | Description |
|---|---|---|
message | String | Overall result of the request. |
status | String | success or error. |
data.id | String | Quote identifier required when creating payouts. |
Source (send) details
| Field | Type | Description |
|---|---|---|
source.currency | String | Currency being debited. |
source.country | String | Country where funds originate. |
source.amount | Number | Amount the sender pays before fees. |
Target (receive) details
| Field | Type | Description |
|---|---|---|
target.currency | String | Currency being delivered. |
target.country | String | Destination country. |
target.amount | Number | Amount the recipient receives. |
Rates, fees, and rules
| Field | Type | Description |
|---|---|---|
rate | Number | Exchange rate applied. |
fee.amount | Number | Fees charged on this quote. |
rules[].category | String | Rule category (e.g. LIMIT). |
rules[].transaction.minimum | Number | Minimum transaction size allowed. |
rules[].transaction.maximum | Number | Maximum transaction size allowed. |
Expiry and settlement
| Field | Type | Description |
|---|---|---|
summary.total | Number | Total debit amount including fees. |
settlementTime | String | Estimated delivery time for the payout. |
quoteCurrency | String | Currency context for the quote rate. |
expiresInSeconds | Number | Time remaining before the quote becomes invalid. |
Error handling
| Status | Message | Cause | Next steps |
|---|---|---|---|
| 400 | Invalid country or currency ISO code | Country/currency combination is not supported. | Align to the corridors enabled for your workspace. |
| 400 | Invalid Payment Channel, check docs or contact support | paymentChannel isnβt supported for the corridor. | Switch to a supported channel before retrying. |
| 400 | Required field missing or invalid request | Missing or malformed required fields. | Validate payload fields prior to calling the API. |
| 400 | Minimum target amount for transaction is {minimum_transaction_amount} | Target amount is below the minimum allowed. | Increase the amount to meet the stated minimum. |
| 400 | Maximum target amount for transaction is {maximum_transaction_amount} | Target amount exceeds the maximum allowed. | Reduce the amount to fall under the limit. |
| 400 | Transaction target amount {transaction_amount} requires invoice | Amount crosses invoice documentation threshold. | Attach the required invoice before requesting the quote. |
| 401 | API key missing or incorrect | Authentication header missing/invalid. | Include the proper API key for the environment. |
| 403 | Quote route not available, contact support | Quote endpoint disabled for your workspace. | Contact support to enable the route. |
| 403 | Access denied: IP address not whitelisted | Request comes from a non-whitelisted IP. | Add the IP inside the dashboard allowlist. |
| 429 | API rate limit exceeded | Too many quote requests in a short period. | Implement retries with exponential backoff. |
| 500 | Service temporarily unavailable | Temporary outage or maintenance. | Retry after a delay; escalate if it persists. |
Best practices
- Keep the
quoteIdfrom the response and use it immediately when you call the payout API. - Inspect the
rulesarray 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.

