Cotação de preço em lote
Calcula o preço efetivo de vários produtos, por quantidade, para um cliente B2B.
Em vendas B2B, o preço de um produto muda conforme o cliente e a quantidade (tabela do cliente, faixa de volume). A cotação em lote devolve, numa só chamada, o preço unitário efetivo de uma lista de produtos para um cliente. Use quando um sistema de cotação precisa conferir preços de uma planilha de itens sem chamar produto por produto.
/api/v1.0/quotation_batch_matchAutenticadaObter o preço efetivo de vários produtos
A chamada não grava nada. Um item com erro (produto inexistente, dado inválido) não derruba o lote: ele volta com "matched": false e o motivo.
Corpo da requisição
user_idstringId do cliente cujo preço será calculado. Opcional: as regras de preço do cliente e dos grupos dele só entram quando você o informa.
itemsarrayobrigatórioItens a cotar. Não pode ser vazio.
product_idstringobrigatórioId do produto (UUID).
quantityintegerobrigatórioQuantidade, maior que zero. A quantidade define a faixa de preço.
Exemplo de requisição
bash
curl -u "$EMAIL:$API_KEY" -X POST "$BASE_URL/api/v1.0/quotation_batch_match" \
-H "Content-Type: application/json" \
-d '{"user_id":"c1a2b3d4-1111-4222-8333-944455556666","items":[{"product_id":"d8a6c5e7-8e44-4055-a0e2-49014f5d17f6","quantity":2}]}'Resposta
200Preços do lote
json
{
"user_id": "c1a2b3d4-1111-4222-8333-944455556666",
"matches": [
{ "product_id": "d8a6c5e7-8e44-4055-a0e2-49014f5d17f6", "quantity": 2, "effective_price": "1678.95", "matched": true },
{
"product_id": "",
"quantity": 1,
"effective_price": "0.00",
"matched": false,
"reason": "invalid input: product_id required and quantity > 0"
}
]
}Campos da resposta
user_idstringO cliente enviado; vazio se não foi enviado.
matchesarrayUm resultado por item, na mesma ordem da entrada.
matches[].product_idstringProduto.
matches[].quantityintegerQuantidade cotada.
matches[].effective_pricestringPreço unitário efetivo, em decimal com ponto, em reais.
"0.00" quando matched é falso.matches[].matchedbooleantrue quando o preço foi calculado.matches[].reasonstringMotivo da falha, só quando
matched é falso.Erros
| Status | Quando | Corpo |
|---|---|---|
| 400 | Corpo que não é JSON | {"message":"Invalid JSON body","status":400} |
| 400 | items ausente ou vazio | {"message":"items is required and must be non-empty","status":400} |
| 401 | Sem credenciais | {"message":"Authentication required. Use HTTP Basic with email:api_key or Bearer <jwt>.","status":401} |