Modelos e página publicada
Lista os modelos de seção disponíveis e lê a página publicada no formato do editor visual.
As duas leituras que abrem qualquer edição: o catálogo de seções que você pode inserir e o estado atual da página. Exigem o privilégio manage_layouts.
Listar modelos de seção
/api/v1/admin/editor/templatesAdminLista os modelos de seção ativos
Devolve os modelos ativos, sem paginação, ordenados pela posição no catálogo. Cada modelo traz o schema: a descrição dos campos que a seção aceita em config, que o editor usa para montar o formulário.
Parâmetros de consulta
categorystringheroproductscontentengagementinfomarketplacesocialutilitySomente modelos desta categoria. Valor desconhecido devolve
"templates": [] e "total": 0.Exemplo de requisição
bash
curl "$BASE_URL/api/v1/admin/editor/templates?category=hero" \
-H "Authorization: Bearer $TOKEN"200Modelos retornados
json
{
"templates": [
{
"id": "96eb3393-196f-470f-8b2e-ccf3460ddbf7",
"name": "Hero Banner",
"slug": "hero-banner",
"description": "Full-width image/text banner with CTA button",
"category": "hero",
"thumbnail_url": "",
"default_config": {
"title": "Welcome to our store",
"subtitle": "Discover amazing products",
"button_text": "Shop Now",
"button_url": "/products",
"height": "500px",
"overlay_opacity": 0.4
},
"block_type": "hero_banner",
"schema": [
{ "key": "title", "type": "text", "label": "Title", "default": "Welcome to our store" },
{ "key": "overlay_opacity", "type": "range", "label": "Overlay Opacity", "default": 0.4, "min": 0, "max": 1, "step": 0.1 },
{ "key": "height", "type": "select", "label": "Height", "default": "500px", "options": ["300px", "400px", "500px", "600px", "100vh"] }
],
"position": 1,
"is_active": true,
"created_at": "2026-04-29T09:19:50.471437Z"
}
],
"total": 1
}Campos da resposta
templates[].iduuidIdentificador do modelo.
templates[].slugstringCódigo estável do modelo. É o valor de
template_slug ao adicionar uma seção.templates[].namestringNome exibido.
templates[].descriptionstringDescrição curta.
templates[].categorystringCategoria do catálogo (
hero, products, content, engagement, info, marketplace, social, utility).templates[].thumbnail_urlstringURL da miniatura. Pode ser vazia.
templates[].default_configobjectConfiguração inicial copiada para a seção nova.
templates[].block_typestringTipo do bloco que a seção vira na vitrine.
templates[].schemaarrayCampos configuráveis:
key, type (text, number, color, select, toggle, image, richtext, range, datetime...), label, default e, conforme o tipo, options, min, max, step.templates[].positionintegerOrdem no catálogo.
templates[].is_activebooleanSempre
true nesta lista.templates[].created_atstringCriação (RFC 3339, UTC).
totalintegerQuantidade de modelos devolvidos.
Ler a página publicada
/api/v1/admin/editor/layout/{pageType}AdminLê a página publicada no formato do editor
Devolve o layout publicado da página, já convertido para contêineres e seções, e informa se há rascunho. Use o layout_id devolvido nas rotas de rascunho.
Parâmetros de caminho
pageTypestringobrigatórioNome interno da página (
index.index, products.view, categories.view, checkout.cart...). Veja a visão geral.200Página lida
json
{
"layout_id": 166,
"layout_name": "Default",
"page_type": "index.index",
"is_default": true,
"has_draft": false,
"containers": [
{ "id": "14434", "position": "top_panel", "sort_order": 0, "sections": [] },
{
"id": "14436",
"position": "content",
"sort_order": 2,
"sections": [
{
"id": "15258",
"template_slug": "",
"block_type": "breadcrumbs",
"name": "Breadcrumbs",
"config": { "separator": "/", "show_home": true },
"visible": true,
"sort_order": 0
}
]
}
]
}Campos da resposta
layout_idintegerId do layout avançado. É o
layoutId das demais rotas. Fica 0 quando a loja não tem nenhum layout.layout_namestringNome do layout.
page_typestringO mesmo valor que você enviou em
pageType.is_defaultbooleanSe o layout é o padrão da loja.
has_draftbooleanSe existe rascunho para este layout.
containers[].idstringId do contêiner.
containers[].positionstringÁrea da página (
top_panel, header, content, footer...).containers[].sort_orderintegerOrdem do contêiner.
containers[].sections[].idstringId da seção.
containers[].sections[].template_slugstringModelo de origem. Vazio em blocos publicados que não vieram de um modelo.
containers[].sections[].block_typestringTipo do bloco.
containers[].sections[].namestringNome da seção.
containers[].sections[].configobjectOpções preenchidas.
containers[].sections[].visiblebooleanSe a seção aparece.
containers[].sections[].sort_orderintegerOrdem dentro do contêiner.
containers[].sections[].usergroup_idsarrayGrupos de usuários que veem a seção. Ausente quando a seção é para todos.
containers[].sections[].custom_cssstringCSS próprio da seção. Ausente quando vazio.
Erros
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token ou token expirado | {"error":"missing authorization header"} |
| 403 | Sem o privilégio manage_layouts | {"error":"insufficient privileges","required":"manage_layouts"} |
| 500 | Falha interna ao ler modelos ou layout | {"error":"failed to get editor layout","detail":"..."} |