Skip to main content
curl -X POST https://checkout.noxpay.io/v2/rfq/accept \
  -H "api-key: <key>" \
  -H "Content-Type: application/json" \
  -d '{
    "rfq_id": "NOXabc123...",
    "settlement_day": "d0",
    "wallet_id": "..."
  }'
import requests

response = requests.post(
    "https://checkout.noxpay.io/v2/rfq/accept",
    headers={
        "api-key": "<key>",
        "Content-Type": "application/json",
    },
    json={
        "rfq_id": "NOXabc123...",
        "settlement_day": "d0",
        "wallet_id": "...",
    },
)
print(response.json())
const response = await fetch("https://checkout.noxpay.io/v2/rfq/accept", {
  method: "POST",
  headers: {
    "api-key": "<key>",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    rfq_id: "NOXabc123...",
    settlement_day: "d0",
    wallet_id: "...",
  }),
});
const data = await response.json();
{
  "rfq_id":         "NOXabc123...",
  "state":          "DONE",
  "amount_from":    1000.0,
  "amount_to":      5050.0,
  "rate":           5.050,
  "quote_pair":     "USDT_BRL",
  "settlement_eta": "2026-07-01T19:00:00Z"
}
{ "state": "EXPIRED", "reason": "Rate expired and was renewed — fetch the latest quote before retrying" }
{ "state": "DEPRECATED", "reason": "Renewal window closed — create a new conversion" }
{ "state": "ERROR", "reason": "Insufficient balance" }
Accepts a quote created via Create Conversion, locking in the rate and scheduling delivery. The balance in from_currency must be available at the moment of accept — it is not reserved when the quote is created.

Request body

FieldTypeRequiredDescription
rfq_idstringYesID returned by Create Conversion
settlement_daystringYes"d0" or "d1"
wallet_idstringConditionalDestination crypto wallet ID (crypto payout)
pix_keystringConditionalDestination Pix key (BRL payout)

Response 200 OK (accepted)

FieldTypeDescription
rfq_idstringID of the conversion
statestringDONE once accepted
amount_fromfloatConfirmed amount sent
amount_tofloatConfirmed amount to be received
ratefloatConfirmed rate
quote_pairstringQuote pair identifier
settlement_etastringConfirmed settlement time (RFC 3339)
A 200 here means the trade is locked and delivery is scheduled — it does not mean funds have already landed. Delivery completes at settlement_eta; see Get Conversion or the webhook to track it.

Error responses

HTTPStateReason
409 ConflictEXPIREDThe rate expired and the quote was renewed — call GET on the conversion and resubmit accept with the new rate
410 GoneDEPRECATEDThe renewal window closed — create a new quote
422 Unprocessable EntityERRORInsufficient balance, limit exceeded, or another business rule failure
202 AcceptedotherStill processing — retry the accept, or poll GET, until a terminal state is reached
Status codes: 200, 202, 400, 401, 409, 410, 422, 500
curl -X POST https://checkout.noxpay.io/v2/rfq/accept \
  -H "api-key: <key>" \
  -H "Content-Type: application/json" \
  -d '{
    "rfq_id": "NOXabc123...",
    "settlement_day": "d0",
    "wallet_id": "..."
  }'
import requests

response = requests.post(
    "https://checkout.noxpay.io/v2/rfq/accept",
    headers={
        "api-key": "<key>",
        "Content-Type": "application/json",
    },
    json={
        "rfq_id": "NOXabc123...",
        "settlement_day": "d0",
        "wallet_id": "...",
    },
)
print(response.json())
const response = await fetch("https://checkout.noxpay.io/v2/rfq/accept", {
  method: "POST",
  headers: {
    "api-key": "<key>",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    rfq_id: "NOXabc123...",
    settlement_day: "d0",
    wallet_id: "...",
  }),
});
const data = await response.json();
{
  "rfq_id":         "NOXabc123...",
  "state":          "DONE",
  "amount_from":    1000.0,
  "amount_to":      5050.0,
  "rate":           5.050,
  "quote_pair":     "USDT_BRL",
  "settlement_eta": "2026-07-01T19:00:00Z"
}
{ "state": "EXPIRED", "reason": "Rate expired and was renewed — fetch the latest quote before retrying" }
{ "state": "DEPRECATED", "reason": "Renewal window closed — create a new conversion" }
{ "state": "ERROR", "reason": "Insufficient balance" }