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

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.

REST JSON Bearer Token Novo em 2026

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.

200
Limit máximoPor página, quando especificado via limit.
20
Limit padrãoQuando limit é omitido ou inválido.
1+
Store explícitaDeterminístico em ambientes multi-store.
opt
Metadadostotal, last_page, has_next sob include_pagination=1.
POST/api2/products/

Criar produto configurável.

JSONCatálogo
{
  "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]
}
POST/api2/products/

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}
}
PATCH/api2/products/

Atualizar produto.

{
  "type": "sku",
  "id": "novo_produto",
  "name": "Novo nome do produto"
}
O update aceita sucesso parcial quando parte do payload for ignorada por campos, atributos ou valores inválidos. A resposta detalha invalid_fields, invalid_attributes e invalid_attribute_values.
GET/api2/products/Atualizado

Consultar produto (individual) ou listar com paginação determinística.

?page=1&type=sku&id=novo_produto
A consulta individual passou a retornar referências legíveis, resumo de preço e resumo de estoque. Detalhes em Consulta individual de produto.
POST/api2/products/vincular

Vincular simples a configurável.

{
  "type": "sku",
  "configurable_id": "novo_produto",
  "simples": "novo_configuravel"
}
DELETE/api2/products/

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.

Por SKU GET /api2/products?id=3291&type=sku
Por ID GET /api2/products?id=2074&type=id
Com store explícita GET /api2/products?id=3291&type=sku&store_id=1

Parâmetros

id Obrigatório
ID ou SKU do produto, conforme o type. Obrigatório apenas na consulta individual.
type Obrigatório
Define como o id é interpretado: id ou sku. Obrigatório apenas na consulta individual.
store_id Opcional
Store utilizada como contexto da leitura. Recomendado em qualquer integração multi-store.

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

product_set Novo
Conjunto de atributos do produto, com id e name.
product_categories Novo
Categorias vinculadas ao produto, com id e name no contexto da store consultada.
product_websites Novo
Websites vinculados ao produto, com id, code e name.
product_status Novo
Status do produto com value, code e label. Codes estáveis: enabled e disabled.
product_visibility Novo
Visibilidade com value, code e label. Codes estáveis: not_visible_individually, catalog, search e catalog_search.
Os campos 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çãoStatus
Sucesso200
Parâmetros inválidos400
Sem autenticação ou token inválido401
Sem permissão403
Produto não encontrado404
Falha interna500
A consulta individual de produto responde 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.

store_id Opcional Novo
Inteiro. ID da store a ser usada como contexto da listagem. Recomendado em qualquer integração multi-store.

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.

include_pagination Opcional Novo
Flag boolean (1 habilita). Quando ativa, inclui na resposta os campos total, last_page e has_next.
total
Total de produtos elegíveis para o filtro atual (apenas com include_pagination=1).
last_page
Número da última página considerando o limit corrente.
has_next
Boolean indicando se existe próxima página. Útil para terminar loops de sincronização com segurança.

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.

RegraValorComportamento
Padrão20Aplicado quando limit é omitido.
Máximo200Teto 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.

Listagem padrão GET /api2/products
Paginada GET /api2/products?page=2
Limite customizado GET /api2/products?page=1&limit=100
Busca por ID GET /api2/products?id=24404
Busca por SKU GET /api2/products?id=ABC-123&type=sku
Busca por ID explícita GET /api2/products?id=2074&type=id
Store explícita GET /api2/products?page=1&store_id=1
Com metadados 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 page explicitamente em rotinas de paginação.
  • Usar store_id sempre que a integração precisar de resultado determinístico em ambiente multi-store.
  • Preferir limit=50 ou limit=100 para sincronizações usuais.
  • Usar limit=200 apenas quando houver necessidade real de reduzir o número de chamadas.
  • Usar include_pagination=1 para controlar avanço de paginação com mais segurança (loop baseado em has_next).

Evitar

  • Enviar parâmetros como array em campos escalares — por exemplo id[] ou limit[].
  • 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.

Consulta por produtoGET /api2/products/imagem — imagens de um SKU ou ID, com papéis e disabled.
Inventário globalGET /api2/products/imagens — todas as imagens do catálogo, paginadas por cursor.
EscritaPOST, PUT e DELETE /api2/products/imagem — upload em base64, metadados e exclusão. DELETE /api2/products/imagens — exclusão total ou em lote.