Produtos
Criação, atualização, consulta, vínculo, imagens e exclusão de produtos — com suporte a paginação determinística, seleção explícita de store_id, controle de limit e metadados opcionais de paginação.
Visão geral
O endpoint /api2/products é uma rota integracional/administrativa. Ele não se limita a produtos ativos de vitrine — ele expõe o catálogo para sincronização com ERPs, PIMs, marketplaces e rotinas internas. A rota suporta tanto listagem paginada quanto busca individual por id ou sku.
limit.limit é omitido ou inválido.total, last_page, has_next sob include_pagination=1.Criar produto configurável.
{
"attribute_set_id": 4,
"type_id": "configurable",
"visibility": 4,
"store_id": 1,
"sku": "novo_configuravel",
"name": "novo configuravel",
"description": "Descrição do produto configurável",
"short_description": "Curta descrição",
"price": 99.90,
"status": 1,
"tax_class_id": 2,
"categories": [54, 59, 128],
"website_id": [1],
"additional_attributes": {
"single_data": [
{"key": "color", "value": "AZUL"},
{"key": "ncm", "value": "5543"}
]
},
"configurable_attributes": [335]
}
Criar produto simples.
{
"type_id": "simple",
"attribute_set_id": 4,
"sku": "produto_teste",
"store_id": 1,
"name": "Produto teste",
"price": "2000",
"special_price": "150",
"weight": "0.5",
"status": 1,
"visibility": 4,
"categories": [54, 59, 128],
"website_id": [1],
"stock_data": {"qty": "99", "is_in_stock": 1}
}
Atualizar produto.
{
"type": "sku",
"id": "novo_produto",
"name": "Novo nome do produto"
}
invalid_fields, invalid_attributes e invalid_attribute_values.Consultar produto (individual) ou listar com paginação determinística.
?page=1&type=sku&id=novo_produto
Vincular simples a configurável.
{
"type": "sku",
"configurable_id": "novo_produto",
"simples": "novo_configuravel"
}
Excluir produto.
{
"type": "sku",
"id": "novo_produto"
}
Consulta individual de produto Atualizado
O GET /api2/products continua atendendo à listagem quando usado sem identificação individual. Para trazer um único produto, informe id e type. Nessa forma de uso a resposta passa a incluir referências legíveis (conjunto de atributos, categorias, websites, status e visibilidade), além de um resumo de preço e um resumo de estoque.
GET /api2/products?id=3291&type=sku
GET /api2/products?id=2074&type=id
GET /api2/products?id=3291&type=sku&store_id=1
Parâmetros
type. Obrigatório apenas na consulta individual.id é interpretado: id ou sku. Obrigatório apenas na consulta individual.Exemplo de resposta — produto simples
{
"success": true,
"product": {
"product_id": "2074",
"sku": "3291",
"name": "Cápsulas de Café União Ristretto 10 unidades",
"set": "4",
"product_set": {
"id": "4",
"name": "Default"
},
"type": "simple",
"categories": ["122", "124"],
"product_categories": [
{"id": "122", "name": "Cápsulas Compatíveis"},
{"id": "124", "name": "Cafés"}
],
"websites": ["1"],
"product_websites": [
{"id": "1", "code": "cafe", "name": "Website Principal"}
],
"status": "1",
"product_status": {
"value": "1",
"code": "enabled",
"label": "Habilitado"
},
"visibility": "4",
"product_visibility": {
"value": "4",
"code": "catalog_search",
"label": "Catálogo, Busca"
},
"created_at": "2025-12-01T12:02:21-03:00",
"updated_at": "2025-12-01 19:57:58",
"pricing": {
"price": "28.9000",
"special_price": "25.9000",
"final_price": "25.9000",
"currency": "BRL"
},
"inventory": {
"inventory_manage_stock": true,
"inventory_qty": "38.0000",
"inventory_stock_availability": "in_stock",
"inventory_stock_availability_label": "Em Estoque",
"inventory_is_salable": true
}
}
}
Retrocompatibilidade
Os campos históricos continuam presentes e com a mesma semântica: set, categories, websites, status e visibility. Os objetos product_set, product_categories, product_websites, product_status, product_visibility, pricing e inventory são aditivos.
- Integrações existentes podem continuar utilizando apenas os campos históricos, sem nenhuma alteração.
- Novas integrações devem preferir os objetos enriquecidos quando precisarem de nome, código ou label sem consultar o painel manualmente.
Referências enriquecidas
id e name.id e name no contexto da store consultada.id, code e name.value, code e label. Codes estáveis: enabled e disabled.value, code e label. Codes estáveis: not_visible_individually, catalog, search e catalog_search.label e name são destinados à apresentação e podem acompanhar o idioma e a configuração da Plataforma Yep. Para lógica de integração, prefira id, value e code.Resumo de preço
O bloco pricing entrega uma visão rápida do preço do produto no contexto consultado.
{
"price": "28.9000",
"special_price": "25.9000",
"final_price": "25.9000",
"currency": "BRL"
}
Resumo de estoque
O bloco inventory entrega uma visão rápida da disponibilidade.
{
"inventory_manage_stock": true,
"inventory_qty": "38.0000",
"inventory_stock_availability": "in_stock",
"inventory_stock_availability_label": "Em Estoque",
"inventory_is_salable": true
}
Quando usar os endpoints dedicados
Os resumos acima cobrem a maior parte das sincronizações. Para o detalhamento completo de preço (group prices, tier prices, classe fiscal, MSRP) use GET /api2/price. Para a configuração completa de estoque (backorders, incrementos, herança de configuração) use GET /api2/stock.
Respostas HTTP
| Situação | Status |
|---|---|
| Sucesso | 200 |
| Parâmetros inválidos | 400 |
| Sem autenticação ou token inválido | 401 |
| Sem permissão | 403 |
| Produto não encontrado | 404 |
| Falha interna | 500 |
200. Os 201 utilizados na criação de recursos permanecem inalterados.Novidades do GET /api2/products
Três evoluções principais foram incorporadas ao endpoint de listagem, tornando-o mais previsível em ambientes multi-store e mais eficiente para sincronizações em lote.
5) Suporte a store_id opcional Novo
Agora é possível informar store_id para tornar o resultado explícito e determinístico em cenários multi-store. Sem esse parâmetro, a seleção de store segue a regra default do ambiente; com ele, a integração assume o controle.
Exemplo
GET /api2/products?page=1&store_id=1
6) Metadados opcionais de paginação Novo
Foi adicionado suporte opcional a campos de paginação no corpo da resposta. Eles só são retornados quando for enviado include_pagination=1, evitando overhead em sincronizações que não precisam desses metadados.
1 habilita). Quando ativa, inclui na resposta os campos total, last_page e has_next.include_pagination=1).limit corrente.Exemplo
GET /api2/products?page=1&include_pagination=1
7) Suporte a limit opcional Novo
O endpoint aceita limit para definir a quantidade de produtos por página. Valores inválidos (não numéricos, arrays, negativos, zero ou acima do máximo) são normalizados para o padrão, garantindo que nenhuma requisição quebre por entrada inesperada.
| Regra | Valor | Comportamento |
|---|---|---|
| Padrão | 20 | Aplicado quando limit é omitido. |
| Máximo | 200 | Teto rígido para proteger a rota em cenários de alta carga. |
| Inválido | — | Valores inválidos são normalizados para 20. |
Exemplos
GET /api2/products?page=1&limit=50
GET /api2/products?page=1&limit=200
Formas de uso suportadas
Referência rápida das combinações testadas e homologadas para o GET /api2/products.
GET /api2/products
GET /api2/products?page=2
GET /api2/products?page=1&limit=100
GET /api2/products?id=24404
GET /api2/products?id=ABC-123&type=sku
GET /api2/products?id=2074&type=id
GET /api2/products?page=1&store_id=1
GET /api2/products?page=1&limit=100&include_pagination=1
Recomendações para integração
Boas práticas consolidadas após a evolução do endpoint. Seguir essas diretrizes reduz retrabalho, evita paginação infinita e garante determinismo em ambientes multi-store.
Recomendado
- Enviar sempre
pageexplicitamente em rotinas de paginação. - Usar
store_idsempre que a integração precisar de resultado determinístico em ambiente multi-store. - Preferir
limit=50oulimit=100para sincronizações usuais. - Usar
limit=200apenas quando houver necessidade real de reduzir o número de chamadas. - Usar
include_pagination=1para controlar avanço de paginação com mais segurança (loop baseado emhas_next).
Evitar
- Enviar parâmetros como array em campos escalares — por exemplo
id[]oulimit[]. - Considerar que o endpoint retorna apenas produtos ativos de vitrine. Esta rota é integracional/administrativa.
- Depender de ordenação implícita entre páginas em cenários multi-store sem
store_id.
Dica de sincronização
Para sincronizações periódicas, combine store_id + limit=100 + include_pagination=1. Você obtém determinismo, throughput equilibrado e um critério de parada confiável (has_next=false).
Imagens de produto
Para consultar, reconciliar, incluir, atualizar ou excluir imagens de produtos, consulte Catálogo › Imagens.
GET /api2/products/imagem — imagens de um SKU ou ID, com papéis e disabled.GET /api2/products/imagens — todas as imagens do catálogo, paginadas por cursor.POST, PUT e DELETE /api2/products/imagem — upload em base64, metadados e exclusão. DELETE /api2/products/imagens — exclusão total ou em lote.