Salva um tema da comunidade ("Usar este tema", "Personalizar" › Salvar, "Duplicar")
POST/api/community-themes
- Auth
- Richiede un token
- X-CommunityId
X-CommunityIdInvia l’X-CommunityId della community in cui avviene l’operazione.
Le descrizioni degli endpoint provengono dalla specifica dell’API e per ora sono in portoghese. L’interfaccia intorno è tradotta.
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.
Header
| Nome | Tipo | Descrizione |
|---|---|---|
X-CommunityIdfacoltativo | string (uuid) | ID da comunidade em que a operação acontece. Obrigatório na maioria dos endpoints com escopo de comunidade. |
Corpo della richiesta application/json
| Nome | Tipo | Descrizione |
|---|---|---|
namefacoltativo | string | max 80 |
presetKeyfacoltativo | light | dark | dark-premium | ocean | forest | editorial | |
sourceThemeIdfacoltativo | string | Id de um tema salvo, ou `active`. |
valuesfacoltativo | 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.modefacoltativo | light | dark | auto | `dark` e `auto` só com o tema escuro liberado (`darkModeAllowed`); senão, 422 com `param = values.mode`. |
values.lightfacoltativo | object | As cores de um lado do tema (claro ou escuro). |
values.light.primaryfacoltativo | object | Escala inteira (50 a 950). No escuro, `null` = gerada do claro. |
values.light.secondaryfacoltativo | object | Escala inteira (50 a 950). No escuro, `null` = gerada do claro. |
values.light.sidebarBgfacoltativo | string | Fundo do menu lateral; `null` = a superfície padrão. |
values.light.sidebarTextfacoltativo | string | Texto do menu lateral; `null` = o texto padrão. |
values.light.headerBgfacoltativo | string | Fundo do cabeçalho; `null` = a superfície padrão. |
values.light.headerTextfacoltativo | string | Texto do cabeçalho; `null` = o texto padrão. |
values.light.browserBarfacoltativo | string | Cor da barra do navegador no celular. A do claro é copiada para o `themeColor` da comunidade. |
values.darkfacoltativo | object | As cores de um lado do tema (claro ou escuro). |
values.dark.primaryfacoltativo | object | Escala inteira (50 a 950). No escuro, `null` = gerada do claro. |
values.dark.secondaryfacoltativo | object | Escala inteira (50 a 950). No escuro, `null` = gerada do claro. |
values.dark.sidebarBgfacoltativo | string | Fundo do menu lateral; `null` = a superfície padrão. |
values.dark.sidebarTextfacoltativo | string | Texto do menu lateral; `null` = o texto padrão. |
values.dark.headerBgfacoltativo | string | Fundo do cabeçalho; `null` = a superfície padrão. |
values.dark.headerTextfacoltativo | string | Texto do cabeçalho; `null` = o texto padrão. |
values.dark.browserBarfacoltativo | string | Cor da barra do navegador no celular. A do claro é copiada para o `themeColor` da comunidade. |
values.fontfacoltativo | object | |
values.font.headingfacoltativo | system | inter | manrope | dm-sans | plus-jakarta-sans | poppins | lora | merriweather | ibm-plex-sans | |
values.font.bodyfacoltativo | system | inter | manrope | dm-sans | plus-jakarta-sans | poppins | lora | merriweather | ibm-plex-sans | |
values.radiusfacoltativo | rounded | soft | square | Arredondados (12 px, padrão), Suaves (6 px) ou Retos. |
values.densityfacoltativo | comfortable | compact | |
values.navigationfacoltativo | object | Ausente nos temas prontos (usar um pronto herda a navegação do tema ativo). |
activatefacoltativo | boolean | |
originfacoltativo | 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. |
Risposte
| Codice | Descrizione |
|---|---|
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. |
Esempio 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 '{}'