Tabelas de preço
Lista, consulta, cria, altera e exclui as tabelas de preço B2B da loja.
Uma tabela de preço é o "cabeçalho" da política: nome, código, vigência e prioridade. Os preços ficam nos itens e o alcance fica nas atribuições. Estas cinco rotas cuidam só do cabeçalho. Todas exigem o módulo b2b-pricing e o privilégio manage_b2b ou manage_promotions.
Listar tabelas
Devolve todas as tabelas não excluídas, da maior prioridade para a menor e, em empate, por nome. Não há paginação: a lista de uma loja costuma ser curta.
/api/v1/admin/b2b/price-listsAdminLista as tabelas de preço
Parâmetros de consulta
statusstringdraftactivearchivedExemplo de requisição
curl "$BASE_URL/api/v1/admin/b2b/price-lists?status=active" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"price_lists": [
{
"id": "3f0c1a52-8d7e-4c1b-9a64-2b5e7d9c1a10",
"name": "Atacado SP",
"code": "atacado-sp",
"description": "",
"status": "active",
"valid_from": "2026-10-01",
"valid_until": "2026-12-31",
"priority": 20,
"item_count": 1,
"assignment_count": 3,
"created_at": "2026-07-07T01:15:19.519929Z",
"updated_at": "2026-07-21T21:00:22.113279Z"
}
]
}Campos da resposta
price_listsarrayiduuidnamestringcodestringdescriptionstringstatusstringdraftactivearchivedvalid_fromstringYYYY-MM-DD. O campo some da resposta quando é nulo.valid_untilstringYYYY-MM-DD, inclusive. Some quando é nulo.priorityintegeritem_countintegerassignment_countinteger0 significa que ninguém recebe esta tabela.created_atstringupdated_atstringErros
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token | {"error":"missing authorization header"} |
| 403 | Sem privilégio | {"error":"insufficient privileges","privilege_required_any":["manage_b2b","manage_promotions"]} |
| 403 | Módulo desligado | {"error":"module_disabled","module":"b2b-pricing"} |
| 500 | Falha ao consultar | {"error":"failed to list price lists","detail":"..."} |
Criar uma tabela
Cria uma tabela em rascunho. Ela ainda não afeta nenhum preço: preencha os itens, atribua a quem vale e só então ative.
/api/v1/admin/b2b/price-listsAdminCria uma tabela de preço
Corpo da requisição
namestringobrigatóriocodestringobrigatórioatacado-sp-2026s2). Repetir o código de outra tabela não excluída é recusado.descriptionstringvalid_fromstringYYYY-MM-DD. Vazio ou ausente significa "sem início".valid_untilstringYYYY-MM-DD, inclusive. Vazio ou ausente significa "sem fim".priorityintegerpadrão: 0Exemplo de requisição
curl -X POST "$BASE_URL/api/v1/admin/b2b/price-lists" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Atacado SP",
"code": "atacado-sp",
"description": "Condição para revendedores do estado de São Paulo",
"valid_from": "2026-10-01",
"valid_until": "2026-12-31",
"priority": 20
}'Resposta
{
"id": "3f0c1a52-8d7e-4c1b-9a64-2b5e7d9c1a10",
"name": "Atacado SP",
"code": "atacado-sp",
"description": "Condição para revendedores do estado de São Paulo",
"status": "draft",
"valid_from": "2026-10-01",
"valid_until": "2026-12-31",
"priority": 20,
"item_count": 0,
"assignment_count": 0,
"created_at": "2026-10-11T22:10:00Z",
"updated_at": "2026-10-11T22:10:00Z"
}Os campos são os da listagem. A tabela volta com status: draft e contagens zeradas.
Erros
| Status | Quando | Corpo |
|---|---|---|
| 400 | JSON inválido | {"error":"invalid request body","detail":"..."} |
| 400 | name vazio | {"error":"failed to create price list","detail":"name is required"} |
| 400 | code vazio | {"error":"failed to create price list","detail":"code is required"} |
| 400 | Código repetido ou data inválida | {"error":"failed to create price list","detail":"insert price list: ..."} |
| 401 / 403 | Sem token, sem privilégio, módulo desligado | veja a lista acima |
Consultar uma tabela
Devolve uma tabela pelo id, com as contagens de itens e atribuições.
/api/v1/admin/b2b/price-lists/{id}AdminConsulta uma tabela de preço
Parâmetros de caminho
iduuidobrigatórioExemplo de requisição
curl "$BASE_URL/api/v1/admin/b2b/price-lists/3f0c1a52-8d7e-4c1b-9a64-2b5e7d9c1a10" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"id": "3f0c1a52-8d7e-4c1b-9a64-2b5e7d9c1a10",
"name": "Atacado SP",
"code": "atacado-sp",
"description": "",
"status": "active",
"priority": 20,
"item_count": 1,
"assignment_count": 3,
"created_at": "2026-07-07T01:15:19.519929Z",
"updated_at": "2026-07-21T21:00:22.113279Z"
}Erros
| Status | Quando | Corpo |
|---|---|---|
| 404 | UUID válido que não existe, ou tabela excluída | {"error":"price list not found"} |
| 400 | Id 0 | {"error":"invalid id parameter"} |
| 500 | Id que não é UUID | {"error":"price list operation failed","detail":"..."} |
Alterar uma tabela
Altera só os campos enviados (os demais ficam como estão). Não muda o status: use as rotas de ativar e arquivar. O code não é editável.
/api/v1/admin/b2b/price-lists/{id}AdminAltera uma tabela de preço
Parâmetros de caminho
iduuidobrigatórioCorpo da requisição
namestring"" grava um nome vazio (a API não valida aqui).descriptionstringvalid_fromstringYYYY-MM-DD. Enviar "" remove a data.valid_untilstringYYYY-MM-DD. Enviar "" remove a data.priorityintegerExemplo de requisição
curl -X PUT "$BASE_URL/api/v1/admin/b2b/price-lists/3f0c1a52-8d7e-4c1b-9a64-2b5e7d9c1a10" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{ "valid_until": "2027-03-31", "priority": 25 }'Resposta
{
"id": "3f0c1a52-8d7e-4c1b-9a64-2b5e7d9c1a10",
"name": "Atacado SP",
"code": "atacado-sp",
"description": "",
"status": "active",
"valid_until": "2027-03-31",
"priority": 25,
"item_count": 1,
"assignment_count": 3,
"created_at": "2026-07-07T01:15:19.519929Z",
"updated_at": "2026-10-11T22:12:00Z"
}A resposta é a tabela completa depois da alteração.
Erros
| Status | Quando | Corpo |
|---|---|---|
| 400 | JSON inválido | {"error":"invalid request body","detail":"..."} |
| 404 | Tabela inexistente ou excluída | {"error":"price list not found"} |
| 500 | Id que não é UUID, ou data inválida | {"error":"price list operation failed","detail":"..."} |
Excluir uma tabela
Exclusão lógica: a tabela some das listagens e o code fica livre para reutilização. Só funciona para draft ou archived.
/api/v1/admin/b2b/price-lists/{id}AdminExclui uma tabela de preço
Parâmetros de caminho
iduuidobrigatórioExemplo de requisição
curl -X DELETE "$BASE_URL/api/v1/admin/b2b/price-lists/3f0c1a52-8d7e-4c1b-9a64-2b5e7d9c1a10" \
-H "Authorization: Bearer $TOKEN"Resposta
{ "deleted": true }Erros
| Status | Quando | Corpo |
|---|---|---|
| 409 | Tabela ativa, já excluída ou inexistente | {"error":"failed to delete price list","detail":"price list not found or not in a deletable state (must be draft/archived)"} |