Cotações: consulta e abertura
Lista e consulta as cotações de compra do seller e abre uma cotação nova.
Listar cotações
Uma cotação (RFQ) pede preço de vários fornecedores para os mesmos produtos. Você registra as ofertas que recebeu, compara e converte a melhor num pedido de compra. A listagem não traz os itens.
/api/v1/vendor/erp/cotacoesSellerLista as cotações
Parâmetros de consulta
statusstringopenclosedcancelledEstado. Valor desconhecido devolve lista vazia.
pageintegerpadrão: 1Página, a partir de 1. Valor inválido ou menor que 1 volta para 1.
per_pageintegerpadrão: 20Itens por página, de 1 a 200. Fora dessa faixa vale o padrão.
Exemplo de requisição: Listar cotações
bash
curl "$BASE_URL/api/v1/vendor/erp/cotacoes?status=open" \
-H "Authorization: Bearer $TOKEN"Resposta: Listar cotações
200Cotações retornadas
json
{
"quotes": [
{
"id": "c41a9e07-6f2b-4d83-b0a5-2e7d9f1c3a68",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"code": "COT-000001",
"status": "open",
"deadline_at": "2026-10-20T00:00:00Z",
"notes": "Cotação de outubro",
"created_at": "2026-10-11T14:30:00Z",
"updated_at": "2026-10-11T14:30:00Z",
"item_count": 1,
"items": []
}
],
"total": 1
}Campos da resposta
quotesarrayCotações da página.
iduuidId da cotação.
vendor_iduuidSeller dono.
codestringCódigo legível
COT-000001, sequencial por seller.statusstringopenclosedcancelledEstado da cotação.
deadline_atdatetimePrazo para os fornecedores responderem.
null se não definido.notesstringObservação.
created_atdatetimeCriação.
updated_atdatetimeÚltima alteração.
item_countintegerQuantidade de itens.
itemsarrayItens e ofertas. Vazio na listagem.
iduuidId do item cotado.
quote_iduuidCotação.
product_iduuidProduto.
product_namestringNome do produto.
quantityintegerQuantidade cotada.
offersarrayOfertas dos fornecedores, da mais barata para a mais cara.
iduuidId da oferta.
quote_item_iduuidItem cotado.
supplier_iduuidFornecedor que ofereceu.
supplier_namestringNome do fornecedor.
unit_cost_centsintegerPreço unitário oferecido, em centavos.
lead_time_daysintegerPrazo de entrega em dias.
null se não informado.notesstringObservação.
created_atdatetimeQuando a oferta entrou.
totalintegerTotal que atende ao filtro.
Erros: Listar cotações
| Status | Quando | Corpo |
|---|---|---|
| 401 | Cabeçalho Authorization ausente, token inválido, expirado ou revogado. | {"error":"missing authorization header"} |
| 403 | O token não é de um usuário seller (por exemplo, é de administrador). | {"error":"insufficient permissions"} |
| 403 | O usuário não está vinculado a um seller, ou o cadastro do seller ainda está em análise (vendor_pending_review). | {"error":"no vendor account associated with this user"} |
Consultar cotação
/api/v1/vendor/erp/cotacoes/{id}SellerConsulta uma cotação
Parâmetros de caminho
iduuidobrigatórioId (UUID) da cotação.
Exemplo de requisição: Consultar cotação
bash
curl "$BASE_URL/api/v1/vendor/erp/cotacoes/3f6c1c1e-8d0b-4a55-9a52-1d6f6a4a7b10" \
-H "Authorization: Bearer $TOKEN"Resposta: Consultar cotação
200Cotação com itens e ofertas
json
{
"id": "c41a9e07-6f2b-4d83-b0a5-2e7d9f1c3a68",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"code": "COT-000001",
"status": "open",
"deadline_at": "2026-10-20T00:00:00Z",
"notes": "Cotação de outubro",
"created_at": "2026-10-11T14:30:00Z",
"updated_at": "2026-10-11T14:30:00Z",
"item_count": 1,
"items": [
{
"id": "9a1b2c3d-4e5f-4a6b-8c7d-0e1f2a3b4c5d",
"quote_id": "c41a9e07-6f2b-4d83-b0a5-2e7d9f1c3a68",
"product_id": "94e6917e-8733-4ddc-b446-ed85977117e8",
"product_name": "Camiseta Básica Preta M",
"quantity": 100,
"offers": [
{
"id": "e2b4c6d8-1a3c-4e5f-9b7d-0a2c4e6f8b10",
"quote_item_id": "9a1b2c3d-4e5f-4a6b-8c7d-0e1f2a3b4c5d",
"supplier_id": "e3d204f2-582c-4b7e-bac0-f46214d52c12",
"supplier_name": "Distribuidora Aurora Ltda",
"unit_cost_cents": 4500,
"lead_time_days": 7,
"notes": "Frete incluso",
"created_at": "2026-10-11T14:30:00Z"
}
]
}
]
}Campos da resposta
iduuidId da cotação.
vendor_iduuidSeller dono.
codestringCódigo legível
COT-000001, sequencial por seller.statusstringopenclosedcancelledEstado da cotação.
deadline_atdatetimePrazo para os fornecedores responderem.
null se não definido.notesstringObservação.
created_atdatetimeCriação.
updated_atdatetimeÚltima alteração.
item_countintegerQuantidade de itens.
itemsarrayItens e ofertas. Vazio na listagem.
iduuidId do item cotado.
quote_iduuidCotação.
product_iduuidProduto.
product_namestringNome do produto.
quantityintegerQuantidade cotada.
offersarrayOfertas dos fornecedores, da mais barata para a mais cara.
iduuidId da oferta.
quote_item_iduuidItem cotado.
supplier_iduuidFornecedor que ofereceu.
supplier_namestringNome do fornecedor.
unit_cost_centsintegerPreço unitário oferecido, em centavos.
lead_time_daysintegerPrazo de entrega em dias.
null se não informado.notesstringObservação.
created_atdatetimeQuando a oferta entrou.
Erros: Consultar cotação
| Status | Quando | Corpo |
|---|---|---|
| 404 | A cotação não existe ou é de outro seller. | {"error":"quote not found"} |
| 400 | O id é 0. | {"error":"invalid id parameter"} |
| 401 | Cabeçalho Authorization ausente, token inválido, expirado ou revogado. | {"error":"missing authorization header"} |
| 403 | O token não é de um usuário seller (por exemplo, é de administrador). | {"error":"insufficient permissions"} |
| 403 | O usuário não está vinculado a um seller, ou o cadastro do seller ainda está em análise (vendor_pending_review). | {"error":"no vendor account associated with this user"} |
Abrir cotação
/api/v1/vendor/erp/cotacoesSellerAbre uma cotação
Corpo da requisição
deadline_atstringPrazo de resposta:
YYYY-MM-DD ou RFC 3339.notesstringObservação.
itemsarrayobrigatórioProdutos a cotar. Linhas com product_id em branco são descartadas em silêncio; precisa sobrar ao menos uma.
product_iduuidobrigatórioProduto.
quantityintegerobrigatórioQuantidade, maior que zero.
Exemplo de requisição: Abrir cotação
bash
curl -X POST "$BASE_URL/api/v1/vendor/erp/cotacoes" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"deadline_at": "2026-10-20",
"notes": "Cotação de outubro",
"items": [
{
"product_id": "94e6917e-8733-4ddc-b446-ed85977117e8",
"quantity": 100
}
]
}'Resposta: Abrir cotação
201Cotação aberta
json
{
"id": "c41a9e07-6f2b-4d83-b0a5-2e7d9f1c3a68",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"code": "COT-000001",
"status": "open",
"deadline_at": "2026-10-20T00:00:00Z",
"notes": "Cotação de outubro",
"created_at": "2026-10-11T14:30:00Z",
"updated_at": "2026-10-11T14:30:00Z",
"item_count": 1,
"items": [
{
"id": "9a1b2c3d-4e5f-4a6b-8c7d-0e1f2a3b4c5d",
"quote_id": "c41a9e07-6f2b-4d83-b0a5-2e7d9f1c3a68",
"product_id": "94e6917e-8733-4ddc-b446-ed85977117e8",
"product_name": "Camiseta Básica Preta M",
"quantity": 100,
"offers": []
}
]
}Campos da resposta
iduuidId da cotação.
vendor_iduuidSeller dono.
codestringCódigo legível
COT-000001, sequencial por seller.statusstringopenclosedcancelledEstado da cotação.
deadline_atdatetimePrazo para os fornecedores responderem.
null se não definido.notesstringObservação.
created_atdatetimeCriação.
updated_atdatetimeÚltima alteração.
item_countintegerQuantidade de itens.
itemsarrayItens e ofertas. Vazio na listagem.
iduuidId do item cotado.
quote_iduuidCotação.
product_iduuidProduto.
product_namestringNome do produto.
quantityintegerQuantidade cotada.
offersarrayOfertas dos fornecedores, da mais barata para a mais cara.
iduuidId da oferta.
quote_item_iduuidItem cotado.
supplier_iduuidFornecedor que ofereceu.
supplier_namestringNome do fornecedor.
unit_cost_centsintegerPreço unitário oferecido, em centavos.
lead_time_daysintegerPrazo de entrega em dias.
null se não informado.notesstringObservação.
created_atdatetimeQuando a oferta entrou.
Erros: Abrir cotação
| Status | Quando | Corpo |
|---|---|---|
| 400 | Corpo não é um JSON válido. | {"error":"invalid request body","detail":"invalid character 'b' looking for beginning of object key string"} |
| 400 | Alguma linha com quantity <= 0. | {"error":"vendorerp: item quantity must be positive"} |
| 400 | Nenhuma linha válida. | {"error":"vendorerp: at least one item required"} |
| 400 | deadline_at em outro formato. | {"error":"vendorerp: deadline_at must be YYYY-MM-DD or RFC3339"} |
| 401 | Cabeçalho Authorization ausente, token inválido, expirado ou revogado. | {"error":"missing authorization header"} |
| 403 | O token não é de um usuário seller (por exemplo, é de administrador). | {"error":"insufficient permissions"} |
| 403 | O usuário não está vinculado a um seller, ou o cadastro do seller ainda está em análise (vendor_pending_review). | {"error":"no vendor account associated with this user"} |