Páginas do layout
Cria, altera e remove as páginas de um layout e gera as páginas padrão da Loja WhatsApp.
Cada página de um layout representa uma tela da vitrine, identificada por um dispatch (um código como index.index para a home, products.view para a página de produto ou checkout.cart para o carrinho). A página "Default (Catch-all)" vale para qualquer tela que não tenha página própria. Cada página nasce com os quatro contêineres e carrega os campos de SEO da tela.
Criar página
Adiciona ao layout uma página para um dispatch. Use para dar a uma tela um desenho próprio em vez de herdar o da página padrão.
/api/v1/admin/advanced-layouts/{id}/pagesAdminCriar uma página no layout
Requer o privilégio manage_layouts.
Parâmetros de caminho
idintegerobrigatórioCorpo da requisição
dispatchstringobrigatórioproducts.view.namestringobrigatórioobject_idsstring[]is_defaultbooleanpadrão: falsepositionintegerpadrão: 0seo_titlestringtitle).seo_descriptionstringseo_keywordsstringog_imagestringog_typestringcanonical_urlstringno_indexbooleanpadrão: falsetrue pede aos buscadores que não indexem a tela.custom_html_codestringExemplo de requisição
curl -X POST "$BASE_URL/api/v1/admin/advanced-layouts/135/pages" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"dispatch": "quotes.view",
"name": "Orçamentos",
"seo_title": "Orçamentos"
}'Resposta
{
"id": 2945,
"layout_id": 135,
"dispatch": "quotes.view",
"name": "Orçamentos",
"is_default": false,
"position": 0,
"seo_title": "Orçamentos",
"seo_description": "",
"seo_keywords": "",
"og_image": "",
"og_type": "website",
"canonical_url": "",
"no_index": false,
"custom_html_code": "",
"created_at": "2026-07-12T16:29:12.505299Z"
}Campos da resposta
idintegerlayout_idintegerdispatchstringnamestringobject_idsstring[]is_defaultbooleanpositionintegerseo_titlestringseo_descriptionstringseo_keywordsstringog_imagestringog_typestringcanonical_urlstringno_indexbooleancustom_html_codestringcreated_atstringErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | O id de layout no caminho não é um inteiro. | {"error":"invalid layout id","detail":"id must be an integer"} |
| 400 | Corpo JSON inválido. | {"error":"invalid request body","detail":"unexpected EOF"} |
| 400 | dispatch vazio. | {"error":"dispatch is required"} |
| 400 | name vazio. | {"error":"name is required"} |
| 401 | Sem token, token inválido ou expirado. | {"error":"invalid or expired token"} |
| 403 | Seu usuário não tem o privilégio manage_layouts. | {"error":"insufficient privileges","required":"manage_layouts"} |
| 500 | Falha ao gravar ou ler no banco, ou id inexistente onde a rota não trata 404. | {"error":"failed to create page","detail":"..."} |
Atualizar página
Altera os campos enviados da página (nome, dispatch, SEO...). O que não for enviado permanece. Atenção: object_ids, quando enviado, é aplicado como lista; omita para não mexer.
/api/v1/admin/advanced-layouts/pages/{id}AdminAtualizar uma página
Requer o privilégio manage_layouts.
Parâmetros de caminho
idintegerobrigatórioCorpo da requisição
dispatchstringnamestringobject_idsstring[]is_defaultbooleanpositionintegerseo_titlestringseo_descriptionstringseo_keywordsstringog_imagestringog_typestringcanonical_urlstringno_indexbooleancustom_html_codestringExemplo de requisição
curl -X PUT "$BASE_URL/api/v1/admin/advanced-layouts/pages/2930" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"seo_title": "Bem-vindo à Minha Loja",
"seo_description": "As melhores ofertas do dia."
}'Resposta
{
"id": 2930,
"layout_id": 135,
"dispatch": "index.index",
"name": "Homepage",
"is_default": false,
"position": 1,
"seo_title": "Bem-vindo à Minha Loja",
"seo_description": "As melhores ofertas do dia.",
"seo_keywords": "",
"og_image": "",
"og_type": "website",
"canonical_url": "",
"no_index": false,
"custom_html_code": "",
"created_at": "2026-07-12T16:29:12.505299Z"
}Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | O id de page no caminho não é um inteiro. | {"error":"invalid page id","detail":"id must be an integer"} |
| 400 | Corpo JSON inválido. | {"error":"invalid request body","detail":"unexpected EOF"} |
| 401 | Sem token, token inválido ou expirado. | {"error":"invalid or expired token"} |
| 403 | Seu usuário não tem o privilégio manage_layouts. | {"error":"insufficient privileges","required":"manage_layouts"} |
| 500 | Falha ao gravar ou ler no banco, ou id inexistente onde a rota não trata 404. | {"error":"failed to update page","detail":"..."} |
Excluir página
Remove a página e toda a árvore dela. A tela volta a usar a página padrão (catch-all) do layout.
/api/v1/admin/advanced-layouts/pages/{id}AdminExcluir uma página
Requer o privilégio manage_layouts.
Parâmetros de caminho
idintegerobrigatórioExemplo de requisição
curl -X DELETE "$BASE_URL/api/v1/admin/advanced-layouts/pages/2945" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"message": "page deleted"
}Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | O id de page no caminho não é um inteiro. | {"error":"invalid page id","detail":"id must be an integer"} |
| 401 | Sem token, token inválido ou expirado. | {"error":"invalid or expired token"} |
| 403 | Seu usuário não tem o privilégio manage_layouts. | {"error":"insufficient privileges","required":"manage_layouts"} |
| 404 | Página não existe. | {"error":"page not found","detail":"2945"} |
| 500 | Falha ao gravar ou ler no banco, ou id inexistente onde a rota não trata 404. | {"error":"failed to delete page","detail":"..."} |
Gerar páginas da Loja WhatsApp
A Loja WhatsApp (WAC) é a mini-loja que roda dentro do WhatsApp. Esta rota cria, para cada tela wa.* que o layout ainda não tem, a página já preenchida com os blocos que reproduzem a mini-loja padrão. Páginas existentes nunca são alteradas, então é seguro repetir. O corpo é opcional.
/api/v1/admin/advanced-layouts/{id}/wa-default-pagesAdminGerar as páginas padrão da Loja WhatsApp
Requer o privilégio manage_layouts.
Parâmetros de caminho
idintegerobrigatórioCorpo da requisição
dispatchesstring[]wa.home, wa.product, wa.cart, wa.checkout, wa.choose, wa.account, wa.orders, wa.order, wa.track, wa.signup, wa.call, wa.tryon, wa.privacy, wa.proposal, wa.rep.home, wa.rep.sell, wa.rep.clients, wa.rep.orders, wa.rep.approvals, wa.rep.assistant, wa.rep.review, wa.rep.more. Omitido gera todas as que faltam.Exemplo de requisição
curl -X POST "$BASE_URL/api/v1/admin/advanced-layouts/135/wa-default-pages" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"dispatches": [
"wa.home",
"wa.cart"
]
}'Resposta
{
"created": [
"wa.home"
],
"skipped": [
"wa.cart"
]
}Campos da resposta
createdstring[]skippedstring[]Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | O id de layout no caminho não é um inteiro. | {"error":"invalid layout id","detail":"id must be an integer"} |
| 400 | Corpo JSON inválido. | {"error":"invalid request body","detail":"unexpected EOF"} |
| 400 | Dispatch wa.* desconhecido. | {"error":"invalid dispatches","detail":"unknown wa dispatch ..."} |
| 401 | Sem token, token inválido ou expirado. | {"error":"invalid or expired token"} |
| 403 | Seu usuário não tem o privilégio manage_layouts. | {"error":"insufficient privileges","required":"manage_layouts"} |
| 404 | Layout não existe. | {"error":"layout not found","detail":"135"} |
| 500 | Falha no meio do processo. As páginas já criadas são mantidas e listadas. | {"error":"failed to seed wa pages","details":"...","created":["wa.home"],"skipped":[]} |