Gerenciamento de preços por SKU
Depois de configurar uma tabela de preços, este guia mostra como consultar e gravar os preços dos SKUs nela. O cadastro da tabela — nome, modo, posição e status — está em Configuração de tabelas de preços.
O preço de tabela é separado do preço do marketplace. Alterar um não altera o outro.
Pré-requisitos e acesso
A loja precisa ter:
- a feature
sales_forcehabilitada; - o sistema de tabelas ligado em
price_lists_enabled.
O acesso via integrador usa token sk_* com store_products_read para leitura e store_products_write para gravar. Não é necessário atribuir store_sales_force_read ou store_sales_force_manage para este fluxo.
Se price_lists_enabled estiver false, as tabelas e os preços existentes são preservados, mas o PUT de preço por SKU responde 400. Consulte Configuração de tabelas de preços para ligar o sistema.
Consultar preços por tabela
O {sku} na URL é o ULID do SKU, o mesmo id do produto — não o código sku cadastrado.
curl 'https://api.unisupri.com/api/products/{{SKU_ID}}/price-lists' \
-H 'Authorization: Bearer {{INTEGRATION_TOKEN}}'O GET devolve todas as tabelas ativas da loja e o estado do SKU em cada uma. Quando o produto ainda não participa da tabela, retorna active: false e tiers: [].
{
"success": true,
"data": [
{
"price_list_id": "01K9...",
"name": "Ouro",
"mode": "auto",
"active": true,
"base_price": 100.00,
"tiers": [
{ "min_quantity": 1, "price": 100.00, "discount_percent": 0 },
{ "min_quantity": 10, "price": 88.00, "discount_percent": 12 }
]
}
]
}Gravar preços do SKU
O PUT substitui a lista inteira de faixas do SKU naquela tabela. Envie sempre o estado completo; a operação é idempotente.
Tabela manual
Informe o preço de cada faixa:
curl -X PUT 'https://api.unisupri.com/api/products/{{SKU_ID}}/price-lists/{{PRICE_LIST_ID}}' \
-H 'Authorization: Bearer {{INTEGRATION_TOKEN}}' \
-H 'Content-Type: application/json' \
-d '{
"active": true,
"tiers": [
{"min_quantity": 1, "price": 100.00},
{"min_quantity": 10, "price": 88.00}
]
}'Tabela automática
Informe base_price e o desconto de cada faixa:
{
"active": true,
"base_price": 100.00,
"tiers": [
{"min_quantity": 1, "discount_percent": 0},
{"min_quantity": 10, "discount_percent": 12},
{"min_quantity": 50, "discount_percent": 25}
]
}O preço de cada faixa é calculado por base_price × (1 − discount_percent / 100). A faixa base (min_quantity: 1) não recebe desconto e os descontos precisam ser progressivos.
| Campo | Regra |
|---|---|
active | Obrigatório e booleano. Controla a participação do SKU na tabela. |
base_price | Usado no modo auto. Número ≥ 0. |
tiers | Obrigatório, com pelo menos 1 e no máximo 5 faixas. |
tiers[].min_quantity | Obrigatório, inteiro ≥ 1. |
tiers[].price | Usado no modo manual. Número ≥ 0. |
tiers[].discount_percent | Usado no modo auto, de 0 a 99.99. |
A resposta 200 traz o estado reconciliado. Faixas ausentes no corpo são removidas.
Isolamento do marketplace
O preço do anúncio continua sendo gerenciado em Produtos · Preços. As tabelas deste guia valem para os pedidos originados pela força de vendas.
Erros mais comuns
| Erro | Quando acontece | Como tratar |
|---|---|---|
403feature_disabled | A loja não tem força de vendas habilitada. | Solicite a habilitação da feature. |
400 | price_lists_enabled está false. | Ligue o sistema no guia de configuração das tabelas. |
422 | Payload inválido, mais de 5 faixas ou descontos não progressivos. | Corrija os campos apontados em errors. |
404 | SKU ou tabela inexistente, ou de outra loja. | Use os IDs retornados pela API da loja. |

