Características
O que são as características dos produtos (marca, cor, tamanho, peso), como viram filtros da loja e o mapa de todas as rotas.
Uma característica é um atributo que muitos produtos compartilham e que a loja quer cadastrar, exibir e filtrar de forma padronizada: marca, cor, tamanho, material, peso, voltagem, garantia. Você cria a característica uma vez (por exemplo, "Cor") e depois informa o valor dela em cada produto ("Vermelho"). É isso que alimenta a aba de informações adicionais da página do produto, a tabela de comparação e a barra de filtros da vitrine.
Esta seção documenta as rotas de administração de características (/api/v1/admin/features). Os grupos de características têm uma seção própria: Grupos de características.
Como funciona
Do cadastro ao filtro da vitrine
- Crie a característica
Use Criar característica com um nome e um tipo. Para uma característica de lista (cor, tamanho, marca), crie também as opções com Opções de uma característica.
- Escolha onde ela vale
Deixe
categories_pathvazio para valer em todas as categorias, ou informe os ids das categorias separados por vírgula. Se a característica pertence a um grupo, ela herda as categorias do grupo. - Informe o valor em cada produto
O valor mora no produto, não na característica. Você grava os valores de um produto com
PUT /api/v1/admin/products/{id}/features(troca todos) ou acrescenta um comPOST /api/v1/admin/products/{id}/characteristics. O corpo escolhe o campo certo para o tipo:variant_idpara tipos de lista,value_textpara texto,value_numpara número,value_datepara data. Essas rotas fazem parte da seção de produtos. - Ligue o filtro
Com
filterableligado,statusativo e pelo menos um produto com valor, a característica aparece na barra de filtros da categoria na vitrine, com a contagem de produtos por opção.
Tipos de característica
O tipo é sempre um nome, em minúsculas.
| Tipo | O valor no produto | Aparece como filtro |
|---|---|---|
select | Uma opção da lista (variant_id) | Sim |
multi_select | Várias opções da lista | Sim |
color | Uma opção da lista, cada uma com uma cor em hexadecimal (#FF0000) | Sim, com amostras de cor |
brand | Uma marca da lista. Cada marca tem página própria na vitrine (/brands) | Sim |
author | Nome do criador ou autor | Sim |
text | Texto livre (value_text) | Não |
number | Número (value_num), com prefixo e sufixo de exibição, como kg ou cm | Não |
date | Data (value_date, formato YYYY-MM-DD) | Não |
bool | Sim ou não (caixa de marcação) | Não |
group | Não guarda valor: é um grupo que reúne outras características | Não |
A coluna "Aparece como filtro" reflete o que a vitrine monta hoje: os filtros da loja só listam características dos tipos select, multi_select, brand, author e color. O campo filterable pode ser gravado em qualquer tipo, mas nos demais não produz filtro.
Grupos
Um grupo agrupa características parecidas sob um título ("Dimensões" reúne Largura, Altura, Profundidade e Peso). Na página do produto e no cadastro, as características aparecem organizadas por grupo. Um grupo é, no armazenamento, uma característica com feature_type igual a group; as características filhas apontam para ele em group_id. Veja Grupos de características.
Status
O status da característica é uma letra de 1 caractere. A API aceita também a palavra por extenso na escrita e nos filtros.
| Letra | Palavra aceita | Significado |
|---|---|---|
A | active | Ativa. Aparece no cadastro, na página do produto (se display_on_product) e nos filtros. |
H | hidden | Oculta da vitrine. Continua no cadastro. |
D | disabled | Desativada. |
Como a característica aparece na vitrine
Três botões independentes controlam isso, todos booleanos:
| Campo | O que faz |
|---|---|
display_on_product | Mostra o valor na página do produto (aba de informações adicionais). |
display_on_catalog | Mostra o valor como selo nos cartões de produto das listagens. |
comparable | Inclui a característica na tabela de comparação de produtos. |
E um quarto, filterable, decide se ela vira filtro (veja acima).
Para que serve purpose
O campo purpose liga a característica ao mecanismo de variações de produto (o mesmo produto em várias cores e tamanhos). Os valores aceitos são três:
| Valor | Uso |
|---|---|
vazio ("") | Característica comum, sem relação com variações. |
group_catalog_item | Cada opção gera um item de catálogo distinto, como a Cor. |
group_variation_catalog_item | Cada opção gera uma subvariação dentro do item, como o Tamanho. |
Textos em vários idiomas
O name e o description da característica são guardados no idioma padrão da loja. Para traduzir, envie descriptions na criação ou na alteração, um objeto cujas chaves são os códigos de idioma (en, es, pt-BR...) e cujos valores têm name e description. Para ler todas as traduções de uma vez, consulte a característica com ?include_descriptions=1. Um grupo só tem name traduzido. As marcas (opções de uma característica brand) têm descrição própria por idioma, veja Opções de uma característica.
Ids, datas e formatos
- Todo id (característica, opção, grupo, produto) é um UUID em string.
- As datas são RFC 3339 em UTC.
- Os booleanos são
trueoufalse. - Dinheiro não aparece nesta seção.
Autenticação e permissão
| Autenticação | Bearer JWT (POST /api/v1/auth/login) |
| Permissão | Privilégio manage_features, exigido também para leitura |
| Erros | {"error":"...","detail":"..."} |
| Lista | {"features":[...],"total","page","per_page","total_pages"} |
| Identificação da loja | Subdomínio da loja ou cabeçalho X-Tenant-ID |
Endpoints
Todas as rotas exigem administrador. O privilégio é manage_features.
| Método | Rota | O que faz | Página |
|---|---|---|---|
| GET | /api/v1/admin/features, /api/v1/admin/characteristics | Lista características | Listar características |
| GET | /api/v1/admin/features/{id}, /api/v1/admin/characteristics/{id} | Consulta uma característica | Consultar característica |
| POST | /api/v1/admin/features, /api/v1/admin/characteristics | Cria característica | Criar característica |
| PUT, PATCH | /api/v1/admin/features/{id}, /api/v1/admin/characteristics/{id} | Altera característica | Alterar característica |
| DELETE | /api/v1/admin/features/{id}, /api/v1/admin/characteristics/{id} | Exclui característica | Excluir característica |
| POST | /api/v1/admin/features/bulk-delete, /api/v1/admin/characteristics/bulk-delete | Exclui várias | Excluir característica |
| GET, POST | /api/v1/admin/features/{id}/variants | Lista e cria opções | Opções de uma característica |
| PUT, DELETE | /api/v1/admin/feature-variants/{id} | Altera e exclui uma opção | Opções de uma característica |
| GET, POST, PUT | /api/v1/admin/features/{id}/synonyms | Dicionário de sinônimos | Sinônimos de valores |
| POST | /api/v1/admin/features/{id}/synonyms/remove | Remove um sinônimo | Sinônimos de valores |
| POST | /api/v1/admin/features/seed-defaults | Cadastra as características padrão | Características padrão |
| GET, POST | /api/v1/admin/feature-groups, /api/v1/admin/characteristic-groups | Lista e cria grupos | Grupos de características |
| GET, PUT, PATCH, DELETE | /api/v1/admin/feature-groups/{id}, /api/v1/admin/characteristic-groups/{id} | Consulta, altera e exclui um grupo | Grupos de características |
Erros comuns
- Esperar as opções na lista. A lista de características não traz as opções. Para ver as opções, consulte a característica por id ou use
GET /api/v1/admin/features/{id}/variants. - Mandar um tipo desconhecido. Só valem os tipos da tabela acima (
select,multi_select,color,brand,author,text,number,date,boolegroup). Um tipo fora da lista volta 500. - Esquecer de ligar o filtro.
filterable, os botões de exibição ecategories_pathnascem desligados ou vazios. Informe-os já na criação. - Excluir uma característica que ainda está em uso. Se algum produto tem valor nela, a exclusão é recusada com 409. Tire o valor dos produtos primeiro.
- Cadastrar a mesma opção duas vezes. Nome de característica é único por tipo e valor de opção é único por característica, sem diferenciar maiúsculas de minúsculas. A repetição volta 409.
- Estranhar as opções em minúsculas. Ao criar uma opção, a plataforma passa o texto para minúsculas, tira espaços repetidos e troca sinônimos cadastrados pela opção oficial. "Vermelho Escuro" vira
vermelho escuro. Na alteração, o texto é gravado como você enviou. - Mandar id inválido. Um id que não é UUID volta 500 em vez de 400. Valide o id antes de chamar.