Preço e estoque do produto
Como funcionam as faixas de preço por quantidade, o estoque, a recorrência e a embalagem de envio de um produto, com o modelo de estoque explicado e o mapa das rotas.
Além do cadastro básico (nome, preço, categoria), um produto tem quatro assuntos comerciais que esta seção cobre: as faixas de preço por quantidade (preço de atacado), o estoque (quanto há para vender e o que a loja faz quando acaba), a recorrência (assinatura e compra programada) e a embalagem de envio (a caixa externa usada no cálculo do frete).
Todas as rotas daqui ficam em /api/v1/admin. O preço base e as regras de quantidade do produto são alterados no cadastro do produto (Atualizar produto).
Como funciona
Um fluxo típico de um ERP ou de um sistema de preços que alimenta a loja:
- Definir o preço base
O preço do produto (centavos) é gravado no cadastro dele. Veja Criar produto e Atualizar produto.
- Publicar a tabela de atacado
Envie as faixas de preço por quantidade de uma vez com
PUT, ou uma a uma comPOST. - Manter o estoque em dia
A cada contagem ou movimentação, ajuste o estoque:
set_topara um inventário,deltapara entradas e saídas. - Opcionais
Se a loja vende por assinatura, configure a recorrência. Se usa o cálculo de frete por caixa, grave a embalagem de envio.
Conceitos-chave
O modelo de estoque
Estes são os campos do produto que descrevem o estoque. Todos aparecem na resposta de Consultar produto:
| Campo | Tipo | O que é |
|---|---|---|
quantity | número | O saldo: quantas unidades há para vender, na unidade de venda do produto. Também aparece como amount, o mesmo número. |
track_inventory | verdadeiro ou falso | Se a loja controla o estoque deste produto. Produtos novos nascem com true. A API não tem campo para mudar isso. |
low_stock_alert | inteiro | O limite de estoque baixo. 0 desliga o aviso. |
out_of_stock_action | N, B ou S | O que a loja faz quando o saldo chega a zero. |
min_quantity, max_quantity, quantity_step | número | Regras de compra (mínimo, máximo e passo por pedido). 0 significa sem limite. |
sale_unit, allow_fractional | texto, booleano | A unidade de venda (un, kg, cx, l...) e se aceita fração (0,5 kg). |
track_inventory. Com true, o saldo manda: o carrinho recusa uma quantidade maior que quantity (erro de estoque insuficiente), a menos que out_of_stock_action seja B. Com false e quantity igual a 0, o produto é ilimitado (típico de produto digital). Com false e quantity maior que 0, a loja ainda limita a compra a esse saldo.
out_of_stock_action. O que acontece quando o saldo é zero:
| Valor | Significado |
|---|---|
N | Nada: o botão de compra some e o produto não pode ser comprado. |
B | Encomenda (backorder): a compra continua liberada mesmo sem saldo. |
S | Cadastro de aviso: a loja mostra "avise-me quando voltar". É o valor com que os produtos nascem. |
low_stock_alert. Um produto é considerado de estoque baixo quando controla estoque, tem saldo maior que 0 e menor ou igual a esse limite. Na lista de produtos da administração, o filtro low_stock=true mostra esses produtos.
Frações. Produtos vendidos por peso ou volume (kg, l) podem ter saldo fracionado. As rotas de estoque desta seção trabalham em unidades inteiras.
Quem muda o saldo. Fora as rotas desta seção, o saldo cai quando um pedido é feito e volta quando o pedido é cancelado ou falha (veja Pedidos). Em lojas com depósitos, o produto também tem saldo por depósito; as rotas desta seção mexem no saldo do produto.
Variações. Um produto com variações (cor, tamanho) tem estoque próprio em cada variação. Essas variações não são tratadas nesta seção.
Faixas de preço por quantidade
Preço de atacado: "a partir de N unidades, o preço é X". Pode valer para todos, só para visitantes, só para clientes logados ou só para um grupo. O preço da faixa vale para todas as unidades do pedido, e uma faixa nunca cobra mais que o preço do produto. Os detalhes estão em Faixas de preço por quantidade.
Privilégios
| Rota | Privilégio |
|---|---|
| Ler faixas de preço | view_catalog ou manage_catalog |
| Gravar faixas de preço | manage_catalog |
Ajustar o estoque (PUT .../stock) | manage_features |
| Ler a recorrência | view_content ou manage_content (e recurso de recorrência ligado) |
| Gravar a recorrência | manage_content (e recurso de recorrência ligado) |
| Ler a embalagem de envio | view_catalog ou manage_catalog (e recurso de frete pelos Correios ligado) |
| Gravar a embalagem de envio | manage_catalog (e recurso de frete pelos Correios ligado) |
Sem o privilégio a resposta é 403 e o corpo diz qual faltou. Com o recurso desligado, a resposta é 403 {"error":"module_disabled","module":"..."}.
Identificadores
O {id} é sempre o UUID do produto, nunca o SKU. Para o produto mestre e o produto de seller, veja Produtos.
Endpoints
Auth: Admin é o administrador (Bearer).
| Método | Rota | O que faz | Auth | Página |
|---|---|---|---|---|
| GET | /api/v1/admin/products/{id}/price-tiers | Lista as faixas de preço | Admin | Faixas de preço |
| PUT | /api/v1/admin/products/{id}/price-tiers | Substitui todas as faixas | Admin | Faixas de preço |
| POST | /api/v1/admin/products/{id}/price-tiers | Acrescenta ou atualiza uma faixa | Admin | Faixas de preço |
| PUT | /api/v1/admin/products/{id}/stock | Define ou ajusta o estoque | Admin | Estoque |
| GET | /api/v1/admin/products/{id}/recurring | Lê a recorrência do produto | Admin | Recorrência |
| PUT | /api/v1/admin/products/{id}/recurring | Grava a recorrência do produto | Admin | Recorrência |
| GET | /api/v1/admin/products/{id}/shipping-packaging | Lê a embalagem de envio | Admin | Embalagem de envio |
| PUT | /api/v1/admin/products/{id}/shipping-packaging | Grava a embalagem de envio | Admin | Embalagem de envio |
Erros comuns
- Enviar
quantitysozinho para mudar o estoque. A API recusa com 400stock_intent_required. Useset_to(total) oudelta(variação). - Esperar que o ajuste de estoque use
manage_catalog. A rota exigemanage_features. Um usuário só de catálogo recebe 403. - Mandar reais em vez de centavos numa faixa. O
priceda faixa é um inteiro em centavos:49.90é recusado, envie4990. - Achar que o
PUTdas faixas é parcial. Ele apaga todas as faixas e grava só as que você mandou. Para acrescentar uma, usePOST. - Esperar que o
POSTde uma faixa comlower_limit1 mude o preço do produto. Só oPUTfaz isso. - Usar o
updated_atantigo na embalagem de envio. A gravação volta409. Releia e grave de novo. - Esquecer que recorrência e embalagem dependem de recursos da loja. O
403 module_disablednão é problema de permissão do usuário.