Definições de seção
Cadastra os tipos de seção que o tema oferece, com os campos que o lojista pode editar.
Uma definição de seção é o "molde" de um pedaço da página: um banner de destaque, uma grade de produtos, um bloco de texto. Ela descreve quais campos existem (settings_schema) e quais blocos filhos aceita (block_definitions). Para colocar uma seção numa página, você cria uma instância que aponta para a definição.
Listar definições
Devolve todas as definições do tema, inclusive as inativas. O tema inicial tem 22.
/api/v1/admin/theme-builder/themes/{id}/section-definitionsAdminListar as definições de seção 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/section-definitions" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"section_definitions": [
{
"id": "49ee1ac9-b950-4526-8ffd-571caae96a45",
"theme_id": "fb9134bb-7063-46a5-96f8-bad686d1c69b",
"name": "Rich Text",
"slug": "rich-text",
"description": "A section for rich text content.",
"category": "content",
"icon": "type",
"thumbnail_url": "",
"settings_schema": [
{
"key": "heading",
"type": "text",
"label": "Heading"
},
{
"key": "content",
"type": "richtext",
"label": "Content"
}
],
"block_definitions": [],
"presets": [],
"max_blocks": 16,
"sort_order": 0,
"is_active": true,
"created_at": "2026-04-07T02:46:02.491306Z",
"updated_at": "2026-04-07T02:46:02.491306Z"
}
]
}Campos da resposta
section_definitionsarrayDefinições.
iduuidtheme_iduuidnamestringslugstringhero-banner.descriptionstringcategorystringheader, hero, products, content, social_proof, marketing, footer, utility ou custom (padrão ao criar).iconstringthumbnail_urlstringsettings_schemaobject[]key, type, label, default...). Mesmos tipos de campo dos ajustes globais do tema.block_definitionsobject[]type, name, limit e settings_schema.presetsobject[]max_blocksintegersort_orderintegeris_activebooleancreated_atstringupdated_atstringErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 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 | O id do caminho não é um UUID. Esta rota não valida antes e devolve 500 com a mensagem do banco em português. | {"error":"failed to list section definitions","detail":"o valor \"xx\" não é um uuid válido. Envie o identificador completo, com os 36 caracteres e os hífens. Corrija o campo e reenvie."} |
| 500 | Falha de banco de dados ou dado inválido para a coluna. | {"error":"failed to list section definitions","detail":"..."} |
Criar definição
Cadastra um novo tipo de seção no tema.
/api/v1/admin/theme-builder/themes/{id}/section-definitionsAdminCriar uma definição de seção
Requer o privilégio manage_theme.
Parâmetros de caminho
iduuidobrigatórioCorpo da requisição
namestringobrigatórioslugstringobrigatório500.descriptionstringcategorystringpadrão: customiconstringthumbnail_urlstringsettings_schemaobject[]padrão: []block_definitionsobject[]padrão: []presetsobject[]padrão: []max_blocksintegerpadrão: 16sort_orderintegerpadrão: 0Exemplo de requisição
curl -X POST "$BASE_URL/api/v1/admin/theme-builder/themes/fb9134bb-7063-46a5-96f8-bad686d1c69b/section-definitions" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Selo de confiança",
"slug": "trust-badges",
"category": "marketing",
"settings_schema": [
{
"key": "title",
"type": "text",
"label": "Título",
"default": "Compra segura"
}
]
}'Resposta
{
"id": "c3c3c3c3-0000-4000-8000-000000000003",
"theme_id": "fb9134bb-7063-46a5-96f8-bad686d1c69b",
"name": "Selo de confiança",
"slug": "trust-badges",
"description": "A section for rich text content.",
"category": "marketing",
"icon": "type",
"thumbnail_url": "",
"settings_schema": [
{
"key": "heading",
"type": "text",
"label": "Heading"
},
{
"key": "content",
"type": "richtext",
"label": "Content"
}
],
"block_definitions": [],
"presets": [],
"max_blocks": 16,
"sort_order": 0,
"is_active": true,
"created_at": "2026-04-07T02:46:02.491306Z",
"updated_at": "2026-04-07T02:46:02.491306Z"
}Campos da resposta
iduuidtheme_iduuidnamestringslugstringhero-banner.descriptionstringcategorystringheader, hero, products, content, social_proof, marketing, footer, utility ou custom (padrão ao criar).iconstringthumbnail_urlstringsettings_schemaobject[]key, type, label, default...). Mesmos tipos de campo dos ajustes globais do tema.block_definitionsobject[]type, name, limit e settings_schema.presetsobject[]max_blocksintegersort_orderintegeris_activebooleancreated_atstringupdated_atstringErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | Corpo JSON inválido. | {"error":"invalid request body","detail":"unexpected EOF"} |
| 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_theme. | {"error":"insufficient privileges","required":"manage_theme"} |
| 500 | slug vazio, ou slug já usado no tema, ou tema inexistente. | {"error":"failed to create section definition","detail":"section slug is required"} |
Atualizar definição
Altera os campos enviados. As seções já inseridas nas páginas continuam apontando para a definição e passam a usar o novo esquema; valores em settings_values de chaves que deixaram de existir ficam guardados, mas sem efeito.
/api/v1/admin/theme-builder/section-definitions/{id}AdminAtualizar uma definição de seção
Requer o privilégio manage_theme.
Parâmetros de caminho
iduuidobrigatórioCorpo da requisição
namestringslugstring500.descriptionstringcategorystringiconstringthumbnail_urlstringsettings_schemaobject[]block_definitionsobject[]presetsobject[]max_blocksintegersort_orderintegeris_activebooleanfalse esconde a definição do seletor.Exemplo de requisição
curl -X PUT "$BASE_URL/api/v1/admin/theme-builder/section-definitions/49ee1ac9-b950-4526-8ffd-571caae96a45" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"is_active": false
}'Resposta
{
"message": "section definition updated"
}Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 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_theme. | {"error":"insufficient privileges","required":"manage_theme"} |
| 404 | Definição não existe. | {"error":"section definition not found","detail":"not found: ..."} |
| 500 | Falha de banco de dados ou dado inválido para a coluna. | {"error":"failed to update section definition","detail":"..."} |
Excluir definição
Remove a definição. Se houver seções inseridas nas páginas que dependem dela, o banco pode recusar ou apagá-las em cascata; confira antes com listar seções.
/api/v1/admin/theme-builder/section-definitions/{id}AdminExcluir uma definição de seção
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/section-definitions/49ee1ac9-b950-4526-8ffd-571caae96a45" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"message": "section definition deleted"
}Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 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 | Definição não existe. | {"error":"section definition not found","detail":"not found: ..."} |
| 500 | Falha de banco de dados ou dado inválido para a coluna. | {"error":"failed to delete section definition","detail":"..."} |