Accepting the quote
POST /v1/quotes/:id/accept. Creates the conversion, issues the Pix QR, opens the 15-minute window.
Accepting the quote is the point at which the onramp stops being a disposable quote and becomes an operation. The call is idempotent via the Idempotency-Key header.
What the call does
POST /v1/quotes/:id/accept
In a single atomic transaction:
- Marks the quote as
consumedand links it to the conversion created. - Creates the conversion in
awaiting_deposit. - Issues the Pix QR (
pix_qr_code+pix_tx_id), exclusive to this conversion. - Reserves the operation limit against the end customer.
- Opens the 15-minute window, counted from accept.
- Snapshots your organization's current fee configuration. Future renegotiations do not affect this operation.
- Fires the
conversion.createdwebhook.
What comes back
The response carries the full conversion: id, status='awaiting_deposit', quote_id, expected_source_amount, pix_qr_code, pix_tx_id, deposit_window_expires_at, destination_wallet_address, destination_wallet_network. Exact fields land in the API reference.
The 15-minute window starts here
deposit_window_expires_at = accept + 15 minutes. That is the interval in which the Pix payment takes the conversion to funded. Window expired with no payment → conversion ends in expired.
Narrative errors
The call fails in predictable scenarios:
- Expired quote (
expires_atin the past): validation error. Create a new quote. - Quote already consumed: conflict error. Use the existing conversion in
consumed_by_conversion_id. - End customer has another open onramp conversion: lock error. See Per-user, per-type lock.
- Limit exceeded: validation error. The reserve is not made; the conversion is not created.
UX recommendations
- Render the Pix QR prominently with the exact BRL amount.
- Show a countdown to
deposit_window_expires_at. - Offer a "cancel" button while the conversion is in
awaiting_deposit.
Next step
- Receiving the payment: what happens when the end customer pays.
