Saltar al contenido

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

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

Auth
Requiere token
Clave de API:
community:write
X-CommunityId
X-CommunityId Envía el X-CommunityId de la comunidad en la que ocurre la operación.
Las descripciones de los endpoints vienen de la especificación de la API y, por ahora, están en portugués. La interfaz alrededor está traducida.

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

Headers

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

Cuerpo de la solicitud multipart/form-data

NombreTipoDescripción
fileobligatoriostring (binary)PNG, JPG ou WebP, até 5 MB.

Respuestas

CódigoDescripción
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.

Ejemplo con curl

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"