Limites, quotas e erros

Limites de pedidos, quota de downloads e os códigos de erro da API.

Pedidos por minuto

Limite
Com token60 pedidos por minuto, por token
Sem token20 pedidos por minuto, por endereço IP

O limite vale para todos os endpoints de /v1/public em conjunto. Cada resposta traz os cabeçalhos X-RateLimit-Limit, X-RateLimit-Remaining e X-RateLimit-Reset. Acima do limite, a API responde 429 RATE_LIMITED, com o cabeçalho Retry-After (segundos até poderes tentar de novo):

{ "error": "RATE_LIMITED", "message": "Demasiados pedidos. Tenta novamente dentro de 42 s." }

Respeita o Retry-After

Quando recebes um 429, espera os segundos indicados em Retry-After antes do pedido seguinte, em vez de repetir logo.

Quota de downloads

Pedir a ligação de um ficheiro usa a mesma quota do site e das integrações:

Downloads em 24 horas
Sem token (contados por endereço IP)3
Com token de uma conta5
  • Repetir o mesmo logótipo nas 12 horas seguintes não conta de novo (por exemplo, o SVG e depois o PNG). Um ZIP conta uma vez.
  • Pesquisar, ver os detalhes de um logótipo e as cores das marcas não conta.
  • Cada download deixa de contar 24 horas depois de feito.
  • Com a quota cheia, não podes descarregar nada, nem um logótipo repetido, até a quota reiniciar.

A resposta de cada download traz o estado da quota:

"quota": { "unlimited": false, "used": 1, "limit": 5, "remaining": 4, "resetAt": "2026-10-15T09:00:00.000Z" }

Com a quota cheia, a API responde 403 DOWNLOAD_LIMIT_REACHED, com o âmbito (anonymous ou daily), o limite e quando voltas a ter downloads:

{
  "error": "DOWNLOAD_LIMIT_REACHED",
  "message": "Atingiste o teu limite diário de downloads. Tenta novamente mais tarde.",
  "scope": "daily",
  "limit": 5,
  "resetAt": "2026-10-15T09:00:00.000Z"
}

Vê também quotas e downloads.

Outros limites

LimiteSe passares
Paletas por conta100409 PALETTE_LIMIT
Cores por paleta (ou por gradiente)De 2 a 10400 INVALID_REQUEST
Nome de uma paleta60 caracteres400 INVALID_REQUEST
Propostas de logótipos por conta10 em 24 horas429 PROPOSAL_LIMIT_REACHED
Ficheiro de uma proposta5 MB; SVG, PNG, JPEG ou WEBP413 FILE_TOO_LARGE ou 415 UNSUPPORTED_FILE
Tokens activos por conta20Ao criar o token no site
Resultados por página (pageSize)50400 INVALID_REQUEST

Formato dos erros

Todos os erros vêm em JSON, com um código fixo em error (para o teu código decidir o que fazer) e uma mensagem em português em message (para mostrar a pessoas):

{ "error": "LOGO_NOT_FOUND", "message": "Logótipo não encontrado." }

Alguns erros trazem campos extra, como scope, limit e resetAt no DOWNLOAD_LIMIT_REACHED. Quando os parâmetros ou o corpo do pedido não são válidos, issues diz que campos falharam:

{
  "error": "INVALID_REQUEST",
  "message": "Pedido inválido.",
  "issues": [{ "field": "body.colors", "message": "Uma paleta precisa de pelo menos 2 cores" }]
}

Códigos de erro

EstadoCódigoSignificado
400INVALID_REQUESTParâmetros ou corpo do pedido inválidos (vê issues)
400FORMAT_MISMATCHO assetId indicado não é do formato pedido
400COMPANY_NAME_REQUIREDProposta sem companyName nem companySlug
400LOGO_COMPANY_MISMATCHO logótipo indicado na proposta não é da empresa indicada
400FILE_REQUIREDProposta sem o ficheiro (file)
400EMPTY_FILEO ficheiro da proposta está vazio
400UNSAFE_SVGO SVG tem scripts ou eventos: exporta-o de novo sem conteúdo interactivo
401TOKEN_REQUIREDO endpoint precisa de token
401INVALID_TOKENToken inválido
401TOKEN_REVOKEDToken revogado
401TOKEN_EXPIREDToken expirado
403INSUFFICIENT_SCOPEO token não tem a permissão necessária
403FORBIDDENSó o dono pode alterar ou apagar esta paleta
403DOWNLOAD_LIMIT_REACHEDQuota de downloads cheia (vê resetAt)
404COMPANY_NOT_FOUNDEmpresa não encontrada
404LOGO_NOT_FOUNDLogótipo não encontrado
404VARIANT_NOT_FOUNDVariante não encontrada neste logótipo
404FORMAT_NOT_AVAILABLEO logótipo não tem esse formato
404ASSET_NOT_FOUNDO assetId não existe neste logótipo
404PALETTE_NOT_FOUNDPaleta não encontrada (ou é privada de outra pessoa)
409PALETTE_LIMITA conta já tem 100 paletas
413FILE_TOO_LARGEO ficheiro passa dos 5 MB
413TOO_MANY_PARTSO formulário tem mais do que um ficheiro ou mais de 10 campos
415MULTIPART_REQUIREDA proposta tem de ser enviada em multipart/form-data
415UNSUPPORTED_FILEFormato de ficheiro não aceite numa proposta
415UNSUPPORTED_MEDIA_TYPEO endpoint não aceita multipart/form-data
429RATE_LIMITEDDemasiados pedidos por minuto (vê Retry-After)
429PROPOSAL_LIMIT_REACHEDJá enviaste 10 propostas nas últimas 24 horas

Login por código (plugins)

Os endpoints /device/code e /device/token, usados pelo plugin do Figma e pela extensão do Chrome, seguem a norma do login por código de dispositivo (RFC 8628), com códigos em minúsculas:

EstadoCódigoSignificado
400authorization_pendingO utilizador ainda não confirmou o código: pergunta de novo daqui a interval segundos
400slow_downEstás a perguntar depressa demais: aumenta o intervalo
400access_deniedO utilizador recusou a ligação
400expired_tokenO código passou do prazo (10 minutos)
400invalid_grantCódigo desconhecido ou já usado
409token_limitA conta já tem 20 tokens activos

Nesta página