Pular para o conteúdo

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

POST/api/community-themes

Auth
Exige token
X-CommunityId
X-CommunityId Envie o X-CommunityId da comunidade em que a operação acontece.

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

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

Corpo da requisição application/json

NomeTipoDescrição
nameopcionalstringmax 80
presetKeyopcionallight | dark | dark-premium | ocean | forest | editorial
sourceThemeIdopcionalstringId de um tema salvo, ou `active`.
valuesopcionalobjectOs 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.modeopcionallight | dark | auto`dark` e `auto` só com o tema escuro liberado (`darkModeAllowed`); senão, 422 com `param = values.mode`.
values.lightopcionalobjectAs cores de um lado do tema (claro ou escuro).
values.light.primaryopcionalobjectEscala inteira (50 a 950). No escuro, `null` = gerada do claro.
values.light.secondaryopcionalobjectEscala inteira (50 a 950). No escuro, `null` = gerada do claro.
values.light.sidebarBgopcionalstringFundo do menu lateral; `null` = a superfície padrão.
values.light.sidebarTextopcionalstringTexto do menu lateral; `null` = o texto padrão.
values.light.headerBgopcionalstringFundo do cabeçalho; `null` = a superfície padrão.
values.light.headerTextopcionalstringTexto do cabeçalho; `null` = o texto padrão.
values.light.browserBaropcionalstringCor da barra do navegador no celular. A do claro é copiada para o `themeColor` da comunidade.
values.darkopcionalobjectAs cores de um lado do tema (claro ou escuro).
values.dark.primaryopcionalobjectEscala inteira (50 a 950). No escuro, `null` = gerada do claro.
values.dark.secondaryopcionalobjectEscala inteira (50 a 950). No escuro, `null` = gerada do claro.
values.dark.sidebarBgopcionalstringFundo do menu lateral; `null` = a superfície padrão.
values.dark.sidebarTextopcionalstringTexto do menu lateral; `null` = o texto padrão.
values.dark.headerBgopcionalstringFundo do cabeçalho; `null` = a superfície padrão.
values.dark.headerTextopcionalstringTexto do cabeçalho; `null` = o texto padrão.
values.dark.browserBaropcionalstringCor da barra do navegador no celular. A do claro é copiada para o `themeColor` da comunidade.
values.fontopcionalobject
values.font.headingopcionalsystem | inter | manrope | dm-sans | plus-jakarta-sans | poppins | lora | merriweather | ibm-plex-sans
values.font.bodyopcionalsystem | inter | manrope | dm-sans | plus-jakarta-sans | poppins | lora | merriweather | ibm-plex-sans
values.radiusopcionalrounded | soft | squareArredondados (12 px, padrão), Suaves (6 px) ou Retos.
values.densityopcionalcomfortable | compact
values.navigationopcionalobjectAusente nos temas prontos (usar um pronto herda a navegação do tema ativo).
activateopcionalboolean
originopcionalimageFase 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.

Respostas

CódigoDescrição
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.

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