> ## Documentation Index
> Fetch the complete documentation index at: https://docs.noxpay.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Accept Conversion

> POST /v2/rfq/accept — accept an existing quote, choosing the settlement day and destination.

Accepts a quote created via [Create Conversion](/noxpay-docs-v2/api-reference/conversions/create), 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

| Field            | Type   | Required    | Description                                  |
| ---------------- | ------ | ----------- | -------------------------------------------- |
| `rfq_id`         | string | Yes         | ID returned by Create Conversion             |
| `settlement_day` | string | Yes         | `"d0"` or `"d1"`                             |
| `wallet_id`      | string | Conditional | Destination crypto wallet ID (crypto payout) |
| `pix_key`        | string | Conditional | Destination Pix key (BRL payout)             |

## Response `200 OK` (accepted)

| Field            | Type   | Description                          |
| ---------------- | ------ | ------------------------------------ |
| `rfq_id`         | string | ID of the conversion                 |
| `state`          | string | `DONE` once accepted                 |
| `amount_from`    | float  | Confirmed amount sent                |
| `amount_to`      | float  | Confirmed amount to be received      |
| `rate`           | float  | Confirmed rate                       |
| `quote_pair`     | string | Quote pair identifier                |
| `settlement_eta` | string | Confirmed 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](/noxpay-docs-v2/api-reference/conversions/get) or the `webhook` to track it.

## Error responses

| HTTP                       | State        | Reason                                                                                                        |
| -------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------- |
| `409 Conflict`             | `EXPIRED`    | The rate expired and the quote was renewed — call GET on the conversion and resubmit accept with the new rate |
| `410 Gone`                 | `DEPRECATED` | The renewal window closed — create a new quote                                                                |
| `422 Unprocessable Entity` | `ERROR`      | Insufficient balance, limit exceeded, or another business rule failure                                        |
| `202 Accepted`             | other        | Still processing — retry the accept, or poll GET, until a terminal state is reached                           |

**Status codes:** `200`, `202`, `400`, `401`, `409`, `410`, `422`, `500`

<RequestExample>
  ```bash theme={null}
  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": "..."
    }'
  ```

  ```python theme={null}
  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())
  ```

  ```javascript theme={null}
  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();
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={null}
  {
    "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"
  }
  ```

  ```json 409 theme={null}
  { "state": "EXPIRED", "reason": "Rate expired and was renewed — fetch the latest quote before retrying" }
  ```

  ```json 410 theme={null}
  { "state": "DEPRECATED", "reason": "Renewal window closed — create a new conversion" }
  ```

  ```json 422 theme={null}
  { "state": "ERROR", "reason": "Insufficient balance" }
  ```
</ResponseExample>
