Logo da Plataforma Yep
API REST · Plataforma Yep Documentação técnica para integrações homologadas

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.

REST JSON Bearer Token Novo em 2026

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).

4
RecursosWarehouses, stockitems, produtos e itens de pedido com warehouses.
auto
Total agregadoQuantidade total recalculada automaticamente.
LoteAtualização em lote para sincronização em alta volumetria.
2
Padrões aceitosMapa {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_pagination e filtros por query string ou JSON body.
  • O campo warehouses aceita 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 enviar qty separadamente.

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.

GET/api2/warehouses

Listar armazéns.

ListagemFiltros
page, limit, include_pagination Opcional
Paginação padrão.
include_inactive Opcional
Quando true, inclui armazéns inativos. Padrão: apenas ativos.
store_id Opcional
Filtra armazéns vinculados à loja.
warehouse_id / id Opcional
Retorna um armazém específico (resposta singular).
code Opcional
Retorna um armazém específico pelo código (resposta singular).

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}
  ]
}
Resposta de listagem usa a chave 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.

GET/api2/stockitems

Listar estoque por armazém.

ListagemMulti-SKU
page, limit, include_pagination Opcional
Paginação padrão.
id / item_id / stock_item_id Opcional
ID do stock item. Aceita valor único, CSV ou array.
product_id Opcional
ID do produto. Aceita valor único, CSV ou array.
sku Opcional
SKU do produto. Aceita valor único, CSV ou array.

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
    }
  }
}
Resposta de listagem usa a chave 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.
PATCH/api2/stockitems

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.

PATCH/POSTTotal recalculado

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.

PATCH/api2/stockitems

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).

LoteSincronização em massa
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}
    ]
  }
]
O formato em lista ([{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
      }
    }
  }
}
Quando a funcionalidade de multi-estoque está inativa, 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
        }
      }
    ]
  }
}
O comportamento é idêntico ao da API legado /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.

Listar armazéns ativosGET /api2/warehouses?include_pagination=1
Incluir armazéns inativosGET /api2/warehouses?include_inactive=true
Armazém por códigoGET /api2/warehouses?code=deposito_padrao
Estoque por ID do stock itemGET /api2/stockitems?id=456
Estoque por SKUGET /api2/stockitems?sku=PRODUTO-001
Estoque para múltiplos SKUsGET /api2/stockitems?sku=PRODUTO-001,PRODUTO-002
Atualizar por ID do stock itemPATCH /api2/stockitems + id: 456
Atualizar mapa de warehousesPATCH /api2/stockitems + warehouses: {code: qty}
Atualizar lista de warehousesPATCH /api2/stockitems + warehouses: [{code, qty}]
Atualização em lotePATCH /api2/stockitems + array de objetos
Produto com warehousesGET /api2/products?type=sku&id=PRODUTO-001

Recomendaçõ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 warehouses dos itens do pedido para alimentar OMS/WMS com a informação de qual armazém atende cada linha.

Evitar

  • Enviar qty total junto com warehouses — 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_padrao em vez de depó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

StatusExemplo de bodyQuando 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.