Zum Inhalt springen

Propõe um tema a partir de uma imagem ou do logo

POST/api/communities/appearance/theme-from-image

Auth
Token erforderlich
API-Schlüssel:
community:write
X-CommunityId
X-CommunityId Sende die X-CommunityId der Community, in der die Operation stattfindet.
Die Beschreibungen der Endpoints stammen aus der API-Spezifikation und sind vorerst auf Portugiesisch. Die Oberfläche drumherum ist übersetzt.

"Gerar a partir de uma imagem": o servidor extrai até 8 cores dominantes da imagem e a IA, recebendo **só a lista de cores em hexadecimal**, escolhe as cores do tema (principal, secundária, menu e cabeçalho no claro e no escuro). A resposta é a proposta em `values`, no formato de `CommunityThemeValues`: o tema ativo com as cores trocadas (modo, fonte, cantos, densidade e navegação continuam os dele). **Nada é salvo**: para guardar, envie `values` em `POST /api/community-themes` com `origin: image` (conta no limite de 10 temas).

Fonte: um arquivo `file` (multipart; PNG, JPG ou WebP, até 5 MB; SVG → 422) **ou** `source: logo`, que usa o logo da comunidade, lido no servidor (nunca uma URL enviada pelo cliente). O arquivo fica só na memória e é descartado depois da extração; a imagem não sai do servidor. O formato é conferido pelos primeiros bytes antes de qualquer leitura. Logo em SVG é lido como PNG gerado pelo CDN de imagens a partir do próprio arquivo; sem isso, 422.

Contraste AA garantido: todo texto do menu e do cabeçalho passa 4,5:1 sobre o fundo, e o tom 600 de cada escala passa sob o texto que o app põe nele; `adjusted` lista o que o servidor corrigiu, e `warnings` volta vazio.

Cada geração conta 1 uso da cota de IA do plano (`ai.textUsesPerMonth`, a mesma do "Melhorar com IA"); com a cota esgotada, 429 com a mensagem `ai.errors.communityTextLimit`. Os limites por pessoa de `/api/ai` (30 por minuto, 500 por dia) valem aqui também. Fora de produção, sem a chave do provedor, um gerador falso determinístico responde. Owner e admin.

Header

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

Request-Body multipart/form-data

NameTypBeschreibung
filePflichtstring (binary)PNG, JPG ou WebP, até 5 MB.

Antworten

StatusBeschreibung
200A proposta (não salva).
400Nem arquivo nem `source: logo`, ou os dois juntos.
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.
422O arquivo não é uma imagem aceita, passa de 5 MB (SVG não é aceito) ou não tem cor visível; ou a comunidade não tem logo, ou ele não pôde ser lido como imagem.
429A comunidade usou a cota mensal de IA do plano (sem `Retry-After`), ou a pessoa passou do limite por minuto ou por dia de `/api/ai` (com `Retry-After`).
500Erro interno do servidor.
503O provedor de IA não respondeu; a cota só é devolvida quando a chamada nem chegou a ele.

curl-Beispiel

curl -X POST "https://api.memberfy.net/api/communities/appearance/theme-from-image" \
  -H "Authorization: Bearer $TOKEN" \
  -H "X-CommunityId: $COMMUNITY_ID" \
  -F "file=@caminho/do/arquivo"