Salva um tema da comunidade ("Usar este tema", "Personalizar" › Salvar, "Duplicar")
POST/api/community-themes
- Auth
- Requiere token
- X-CommunityId
X-CommunityIdEnvía el X-CommunityId de la comunidad en la que ocurre la operación.
Las descripciones de los endpoints vienen de la especificación de la API y, por ahora, están en portugués. La interfaz alrededor está traducida.
Ponto de partida: um tema pronto (`presetKey`, com a navigation do tema ativo), um tema salvo (`sourceThemeId`, o Duplicar; aceita `active`) ou, sem os dois, o tema ativo. `values` (parcial) vai por cima. `name` padrão: o nome do pronto, ou "<origem> personalizado". `activate: true` também o ativa (o "Usar este tema"), com o efeito de `POST /api/community-themes/{id}/activate`.
422: no 11º tema (`communityThemes.limitReached`), `presetKey` desconhecido, valor fora da lista ou cor inválida (um item por campo em `errors`), e modo diferente de `light` sem o tema escuro liberado. 400 com `presetKey` e `sourceThemeId` juntos. Vai para o histórico da comunidade (campo "tema"). Owner e admin.
Headers
| Nombre | Tipo | Descripción |
|---|---|---|
X-CommunityIdopcional | string (uuid) | ID da comunidade em que a operação acontece. Obrigatório na maioria dos endpoints com escopo de comunidade. |
Cuerpo de la solicitud application/json
| Nombre | Tipo | Descripción |
|---|---|---|
nameopcional | string | max 80 |
presetKeyopcional | light | dark | dark-premium | ocean | forest | editorial | |
sourceThemeIdopcional | string | Id de um tema salvo, ou `active`. |
valuesopcional | object | Os valores de um tema: tudo o que é aparência da comunidade. Sempre completos na resposta. Na escrita (`values` em `POST` e `PATCH`), parciais: o que não vem fica como está. Numa escala, os tons que não vêm são derivados do 500 enviado (como "Gerar tons"); sem o 500, ficam os de antes. Cor que não é hexadecimal, fonte, cantos, densidade, modo, estado do menu, `navigation.layout` ou elemento de `navigation.hiddenNative` fora da lista → 422 com `param` no campo (por exemplo `values.font.heading` ou `values.navigation.hiddenNative[1]`). |
values.modeopcional | light | dark | auto | `dark` e `auto` só com o tema escuro liberado (`darkModeAllowed`); senão, 422 com `param = values.mode`. |
values.lightopcional | object | As cores de um lado do tema (claro ou escuro). |
values.light.primaryopcional | object | Escala inteira (50 a 950). No escuro, `null` = gerada do claro. |
values.light.secondaryopcional | object | Escala inteira (50 a 950). No escuro, `null` = gerada do claro. |
values.light.sidebarBgopcional | string | Fundo do menu lateral; `null` = a superfície padrão. |
values.light.sidebarTextopcional | string | Texto do menu lateral; `null` = o texto padrão. |
values.light.headerBgopcional | string | Fundo do cabeçalho; `null` = a superfície padrão. |
values.light.headerTextopcional | string | Texto do cabeçalho; `null` = o texto padrão. |
values.light.browserBaropcional | string | Cor da barra do navegador no celular. A do claro é copiada para o `themeColor` da comunidade. |
values.darkopcional | object | As cores de um lado do tema (claro ou escuro). |
values.dark.primaryopcional | object | Escala inteira (50 a 950). No escuro, `null` = gerada do claro. |
values.dark.secondaryopcional | object | Escala inteira (50 a 950). No escuro, `null` = gerada do claro. |
values.dark.sidebarBgopcional | string | Fundo do menu lateral; `null` = a superfície padrão. |
values.dark.sidebarTextopcional | string | Texto do menu lateral; `null` = o texto padrão. |
values.dark.headerBgopcional | string | Fundo do cabeçalho; `null` = a superfície padrão. |
values.dark.headerTextopcional | string | Texto do cabeçalho; `null` = o texto padrão. |
values.dark.browserBaropcional | string | Cor da barra do navegador no celular. A do claro é copiada para o `themeColor` da comunidade. |
values.fontopcional | object | |
values.font.headingopcional | system | inter | manrope | dm-sans | plus-jakarta-sans | poppins | lora | merriweather | ibm-plex-sans | |
values.font.bodyopcional | system | inter | manrope | dm-sans | plus-jakarta-sans | poppins | lora | merriweather | ibm-plex-sans | |
values.radiusopcional | rounded | soft | square | Arredondados (12 px, padrão), Suaves (6 px) ou Retos. |
values.densityopcional | comfortable | compact | |
values.navigationopcional | object | Ausente nos temas prontos (usar um pronto herda a navegação do tema ativo). |
activateopcional | boolean | |
originopcional | image | Fase 4b: salva a proposta de `POST /api/communities/appearance/theme-from-image` (envie a `values` dela, sem `presetKey` nem `sourceThemeId`); o tema fica com origem `image`, nome padrão "Tema da imagem", e o Restaurar volta à proposta. |
Respuestas
| Código | Descripción |
|---|---|
201 | O tema salvo. |
400 | Requisição inválida — falha de validação. |
401 | Token ausente, inválido ou expirado; token de outra comunidade (o `X-CommunityId` ou o `communityId` do corpo não é o do token); token antigo ou de uma sessão encerrada (troca de senha, convite aceito). Nesses casos a mensagem pede para entrar de novo (`auth.signInAgain`). |
403 | Autenticado, mas sem permissão para esta operação. |
404 | Recurso não encontrado. |
422 | Limite de 10 temas, valor fora da lista, cor inválida ou tema escuro sem liberação. |
500 | Erro interno do servidor. |
Ejemplo con curl
curl -X POST "https://api.memberfy.net/api/community-themes" \
-H "Authorization: Bearer $TOKEN" \
-H "X-CommunityId: $COMMUNITY_ID" \
-H "Content-Type: application/json" \
-d '{}'