Rascunho e publicação
Lê, grava, publica e descarta o rascunho do layout da vitrine.
O rascunho é uma cópia editável da página. Nada nele aparece para o cliente até o publish. Há um rascunho por layout. As quatro rotas abaixo exigem o privilégio manage_layouts; o {layoutId} é o layout_id devolvido por Ler a página publicada.
Ler o rascunho
/api/v1/admin/editor/draft/{layoutId}AdminLê o rascunho de um layout
Parâmetros de caminho
layoutIdintegerobrigatório{
"id": "0b8a5d44-6a1f-4d77-8f0e-6b9d6c7a2e11",
"layout_id": 166,
"page_type": "index.index",
"containers": [
{
"id": "content",
"position": "content",
"sort_order": 0,
"sections": [
{
"id": "6f1d3a9e-8b2c-4c57-9e7a-1c2d3e4f5a6b",
"template_slug": "hero-banner",
"block_type": "hero_banner",
"name": "Hero Banner",
"config": { "title": "Welcome to our store", "height": "500px" },
"visible": true,
"sort_order": 0
}
]
}
],
"created_by": "d4613dde-ac7a-431c-9232-50d8cd6ad5fc",
"created_at": "2026-10-11T15:30:00.000Z",
"updated_at": "2026-10-11T15:31:00.000Z"
}Campos da resposta
iduuidlayout_idintegerpage_typestringindex.index quando não informada).containersarraycreated_byuuidcreated_atstringupdated_atstringGravar o rascunho
/api/v1/admin/editor/draft/{layoutId}AdminCria ou substitui o rascunho inteiro
Grava o estado completo do editor. Se já existe rascunho, o conteúdo dele é substituído pelo que você enviar; senão, um novo é criado.
Parâmetros de caminho
layoutIdintegerobrigatórioCorpo da requisição
page_typestringpadrão: index.indexcontainersarrayobrigatórioLista completa de contêineres. Cada item:
idstringposition.positionstringobrigatóriotop_panel, header, content, footer...). É a chave usada na publicação.sort_orderintegersectionsarrayid, template_slug, block_type, name, config, visible, sort_order e, opcionalmente, usergroup_ids e custom_css.Exemplo de requisição
curl -X POST "$BASE_URL/api/v1/admin/editor/draft/166" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"page_type":"index.index","containers":[{"id":"content","position":"content","sort_order":0,"sections":[{"id":"6f1d3a9e-8b2c-4c57-9e7a-1c2d3e4f5a6b","template_slug":"hero-banner","block_type":"hero_banner","name":"Hero Banner","config":{"title":"Natal na Loja"},"visible":true,"sort_order":0}]}]}'A resposta 200 é o rascunho gravado, no formato de "Ler o rascunho".
Publicar o rascunho
/api/v1/admin/editor/draft/{layoutId}/publishAdminPublica o rascunho como página real
Aplica o rascunho à vitrine e apaga o rascunho. Na prática: (1) contêineres que existem na página publicada e não estão no rascunho são removidos, a menos que o rascunho não tenha contêiner algum; (2) o conteúdo de cada contêiner do rascunho é reconstruído, com uma linha de largura total por seção; (3) seções com visible: false viram blocos desativados. A operação é uma transação: ou aplica tudo ou nada.
Parâmetros de caminho
layoutIdintegerobrigatório{ "status": "published", "message": "Draft has been published successfully" }Descartar o rascunho
/api/v1/admin/editor/draft/{layoutId}AdminDescarta o rascunho sem publicar
Parâmetros de caminho
layoutIdintegerobrigatório{ "status": "discarded", "message": "Draft has been discarded" }Erros
| Status | Quando | Corpo |
|---|---|---|
| 400 | layoutId que não é inteiro (ou menor que 1, no publicar); corpo inválido (gravar) | {"error":"invalid layout id","detail":"layout id must be an integer"} |
| 401 | Sem token ou token expirado | {"error":"missing authorization header"} |
| 403 | Sem o privilégio manage_layouts | {"error":"insufficient privileges","required":"manage_layouts"} |
| 404 | Não existe rascunho (ler) | {"error":"no draft found","detail":"no draft exists for this layout"} |
| 500 | Publicar ou descartar sem rascunho; layout sem página padrão; falha de banco | {"error":"failed to publish draft","detail":"no draft exists for layout 166"} |