Decidir uma cotação
Aceitar, recusar e levar a cotação ao carrinho.
Depois que o seller responde, o cliente decide. Estas três rotas cobrem o caminho simples (sem negociar): aceitar, recusar ou aceitar e levar ao carrinho. Todas conferem que a cotação é do cliente do token.
Aceitar cotação
Muda a cotação de quoted para accepted. Só é possível enquanto ela está quoted e dentro do valid_until; se a data já passou, a cotação vira expired e o aceite é recusado. Aceitar não cria carrinho nem pedido: o próximo passo é levar ao carrinho.
/api/v1/storefront/quotes/{id}/acceptClienteO cliente aceita os preços que o seller ofereceu
Parâmetros de caminho
idintegerobrigatórioExemplo de requisição
curl -X POST "$BASE_URL/api/v1/storefront/quotes/42/accept" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"id": 42,
"user_id": "e0d4f8a1-5b2c-4d7e-9a31-6c8f0b2d4e6a",
"vendor_id": "7c1e5d3a-2b4f-4a6e-9c8d-1f0a3b5c7d9e",
"status": "accepted",
"notes": "Preciso de entrega mensal",
"total_cents": 420000,
"created_at": "2026-10-11T14:02:11Z",
"updated_at": "2026-10-12T09:15:40Z",
"user_email": "maria.souza@example.com",
"user_name": "Maria Souza",
"vendor_name": "Distribuidora Aurora",
"items": [
{
"id": 101,
"quote_id": 42,
"product_id": "c3f92551-9dda-4fc7-b518-353d1c4e4035",
"quantity": 200,
"requested_price_cents": 1800,
"notes": "",
"product_name": "Caneta esferográfica azul (cx 50)",
"product_sku": "CAN-AZ-50",
"product_price": 2490,
"offered_price_cents": 2100
}
],
"vendor_notes": "Preço válido para pedido único.",
"valid_until": "2026-10-25T23:59:59Z"
}Campos da resposta
(corpo)objectstatus: accepted.Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | O id não é um número. | {"error":"invalid quote id"} |
| 401 | Sem token de cliente no cabeçalho Authorization. | {"error":"missing authorization header"} |
| 403 | A cotação é de outro cliente. | {"error":"quote does not belong to this user"} |
| 403 | O módulo b2b-pricing está desligado nesta loja. | {"error":"module_disabled","module":"b2b-pricing"} |
| 404 | Cotação inexistente. | {"error":"quote not found"} |
| 500 | A cotação não está quoted ou expirou. O detail mostra o estado atual como letra (por exemplo P). | {"error":"failed to accept quote","detail":"quote cannot be accepted (current status: P)"} |
Recusar cotação
Encerra a cotação como rejected. Só vale para cotações pending ou quoted. Não leva corpo e não pede motivo. Cotação já aceita, em negociação, convertida ou expirada não pode mais ser recusada por aqui.
/api/v1/storefront/quotes/{id}/rejectClienteO cliente desiste da cotação
Parâmetros de caminho
idintegerobrigatórioExemplo de requisição
curl -X POST "$BASE_URL/api/v1/storefront/quotes/42/reject" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"message": "quote rejected"
}Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | O id não é um número. | {"error":"invalid quote id"} |
| 401 | Sem token de cliente no cabeçalho Authorization. | {"error":"missing authorization header"} |
| 403 | A cotação é de outro cliente. | {"error":"quote does not belong to this user"} |
| 403 | O módulo b2b-pricing está desligado nesta loja. | {"error":"module_disabled","module":"b2b-pricing"} |
| 404 | Cotação inexistente. | {"error":"quote not found"} |
| 500 | A cotação não está em um estado recusável. | {"error":"failed to reject quote","detail":"quote not found or not in rejectable status"} |
Levar ao carrinho em um passo
Atalho para o botão "Fazer pedido": se a cotação ainda está quoted, aceita-a e depois coloca os itens no carrinho do cliente com os preços oferecidos (não os de tabela). Apesar do nome da rota, nenhum pedido é criado: o cliente segue para o checkout normal com o cart_id devolvido. A cotação vira converted.
/api/v1/storefront/quotes/{id}/convert-to-orderClienteAceita (se preciso) e coloca a cotação no carrinho do cliente
Parâmetros de caminho
idintegerobrigatórioExemplo de requisição
curl -X POST "$BASE_URL/api/v1/storefront/quotes/42/convert-to-order" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"cart_id": "b7a3c1e9-6d24-4f8a-a0b5-93e1c7d2f468",
"quote_id": 42,
"items_added": 1,
"total_cents": 420000,
"message": "Quote converted to cart. Proceed to checkout with the cart_id."
}Campos da resposta
cart_iduuidquote_idintegeritems_addedintegertotal_centsintegermessagestringErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | O id não é um número. | {"error":"invalid quote id"} |
| 401 | Sem token de cliente no cabeçalho Authorization. | {"error":"missing authorization header"} |
| 403 | A cotação é de outro cliente. | {"error":"quote does not belong to this user"} |
| 403 | O módulo b2b-pricing está desligado nesta loja. | {"error":"module_disabled","module":"b2b-pricing"} |
| 404 | Cotação inexistente. | {"error":"quote not found"} |
| 400 | A cotação não pode ser convertida: não está aceita/aceitável, expirou ou não tem itens válidos. O texto vem em error. | {"error":"quote must be in 'accepted' status to convert (current: rejected)"} |