VenddorDocumentação API
API atualAPI legada
Guia rápidoReferência completa
Carregando índice…
API atual/Guia rápido

Categorias

Como funciona a árvore de categorias da loja, os status, o SEO, a ficha técnica e o mapa de todas as rotas.

Uma categoria é um nó da árvore que organiza o catálogo: "Calçados" tem filhas "Chinelos" e "Sandálias", e cada produto fica ligado a uma ou mais categorias. A categoria também é uma página da loja: ela tem nome, endereço (slug), descrição, imagem e campos de SEO. Use esta seção para sincronizar o catálogo com um ERP ou PIM, montar menus em outro canal ou manter a árvore por script.

Esta seção documenta as rotas de administração de categorias (/api/v1/admin/categories...): nome, pai, status, posição, descrição, imagem, ícone, SEO, idiomas, ações em lote, coleções inteligentes e ficha técnica.

Pontos-chave
  • Toda a seção usa o prefixo /api/v1/admin/categories e um token de administrador. Leia "Erros comuns" antes de integrar.
  • A árvore é definida por parent_id. Uma categoria de topo não tem pai. A profundidade máxima é 5 (depth de 0 a 5, ou seja, até seis níveis).
  • O status é uma letra: A ativa, D desativada, H oculta e T lixeira. A lixeira nunca aparece nas listas.
  • Excluir uma categoria vazia a manda para a lixeira (recuperável por 30 dias). Excluir com cascade=true apaga de vez a categoria, as filhas e os produtos delas.
  • Os ids são UUID. O slug é o endereço público da página, não um identificador de rota.

Como funciona

A árvore

Cada categoria guarda o parent_id (a mãe, ausente nas categorias de topo), o path (a cadeia de ids da raiz até ela, separados por /) e a depth (profundidade: 0 para topo, 1 para filha, e assim por diante). Você só escreve o parent_id; path e depth são calculados e atualizados em todas as descendentes quando você move uma categoria.

Regras que o servidor aplica ao criar ou mover:

  • Uma categoria não pode ser mãe de si mesma nem ser movida para dentro de uma descendente.
  • A profundidade máxima é 5. Mover uma subárvore inteira que passaria disso é recusado.
  • Duas categorias vivas (que não estão na lixeira) com o mesmo nome no mesmo nível não podem existir: a segunda recebe 409 category_name_exists com o id da que já existe.
  • O position ordena as irmãs (número inteiro, padrão 0). Ele é só um valor de ordenação: a plataforma não renumera as outras categorias quando você muda uma.

Os status

LetraNomeLista do painel e das APIsLoja (vitrine)
AAtivaapareceaparece
DDesativadaapareceescondida (a página responde 404)
HOcultaapareceescondida (a página responde 404)
TLixeiranão apareceescondida

Detalhes que mudam o resultado:

  • A vitrine só mostra A. Se a categoria-mãe está D ou H, toda a subárvore dela também some da vitrine, mesmo que as filhas estejam A.
  • D e T são coisas diferentes. D é uma categoria desligada que você ainda enxerga e pode religar. T é a lixeira: a linha continua guardada, mas fora de todas as listas.
  • Na entrada, a API aceita a letra ou o nome: A/active/enabled/visible, H/hidden, D/disabled/inactive, T/deleted/trash. Qualquer outro valor (inclusive vazio) vira A, sem erro. Na saída ela sempre devolve a letra.
  • Mandar T ou deleted no status de uma atualização joga a categoria na lixeira sem o registro que permite restaurá-la. Para excluir, use Excluir categoria.

Excluir, lixeira e cascata

Situação da categoriaDELETE sem cascadeDELETE com cascade=true
Vazia, sem filhas vivasVai para a lixeira (T). Pode ser restaurada em até 30 dias.Apagada de vez, junto com todas as descendentes.
Com produtos409 category_has_productsApaga de vez a categoria, as filhas e todos os produtos ligados a elas.
Com filhas vivas409 category_has_subcategoriesApaga de vez a subárvore inteira.

A restauração e o esvaziamento da lixeira são feitos pela rota /api/v1/admin/recycle-bin, que depende do recurso "lixeira" da loja e pertence à referência completa.

Produtos, imagens e SEO

  • Produtos. Um produto tem uma categoria principal e pode estar em várias outras. Para ler os produtos de uma categoria use Listar produtos com o filtro category_id. A coluna product_count da categoria é uma contagem de apoio e pode ser menor do que a lista do painel, porque segue as regras de visibilidade da loja.
  • Imagem e ícone. image_url e icon_url guardam o endereço (caminho /uploads/... ou URL) de uma imagem que já está na loja.
  • SEO. slug (endereço da página), seo_title, seo_description e meta_keywords. Há também um gerador automático e um modelo de texto que alimenta o SEO dos produtos (SEO da categoria).
  • Idiomas. O texto de uma categoria pode ter uma versão por idioma. Nas leituras passe lang=pt-BR para receber o texto naquele idioma; na criação e na edição use o mapa descriptions.

Conceitos-chave

Ids e slug

Todo id de categoria é um UUID (345ac33e-4dcd-4d60-bedf-a2c2d47897d9). O slug (o endereço público da página) serve para montar links da loja, mas as rotas de administração identificam a categoria sempre pelo UUID.

Permissões

LeituraEscrita
Privilégio view_catalog, manage_catalog ou manage_categories.Privilégio manage_categories. Coleções inteligentes e ficha técnica pedem manage_catalog.

O token vem de POST /api/v1/auth/login. Guarde-o e reaproveite: o login tem limite de requisições (429).

Endpoints

Auth: Admin é o administrador, com Authorization: Bearer <token> e o privilégio indicado na seção "Permissões".

MétodoRotaO que fazAuthPágina
GET/api/v1/admin/categoriesLista todas as categoriasAdminListar categorias
GET/api/v1/admin/categories/treeÁrvore aninhadaAdminListar categorias
GET/api/v1/admin/categories/{id}Consulta uma categoriaAdminConsultar categoria
POST/api/v1/admin/categoriesCria uma categoriaAdminCriar categoria
PUT/api/v1/admin/categories/{id}Altera uma categoriaAdminAlterar categoria
DELETE/api/v1/admin/categories/{id}Exclui uma categoriaAdminExcluir categoria
POST/api/v1/admin/categories/bulkMuda status, move ou exclui até 100AdminAções em lote
GET/api/v1/admin/categories/{id}/seoLê o SEOAdminSEO da categoria
PUT/api/v1/admin/categories/{id}/seoGrava slug, título e descrição de SEOAdminSEO da categoria
POST/api/v1/admin/categories/{id}/seo/generateGera o SEO a partir do nomeAdminSEO da categoria
GET/api/v1/admin/categories/{id}/seo-templateLê o modelo de SEO dos produtosAdminSEO da categoria
PUT/api/v1/admin/categories/{id}/seo-templateGrava o modelo de SEO dos produtosAdminSEO da categoria
POST/api/v1/admin/categories/smart-previewSimula uma coleção inteligenteAdminColeções inteligentes
PUT/api/v1/admin/categories/{id}/smart-rulesLiga ou desliga a coleção inteligenteAdminColeções inteligentes
POST/api/v1/admin/categories/{id}/materializeRecalcula os produtos da coleçãoAdminColeções inteligentes
GET/api/v1/admin/categories/{id}/feature-templateLê a ficha técnicaAdminFicha técnica
PUT/api/v1/admin/categories/{id}/feature-templateGrava a ficha técnicaAdminFicha técnica

Erros comuns

  1. Mandar parent_id vazio ou "0" para criar uma categoria de topo. O valor é tratado como id e a chamada responde 400 invalid parent_id. Para criar uma categoria de topo, omita o parent_id.
  2. Esperar que DELETE apague de vez. Sem cascade, uma categoria vazia vai para a lixeira: some das listas, mas continua restaurável por 30 dias. Uma categoria com produtos ou filhas recebe 409.
  3. Usar cascade=true por conveniência. Ele apaga os produtos da categoria e das filhas, sem lixeira. Mova os produtos antes se quiser preservá-los.
  4. Gravar a categoria de topo com o mesmo nome de outra. Duas categorias vivas com o mesmo nome no mesmo nível dão 409 category_name_exists. Reaproveite a que já existe (o existing_id vem no erro).
  5. Gravar meta_keywords pelo endpoint de SEO. Ele não grava esse campo. Use PUT /api/v1/admin/categories/{id} (veja SEO da categoria).
  6. Esperar paginação na lista. GET /api/v1/admin/categories devolve todas as categorias de uma vez; para recortar, filtre no seu lado ou use a árvore.

Próximos passos

Listar categorias
Lista plana e árvore.
Criar categoria
Crie uma categoria de topo ou filha.
Excluir categoria
Lixeira, conflitos e cascata.
SEO da categoria
Slug, título, descrição e modelo de texto.
Anterior
Privilégios
Próxima
Listar categorias
Nesta página
  • Como funciona
  • A árvore
  • Os status
  • Excluir, lixeira e cascata
  • Produtos, imagens e SEO
  • Conceitos-chave
  • Ids e slug
  • Permissões
  • Endpoints
  • Erros comuns
  • Próximos passos
text
Escritório                       depth 0, path = A
  Mesas                          depth 1, path = A/B
    Mesas de reunião             depth 2, path = A/B/C