Criar, alterar e excluir regra de preço B2B
Cria, ajusta e remove uma regra de preço por faixa de quantidade.
Crie uma regra por faixa e por grupo. Para três degraus de atacado (10-49, 50-99, 100 ou mais) crie três regras. O PUT é parcial: envie só o que muda. A exclusão é definitiva (não há lixeira); para suspender uma regra sem perdê-la use is_active: false.
Criar uma regra
/api/v1/admin/b2b-price-rulesAdminCria uma regra de preço B2B
Corpo da requisição
product_iduuidobrigatórioProduto da regra. Precisa existir.
min_qtyintegerobrigatórioQuantidade mínima. Menor que 1 vira 1.
max_qtyintegerpadrão: 0Quantidade máxima.
0 = sem limite. Se maior que zero, não pode ser menor que min_qty.discount_bpsintegerpadrão: 0Desconto em pontos-base, de 0 a 10000. Tem precedência sobre
price_cents.price_centsintegerpadrão: 0Preço unitário fixo, em centavos. Obrigatório (maior que zero) quando
discount_bps é 0.usergroup_iduuidGrupo de usuários. Omita para valer para todos. A existência do grupo não é conferida.
priorityintegerpadrão: 0Prioridade de avaliação.
is_activebooleanpadrão: trueSe a regra já nasce valendo.
Exemplo de requisição: criar
bash
curl -X POST "$BASE_URL/api/v1/admin/b2b-price-rules" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"product_id": "b2e4c104-a926-4da7-a242-03bcc6c5c860",
"usergroup_id": "a1111111-1111-1111-1111-111111111111",
"min_qty": 50,
"max_qty": 99,
"discount_bps": 1500,
"priority": 2
}'Resposta: criar
201Regra criada
json
{
"id": 5,
"product_id": "b2e4c104-a926-4da7-a242-03bcc6c5c860",
"usergroup_id": "a1111111-1111-1111-1111-111111111111",
"min_qty": 50,
"max_qty": 99,
"price_cents": 0,
"discount_bps": 1500,
"priority": 2,
"is_active": true,
"created_at": "2026-07-01T01:42:06.978203Z",
"updated_at": "2026-07-01T01:42:06.978203Z",
"product_name": "Mochila Moderno Cinza 03701",
"product_sku": "SD-003701",
"product_price": 15990
}Campos da resposta
idintegerIdentificador da regra. Atenção: é um número inteiro, não UUID.
product_iduuidProduto ao qual a regra se aplica.
usergroup_iduuid | omittedGrupo de usuários que recebe o preço. Ausente = vale para todos os clientes.
min_qtyintegerQuantidade mínima (inclusive) para a regra valer.
max_qtyintegerQuantidade máxima (inclusive).
0 = sem limite.price_centsintegerPreço unitário fixo, em centavos. Só vale quando
discount_bps é 0.discount_bpsintegerDesconto sobre o preço base, em pontos-base (
1500 = 15%). Quando maior que zero, tem precedência sobre price_cents.priorityintegerPrioridade de avaliação (maior primeiro). Veja a regra de escolha na home da seção.
is_activebooleanSe a regra está valendo.
created_atstring (RFC 3339)Criação.
updated_atstring (RFC 3339)Última alteração.
product_namestring | omittedNome do produto (para exibição).
product_skustring | omittedSKU do produto.
product_priceinteger | omittedPreço base atual do produto, em centavos.
usergroup_namestring | omittedNome do grupo de usuários.
Erros: criar
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 401 | Token ausente ou inválido. | {"error":"authentication required"} |
| 403 | O módulo b2b-pricing está desligado na loja. | {"error":"module_disabled","module":"b2b-pricing"} |
| 403 | Falta o privilégio manage_b2b (ou manage_promotions), também para leitura. | {"error":"insufficient privileges","required":"manage_b2b"} |
| 400 | Corpo inválido; max_qty menor que min_qty; discount_bps fora de 0 a 10000; ou nem price_cents nem discount_bps positivos. A mensagem vem em detail, em inglês. | {"error":"failed to create price rule","detail":"either price_cents or discount_bps must be positive"} |
| 404 | O produto não existe (ou foi excluído). | {"error":"product not found"} |
Alterar uma regra
/api/v1/admin/b2b-price-rules/{id}AdminAltera campos de uma regra de preço B2B
Parâmetros de caminho
idintegerobrigatórioId da regra (inteiro).
Corpo da requisição
min_qtyintegerNova quantidade mínima.
max_qtyintegerNova quantidade máxima.
discount_bpsintegerNovo desconto em pontos-base.
price_centsintegerNovo preço fixo, em centavos.
usergroup_iduuidNovo grupo. Não é possível limpar o grupo por aqui.
priorityintegerNova prioridade.
is_activebooleanLiga ou desliga a regra.
Exemplo de requisição: alterar
bash
curl -X PUT "$BASE_URL/api/v1/admin/b2b-price-rules/5" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"discount_bps": 2000,
"is_active": true
}'Resposta: alterar
200Regra alterada
json
{
"id": 5,
"product_id": "b2e4c104-a926-4da7-a242-03bcc6c5c860",
"usergroup_id": "a1111111-1111-1111-1111-111111111111",
"min_qty": 50,
"max_qty": 99,
"price_cents": 0,
"discount_bps": 2000,
"priority": 2,
"is_active": true,
"created_at": "2026-07-01T01:42:06.978203Z",
"updated_at": "2026-07-01T01:42:06.978203Z",
"product_name": "Mochila Moderno Cinza 03701",
"product_sku": "SD-003701",
"product_price": 15990
}Campos da resposta
idintegerIdentificador da regra. Atenção: é um número inteiro, não UUID.
product_iduuidProduto ao qual a regra se aplica.
usergroup_iduuid | omittedGrupo de usuários que recebe o preço. Ausente = vale para todos os clientes.
min_qtyintegerQuantidade mínima (inclusive) para a regra valer.
max_qtyintegerQuantidade máxima (inclusive).
0 = sem limite.price_centsintegerPreço unitário fixo, em centavos. Só vale quando
discount_bps é 0.discount_bpsintegerDesconto sobre o preço base, em pontos-base (
1500 = 15%). Quando maior que zero, tem precedência sobre price_cents.priorityintegerPrioridade de avaliação (maior primeiro). Veja a regra de escolha na home da seção.
is_activebooleanSe a regra está valendo.
created_atstring (RFC 3339)Criação.
updated_atstring (RFC 3339)Última alteração.
product_namestring | omittedNome do produto (para exibição).
product_skustring | omittedSKU do produto.
product_priceinteger | omittedPreço base atual do produto, em centavos.
usergroup_namestring | omittedNome do grupo de usuários.
Erros: alterar
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 401 | Token ausente ou inválido. | {"error":"authentication required"} |
| 403 | O módulo b2b-pricing está desligado na loja. | {"error":"module_disabled","module":"b2b-pricing"} |
| 403 | Falta o privilégio manage_b2b (ou manage_promotions), também para leitura. | {"error":"insufficient privileges","required":"manage_b2b"} |
| 400 | O id da regra não é um número inteiro. | {"error":"invalid rule id"} |
| 404 | Não existe regra com esse id. | {"error":"price rule not found"} |
| 400 | Corpo que não é JSON. | {"error":"invalid request body","detail":"..."} |
| 500 | O banco recusou o valor (por exemplo usergroup_id que não é UUID). | {"error":"failed to update price rule","detail":"..."} |
Excluir uma regra
/api/v1/admin/b2b-price-rules/{id}AdminExclui definitivamente uma regra de preço B2B
Parâmetros de caminho
idintegerobrigatórioId da regra (inteiro).
Exemplo de requisição: excluir
bash
curl -X DELETE "$BASE_URL/api/v1/admin/b2b-price-rules/5" \
-H "Authorization: Bearer $TOKEN"Resposta: excluir
200Regra excluída
json
{
"message": "price rule deleted"
}Erros: excluir
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 401 | Token ausente ou inválido. | {"error":"authentication required"} |
| 403 | O módulo b2b-pricing está desligado na loja. | {"error":"module_disabled","module":"b2b-pricing"} |
| 403 | Falta o privilégio manage_b2b (ou manage_promotions), também para leitura. | {"error":"insufficient privileges","required":"manage_b2b"} |
| 400 | O id da regra não é um número inteiro. | {"error":"invalid rule id"} |
| 404 | Não existe regra com esse id. | {"error":"price rule not found"} |