Regras de preço B2B
Cria e mantém regras de preço por faixa de quantidade e grupo de clientes nos produtos do seller.
Uma regra de preço B2B dá um preço ou desconto especial quando o comprador leva uma certa quantidade, opcionalmente só para um grupo de clientes (por exemplo "Atacado"). É assim que o seller monta a tabela de preços escalonada do atacado. Todas as rotas exigem o módulo b2b-pricing ligado.
Listar regras
Lista as regras de preço por quantidade e grupo de clientes dos produtos do seller. Uma regra é escopada pelo produto: a tabela de regras não guarda o seller, a posse vem do produto.
/api/v1/vendor/b2b/rulesSellerListar as regras de preço do seller
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um usuário seller (veja Tokens).Parâmetros de consulta
product_iduuidusergroup_idstringis_activebooleantrue conta como verdadeiro; qualquer outro valor filtra as inativas.pageintegerpadrão: 1per_pageintegerpadrão: 20Exemplo de requisição
curl "$BASE_URL/api/v1/vendor/b2b/rules?is_active=true&page=1&per_page=20" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"rules": [
{
"id": 2,
"product_id": "d004b341-c402-446a-95f1-791b133b810c",
"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-10-01T01:42:06Z",
"updated_at": "2026-10-01T01:42:06Z",
"product_name": "Smartwatch Lite Vermelho",
"product_sku": "SD-001939",
"product_price": 80990,
"usergroup_name": "Atacado"
}
],
"total": 1,
"page": 1,
"per_page": 20,
"total_pages": 1
}Campos da resposta
rulesobject[]Regras da página.
idintegerproduct_iduuidusergroup_idstring|nullnull = todos os clientes.min_qtyintegermax_qtyinteger0 = sem teto.price_centsintegerdiscount_bps é 0.discount_bpsinteger1500 = 15%). Tem precedência sobre price_cents.priorityintegeris_activebooleancreated_atstringupdated_atstringproduct_namestringproduct_skustringproduct_priceintegerusergroup_namestringtotalintegerpageintegerper_pageintegertotal_pagesintegerErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 401 | Token ausente, inválido, expirado ou revogado. | {"error":"missing authorization header"} |
| 403 | O token não é de um usuário seller (por exemplo, é de administrador), ou o usuário não está vinculado a nenhum seller. | {"error":"insufficient permissions"} |
| 403 | O módulo b2b-pricing está desligado nesta loja. | {"error":"module_disabled","module":"b2b-pricing"} |
Criar regra
Cria uma regra de preço para um produto seu. Quando o carrinho de um comprador do grupo atinge a faixa de quantidade, o preço da regra substitui o de tabela. Use discount_bps para um desconto percentual ou price_cents para um preço fixo.
/api/v1/vendor/b2b/rulesSellerCriar uma regra de preço B2B
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um usuário seller (veja Tokens).Content-Typestringobrigatórioapplication/json.Corpo da requisição
product_iduuidobrigatóriousergroup_idstringmin_qtyintegerobrigatóriomax_qtyintegerpadrão: 00 = sem teto. Se maior que zero, não pode ser menor que min_qty.price_centsintegerpadrão: 0discount_bps é 0.discount_bpsintegerpadrão: 0priorityintegerpadrão: 0is_activebooleanpadrão: trueExemplo de requisição
curl -X POST "$BASE_URL/api/v1/vendor/b2b/rules" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"product_id": "d004b341-c402-446a-95f1-791b133b810c",
"usergroup_id": "a1111111-1111-1111-1111-111111111111",
"min_qty": 50,
"max_qty": 99,
"discount_bps": 1500,
"priority": 2
}'Resposta
{
"id": 2,
"product_id": "d004b341-c402-446a-95f1-791b133b810c",
"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-10-01T01:42:06Z",
"updated_at": "2026-10-01T01:42:06Z",
"product_name": "Smartwatch Lite Vermelho",
"product_sku": "SD-001939",
"product_price": 80990,
"usergroup_name": "Atacado"
}Campos da resposta
idintegerproduct_iduuidusergroup_idstring|nullnull = todos os clientes.min_qtyintegermax_qtyinteger0 = sem teto.price_centsintegerdiscount_bps é 0.discount_bpsinteger1500 = 15%). Tem precedência sobre price_cents.priorityintegeris_activebooleancreated_atstringupdated_atstringproduct_namestringproduct_skustringproduct_priceintegerusergroup_namestringErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | JSON inválido ou regra incoerente: max_qty menor que min_qty, discount_bps fora de 0 a 10000, ou nem price_cents nem discount_bps positivos. | {"error":"failed to create price rule","detail":"either price_cents or discount_bps must be positive"} |
| 404 | O produto não existe ou não é seu. | {"error":"product not found"} |
| 401 | Token ausente, inválido, expirado ou revogado. | {"error":"missing authorization header"} |
| 403 | O token não é de um usuário seller (por exemplo, é de administrador), ou o usuário não está vinculado a nenhum seller. | {"error":"insufficient permissions"} |
| 403 | O módulo b2b-pricing está desligado nesta loja. | {"error":"module_disabled","module":"b2b-pricing"} |
Ver uma regra
Devolve uma regra do seller, com nome, SKU e preço de tabela do produto.
/api/v1/vendor/b2b/rules/{id}SellerDetalhe de uma regra de preço
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um usuário seller (veja Tokens).Parâmetros de caminho
idintegerobrigatório400 invalid rule id.Exemplo de requisição
curl "$BASE_URL/api/v1/vendor/b2b/rules/2" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"id": 2,
"product_id": "d004b341-c402-446a-95f1-791b133b810c",
"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-10-01T01:42:06Z",
"updated_at": "2026-10-01T01:42:06Z",
"product_name": "Smartwatch Lite Vermelho",
"product_sku": "SD-001939",
"product_price": 80990,
"usergroup_name": "Atacado"
}Campos da resposta
idintegerproduct_iduuidusergroup_idstring|nullnull = todos os clientes.min_qtyintegermax_qtyinteger0 = sem teto.price_centsintegerdiscount_bps é 0.discount_bpsinteger1500 = 15%). Tem precedência sobre price_cents.priorityintegeris_activebooleancreated_atstringupdated_atstringproduct_namestringproduct_skustringproduct_priceintegerusergroup_namestringErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | id não é um inteiro. | {"error":"invalid rule id"} |
| 404 | A regra não existe ou o produto dela não é seu (a plataforma não diferencia, para não vazar regras alheias). | {"error":"price rule not found"} |
| 401 | Token ausente, inválido, expirado ou revogado. | {"error":"missing authorization header"} |
| 403 | O token não é de um usuário seller (por exemplo, é de administrador), ou o usuário não está vinculado a nenhum seller. | {"error":"insufficient permissions"} |
| 403 | O módulo b2b-pricing está desligado nesta loja. | {"error":"module_disabled","module":"b2b-pricing"} |
Atualizar regra
Altera só os campos enviados. O produto não muda. Diferente da criação, a atualização não revalida as faixas: a plataforma aceita max_qty menor que min_qty ou discount_bps fora do intervalo. Confira os valores antes de enviar.
/api/v1/vendor/b2b/rules/{id}SellerAlterar uma regra de preço
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um usuário seller (veja Tokens).Content-Typestringobrigatórioapplication/json.Parâmetros de caminho
idintegerobrigatório400 invalid rule id.Corpo da requisição
usergroup_idstringmin_qtyintegermax_qtyinteger0 = sem teto).price_centsintegerdiscount_bpsintegerpriorityintegeris_activebooleanExemplo de requisição
curl -X PUT "$BASE_URL/api/v1/vendor/b2b/rules/2" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"discount_bps": 1800,
"is_active": true
}'Resposta
{
"id": 2,
"product_id": "d004b341-c402-446a-95f1-791b133b810c",
"usergroup_id": "a1111111-1111-1111-1111-111111111111",
"min_qty": 50,
"max_qty": 99,
"price_cents": 0,
"discount_bps": 1800,
"priority": 2,
"is_active": true,
"created_at": "2026-10-01T01:42:06Z",
"updated_at": "2026-10-01T01:42:06Z",
"product_name": "Smartwatch Lite Vermelho",
"product_sku": "SD-001939",
"product_price": 80990,
"usergroup_name": "Atacado"
}Campos da resposta
idintegerproduct_iduuidusergroup_idstring|nullnull = todos os clientes.min_qtyintegermax_qtyinteger0 = sem teto.price_centsintegerdiscount_bps é 0.discount_bpsinteger1500 = 15%). Tem precedência sobre price_cents.priorityintegeris_activebooleancreated_atstringupdated_atstringproduct_namestringproduct_skustringproduct_priceintegerusergroup_namestringErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | id não inteiro ou JSON inválido. | {"error":"invalid rule id"} |
| 404 | A regra não existe ou o produto dela não é seu (a plataforma não diferencia, para não vazar regras alheias). | {"error":"price rule not found"} |
| 401 | Token ausente, inválido, expirado ou revogado. | {"error":"missing authorization header"} |
| 403 | O token não é de um usuário seller (por exemplo, é de administrador), ou o usuário não está vinculado a nenhum seller. | {"error":"insufficient permissions"} |
| 403 | O módulo b2b-pricing está desligado nesta loja. | {"error":"module_disabled","module":"b2b-pricing"} |
Excluir regra
Apaga a regra de vez. Não há exclusão lógica nem desfazer. Se só quer suspender, use PUT com is_active: false.
/api/v1/vendor/b2b/rules/{id}SellerExcluir uma regra de preço
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um usuário seller (veja Tokens).Parâmetros de caminho
idintegerobrigatório400 invalid rule id.Exemplo de requisição
curl -X DELETE "$BASE_URL/api/v1/vendor/b2b/rules/2" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"message": "price rule deleted"
}Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | id não é um inteiro. | {"error":"invalid rule id"} |
| 404 | A regra não existe ou o produto dela não é seu (a plataforma não diferencia, para não vazar regras alheias). | {"error":"price rule not found"} |
| 401 | Token ausente, inválido, expirado ou revogado. | {"error":"missing authorization header"} |
| 403 | O token não é de um usuário seller (por exemplo, é de administrador), ou o usuário não está vinculado a nenhum seller. | {"error":"insufficient permissions"} |
| 403 | O módulo b2b-pricing está desligado nesta loja. | {"error":"module_disabled","module":"b2b-pricing"} |