> ## 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.

# Aceitar Conversão

> POST /v2/rfq/accept — aceita uma cotação existente, escolhendo o dia de liquidação e o destino.

Aceita uma cotação criada via [Criar Conversão](/pt/api-reference/conversions/create), travando a taxa e agendando a entrega. O saldo em `from_currency` precisa estar disponível no momento do aceite — ele não é reservado quando a cotação é criada.

## Corpo da requisição

| Campo            | Tipo   | Obrigatório | Descrição                                            |
| ---------------- | ------ | ----------- | ---------------------------------------------------- |
| `rfq_id`         | string | Sim         | ID retornado por Criar Conversão                     |
| `settlement_day` | string | Sim         | `"d0"` ou `"d1"`                                     |
| `wallet_id`      | string | Condicional | ID da wallet cripto de destino (pagamento em cripto) |
| `pix_key`        | string | Condicional | Chave Pix de destino (pagamento em BRL)              |

## Response `200 OK` (aceito)

| Campo            | Tipo   | Descrição                                                                                                                                           |
| ---------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| `rfq_id`         | string | ID da conversão                                                                                                                                     |
| `state`          | string | `DONE` assim que aceito                                                                                                                             |
| `amount_from`    | float  | Montante confirmado enviado                                                                                                                         |
| `amount_to`      | float  | Montante confirmado a receber                                                                                                                       |
| `rate`           | float  | Taxa confirmada                                                                                                                                     |
| `quote_pair`     | string | Par de cotação, no formato `<nome exibido da origem>/<nome exibido do destino>` — nomes exibidos, não códigos de moeda (ex: `USDT (TRX)/BRL (PIX)`) |
| `settlement_eta` | string | Horário de liquidação confirmado (RFC 3339)                                                                                                         |
| `wallet_id`      | string | Wallet de destino, devolvida quando o pagamento é em cripto                                                                                         |
| `pix_key`        | string | Chave Pix de destino, devolvida quando o pagamento é em BRL                                                                                         |
| `reason`         | string | Vazio em `200`; carrega a explicação em caso de recusa ou falha                                                                                     |

Este é o único endpoint da API que devolve `state`, porque é `state` que carrega o desfecho do aceite. Em todos os outros, leia `status` / `substatus`.

Um `200` aqui significa que a operação está travada e a entrega agendada — não significa que os fundos já chegaram. A entrega é concluída em `settlement_eta`; use [Consultar Conversão](/pt/api-reference/conversions/get) ou o `webhook` para acompanhar.

## Desfechos

`POST /v2/rfq/accept` é a única operação que compromete no fluxo de conversão, por isso tem o conjunto mais amplo de desfechos. Todos estão listados aqui.

| HTTP                        | Estado               | Significado                                                                                                                  | Retentável?        |
| --------------------------- | -------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ------------------ |
| `200 OK`                    | `DONE`               | Aceito. `amount_from`, `amount_to`, `rate` e `settlement_eta` vêm preenchidos                                                | Finalizado         |
| `202 Accepted`              | —                    | **Ainda em avaliação — não é um aceite.** `reason` vem vazio de propósito: é espera, não recusa                              | Sim, reconsultando |
| `400 Bad Request`           | —                    | JSON inválido, campo desconhecido, `rfq_id` vazio, ou `settlement_day` fora de `d0` / `d1`                                   | Não                |
| `401 Unauthorized`          | —                    | `api-key` ausente ou inválida                                                                                                | Não                |
| `404 Not Found`             | —                    | A conversão não existe, ou pertence a outra conta. Os dois casos são deliberadamente indistinguíveis                         | Não                |
| `409 Conflict`              | `EXPIRED`            | A taxa expirou e a cotação foi renovada — releia a conversão e reenvie com a nova taxa                                       | Sim, após reler    |
| `410 Gone`                  | `DEPRECATED`         | A janela de renovação foi encerrada — crie uma nova conversão                                                                | Não                |
| `422 Unprocessable Entity`  | `REFUSED` ou `ERROR` | Recusado. `reason` traz o motivo: saldo insuficiente, D0 indisponível, ou teto de limite                                     | Não                |
| `503 Service Unavailable`   | —                    | O fornecedor de cotação está indisponível. **Nada foi decidido** — a conversão continua em `QUOTE` e pode ser aceita de novo | Sim                |
| `500 Internal Server Error` | —                    | Falha ao reler a conversão ou seus atributos                                                                                 | Às vezes           |

<Warning>
  **Um `202` não é sucesso.** Significa que o aceite ainda está em avaliação e nenhuma decisão foi registrada. Não trate como confirmação e não reenvie o aceite — releia [Consultar Conversão](/pt/api-reference/conversions/get) ou aguarde o webhook até chegar a um desfecho final.
</Warning>

Quando um `422` vem de teto de limite e não de saldo, `GET /v2/rfq/{id}` expõe `limit_block_source` para dizer qual portão barrou — `operational` para o teto da mesa, `compliance` para a escada de KYB. O campo é ausente quando a recusa foi por saldo insuficiente.

`503` e `202` podem ser retentados. `409` exige uma releitura antes. `410` e `422` são finais para aquele `rfq_id`.

**Códigos de retorno:** `200`, `202`, `400`, `401`, `404`, `409`, `410`, `422`, `500`, `503`

<RequestExample>
  ```bash cURL 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 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 Node.js 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 (TRX)/BRL (PIX)",
    "settlement_eta": "2026-07-01T19:00:00Z"
  }
  ```

  ```json 409 theme={null}
  { "state": "EXPIRED", "reason": "Taxa expirou e foi renovada — busque a nova cotação antes de tentar novamente" }
  ```

  ```json 410 theme={null}
  { "state": "DEPRECATED", "reason": "Janela de renovação encerrada — crie uma nova conversão" }
  ```

  ```json 422 theme={null}
  { "state": "REFUSED", "reason": "Saldo insuficiente" }
  ```

  ```json 503 theme={null}
  { "state": "QUOTE", "reason": "Cotação indisponível no fornecedor" }
  ```
</ResponseExample>
