Atributos
Atributos globais, opções pontuais, attribute sets e groups do catálogo. A separação permite reutilizar atributos em múltiplos sets, organizar a leitura no admin e atualizar uma opção isolada sem reenviar todas as opções do atributo.
Visão geral
Esta página cobre três blocos da API de atributos: o atributo global (catálogo inteiro), as opções pontuais dele e a estrutura organizacional de sets e groups. Endpoints de listagem aceitam paginação determinística e filtros por frontend_input. Endpoints de escrita seguem o padrão de respostas da API REST Yep.
page, limit e include_pagination.Regras gerais
Convenções comuns aos endpoints de atributos. Base URL nos exemplos: /api2. Endpoints protegidos exigem Authorization: Bearer {{token}} e Content-Type: application/json nos verbos POST/PATCH/DELETE com body.
- Listagens aceitam filtros por query string ou por JSON body. Quando o mesmo campo aparecer nos dois lugares, o valor da query string prevalece.
- Paginação padrão:
page=1,limit=20, limite máximo200. Useinclude_pagination=truepara recebertotal,last_pageehas_next. - O gerenciamento pontual de opções (
/api2/attribute/option) só é permitido para atributos cujofrontend_inputéselectoumultiselecte que não usam umsource_modelpróprio. Atributos com source customizado (por exemplo, boolean nativo) retornam400. - Erros seguem o padrão da API:
{"error": "mensagem"}com o status HTTP correspondente.
| Status | Uso |
|---|---|
200 | Consulta, atualização ou remoção concluída. |
201 | Atributo, opção, set ou group criados. |
400 | Parâmetro inválido, JSON inválido ou operação incompatível com o atributo. |
401 | Token ausente ou inválido. |
404 | Atributo, opção, set ou group não encontrados. |
409 | Duplicidade ou tentativa de remover opção em uso por produtos. |
Atributos globais — Listagem
Consulta os atributos cadastrados no catálogo. Quando o atributo possui opções, a resposta inclui options com option_id, value, label, sort_order e is_default.
Listar atributos com paginação e filtros.
text, select, multiselect etc.). Aceita string ou lista.Listagem paginada
GET /api2/attribute
Authorization: Bearer {{token}}
Content-Type: application/json
{
"page": 1,
"limit": 20,
"include_pagination": true,
"frontend_input": ["select", "multiselect"],
"store_id": 0
}
Obter um atributo específico por código ou por ID.
id.attribute_code.Por código
{
"attribute_code": "tipo_material",
"store_id": 0
}
Por ID
{
"id": 123,
"store_id": 0
}
Atributos globais — Criação e atualização
Atributos reutilizáveis em múltiplos sets. Suportam tipos diferentes (texto, select, multiselect etc.) e configurações como is_filterable, used_in_product_listing, is_searchable e apply_to. Campos obrigatórios na criação: attribute_code, frontend_input e frontend_label.
Criar atributo global do tipo texto.
{
"attribute_code": "codigo_fabricante",
"frontend_input": "text",
"frontend_label": "Código do Fabricante",
"is_global": 1,
"is_required": 0,
"is_unique": 0,
"default_value": null,
"position": 0,
"is_searchable": 1,
"is_visible": 1,
"is_visible_on_front": 1,
"is_visible_in_advanced_search": 0,
"is_comparable": 0,
"is_filterable": 0,
"is_filterable_in_search": 0,
"is_used_for_promo_rules": 0,
"used_in_product_listing": 1,
"used_for_sort_by": 0,
"is_html_allowed_on_front": 0,
"is_wysiwyg_enabled": 0,
"apply_to": ["simple", "configurable"]
}
Criar atributo select com lista inicial de opções. Cada opção aceita admin (label), position e default.
{
"attribute_code": "tipo_material",
"frontend_input": "select",
"frontend_label": "Tipo de Material",
"is_global": 1,
"is_required": 1,
"is_configurable": 1,
"is_filterable": 1,
"is_searchable": 1,
"used_in_product_listing": 1,
"options": [
{"admin": "Resina", "position": 0, "default": 1},
{"admin": "Cerâmica", "position": 1},
{"admin": "Zircônia", "position": 2}
]
}
Atualizar configurações do atributo (flags, posição, escopo). Envie só os campos que mudaram.
{
"attribute_code": "tipo_material",
"is_required": 1,
"is_filterable": 0,
"used_for_sort_by": 1
}
Sincronizar a lista completa de opções do atributo. Opções ausentes no payload podem ser removidas. Para mexer em uma opção isolada, use o bloco Opções pontuais.
{
"attribute_code": "tipo_material",
"options": [
{"admin": "Resina", "position": 0},
{"admin": "Cerâmica Premium", "position": 1, "default": 1}
]
}
Sincronização vs. pontual
Este PATCH com options reescreve a lista do atributo. Para adicionar, editar ou remover uma única opção sem afetar as demais (e sem risco de remoção em cascata), prefira os endpoints /api2/attribute/option.
Excluir atributo global.
{
"attribute_code": "tipo_material"
}
Opções pontuais Novo em 2026
Gerencia uma opção de cada vez, sem reenviar toda a lista do atributo. Disponível apenas para atributos select/multiselect sem source_model próprio. Em qualquer outro caso, retorna 400.
Adicionar uma opção ao atributo. Retorna 409 se já existir opção com o mesmo label (case-sensitive) no atributo.
true/1.Request
{
"attribute_code": "tipo_material",
"admin": "Zircônia",
"position": 2,
"default": false
}
Resposta
{
"success": true,
"option": {
"option_id": 12345,
"value": "12345",
"label": "Zircônia",
"sort_order": 2,
"is_default": false
}
}
Atualizar label, posição ou flag de default de uma opção. O option_id precisa pertencer ao atributo informado.
option.option_id da consulta do atributo).{
"attribute_code": "tipo_material",
"option_id": 12345,
"admin": "Zircônia Premium",
"position": 3,
"default": true
}
Remover uma opção. Bloqueia a remoção se a opção estiver em uso por produtos — nesse caso retorna 409 e os produtos permanecem inalterados.
{
"attribute_code": "tipo_material",
"option_id": 12345
}
Resposta
{
"success": true,
"message": "Opção removida com sucesso."
}
Attribute Sets
Sets agrupam atributos aplicáveis a um tipo de produto. A criação parte sempre de um skeleton existente — todos os grupos e atributos do skeleton são clonados no novo set.
Criar novo Attribute Set a partir de um skeleton.
{
"attribute_set_name": "Equipamentos Odontológicos",
"skeleton_set_id": 4
}
Remover Attribute Set. Use force_products_remove com cautela — quando true, os produtos vinculados são removidos junto.
true, remove também os produtos do set. Padrão: false (retorna 409 se houver produtos vinculados).{
"attribute_set_name": "Equipamentos Odontológicos",
"force_products_remove": true
}
Attribute Groups
Groups organizam os atributos dentro de um set para exibição no admin (abas do formulário de produto). Cada grupo é identificado pelo par attribute_set_id + group_name.
Criar grupo dentro de um Attribute Set.
{
"attribute_set_id": 10,
"group_name": "Dados Técnicos"
}
Renomear grupo. Identifique pelo nome atual (group_name) e informe o new_group_name.
{
"attribute_set_id": 10,
"group_name": "Dados Técnicos",
"new_group_name": "Informações Técnicas"
}
Remover grupo. Grupos do sistema (criados na instalação do set) podem não ser removíveis.
{
"attribute_set_id": 10,
"group_name": "Informações Técnicas"
}
Vinculação de atributos a grupos
Após criar o atributo global e o grupo, vincule-os para que o atributo apareça na aba correspondente do set. Use sort_order para controlar a posição dentro do grupo.
Vincular atributo a um grupo dentro de um set.
{
"attribute_code": "codigo_fabricante",
"attribute_set_id": 10,
"attribute_group_name": "Informações Técnicas",
"sort_order": 10
}
Desvincular atributo de um set. O atributo global continua existindo; só o vínculo com o set é removido.
{
"attribute_code": "codigo_fabricante",
"attribute_set_id": 10
}
Formas de uso suportadas
Combinações testadas e homologadas para a API de atributos.
GET /api2/attribute + page, limit, include_paginationGET /api2/attribute + frontend_input: ["select","multiselect"]GET /api2/attribute + attribute_codeGET /api2/attribute + idPOST /api2/attribute + frontend_input: "text"POST /api2/attribute + options: [...]PATCH /api2/attribute + campos a alterarPATCH /api2/attribute + options: [...]POST /api2/attribute/option + admin, positionPATCH /api2/attribute/option + option_idDELETE /api2/attribute/option + option_idPOST /api2/catalog/attributeSetPOST/PATCH/DELETE /api2/catalog/attributegroupPOST /api2/catalog/attributeRecomendações para integração
Recomendado
- Use os endpoints
/api2/attribute/optionpara alterações cirúrgicas em opções já existentes — eles eliminam o risco de remoção em cascata que o PATCH comoptionscompleto introduz. - Cachear a listagem de atributos do tipo
select/multiselectno ERP/PIM — o cadastro muda pouco e cada consulta de produto pode reaproveitar a tabela. - Antes de remover uma opção, valide se ela está em uso por produtos. O
DELETE /api2/attribute/optionjá bloqueia (409), mas a mensagem é mais clara para o operador se o aviso vier do seu lado. - Para criar atributos select com muitas opções (>100), prefira criar o atributo vazio e usar
POST /api2/attribute/optionem paralelo — é mais previsível para auditoria e rollback.
Evitar
- Reenviar a lista
optionsinteira emPATCH /api2/attributepara alterar uma única opção — opções ausentes podem ser removidas e disparar reescrita de produtos vinculados. - Tentar criar opções para atributos com
source_modelpróprio (boolean nativo, status etc.). Retorna400. - Excluir um attribute set com produtos sem ter um plano de migração — o
force_products_remove: trueé destrutivo.
Sincronização incremental com PIM
O fluxo recomendado para um PIM é: (1) sincronizar atributos globais via GET /api2/attribute + frontend_input cacheado; (2) detectar opções novas/alteradas/removidas no PIM e aplicar POST/PATCH/DELETE /api2/attribute/option uma por uma; (3) consultar atributos novamente e validar a tabela final. Essa abordagem mantém a auditoria limpa e evita perdas acidentais.
Erros comuns
| Status | Exemplo de body | Quando ocorre |
|---|---|---|
400 | {"error": "attribute_code is required"} | Campo obrigatório ausente na criação. |
400 | {"error": "Attribute does not support pointwise options"} | Tentativa de usar /api2/attribute/option em atributo com source_model próprio ou tipo diferente de select/multiselect. |
400 | {"error": "Invalid JSON body"} | Payload mal formado. |
401 | {"error": "Unauthorized"} | Authorization ausente ou token expirado. |
404 | {"error": "Attribute not found"} | attribute_code ou id inexistente. |
404 | {"error": "Option not found"} | option_id não pertence ao atributo informado. |
409 | {"error": "Option label already exists"} | POST de opção com label duplicado no mesmo atributo. |
409 | {"error": "Option is in use by products"} | DELETE de opção referenciada por produtos. |
409 | {"error": "Attribute set has products"} | DELETE de attribute set sem force_products_remove: true. |