curl -X POST https://checkout.noxpay.io/v2/rfq \
-H "api-key: <key>" \
-H "Content-Type: application/json" \
-d '{
"from_currency": "TRX_USDT_S2UZ",
"to_currency": "BRL",
"from_amount": 1000.0,
"webhook": "https://yourapp.com/webhooks/nox"
}'
import requests
response = requests.post(
"https://checkout.noxpay.io/v2/rfq",
headers={
"api-key": "<key>",
"Content-Type": "application/json",
},
json={
"from_currency": "TRX_USDT_S2UZ",
"to_currency": "BRL",
"from_amount": 1000.0,
"webhook": "https://yourapp.com/webhooks/nox",
},
)
print(response.json())
const response = await fetch("https://checkout.noxpay.io/v2/rfq", {
method: "POST",
headers: {
"api-key": "<key>",
"Content-Type": "application/json",
},
body: JSON.stringify({
from_currency: "TRX_USDT_S2UZ",
to_currency: "BRL",
from_amount: 1000.0,
webhook: "https://yourapp.com/webhooks/nox",
}),
});
const data = await response.json();
{
"rfq_id": "NOXabc123...",
"from_currency": "TRX_USDT_S2UZ",
"to_currency": "BRL",
"from_amount_d0": 1000.0,
"to_amount_d0": 5050.0,
"rate_d0": 5.050,
"from_amount_d1": 1000.0,
"to_amount_d1": 5060.0,
"rate_d1": 5.060,
"quote_pair": "USDT (TRX)/BRL (PIX)",
"settlement_eta_d0": "2026-07-01T19:00:00Z",
"settlement_eta_d1": "2026-07-02T18:00:00Z",
"expires_at": "2026-07-01T12:00:30Z",
"renewable_up_to": "2026-07-01T12:10:00Z"
}
Conversions
Create Conversion
POST /v2/rfq — request a quote to convert between two currencies, with rates for same-day (D0) and next-day (D1) settlement.
curl -X POST https://checkout.noxpay.io/v2/rfq \
-H "api-key: <key>" \
-H "Content-Type: application/json" \
-d '{
"from_currency": "TRX_USDT_S2UZ",
"to_currency": "BRL",
"from_amount": 1000.0,
"webhook": "https://yourapp.com/webhooks/nox"
}'
import requests
response = requests.post(
"https://checkout.noxpay.io/v2/rfq",
headers={
"api-key": "<key>",
"Content-Type": "application/json",
},
json={
"from_currency": "TRX_USDT_S2UZ",
"to_currency": "BRL",
"from_amount": 1000.0,
"webhook": "https://yourapp.com/webhooks/nox",
},
)
print(response.json())
const response = await fetch("https://checkout.noxpay.io/v2/rfq", {
method: "POST",
headers: {
"api-key": "<key>",
"Content-Type": "application/json",
},
body: JSON.stringify({
from_currency: "TRX_USDT_S2UZ",
to_currency: "BRL",
from_amount: 1000.0,
webhook: "https://yourapp.com/webhooks/nox",
}),
});
const data = await response.json();
{
"rfq_id": "NOXabc123...",
"from_currency": "TRX_USDT_S2UZ",
"to_currency": "BRL",
"from_amount_d0": 1000.0,
"to_amount_d0": 5050.0,
"rate_d0": 5.050,
"from_amount_d1": 1000.0,
"to_amount_d1": 5060.0,
"rate_d1": 5.060,
"quote_pair": "USDT (TRX)/BRL (PIX)",
"settlement_eta_d0": "2026-07-01T19:00:00Z",
"settlement_eta_d1": "2026-07-02T18:00:00Z",
"expires_at": "2026-07-01T12:00:30Z",
"renewable_up_to": "2026-07-01T12:10:00Z"
}
Requests a quote for converting
Response
from_currency into to_currency. The response returns two rates — one for same-day (D0) settlement and one for next-day (D1) settlement — plus an expiration window. Nothing is debited or locked at this point; call Accept Conversion to execute the trade.
Request body
| Field | Type | Required | Description |
|---|---|---|---|
from_currency | string | Yes | Source currency code |
to_currency | string | Yes | Destination currency code |
from_amount | float | Conditional | Amount to send. Exactly one of from_amount / to_amount must be provided |
to_amount | float | Conditional | Amount to receive |
webhook | string | No | URL to receive state update notifications |
Response 200 OK
| Field | Type | Description |
|---|---|---|
rfq_id | string | ID of the conversion — use it to accept, poll, or reference this quote |
from_currency | string | Source currency code |
to_currency | string | Destination currency code |
from_amount_d0 | float | Amount to send for D0 settlement |
to_amount_d0 | float | Amount to receive for D0 settlement |
rate_d0 | float | Rate for D0 settlement |
from_amount_d1 | float | Amount to send for D1 settlement |
to_amount_d1 | float | Amount to receive for D1 settlement |
rate_d1 | float | Rate for D1 settlement |
quote_pair | string | Quote pair, as <from display name>/<to display name> — display names, not currency codes (e.g. USDT (TRX)/BRL (PIX)) |
settlement_eta_d0 | string | Estimated settlement time if D0 is chosen (RFC 3339) |
settlement_eta_d1 | string | Estimated settlement time if D1 is chosen (RFC 3339) |
expires_at | string | When the current rate expires (RFC 3339) |
renewable_up_to | string | Last moment the quote can still be renewed instead of recreated (RFC 3339) |
wallet_id | string | Destination wallet, when one is already associated with the quote |
rfq_id is the identifier for this quote — use it with Accept Conversion and Get Conversion.
expires_at is when the rate dies. renewable_up_to is how long it can still be refreshed in place rather than recreated from scratch.
Numeric fields are omitted rather than zeroed. If a settlement window is unavailable — the desk is closed for D0, say — from_amount_d0 / to_amount_d0 / rate_d0 / settlement_eta_d0 are absent from the response rather than returned as 0. Check for key presence.
Note this returns 200, not 201.
Status codes: 200 OK, 400 Bad Request, 401 Unauthorized, 500 Internal Server Error
| HTTP | When |
|---|---|
200 | Quote generated |
400 | Invalid JSON, an unrecognised field, from_currency or to_currency missing, or neither from_amount nor to_amount supplied |
401 | Missing or invalid api-key |
500 | Unknown currency code, or the quote could not be created |
An unrecognised currency code returns
500, not 400, on this endpoint. Reference Quote returns 400 for the same input — validate currency codes against that endpoint if you need a clean validation signal.Request bodies reject unknown fields: a typo’d or extra key returns 400 rather than being ignored. This applies to every POST in the API.curl -X POST https://checkout.noxpay.io/v2/rfq \
-H "api-key: <key>" \
-H "Content-Type: application/json" \
-d '{
"from_currency": "TRX_USDT_S2UZ",
"to_currency": "BRL",
"from_amount": 1000.0,
"webhook": "https://yourapp.com/webhooks/nox"
}'
import requests
response = requests.post(
"https://checkout.noxpay.io/v2/rfq",
headers={
"api-key": "<key>",
"Content-Type": "application/json",
},
json={
"from_currency": "TRX_USDT_S2UZ",
"to_currency": "BRL",
"from_amount": 1000.0,
"webhook": "https://yourapp.com/webhooks/nox",
},
)
print(response.json())
const response = await fetch("https://checkout.noxpay.io/v2/rfq", {
method: "POST",
headers: {
"api-key": "<key>",
"Content-Type": "application/json",
},
body: JSON.stringify({
from_currency: "TRX_USDT_S2UZ",
to_currency: "BRL",
from_amount: 1000.0,
webhook: "https://yourapp.com/webhooks/nox",
}),
});
const data = await response.json();
{
"rfq_id": "NOXabc123...",
"from_currency": "TRX_USDT_S2UZ",
"to_currency": "BRL",
"from_amount_d0": 1000.0,
"to_amount_d0": 5050.0,
"rate_d0": 5.050,
"from_amount_d1": 1000.0,
"to_amount_d1": 5060.0,
"rate_d1": 5.060,
"quote_pair": "USDT (TRX)/BRL (PIX)",
"settlement_eta_d0": "2026-07-01T19:00:00Z",
"settlement_eta_d1": "2026-07-02T18:00:00Z",
"expires_at": "2026-07-01T12:00:30Z",
"renewable_up_to": "2026-07-01T12:10:00Z"
}

