Multi-estoque
Endpoints de multi-estoque expostos no padrão /api2 da API REST Yep. Permitem listar armazéns ativos da loja, consultar e atualizar o estoque distribuído por warehouse (com agregação automática do total) e ler a distribuição por armazém dentro dos itens do pedido.
Visão geral
Quando a funcionalidade de multi-estoque está ativa na loja, a Yep distribui o estoque de cada produto por múltiplos armazéns (loja física, depósito principal, centros de distribuição etc.). Esta página cobre as quatro interfaces da API REST relacionadas: Warehouses (cadastro de armazéns), Stockitems (estoque por warehouse, com agregação automática), Products (com stock_data.warehouses) e o impacto em Orders (warehouses por item do pedido).
{code: qty} ou lista [{code, qty}].Regras gerais
Convenções comuns aos endpoints de multi-estoque. Base URL nos exemplos: /api2. Endpoints protegidos exigem Authorization: Bearer {{token}} e Content-Type: application/json nos verbos POST/PATCH.
- Os endpoints fazem parte da funcionalidade de multi-estoque e herdam a autenticação OAuth, a paginação determinística e o padrão de resposta da API REST Yep.
- Listagens aceitam
page,limit,include_paginatione filtros por query string ou JSON body. - O campo
warehousesaceita dois formatos: mapa{code: qty}(atalho compacto) ou lista[{code, qty}](mais explícita; útil quando a integração trabalha com arrays). - Quando
warehousesé enviado, o estoque total agregado do produto é recalculado automaticamente pelo model do módulo. Não é necessário enviarqtyseparadamente.
Warehouses
Cadastro dos armazéns da loja. Por padrão, lista apenas armazéns ativos; use include_inactive=true para auditoria ou para integrações que precisam ver todos.
Listar armazéns.
true, inclui armazéns inativos. Padrão: apenas ativos.Listagem paginada
GET /api2/warehouses?page=1&limit=50&include_pagination=1
Authorization: Bearer {{token}}
Por código
GET /api2/warehouses?code=deposito_padrao
Authorization: Bearer {{token}}
Resposta — armazém individual
{
"success": true,
"warehouse": {
"warehouse_id": 1,
"code": "deposito_padrao",
"name": "Depósito Padrão",
"status": 1
}
}
Resposta — listagem
{
"success": true,
"page": 1,
"limit": 50,
"total": 4,
"last_page": 1,
"has_next": false,
"warehouses": [
{"warehouse_id": 1, "code": "deposito_padrao", "name": "Depósito Padrão", "status": 1},
{"warehouse_id": 2, "code": "loja_sp", "name": "Loja São Paulo", "status": 1},
{"warehouse_id": 3, "code": "loja_rj", "name": "Loja Rio", "status": 1},
{"warehouse_id": 4, "code": "cd_norte", "name": "CD Norte", "status": 0}
]
}
warehouses. Busca por id ou code único usa a chave warehouse.Stockitems
Consulta e atualização do estoque por warehouse. A resposta inclui sempre o campo warehouses com a distribuição por armazém e o qty total agregado.
Listar estoque por armazém.
Listagem paginada
GET /api2/stockitems?page=1&limit=50&include_pagination=1
Authorization: Bearer {{token}}
Por ID do stock item
GET /api2/stockitems?id=456
Authorization: Bearer {{token}}
Por ID do produto
GET /api2/stockitems?product_id=123
Authorization: Bearer {{token}}
Por SKU único
GET /api2/stockitems?sku=PRODUTO-001
Authorization: Bearer {{token}}
Por múltiplos SKUs (JSON body)
{
"sku": ["PRODUTO-001", "PRODUTO-002"],
"include_pagination": true
}
Resposta — item individual
{
"success": true,
"stockitem": {
"item_id": 456,
"stock_item_id": 456,
"stock_id": 1,
"product_id": 123,
"sku": "PRODUTO-001",
"name": "Produto 001",
"qty": 15,
"is_in_stock": 1,
"manage_stock": 1,
"use_config_manage_stock": 1,
"backorders": 0,
"min_qty": 0,
"min_sale_qty": 1,
"warehouses": {
"deposito_padrao": 10,
"loja_sp": 5
}
}
}
stockitems; busca individual usa stockitem. O campo qty é a soma das quantidades por warehouse — recalculado automaticamente. Os IDs item_id e stock_item_id apontam para o mesmo registro e podem ser usados de forma intercambiável em consultas e atualizações.Atualizar estoque por warehouse. Identifique o stock item com id, item_id ou stock_item_id; ou identifique pelo produto com product_id ou sku. O endpoint também aceita POST para integrações que não enviam PATCH.
Por ID do stock item
PATCH /api2/stockitems
Authorization: Bearer {{token}}
Content-Type: application/json
{
"id": 456,
"warehouses": {
"deposito_padrao": 10,
"loja_sp": 5
}
}
Por SKU (mapa de warehouses)
PATCH /api2/stockitems
Authorization: Bearer {{token}}
Content-Type: application/json
{
"sku": "PRODUTO-001",
"warehouses": {
"deposito_padrao": 10,
"loja_sp": 5
}
}
Aninhada em stock_data com flags de gestão
PATCH /api2/stockitems
Authorization: Bearer {{token}}
Content-Type: application/json
{
"product_id": 123,
"stock_data": {
"is_in_stock": 1,
"manage_stock": 1,
"warehouses": {
"deposito_padrao": 10
}
}
}
Total recalculado automaticamente
Quando warehouses é enviado, o qty total agregado é recalculado pelo model do módulo. Não envie qty manualmente — ele será sobrescrito pela soma das quantidades por warehouse.
Atualização em lote — envie um array de objetos no body. Cada item segue as mesmas regras do PATCH simples. Aceita ambos os formatos de warehouses (mapa ou lista).
PATCH /api2/stockitems
Authorization: Bearer {{token}}
Content-Type: application/json
[
{
"sku": "PRODUTO-001",
"warehouses": {
"deposito_padrao": 10
}
},
{
"sku": "PRODUTO-002",
"warehouses": [
{"code": "deposito_padrao", "qty": 3},
{"code": "loja_sp", "qty": 2}
]
}
]
[{code, qty}]) é especialmente útil para integrações que serializam dados a partir de um banco relacional (uma linha por warehouse).Warehouses dentro de Produtos
Quando a funcionalidade de multi-estoque está ativa, os endpoints de Produtos passam a incluir stock_data.warehouses nas respostas, mantendo compatibilidade com a semântica de stock_data já consumida por integrações de catálogo.
GET /api2/products?type=sku&id=PRODUTO-001
Authorization: Bearer {{token}}
GET /api2/products?page=1&limit=50&include_pagination=1
Authorization: Bearer {{token}}
{
"success": true,
"product": {
"product_id": 123,
"sku": "PRODUTO-001",
"name": "Produto 001",
"stock_data": {
"qty": 15,
"is_in_stock": 1,
"warehouses": {
"deposito_padrao": 10,
"loja_sp": 5
}
}
}
}
stock_data.warehouses simplesmente não aparece na resposta — as integrações já existentes continuam funcionando sem alteração.Warehouses dentro dos itens do pedido
Quando a funcionalidade de multi-estoque está ativa, os endpoints de Pedidos incluem o campo warehouses dentro de cada item da resposta — indicando de quais armazéns cada quantidade foi reservada/separada.
GET /api2/order?id=100
Authorization: Bearer {{token}}
{
"success": true,
"order": {
"order_id": 100,
"increment_id": "100000100",
"items": [
{
"item_id": 10,
"sku": "PRODUTO-001",
"qty_ordered": 2,
"warehouses": {
"deposito_padrao": 2
}
}
]
}
}
/api/rest/orders em ambientes que usam multi-estoque. Quando o módulo está inativo, o campo warehouses simplesmente não aparece nos itens.Formas de uso suportadas
Combinações testadas e homologadas para a API de multi-estoque.
GET /api2/warehouses?include_pagination=1GET /api2/warehouses?include_inactive=trueGET /api2/warehouses?code=deposito_padraoGET /api2/stockitems?id=456GET /api2/stockitems?sku=PRODUTO-001GET /api2/stockitems?sku=PRODUTO-001,PRODUTO-002PATCH /api2/stockitems + id: 456PATCH /api2/stockitems + warehouses: {code: qty}PATCH /api2/stockitems + warehouses: [{code, qty}]PATCH /api2/stockitems + array de objetosGET /api2/products?type=sku&id=PRODUTO-001Recomendações para integração
Recomendado
- Cachear a listagem de
/api2/warehouses— o cadastro muda raramente, e cada chamada de stock pode reaproveitar a lista. - Usar o formato em lista (
[{code, qty}]) quando a integração serializa dados a partir de banco relacional; usar o mapa ({code: qty}) quando os dados já vêm em forma de dicionário. - Em sincronizações de alta volumetria, preferir o PATCH em lote — minimiza overhead de autenticação e logging.
- Ler
warehousesdos itens do pedido para alimentar OMS/WMS com a informação de qual armazém atende cada linha.
Evitar
- Enviar
qtytotal junto comwarehouses— o total será sobrescrito pelo recálculo do módulo. - Usar códigos de warehouse com caracteres não-ASCII em ambientes que serializam URL — prefira slugs (
deposito_padraoem vez dedepósito padrão). - Atualizar warehouses em loop (1 PATCH por SKU) quando o lote já resolve — gera contenção no estoque agregado.
Sincronização incremental
Para sincronizações periódicas a partir do WMS, combine GET /api2/warehouses (cacheado por 24h) + PATCH /api2/stockitems em lote a cada janela de delta. Essa combinação reduz drasticamente o número de chamadas e mantém o estoque agregado coerente.
Erros comuns
| Status | Exemplo de body | Quando ocorre |
|---|---|---|
400 | {"error": "Invalid warehouse code"} | warehouses contém um código que não existe no cadastro. |
400 | {"error": "Invalid quantity"} | Quantidade não numérica ou negativa em algum warehouse. |
400 | {"error": "Module not active"} | A funcionalidade de multi-estoque não está habilitada no ambiente. |
401 | {"error": "Unauthorized"} | Authorization ausente ou token expirado. |
404 | {"error": "Warehouse not found"} | warehouse_id ou code inexistente. |
404 | {"error": "Product not found"} | product_id ou sku inexistente. |
409 | {"error": "Conflict on save"} | Duplicidade ou deadlock em gravação concorrente. |