Menus
Lista, consulta, cria, altera e exclui menus de navegação da vitrine.
Cadastro dos menus em si; os links ficam nos itens. Todas as rotas exigem o privilégio manage_layouts.
Listar menus
/api/v1/admin/navigation/menusAdminLista todos os menus da loja
Sem paginação, ordenados por local e nome. Cada menu traz is_served: true quando é o menu que a vitrine exibe naquele local (o primeiro ativo por nome).
{
"menus": [
{
"id": "b4d75fb9-9e16-4efa-b15d-5b5547af37fb",
"name": "Sobre Nós - Desktop",
"location": "footer_about",
"status": "A",
"created_at": "2026-04-07T02:45:34.139094Z",
"updated_at": "2026-04-07T02:45:34.139094Z",
"is_served": true
},
{
"id": "00000000-0000-0000-0000-000000000202",
"name": "Sobre Nós - Mobile",
"location": "footer_about",
"status": "A",
"created_at": "2026-04-07T02:45:34.139094Z",
"updated_at": "2026-04-07T02:45:34.139094Z",
"is_served": false
}
]
}Campos da resposta
menus[].iduuidmenus[].namestringmenus[].locationstringmenus[].statusstringADA ativo, D desativado.menus[].is_servedbooleanmenus[].created_atstringmenus[].updated_atstringConsultar menu com itens
/api/v1/admin/navigation/menus/{id}AdminConsulta um menu com a árvore de itens
Devolve o menu e os itens em árvore (items, com children aninhados), inclusive os desativados. Nesta rota is_served vem sempre false; use a listagem para saber qual menu está em uso.
Parâmetros de caminho
iduuidobrigatório{
"id": "b4d75fb9-9e16-4efa-b15d-5b5547af37fb",
"name": "Sobre Nós - Desktop",
"location": "footer_about",
"status": "A",
"created_at": "2026-04-07T02:45:34.139094Z",
"updated_at": "2026-04-07T02:45:34.139094Z",
"is_served": false,
"items": [
{
"id": "fee18b03-4540-4b3b-91c5-79ac915a4301",
"menu_id": "b4d75fb9-9e16-4efa-b15d-5b5547af37fb",
"label": "Sobre a Marca",
"url": "/sobre",
"item_type": "custom_link",
"position": 0,
"open_in_new_tab": false,
"status": "A",
"created_at": "2026-04-07T02:45:34.142Z",
"updated_at": "2026-04-07T02:45:34.142Z"
}
]
}Campos dos itens
items[].iduuiditems[].menu_iduuiditems[].parent_item_iduuiditems[].labelstringitems[].urlstringcustom_link.items[].item_typestringcategorypageproductcustom_linkitems[].reference_iduuidcustom_link.items[].positionintegeritems[].open_in_new_tabbooleanitems[].css_classstringitems[].statusstringADA ativo, D desativado.items[].childrenarrayCriar menu
/api/v1/admin/navigation/menusAdminCria um menu ativo vazio
O menu nasce ativo (A) e sem itens.
Corpo da requisição
namestringobrigatóriolocationstringobrigatórioheaderheader_accountfooterfooter_aboutfooter_helpfooter_contactfooter_brandsfooter_policiesfooter_shopsidebarExemplo de requisição
curl -X POST "$BASE_URL/api/v1/admin/navigation/menus" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"Rodapé Institucional","location":"footer_about"}'{
"id": "4a8d3c2b-1e0f-4a5b-9c6d-7e8f9a0b1c2d",
"name": "Rodapé Institucional",
"location": "footer_about",
"status": "A",
"created_at": "2026-10-11T18:00:00.000Z",
"updated_at": "2026-10-11T18:00:00.000Z",
"is_served": false
}Alterar menu
/api/v1/admin/navigation/menus/{id}AdminAltera nome, local ou status de um menu
Alteração parcial; envie ao menos um campo. Para tirar um menu do ar sem apagar, use status: "D".
Parâmetros de caminho
iduuidobrigatórioCorpo da requisição
namestringlocationstringheaderheader_accountfooterfooter_aboutfooter_helpfooter_contactfooter_brandsfooter_policiesfooter_shopsidebarstatusstringADactivedisabled{ "message": "menu updated" }Excluir menu
/api/v1/admin/navigation/menus/{id}AdminExclui um menu e todos os seus itens
Exclusão definitiva: todos os itens do menu são apagados junto.
Parâmetros de caminho
iduuidobrigatório{ "message": "menu deleted" }Erros
| Status | Quando | Corpo |
|---|---|---|
| 400 | Corpo inválido; name ou location ausente (criar) | {"error":"name is required"} ou {"error":"location is required"} |
| 401 | Sem token ou token expirado | {"error":"missing authorization header"} |
| 403 | Sem o privilégio manage_layouts | {"error":"insufficient privileges","required":"manage_layouts"} |
| 404 | Menu inexistente (alterar, excluir; consultar com id UUID válido que não existe) | {"error":"menu not found"} |
| 500 | Local inválido; PUT sem campos; id que não é UUID | {"error":"failed to create menu","detail":"invalid menu location: zzz"} |