Categorias
Lista as categorias ativas da vitrine em lista plana, em formato de menu ou em árvore, e consulta uma categoria pelo id.
As categorias organizam o catálogo em uma árvore: cada categoria pode ter uma categoria-pai (parent_id) e várias filhas. Estas cinco rotas leem a mesma árvore em formatos diferentes. Todas devolvem somente categorias ativas (A) cujos ancestrais também estão ativos, e todas aceitam ?lang= ou Accept-Language para traduzir nome e descrição.
| Rota | Quando usar |
|---|---|
GET /categories | Lista plana completa, com contagens. |
GET /categories/visible | A mesma lista, sem categorias vazias se a loja ativou "ocultar categorias vazias". |
GET /categories/nav | O mesmo conteúdo de visible em formato leve, para menus. Cache de 60 s. |
GET /categories/tree | Árvore aninhada (children). |
GET /categories/{id} | Uma categoria. |
Em todas, product_count é a quantidade de produtos que o comprador veria naquela categoria, aplicando as mesmas regras da lista de produtos (ativo, com preço e com estoque, conforme as configurações da loja). A contagem de uma categoria-pai não soma as filhas (no exemplo, "Informática" tem 4 e a filha "Notebooks" tem 163).
Listar categorias
/api/v1/storefront/categoriesPúblicaListar categorias ativas (lista plana)
Parâmetros de consulta
langstringname e description (pt-BR, en, es). Também vale Accept-Language. Sem tradução, o texto base.Exemplo de requisição
curl "$BASE_URL/api/v1/storefront/categories?lang=pt-BR"Resposta
{
"total": 14,
"categories": [
{
"id": "345ac33e-4dcd-4d60-bedf-a2c2d47897d9",
"name": "Escritório",
"slug": "escritorio",
"description": "",
"position": 0,
"status": "A",
"path": "345ac33e-4dcd-4d60-bedf-a2c2d47897d9",
"depth": 0,
"product_count": 305,
"created_at": "2026-09-09T13:11:20.906519Z",
"updated_at": "2026-09-09T13:11:20.906519Z"
},
{
"id": "698ce279-0cd1-402f-805d-3364e7e9d793",
"parent_id": "3d7099bc-8e0f-4c4d-a6b0-a48feb8c1344",
"name": "Mesas",
"slug": "mesas",
"image_url": "/uploads/dfe2555e-bfd0-41a8-9fa1-9586999f3798/product/4214581e-ebd8-4890-ba23-8f8b07715d1c/ai_c41327806cb9452a8266fbfafd0795c0.png",
"position": 0,
"status": "A",
"path": "795ac349-83c1-4bcc-a64a-3317bf84ab5e/3d7099bc-8e0f-4c4d-a6b0-a48feb8c1344/698ce279-0cd1-402f-805d-3364e7e9d793",
"depth": 2,
"product_count": 149
}
]
}Campos da resposta
categoriesarraytotalintegercategories[].iduuidcategory_id é um apelido.categories[].parent_iduuidcategories[].namestringcategory é um apelido.categories[].slugstringseo_name é um apelido. Slugs não servem como {id} nas rotas de categoria.categories[].descriptionstringcategories[].image_urlstringicon_url traz o ícone, quando existe.categories[].seo_titlestringseo_description e meta_keywords.categories[].positionintegercategories[].pathstring/.categories[].depthintegercategories[].product_countintegercategories[].created_atstringupdated_at é a última alteração; timestamp e updated_timestamp repetem em Unix.Categorias visíveis
Igual à rota acima, mas respeita a configuração ocultar categorias vazias: se estiver ligada, saem as categorias sem produtos, exceto as que têm descendentes com produtos (o pai fica para manter o caminho). Use esta rota, e não /categories, para páginas e menus.
/api/v1/storefront/categories/visiblePúblicaListar categorias visíveis (sem vazias)
Parâmetros de consulta
langstring/categories.A resposta tem o mesmo formato de /categories (categories e total).
Menu de navegação
O mesmo conteúdo de /categories/visible, em um formato leve: sem descrição, SEO, datas nem apelidos. Ideal para menus, trilhos de categoria e para achar o id a partir de um slug (percorra a lista e compare slug). A resposta é cacheável por 60 segundos.
/api/v1/storefront/categories/navPúblicaMenu de categorias em formato leve
Parâmetros de consulta
langstring/categories.{
"total": 14,
"categories": [
{ "id": "345ac33e-4dcd-4d60-bedf-a2c2d47897d9", "name": "Escritório", "slug": "escritorio", "product_count": 305, "status": "A", "position": 0 },
{
"id": "698ce279-0cd1-402f-805d-3364e7e9d793",
"parent_id": "3d7099bc-8e0f-4c4d-a6b0-a48feb8c1344",
"name": "Mesas",
"slug": "mesas",
"image_url": "/uploads/dfe2555e-bfd0-41a8-9fa1-9586999f3798/product/4214581e-ebd8-4890-ba23-8f8b07715d1c/ai_c41327806cb9452a8266fbfafd0795c0.png",
"product_count": 149,
"status": "A",
"position": 0
}
]
}Campos da resposta
categories[].iduuidcategories[].parent_iduuidcategories[].namestringcategories[].slugstringcategories[].image_urlstringcategories[].product_countintegercategories[].statusstringA aqui.categories[].positionintegerÁrvore de categorias
Devolve as categorias já aninhadas: cada nó tem children. Só os nós de topo ficam no array tree. Se a loja ocultar categorias vazias, nós sem produtos e sem filhos com produtos são removidos.
/api/v1/storefront/categories/treePúblicaÁrvore aninhada de categorias
Parâmetros de consulta
vendor_stockstring11, a contagem de cada categoria considera apenas ofertas de vendedores com estoque. Outro valor é ignorado.{
"total": 2,
"tree": [
{
"id": "7ebc648d-6091-4511-8ea2-f86f7b3b4dd9",
"name": "Informática",
"slug": "informatica",
"position": 0,
"status": "A",
"path": "7ebc648d-6091-4511-8ea2-f86f7b3b4dd9",
"depth": 0,
"product_count": 4,
"children": [
{
"id": "ae6f8f8b-7cbe-4725-84fa-247cce138143",
"parent_id": "7ebc648d-6091-4511-8ea2-f86f7b3b4dd9",
"name": "Notebooks",
"slug": "notebooks",
"position": 0,
"status": "A",
"path": "7ebc648d-6091-4511-8ea2-f86f7b3b4dd9/ae6f8f8b-7cbe-4725-84fa-247cce138143",
"depth": 1,
"product_count": 163
}
]
}
]
}Campos da resposta
treearraychildren (mesmos campos de uma categoria, recursivo). children é omitido nas folhas.totalintegerConsultar uma categoria
/api/v1/storefront/categories/{id}PúblicaConsultar uma categoria
Parâmetros de caminho
iduuidobrigatórioParâmetros de consulta
langstring/categories.{
"id": "345ac33e-4dcd-4d60-bedf-a2c2d47897d9",
"name": "Escritório",
"slug": "escritorio",
"description": "",
"position": 0,
"status": "A",
"path": "345ac33e-4dcd-4d60-bedf-a2c2d47897d9",
"depth": 0,
"product_count": 1,
"created_at": "2026-09-09T13:11:20.906519Z",
"updated_at": "2026-09-09T13:11:20.906519Z"
}A resposta é o objeto da categoria, com os mesmos campos descritos em "Listar categorias".
Erros
| Status | Quando | Exemplo de corpo |
|---|---|---|
| 401 | A loja exige login para navegar e a requisição é anônima | {"error":"shopping_requires_login","message":"this storefront requires login to browse"} |
| 403 | Chave de API sem o escopo storefront:read | {"error":"missing_scope","required":"storefront:read"} |
| 404 | {id} não é um UUID, a categoria não existe, está desativada/oculta ou tem um ancestral inativo | {"error":"category not found"} |
| 500 | Falha ao consultar | {"error":"failed to list categories","detail":"..."} |