Aller au contenu

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-CommunityId Envoyez 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

NomTypeDescription
X-CommunityIdfacultatifstring (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

NomTypeDescription
namefacultatifstringmax 80
presetKeyfacultatiflight | dark | dark-premium | ocean | forest | editorial
sourceThemeIdfacultatifstringId de um tema salvo, ou `active`.
valuesfacultatifobjectOs 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.modefacultatiflight | dark | auto`dark` e `auto` só com o tema escuro liberado (`darkModeAllowed`); senão, 422 com `param = values.mode`.
values.lightfacultatifobjectAs cores de um lado do tema (claro ou escuro).
values.light.primaryfacultatifobjectEscala inteira (50 a 950). No escuro, `null` = gerada do claro.
values.light.secondaryfacultatifobjectEscala inteira (50 a 950). No escuro, `null` = gerada do claro.
values.light.sidebarBgfacultatifstringFundo do menu lateral; `null` = a superfície padrão.
values.light.sidebarTextfacultatifstringTexto do menu lateral; `null` = o texto padrão.
values.light.headerBgfacultatifstringFundo do cabeçalho; `null` = a superfície padrão.
values.light.headerTextfacultatifstringTexto do cabeçalho; `null` = o texto padrão.
values.light.browserBarfacultatifstringCor da barra do navegador no celular. A do claro é copiada para o `themeColor` da comunidade.
values.darkfacultatifobjectAs cores de um lado do tema (claro ou escuro).
values.dark.primaryfacultatifobjectEscala inteira (50 a 950). No escuro, `null` = gerada do claro.
values.dark.secondaryfacultatifobjectEscala inteira (50 a 950). No escuro, `null` = gerada do claro.
values.dark.sidebarBgfacultatifstringFundo do menu lateral; `null` = a superfície padrão.
values.dark.sidebarTextfacultatifstringTexto do menu lateral; `null` = o texto padrão.
values.dark.headerBgfacultatifstringFundo do cabeçalho; `null` = a superfície padrão.
values.dark.headerTextfacultatifstringTexto do cabeçalho; `null` = o texto padrão.
values.dark.browserBarfacultatifstringCor da barra do navegador no celular. A do claro é copiada para o `themeColor` da comunidade.
values.fontfacultatifobject
values.font.headingfacultatifsystem | inter | manrope | dm-sans | plus-jakarta-sans | poppins | lora | merriweather | ibm-plex-sans
values.font.bodyfacultatifsystem | inter | manrope | dm-sans | plus-jakarta-sans | poppins | lora | merriweather | ibm-plex-sans
values.radiusfacultatifrounded | soft | squareArredondados (12 px, padrão), Suaves (6 px) ou Retos.
values.densityfacultatifcomfortable | compact
values.navigationfacultatifobjectAusente nos temas prontos (usar um pronto herda a navegação do tema ativo).
activatefacultatifboolean
originfacultatifimageFase 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

StatutDescription
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.

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