Converter em blocos
Troca o corpo fixo de uma página por blocos editáveis e desfaz a conversão.
Algumas telas da vitrine (lista de vendedores, página de produto, listagens, carrinho, login...) desenham o corpo por conta própria, e o administrador só controla o que fica antes e depois dele, pelo bloco main_content. Converter em blocos substitui o main_content por blocos normais que reproduzem esse corpo, para que cada peça possa ser movida, escondida ou estilizada. Restaurar faz o caminho de volta. As duas operações só funcionam em layout rascunho, são transacionais e devolvem a árvore atualizada.
Converter em blocos
Cria os blocos do modelo da tela no contêiner content e remove o main_content (e a linha e coluna que ficam vazias). Blocos do modelo cujo tipo já existe no contêiner são pulados e listados em skipped_block_types, para não duplicar.
/api/v1/admin/advanced-layouts/{id}/explodeAdminConverter o corpo da página em blocos
Requer o privilégio manage_layouts.
Parâmetros de caminho
idintegerobrigatórioCorpo da requisição
dispatchstringobrigatóriovendors.view.Exemplo de requisição
curl -X POST "$BASE_URL/api/v1/admin/advanced-layouts/140/explode" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"dispatch": "vendors.view"
}'Resposta
{
"layout": {
"id": 140,
"name": "Novo Layout Avançado",
"theme_variant": "default",
"is_default": false,
"created_at": "2026-07-12T16:29:12.505299Z",
"updated_at": "2026-07-12T16:29:12.505299Z"
},
"created_block_ids": [
11201,
11202
]
}Campos da resposta
layoutobjectcreated_block_idsinteger[]skipped_block_typesstring[]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 vazio. | {"error":"dispatch is required"} |
| 400 | Tela sem modelo de conversão. | {"error":"dispatch is not convertible","detail":"..."} |
| 401 | Sem token, token inválido ou expirado. | {"error":"invalid or expired token"} |
| 403 | O layout não é um rascunho. O layout publicado nunca é alterado por esta rota. | {"error":"layout is not a draft","detail":"..."} |
| 403 | Seu usuário não tem o privilégio manage_layouts. | {"error":"insufficient privileges","required":"manage_layouts"} |
| 404 | Layout ou página (dispatch) inexistente. | {"error":"not found","detail":"..."} |
| 409 | A página não tem mais o bloco main_content (já foi convertida). | {"error":"main content sentinel not found","detail":"..."} |
| 500 | Falha ao gravar ou ler no banco, ou id inexistente onde a rota não trata 404. | {"error":"failed to convert layout","detail":"..."} |
Restaurar corpo padrão
Remove os blocos que a conversão criou, apaga as linhas e colunas que ficarem vazias e recoloca o main_content. Blocos que você adicionou depois da conversão são preservados.
/api/v1/admin/advanced-layouts/{id}/restore-main-contentAdminRestaurar o corpo padrão da página
Requer o privilégio manage_layouts.
Parâmetros de caminho
idintegerobrigatórioCorpo da requisição
dispatchstringobrigatórioExemplo de requisição
curl -X POST "$BASE_URL/api/v1/admin/advanced-layouts/140/restore-main-content" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"dispatch": "vendors.view"
}'Resposta
{
"layout": {
"id": 140,
"name": "Novo Layout Avançado",
"theme_variant": "default",
"is_default": false,
"created_at": "2026-07-12T16:29:12.505299Z",
"updated_at": "2026-07-12T16:29:12.505299Z"
},
"removed_block_ids": [
11201,
11202
]
}Campos da resposta
layoutobjectremoved_block_idsinteger[]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 vazio. | {"error":"dispatch is required"} |
| 400 | Tela sem modelo. | {"error":"dispatch is not convertible","detail":"..."} |
| 401 | Sem token, token inválido ou expirado. | {"error":"invalid or expired token"} |
| 403 | O layout não é um rascunho. | {"error":"layout is not a draft","detail":"..."} |
| 403 | Seu usuário não tem o privilégio manage_layouts. | {"error":"insufficient privileges","required":"manage_layouts"} |
| 404 | Layout ou página inexistente. | {"error":"not found","detail":"..."} |
| 500 | Falha ao gravar ou ler no banco, ou id inexistente onde a rota não trata 404. | {"error":"failed to convert layout","detail":"..."} |