Skip to content

Salva um tema da comunidade ("Usar este tema", "Personalizar" › Salvar, "Duplicar")

POST/api/community-themes

Auth
Requires a token
X-CommunityId
X-CommunityId Send the X-CommunityId of the community the operation happens in.
Endpoint descriptions come straight from the API specification and are in Portuguese for now. The interface around them is translated.

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

NameTypeDescription
X-CommunityIdoptionalstring (uuid)ID da comunidade em que a operação acontece. Obrigatório na maioria dos endpoints com escopo de comunidade.

Request body application/json

NameTypeDescription
nameoptionalstringmax 80
presetKeyoptionallight | dark | dark-premium | ocean | forest | editorial
sourceThemeIdoptionalstringId de um tema salvo, ou `active`.
valuesoptionalobjectOs 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.modeoptionallight | dark | auto`dark` e `auto` só com o tema escuro liberado (`darkModeAllowed`); senão, 422 com `param = values.mode`.
values.lightoptionalobjectAs cores de um lado do tema (claro ou escuro).
values.light.primaryoptionalobjectEscala inteira (50 a 950). No escuro, `null` = gerada do claro.
values.light.secondaryoptionalobjectEscala inteira (50 a 950). No escuro, `null` = gerada do claro.
values.light.sidebarBgoptionalstringFundo do menu lateral; `null` = a superfície padrão.
values.light.sidebarTextoptionalstringTexto do menu lateral; `null` = o texto padrão.
values.light.headerBgoptionalstringFundo do cabeçalho; `null` = a superfície padrão.
values.light.headerTextoptionalstringTexto do cabeçalho; `null` = o texto padrão.
values.light.browserBaroptionalstringCor da barra do navegador no celular. A do claro é copiada para o `themeColor` da comunidade.
values.darkoptionalobjectAs cores de um lado do tema (claro ou escuro).
values.dark.primaryoptionalobjectEscala inteira (50 a 950). No escuro, `null` = gerada do claro.
values.dark.secondaryoptionalobjectEscala inteira (50 a 950). No escuro, `null` = gerada do claro.
values.dark.sidebarBgoptionalstringFundo do menu lateral; `null` = a superfície padrão.
values.dark.sidebarTextoptionalstringTexto do menu lateral; `null` = o texto padrão.
values.dark.headerBgoptionalstringFundo do cabeçalho; `null` = a superfície padrão.
values.dark.headerTextoptionalstringTexto do cabeçalho; `null` = o texto padrão.
values.dark.browserBaroptionalstringCor da barra do navegador no celular. A do claro é copiada para o `themeColor` da comunidade.
values.fontoptionalobject
values.font.headingoptionalsystem | inter | manrope | dm-sans | plus-jakarta-sans | poppins | lora | merriweather | ibm-plex-sans
values.font.bodyoptionalsystem | inter | manrope | dm-sans | plus-jakarta-sans | poppins | lora | merriweather | ibm-plex-sans
values.radiusoptionalrounded | soft | squareArredondados (12 px, padrão), Suaves (6 px) ou Retos.
values.densityoptionalcomfortable | compact
values.navigationoptionalobjectAusente nos temas prontos (usar um pronto herda a navegação do tema ativo).
activateoptionalboolean
originoptionalimageFase 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.

Responses

StatusDescription
201O tema salvo.
400Requisição inválida — falha de validação.
401Token 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`).
403Autenticado, mas sem permissão para esta operação.
404Recurso não encontrado.
422Limite de 10 temas, valor fora da lista, cor inválida ou tema escuro sem liberação.
500Erro interno do servidor.

curl example

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 '{}'