Visão geral
Cadastro do produto base: especificações, galeria, enums e o fluxo completo de cadastro. Preços e estoque têm guias próprios.
| Tema | Guia |
|---|---|
Tabela de preços (default / wholesale) | Produtos: preços |
| Movimentação e saldo de estoque | Produtos: estoque |
Conceitos
Unidade de medida (base_unit):un, pc, cx, pct, kg, lt, mt, m2, m3.
Tipo de preço (price_type):default (valor único) ou wholesale (até 5 faixas progressivas por quantidade). Detalhes em Preços.
Disponibilidade:is_available_for_sale controla a visibilidade do produto no catálogo. is_industrializable indica produto fabricado sob demanda.
Dimensões (obrigatórias para frete):dimensions.height, dimensions.width, dimensions.length (cm) e dimensions.weight (kg). Todos os valores devem ser no mínimo 0.001.
O objeto que GET /products/{id} devolve — produto, preços e estoque juntos:
{
"product": {
"id": "01H8X…", // ID do produto
"name": "Produto Exemplo A",
"sku": "SKU-001", // único por loja
"base_unit": "un", // ← Unidade de medida
"price_type": "default", // ← Tipo de preço (default | wholesale)
"dimensions": {…}, // ← Dimensões (cm) + peso (kg)
"is_available_for_sale": true, // ← Disponibilidade no catálogo
"is_industrializable": false, // fabricado sob demanda
"auto_wholesale_pricing": false, // atacado por % de desconto (ver Preços)
"allow_sale_without_stock": false, // venda sem estoque (sob encomenda)
"quantity": 100, // estoque físico
"reserved_quantity": 5, // reservado em pedidos abertos
"available_quantity": 95, // disponível p/ venda
"thumbnail": { // imagem principal
"id": "01JMZ…", // ID da imagem
"resources": [{…}] // variações (name, size, url)
},
"price": 50.0 // preço-base (faixa min_quantity=1)
},
"prices": [{…}], // faixas de preço (ver Preços)
"stock": [{…}] // saldo por local (ver Estoque)
}Produto
| Campo | Descrição |
|---|---|
id | ULID, gerado automaticamente. |
name | Nome (máx. 255 caracteres). |
sku | Código único por loja (máx. 50 caracteres). |
base_unit | Unidade de medida. |
price_type | default ou wholesale. |
is_available_for_sale | Visível no catálogo. |
is_industrializable | Fabricado sob demanda. |
allow_sale_without_stock | Permite venda sem saldo em estoque (sob encomenda). |
auto_wholesale_pricing | Faixas de atacado derivadas automaticamente do % de desconto. Detalhes em Preços. |
dimensions | Altura, largura, comprimento (cm) e peso (kg). |
O
skué definido na criação e não pode ser alterado: se vier noPUT /api/products/{id}, é simplesmente ignorado.
Sublojas em modo espelho não criam SKU próprio — o catálogo vem da matriz. O
POST /api/productsresponde422 SUBSTORE_CANNOT_CREATE_SKU.
Galeria
Cada produto suporta até 6 imagens. A primeira é a thumbnail por padrão; se ela for removida, a próxima imagem assume o lugar.
Fluxo de upload
- Suba o arquivo via Mídia. Ele retorna o
image_id. - Vincule à galeria com
POST /api/products/{id}/gallery.
Endpoints
Dados auxiliares
Rotas públicas (sem autenticação). Use pra popular dropdowns no seu sistema.
Fluxo: cadastro completo
| Etapa | Ação | Onde |
|---|---|---|
| 1 | Consultar enums | GET /api/global/enums/product/units |
| 2 | Criar produto | POST /api/products |
| 3 | Definir preço (default ou wholesale) | Produtos: preços |
| 4 | Definir estoque inicial | Produtos: estoque |
| 5 | Upload de imagens | POST /api/media/upload (Mídia) |
| 6 | Vincular à galeria | POST /api/products/{id}/gallery |
Depois disso, o produto está pronto para virar anúncio e ir ao marketplace.

