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

Menus de navegação

Lê um menu da loja pela posição (cabeçalho, rodapé, lateral) ou pelo id, com os itens já organizados em árvore.

Um menu é uma lista de links da loja (Feminino, Infantil, Lançamentos...) que o lojista monta no painel. Cada menu tem uma posição (location), que diz onde ele aparece, e uma lista de itens, que podem ter itens filhos (submenus). Estas duas rotas públicas devolvem o menu pronto, só com os itens ativos, já em árvore.

Menu de uma posição

GET/api/v1/storefront/navigation/{location}Pública

Consulta o menu de um local

Devolve o menu ativo da posição pedida. Se houver mais de um menu ativo na mesma posição, a API devolve sempre o primeiro em ordem alfabética do nome, de forma estável. É esse o menu que o painel marca como "servido" ao lojista, mas o campo is_served sempre vem false nesta rota pública, então não o use.

Posições válidas: header, header_account, footer, footer_about, footer_help, footer_contact, footer_brands, footer_policies, footer_shop e sidebar. Uma posição fora dessa lista só é aceita se existir um menu com esse nome de posição na loja; senão responde 400. Sem menu ativo na posição, responde 200 com menu: null e items vazio.

Parâmetros de caminho

locationstringobrigatório
headerheader_accountfooterfooter_aboutfooter_helpfooter_contactfooter_brandsfooter_policiesfooter_shopsidebar
Posição do menu.

Exemplo de requisição

bash
curl "$BASE_URL/api/v1/storefront/navigation/header"

Resposta

200Menu com itens
json
{
  "id": "b723eb99-ca29-4c4b-8b8a-7fbc0a9c219d",
  "name": "Menu Home",
  "location": "header",
  "status": "A",
  "created_at": "2026-04-07T02:45:34.115783Z",
  "updated_at": "2026-06-18T12:29:32.465381Z",
  "is_served": false,
  "items": [
    {
      "id": "501f1e92-26eb-4ced-add2-2b1cdea77cbd",
      "menu_id": "b723eb99-ca29-4c4b-8b8a-7fbc0a9c219d",
      "label": "Feminino",
      "url": "/feminino",
      "item_type": "custom_link",
      "position": 0,
      "open_in_new_tab": false,
      "status": "A",
      "created_at": "2026-04-07T02:45:34.121123Z",
      "updated_at": "2026-04-07T02:45:34.121123Z"
    },
    {
      "id": "4a9c0d08-af2c-487c-8494-af46e9f67d63",
      "menu_id": "b723eb99-ca29-4c4b-8b8a-7fbc0a9c219d",
      "label": "Coleções",
      "url": "/colecoes",
      "item_type": "custom_link",
      "position": 3,
      "open_in_new_tab": false,
      "status": "A",
      "created_at": "2026-04-07T02:45:34.13228Z",
      "updated_at": "2026-04-07T02:45:34.13228Z"
    }
  ]
}
200Posição sem menu
json
{ "menu": null, "items": [] }

Campos da resposta

iduuid
Id do menu. Ausente quando não há menu na posição.
namestring
Nome do menu no painel.
locationstring
Posição do menu.
statusstring
A (ativo). Só menus ativos são devolvidos.
is_servedboolean
Sempre false nesta rota pública. Só tem significado no painel.
created_atstring
Criação do menu, RFC 3339.
updated_atstring
Última alteração, RFC 3339.
itemsarray
Itens ativos de primeiro nível, ordenados por position. Submenus ficam em children.
items[].iduuid
Id do item.
items[].menu_iduuid
Menu a que o item pertence.
items[].parent_item_iduuid
Item pai. Ausente nos itens de primeiro nível.
items[].labelstring
Texto do link.
items[].urlstring
Destino. Pode faltar em itens ligados a uma categoria, página ou produto; nesse caso use reference_id.
items[].item_typestring
categorypageproductcustom_link
Tipo do destino.
items[].reference_iduuid
Id da categoria, página ou produto referenciado, quando item_type não é custom_link.
items[].positioninteger
Ordem do item entre os irmãos. Pode haver lacunas (0, 2, 3...).
items[].open_in_new_tabboolean
O link deve abrir em outra aba.
items[].css_classstring
Classe de CSS opcional para o item.
items[].statusstring
A (ativo).
items[].childrenarray
Subitens, no mesmo formato. Ausente quando não há.

Erros

StatusQuandoCorpo
400Posição inexistente{"error":"invalid location","detail":"invalid menu location: main"}
404Loja não identificada{"error":"tenant not found","message":"could not resolve storefront from request"}
500Falha ao ler{"error":"failed to get navigation","detail":"..."}
Dois formatos de resposta vazia

Posição válida sem menu devolve {"menu": null, "items": []}, sem os campos id e name. Código que lê menu.id direto quebra nesse caso: leia sempre items e trate items vazio como "sem menu".

Menu por id

GET/api/v1/storefront/navigation-menu/{id}Pública

Consulta um menu pelo id

Mesma resposta, mas buscando o menu por id em vez de posição. Serve para blocos do layout (como uma coluna do rodapé) que o lojista ligou a um menu específico. Só devolve menu ativo; id que não existe ou de menu inativo responde 200 com {"menu": null, "items": []}.

Parâmetros de caminho

iduuidobrigatório
Id do menu (campo id de uma resposta de menu). Um valor que não é UUID responde 500.

Exemplo de requisição

bash
curl "$BASE_URL/api/v1/storefront/navigation-menu/b723eb99-ca29-4c4b-8b8a-7fbc0a9c219d"

Resposta

200Menu com itens
json
{
  "id": "b723eb99-ca29-4c4b-8b8a-7fbc0a9c219d",
  "name": "Menu Home",
  "location": "header",
  "status": "A",
  "is_served": false,
  "items": [
    { "id": "501f1e92-26eb-4ced-add2-2b1cdea77cbd", "label": "Feminino", "url": "/feminino", "item_type": "custom_link", "position": 0, "open_in_new_tab": false, "status": "A" }
  ]
}

Os campos são os mesmos de Menu de uma posição, aqui encurtados.

Erros

StatusQuandoCorpo
500id que não é UUID{"error":"failed to get menu","detail":"o valor \"nope\" não é um uuid válido. ..."}
500Falha ao ler{"error":"failed to get menu","detail":"..."}

O detail do 500 por id inválido é uma frase em português, como o servidor devolve.

Veja também

  • Layouts de página
  • Aparência, filtros e busca
  • Visão geral de tema e layout
Anterior
Construtor de temas e prévia
Próxima
Idiomas e localidades
Nesta página
  • Menu de uma posição
  • Exemplo de requisição
  • Resposta
  • Erros
  • Menu por id
  • Exemplo de requisição
  • Resposta
  • Erros
  • Veja também