Preço por UF em lote e simulação
Grava várias regras de um produto de uma vez e simula qual preço vale para uma UF e quantidade.
O lote é a forma prática de carregar a tabela de preços de um produto (um preço por UF). Diferente da criação unitária, ele atualiza a regra se o trio (produto, UF, min_qty) já existir. A simulação responde "quanto este cliente pagaria?" sem criar nada.
Gravar várias regras
Tudo ou nada: se qualquer regra for inválida, nenhuma é gravada.
/api/v1/admin/brazil/state-pricing/bulkAdminGrava regras em lote
Corpo da requisição
product_iduuidobrigatórioProduto de todas as regras.
rulesarrayobrigatórioPelo menos uma regra.
state_codestringobrigatórioUF.
price_centavosintegerobrigatórioPreço em centavos.
min_qtyintegerpadrão: 1Quantidade mínima (padrão 1).
statusstringactive/A ou disabled/D.Exemplo de requisição
bash
curl -X POST "$BASE_URL/api/v1/admin/brazil/state-pricing/bulk" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"product_id": "d8a6c5e7-8e44-4055-a0e2-49014f5d17f6",
"rules": [
{
"state_code": "SP",
"price_centavos": 15990,
"min_qty": 1
},
{
"state_code": "RJ",
"price_centavos": 16490,
"min_qty": 1
},
{
"state_code": "SP",
"price_centavos": 14990,
"min_qty": 10
}
]
}'Resposta
201Regras gravadas
json
{
"product_id": "d8a6c5e7-8e44-4055-a0e2-49014f5d17f6",
"total": 3,
"rules": [
{
"id": 12,
"product_id": "d8a6c5e7-8e44-4055-a0e2-49014f5d17f6",
"state_code": "SP",
"price_centavos": 15990,
"min_qty": 1,
"status": "A",
"created_at": "2026-10-11T12:00:00Z",
"updated_at": "2026-10-11T12:00:00Z"
}
]
}Campos da resposta
totalintegerRegras gravadas.
rulesarrayRegras criadas ou atualizadas, no formato da lista.
Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | product_id ou rules ausente, UF inexistente ou preço negativo. | {"error":"rules array is required"} |
| 401 | Sem token ou token inválido. | {"error":"missing authorization header"} |
| 403 | O usuário não tem manage_brazil nem manage_settings. | {"error":"insufficient privileges","privilege_required_any":["manage_brazil","manage_settings"]} |
Simular o preço efetivo
Aplica a mesma lógica do carrinho: a regra ativa da UF com a maior min_qty que não passa de qty; sem regra, o preço normal do produto.
/api/v1/admin/brazil/state-pricing/effectiveAdminSimula o preço efetivo
Corpo da requisição
product_iduuidobrigatórioProduto.
state_codestringobrigatórioUF.
qtyintegerpadrão: 1Quantidade; menor que 1 vira 1.
Exemplo de requisição
bash
curl -X POST "$BASE_URL/api/v1/admin/brazil/state-pricing/effective" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"product_id": "d8a6c5e7-8e44-4055-a0e2-49014f5d17f6",
"state_code": "SP",
"qty": 10
}'Resposta
200Preço efetivo
json
{
"price_centavos": 14990,
"source": "state_rule",
"rule_id": 13,
"state_code": "SP"
}Campos da resposta
price_centavosintegerPreço unitário em centavos.
sourcestringstate_ruledefaultstate_rule ou default.rule_idintegerRegra aplicada;
0 quando é o preço normal.state_codestringUF consultada.
Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | product_id ou state_code ausente. | {"error":"state_code is required"} |
| 401 | Sem token ou token inválido. | {"error":"missing authorization header"} |
| 403 | O usuário não tem manage_brazil nem manage_settings. | {"error":"insufficient privileges","privilege_required_any":["manage_brazil","manage_settings"]} |
| 404 | Produto inexistente e sem regra. | {"error":"product d8a6c5e7-... not found"} |