Salva um tema da comunidade ("Usar este tema", "Personalizar" › Salvar, "Duplicar")
POST/api/community-themes
- Auth
- Jeton requis
- Clé d’API:
- community:write
- X-CommunityId
X-CommunityIdEnvoyez le X-CommunityId de la communauté où l’opération a lieu.
Les descriptions des endpoints viennent directement de la spécification de l’API et sont en portugais pour l’instant. L’interface autour est traduite.
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.
En-têtes
| Nom | Type | Description |
|---|---|---|
X-CommunityIdfacultatif | string (uuid) | ID da comunidade em que a operação acontece. Obrigatório na maioria dos endpoints com escopo de comunidade. |
Corps de la requête application/json
| Nom | Type | Description |
|---|---|---|
namefacultatif | string | max 80 |
presetKeyfacultatif | light | dark | dark-premium | ocean | forest | editorial | |
sourceThemeIdfacultatif | string | Id de um tema salvo, ou `active`. |
valuesfacultatif | 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.modefacultatif | light | dark | auto | `dark` e `auto` só com o tema escuro liberado (`darkModeAllowed`); senão, 422 com `param = values.mode`. |
values.lightfacultatif | object | As cores de um lado do tema (claro ou escuro). |
values.light.primaryfacultatif | object | Escala inteira (50 a 950). No escuro, `null` = gerada do claro. |
values.light.secondaryfacultatif | object | Escala inteira (50 a 950). No escuro, `null` = gerada do claro. |
values.light.sidebarBgfacultatif | string | Fundo do menu lateral; `null` = a superfície padrão. |
values.light.sidebarTextfacultatif | string | Texto do menu lateral; `null` = o texto padrão. |
values.light.headerBgfacultatif | string | Fundo do cabeçalho; `null` = a superfície padrão. |
values.light.headerTextfacultatif | string | Texto do cabeçalho; `null` = o texto padrão. |
values.light.browserBarfacultatif | string | Cor da barra do navegador no celular. A do claro é copiada para o `themeColor` da comunidade. |
values.darkfacultatif | object | As cores de um lado do tema (claro ou escuro). |
values.dark.primaryfacultatif | object | Escala inteira (50 a 950). No escuro, `null` = gerada do claro. |
values.dark.secondaryfacultatif | object | Escala inteira (50 a 950). No escuro, `null` = gerada do claro. |
values.dark.sidebarBgfacultatif | string | Fundo do menu lateral; `null` = a superfície padrão. |
values.dark.sidebarTextfacultatif | string | Texto do menu lateral; `null` = o texto padrão. |
values.dark.headerBgfacultatif | string | Fundo do cabeçalho; `null` = a superfície padrão. |
values.dark.headerTextfacultatif | string | Texto do cabeçalho; `null` = o texto padrão. |
values.dark.browserBarfacultatif | string | Cor da barra do navegador no celular. A do claro é copiada para o `themeColor` da comunidade. |
values.fontfacultatif | object | |
values.font.headingfacultatif | system | inter | manrope | dm-sans | plus-jakarta-sans | poppins | lora | merriweather | ibm-plex-sans | |
values.font.bodyfacultatif | system | inter | manrope | dm-sans | plus-jakarta-sans | poppins | lora | merriweather | ibm-plex-sans | |
values.radiusfacultatif | rounded | soft | square | Arredondados (12 px, padrão), Suaves (6 px) ou Retos. |
values.densityfacultatif | comfortable | compact | |
values.navigationfacultatif | object | Ausente nos temas prontos (usar um pronto herda a navegação do tema ativo). |
activatefacultatif | boolean | |
originfacultatif | 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. |
Réponses
| Statut | Description |
|---|---|
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. |
Exemple 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 '{}'