Rascunho do tema
Guarda um rascunho do tema, publica-o aplicando tudo de uma vez ou o descarta.
O rascunho permite montar uma alteração grande no seu cliente (por exemplo, um editor visual) e aplicá-la de uma só vez. Há um rascunho por tema: salvar de novo substitui o anterior. O conteúdo é um JSON livre (draft_data), mas só as chaves abaixo são aplicadas na publicação.
Obter rascunho
Devolve o rascunho salvo, ou draft: null quando não há.
/api/v1/admin/theme-builder/themes/{id}/draftAdminObter o rascunho do tema
Requer o privilégio manage_theme.
Parâmetros de caminho
iduuidobrigatórioExemplo de requisição
curl -X GET "$BASE_URL/api/v1/admin/theme-builder/themes/fb9134bb-7063-46a5-96f8-bad686d1c69b/draft" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"draft": {
"id": "d1d1d1d1-0000-4000-8000-000000000001",
"theme_id": "fb9134bb-7063-46a5-96f8-bad686d1c69b",
"draft_data": {
"global_settings_values": {
"primary_color": "#B45309"
},
"templates": [
{
"id": "30a0a88f-2eba-4a7a-bdea-ab73b761ab99",
"sections": [
{
"section_definition_id": "49ee1ac9-b950-4526-8ffd-571caae96a45",
"name": "rich-text",
"settings_values": {
"heading": "Novidades"
},
"visible": true,
"blocks": []
}
]
}
]
},
"created_by": "",
"created_at": "2026-10-11T12:00:00Z",
"updated_at": "2026-10-11T12:00:00Z"
}
}{
"draft": null
}Campos da resposta
draftobjectO rascunho ou null.
iduuidtheme_iduuiddraft_dataobjectcreated_bystringcreated_atstringupdated_atstringErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | O id do caminho não é um UUID. | {"error":"invalid id","detail":"id must be a valid UUID"} |
| 401 | Sem token, token inválido ou expirado. | {"error":"invalid or expired token"} |
| 403 | Seu usuário não tem o privilégio manage_theme. | {"error":"insufficient privileges","required":"manage_theme"} |
| 500 | Falha de banco de dados ou dado inválido para a coluna. | {"error":"failed to get draft","detail":"..."} |
Salvar rascunho
Grava o rascunho, substituindo o existente. Nada muda na vitrine até a publicação.
/api/v1/admin/theme-builder/themes/{id}/draftAdminSalvar o rascunho do tema
Requer o privilégio manage_theme.
Parâmetros de caminho
iduuidobrigatórioCorpo da requisição
draft_dataobjectobrigatóriocreated_bystringExemplo de requisição
curl -X POST "$BASE_URL/api/v1/admin/theme-builder/themes/fb9134bb-7063-46a5-96f8-bad686d1c69b/draft" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"draft_data": {
"global_settings_values": {
"primary_color": "#B45309"
},
"templates": [
{
"id": "30a0a88f-2eba-4a7a-bdea-ab73b761ab99",
"sections": [
{
"section_definition_id": "49ee1ac9-b950-4526-8ffd-571caae96a45",
"name": "rich-text",
"settings_values": {
"heading": "Novidades"
},
"visible": true,
"blocks": []
}
]
}
]
},
"created_by": "editor-visual"
}'Resposta
{
"id": "d1d1d1d1-0000-4000-8000-000000000001",
"theme_id": "fb9134bb-7063-46a5-96f8-bad686d1c69b",
"draft_data": {
"global_settings_values": {
"primary_color": "#B45309"
},
"templates": [
{
"id": "30a0a88f-2eba-4a7a-bdea-ab73b761ab99",
"sections": [
{
"section_definition_id": "49ee1ac9-b950-4526-8ffd-571caae96a45",
"name": "rich-text",
"settings_values": {
"heading": "Novidades"
},
"visible": true,
"blocks": []
}
]
}
]
},
"created_by": "",
"created_at": "2026-10-11T12:00:00Z",
"updated_at": "2026-10-11T12:00:00Z"
}Campos da resposta
iduuidtheme_iduuiddraft_dataobjectcreated_bystringcreated_atstringupdated_atstringErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | O id do caminho não é um UUID. | {"error":"invalid id","detail":"id must be a valid UUID"} |
| 400 | Corpo JSON inválido. | {"error":"invalid request body","detail":"unexpected EOF"} |
| 400 | draft_data ausente ou nulo. | {"error":"draft_data 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_theme. | {"error":"insufficient privileges","required":"manage_theme"} |
| 500 | Falha de banco de dados ou dado inválido para a coluna. | {"error":"failed to save draft","detail":"..."} |
Publicar rascunho
Aplica o rascunho ao tema em uma transação e apaga o rascunho. A verificação de orçamento de desempenho (imagens e scripts) roda antes, como em publicar o tema, com os mesmos parâmetros force e optimize. Devolve o tema atualizado. Sem corpo.
/api/v1/admin/theme-builder/themes/{id}/draft/publishAdminAplicar o rascunho ao tema
Requer o privilégio manage_theme.
Parâmetros de caminho
iduuidobrigatórioParâmetros de consulta
forcebooleantrue ignora o orçamento de desempenho.optimizebooleantrue otimiza as imagens que estouram o limite antes de aplicar.Exemplo de requisição
curl -X POST "$BASE_URL/api/v1/admin/theme-builder/themes/fb9134bb-7063-46a5-96f8-bad686d1c69b/draft/publish" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"id": "fb9134bb-7063-46a5-96f8-bad686d1c69b",
"name": "Default",
"slug": "default",
"description": "Starter theme",
"thumbnail_url": "",
"author": "Venddor",
"version": "1.0.0",
"status": "A",
"is_live": true,
"global_settings_schema": [
{
"key": "primary_color",
"type": "color",
"label": "Primary Color",
"default": "#2563EB"
}
],
"global_settings_values": {
"primary_color": "#2563EB",
"font_body": "Inter",
"border_radius": 8
},
"created_at": "2026-04-07T02:46:02.491306Z",
"updated_at": "2026-04-07T02:46:02.491306Z"
}{
"violations": [
{
"rule": "image_size",
"severity": "error",
"asset_url": "/uploads/banner.png",
"actual_bytes": 4200000,
"limit_bytes": 400000,
"fix": "auto"
}
]
}Campos da resposta
iduuidnamestringslugstringdescriptionstringthumbnail_urlstringauthorstringversionstring1.0.0).statusstringR rascunho, A publicado, L ao vivo, D arquivado. Tema "ao vivo" é indicado por is_live.is_livebooleantrue no tema que a vitrine está usando. Só um por loja.global_settings_schemaobject[]key, type, label, default e, conforme o tipo, options, min, max, step, unit, placeholder, info. Tipos: text, textarea, richtext, url, image, color, range, number, checkbox, select, collection, product.global_settings_valuesobjectkey.created_atstringupdated_atstringErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | O id do caminho não é um UUID. | {"error":"invalid id","detail":"id must be a valid UUID"} |
| 401 | Sem token, token inválido ou expirado. | {"error":"invalid or expired token"} |
| 403 | Seu usuário não tem o privilégio manage_theme. | {"error":"insufficient privileges","required":"manage_theme"} |
| 404 | O tema não tem rascunho. | {"error":"no draft found for this theme","detail":"not found: no draft for theme ..."} |
| 422 | Violações de orçamento de desempenho com severidade error. | {"violations":[...]} |
| 500 | Falha de banco de dados ou dado inválido para a coluna. | {"error":"failed to publish draft","detail":"..."} |
Descartar rascunho
Apaga o rascunho sem aplicar nada.
/api/v1/admin/theme-builder/themes/{id}/draftAdminDescartar o rascunho
Requer o privilégio manage_theme.
Parâmetros de caminho
iduuidobrigatórioExemplo de requisição
curl -X DELETE "$BASE_URL/api/v1/admin/theme-builder/themes/fb9134bb-7063-46a5-96f8-bad686d1c69b/draft" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"message": "draft discarded"
}Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | O id do caminho não é um UUID. | {"error":"invalid id","detail":"id must be a valid UUID"} |
| 401 | Sem token, token inválido ou expirado. | {"error":"invalid or expired token"} |
| 403 | Seu usuário não tem o privilégio manage_theme. | {"error":"insufficient privileges","required":"manage_theme"} |
| 404 | O tema não tem rascunho. | {"error":"no draft found for this theme","detail":"not found: no draft for theme ..."} |
| 500 | Falha de banco de dados ou dado inválido para a coluna. | {"error":"failed to discard draft","detail":"..."} |