Aceitando a cotação
POST /v1/quotes/:id/accept. Cria a conversão, emite o QR Pix, abre a janela de 15 minutos.
Aceitar a cotação é o ponto em que o onramp deixa de ser cotação descartável e vira operação. A chamada é idempotente via header Idempotency-Key.
O que a chamada faz
POST /v1/quotes/:id/accept
Em uma única transação atômica:
- Marca a cotação como
consumede a vincula à conversão criada. - Cria a conversão em
awaiting_deposit. - Emite o QR Pix (
pix_qr_code+pix_tx_id), exclusivo desta conversão. - Reserva o limite de operação contra o cliente final.
- Abre a janela de 15 minutos, contadas a partir do aceite.
- Snapshota a configuração de taxas vigente da sua organização. Renegociações futuras não afetam esta operação.
- Dispara o webhook
conversion.created.
O que volta
A resposta carrega a conversão completa: 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. Os campos exatos vão na referência da API.
A janela de 15 minutos começa aqui
deposit_window_expires_at = aceite + 15 minutos. Esse é o intervalo em que o pagamento Pix leva a conversão para funded. Janela expirada sem pagamento → conversão termina em expired.
Erros narrativos
A chamada falha em cenários previsíveis:
- Cotação expirada (
expires_atno passado): erro de validação. Crie uma cotação nova. - Cotação já consumida: erro de conflito. Use a conversão existente em
consumed_by_conversion_id. - Cliente final já tem outra conversão onramp aberta: erro de lock. Veja Lock por usuário e tipo.
- Limite excedido: erro de validação. Reserva não é feita; conversão não é criada.
Recomendações de UX
- Renderize o QR Pix em destaque com o valor exato em BRL.
- Mostre um contador regressivo até
deposit_window_expires_at. - Ofereça um botão "cancelar" enquanto a conversão estiver em
awaiting_deposit.
Próximo passo
- Recebendo o pagamento: o que acontece quando o cliente final paga.
