Docs para desenvolvedores

O MiniPic oferece duas camadas de API: uma camada de compatibilidade (com autenticação e estrutura de resposta compatíveis com APIs de compressão populares — integre apenas trocando o endpoint e a chave) e uma camada nativa (/v1/*, compressão síncrona e consultas de uso). Você paga apenas por compressões bem-sucedidas, as primeiras 500 de cada mês são grátis, cada resposta traz cabeçalhos de uso, e sua fatura é reconciliável linha por linha.

Promessa de estabilidade: mudanças incompatíveis em /shrink e /v1 são anunciadas com 90 dias de antecedência.

Início rápido

Comprima sua primeira imagem em 30 segundos: crie uma chave de API no console e, depois, envie uma requisição.

# Comprime um PNG (autenticação Basic, usuário fixo em api) curl -s --user api:SUA_CHAVE_DE_API \ --data-binary @input.png \ -o output.png \ https://api.minipic.ai/v1/compress

O resultado é retornado por um link privado criptografado que só você, o detentor da chave, pode acessar — as imagens são usadas apenas para esta compressão, criptografadas o tempo todo, nunca vazadas e nunca usadas para treinamento ou qualquer outra finalidade.

Autenticação

  • HTTP Basic (compatível com APIs de compressão populares): usuário fixo em api, senha é a sua chave de API — Authorization: Basic base64("api:KEY")
  • Bearer (recomendado para a camada nativa): Authorization: Bearer KEY

Os prefixos de chave são mp_live_ (produção) e mp_test_ (sandbox); o servidor armazena apenas um hash da chave, e a chave completa é exibida apenas uma vez na criação. Cada conta pode ter até 5 chaves. Falhas de autenticação sempre retornam 401 sem distinguir a causa (para evitar enumeração).

POST /shrink Comprimir uma imagem

O corpo da requisição é uma de duas opções: uma imagem em binário bruto (PNG / JPEG / WebP / HEIC / GIF / BMP / TIFF / AVIF) ou um JSON especificando uma URL de origem (apenas endereços públicos http/https, com tempo limite de busca de 10 segundos). Quando nenhum formato de saída é especificado, o formato original é mantido: PNG / JPEG / WebP / GIF / TIFF / AVIF são gerados em seu formato original (AVIF→AVIF, TIFF→TIFF); HEIC é convertido para JPEG; BMP, que não pode ser comprimido em seu próprio formato, é convertido para PNG. O GIF é otimizado sem perdas por padrão (continua GIF) e também pode ser convertido para WebP para economizar mais.

# Opção 1: enviar o binário diretamente curl -s --user api:SUA_CHAVE_DE_API \ --data-binary @input.png \ https://api.minipic.ai/shrink
# Opção 2: deixar o servidor buscar uma URL curl -s --user api:SUA_CHAVE_DE_API \ -H "Content-Type: application/json" \ -d '{"source": {"url": "https://example.com/input.png"}}' \ https://api.minipic.ai/shrink

Em caso de sucesso, retorna 201 Created, com cabeçalhos de resposta incluindo Location (o endereço do resultado) e Compression-Count (imagens cobradas neste mês):

{ "input": { "size": 207565, "type": "image/png" }, "output": { "size": 63274, "type": "image/png", "width": 1280, "height": 720, "ratio": 0.3049, "url": "https://api.minipic.ai/output/{id}" } }

GET /output/{id} Baixar o resultado

Exige autenticação; retorna o binário do resultado comprimido. Os resultados são servidos por um link privado criptografado; quando o link expira, retorna 404 OutputExpired, e você pode comprimir novamente para obtê-lo de novo. Baixar novamente o mesmo resultado não é cobrado.

POST /output/{id} Operações derivadas

Execute resize / convert / preserve em um resultado comprimido; cada saída derivada conta como 1 imagem:

# Redimensiona proporcionalmente para 800px de largura e converte para WebP curl -s --user api:SUA_CHAVE_DE_API \ -H "Content-Type: application/json" \ -d '{"resize": {"method": "scale", "width": 800}, "convert": {"type": "image/webp"}}' \ -o thumb.webp \ https://api.minipic.ai/output/{id}
  • resize.method: scale (proporcional por um lado) / fit (cabe inteiro) / cover (recorta para preencher, atualmente recorte central)
  • convert.type: converte entre image/webp, image/png e image/jpeg
  • preserve: mantém os metadados de copyright / creation / location
Limites atuais (leia antes de integrar): as miniaturas inteligentes thumb ainda não estão disponíveis (retorna 501 NotImplemented); cover é um recorte central (detecção inteligente de assunto está planejada); a saída AVIF não é suportada; o upload direto store para S3/GCS não é suportado (o upload direto para armazenamento de objetos está planejado).

POST /v1/compress Compressão síncrona (camada nativa)

Uma única requisição retorna o binário do resultado comprimido diretamente, economizando uma ida e volta — prático para CI:

# A predefinição de qualidade e o formato de saída são definidos por parâmetros de consulta curl -s -H "Authorization: Bearer SUA_CHAVE_DE_API" \ --data-binary @input.jpg \ -o output.jpg \ "https://api.minipic.ai/v1/compress?quality=smart&format=keep"
  • quality: smart (padrão) / high / extreme / 1-100
  • format: keep (manter o formato original) / webp
  • Cabeçalhos de resposta: X-Input-Size / X-Output-Size / X-Ratio / Compression-Count

GET /v1/usage Consulta de uso

Retorna a contagem deste mês, a cota gratuita restante e o saldo restante dos pacotes de crédito — idêntico ao console:

{ "month": "2026-06", "compressed": 1234, "free_quota": { "total": 500, "used": 500 }, "bundles": [ { "id": "...", "total": 10000, "remaining": 5210 } ], "pay_as_you_go": { "count": 734, "estimated_amount_cny": "36.70" }, "rate_limit": { "rps": 10, "burst": 20 } }

Cotas e limites de taxa

  • Taxa: 10 req/s por chave, burst de 20 (token bucket); ao ultrapassar, retorna 429 + Retry-After
  • Concorrência: tarefas em andamento por chave <= 20
  • Cota mensal gratuita: 500 imagens/mês/conta; quando esgotada sem pagamento cadastrado, retorna 429 AccountLimitReached
  • Por arquivo: 5 MB grátis; 80 MB pago; personalizável para empresas
  • Pixels: <= 100 megapixels; ao ultrapassar, retorna 422 ImageTooComplex

Cabeçalhos de resposta em todos os endpoints tarifados: Compression-Count, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.

Cobrança

  • POST /shrink com sucesso (201): conta como 1 imagem
  • POST /v1/compress com sucesso (200): conta como 1 imagem
  • GET /output/{id} baixar novamente: não é cobrado
  • POST /output/{id} operação derivada com sucesso: conta como 1 imagem a cada vez
  • 4xx / 5xx, bloqueios da triagem de conteúdo e falhas de busca de URL: não são cobrados; em uma nova tentativa bem-sucedida, conta apenas a chamada que teve sucesso

Ordem de dedução: cota mensal do plano → pacotes de crédito (primeiro comprado, primeiro usado, nunca expiram). Pré-pago, sem fatura mensal por uso — quando a cota acaba, pausa, e comprar um pacote de crédito a restaura.

Integração de IA / Skill

O MiniPic oferece uma Agent Skill oficial (minipic-compress): uma vez instalada, diga a qualquer agente de IA que suporte o padrão aberto Anthropic Agent Skills (Claude Code / Cursor / Codex CLI / Copilot CLI, etc.) algo como "comprima as imagens desta pasta" e ele chamará automaticamente a API do MiniPic para comprimir, converter para WebP, processar em lote e reportar a taxa de compressão — sem precisar escrever curl ou lógica de repetição à mão.

Instalar

Escolha uma das opções a seguir (três opções):

# Opção 1: via skills.sh (npx, recomendado) npx skills add minipic/minipic-skill
# Opção 2: via gh skill gh skill install minipic/minipic-skill
# Opção 3: colocar manualmente no diretório de skills (nível de usuário / projeto do Claude Code) cp -r minipic-compress ~/.claude/skills/ # Ou no nível de projeto: cp -r minipic-compress <seu-projeto>/.claude/skills/

Para outros agentes que suportem o padrão Agent Skills (Cursor / Codex CLI / Copilot CLI, etc.), siga a documentação deles para colocar o diretório minipic-compress/ no caminho de skills correspondente.

Configure sua chave de API

A chave é lida apenas de uma variável de ambiente e nunca é codificada de forma fixa ou exibida. Depois de criar uma chave no console, defina-a no seu ambiente:

# Obrigatório: sua chave de API (500 imagens grátis/mês/conta) export MINIPIC_API_KEY=mp_live_sua_chave # Opcional: sobrescrever a URL base da API (padrão https://api.minipic.ai) # export MINIPIC_API_BASE=https://api.minipic.ai

Escopo e exemplos de acionamento

A Skill é acionada automaticamente quando você expressa intenções como:

  • "Comprima esta imagem / as imagens desta pasta"
  • "Converta hero.png para WebP e deixe o menor possível"
  • "Estas imagens estão muito grandes — otimize-as em lote antes de empacotar e me diga quanto economizei"

Capacidades: compressão de arquivo único / lote de pasta / URL remota, conversão entre PNG·JPEG·WebP·GIF, seleção de predefinição de qualidade (smart / high / extreme), cálculo e relatório automáticos da porcentagem de economia, e nova tentativa automática com back-off no limite de taxa 429.

Extensão do VS Code

A extensão oficial MiniPic Image Compression permite comprimir imagens do workspace diretamente no seu editor, sem escrever curl à mão, com a tecnologia do motor próprio do MiniPic. Ela suporta PNG / JPEG / WebP / GIF / AVIF / TIFF e pode converter o formato durante a compressão (como para WebP / AVIF para economizar mais), e funciona no VS Code, no Cursor e em outros editores compatíveis.

Instalar

Escolha uma das opções a seguir:

Configure sua chave de API

Depois de criar uma chave (começando com mp_live_) no console, execute MiniPic: Set API Key na paleta de comandos (⇧⌘P) e cole-a. A chave é armazenada com segurança no SecretStorage do VS Code e nunca é gravada em configuração de texto puro nem sincronizada via settings.json.

Como usar

  • Comprimir pelo botão direito: selecione imagens ou pastas no Explorer (única, multisseleção ou diretório inteiro recursivamente) → clique com o botão direito em MiniPic: Compress Images para comprimir no lugar usando as configurações atuais de qualidade e formato.
  • Converter para WebP e atualizar referências: clique com o botão direito em MiniPic: Convert to WebP and Update References para converter para WebP enquanto atualiza automaticamente as referências a essa imagem em todo o workspace.
  • Compressão automática: quando ativada, monitora imagens novas/alteradas do workspace e as comprime automaticamente (desativada por padrão, pois consome cota); alterne pela barra de status ou com MiniPic: Toggle Auto-Compress.
  • Ver uso: execute MiniPic: View Usage para ver a contagem comprimida deste mês, o saldo gratuito e a estimativa de uso — idêntico ao console.

Configurações comuns

ConfiguraçãoPadrãoDescrição
minipic.qualitysmartPredefinição de qualidade: smart / high / extreme / lossless
minipic.formatkeepFormato de saída: keep / png / jpeg / webp / gif / avif / tiff
minipic.skipIfLargertruePula e não sobrescreve o original quando a compressão no mesmo formato o deixa maior
minipic.keepOriginalOnConverttrueMantém o arquivo original ao converter de formato
minipic.maxFileSizeMB80Pula arquivos maiores que este tamanho para evitar acionar 413
minipic.baseUrlhttps://api.minipic.aiEndereço do serviço de API; altere para o seu próprio gateway em implantações auto-hospedadas
A extensão é cobrada contra a mesma API de compressão de imagens — uma compressão bem-sucedida conta como 1 imagem e tem a mesma cota mensal gratuita; o uso é idêntico ao console. Código-fonte no GitHub.

Códigos de erro

O corpo do erro segue a convenção das APIs de compressão populares: {"error": "code", "message": "descrição legível por humanos"}; campos só são adicionados, nunca removidos.

HTTPerrorAcionamentoDescrição
400BadRequestEmpty body, invalid JSON, or out-of-range parametersSomething was off with this request, so the image was not compressed. Try again, and contact [email protected] if it keeps happening.
400InputMissingRequest body has no image contentThis file is empty, so there is nothing to compress. Check the file and upload it again.
401UnauthorizedMissing, invalid, or disabled keyThis API key is invalid or disabled. Double-check the key, or create a new one in the console.
403AccountSuspendedAccount banned or overdueThis account has been suspended. Contact [email protected] if you think this is a mistake.
404NotFoundWrong pathWe could not find what you requested. Check that the link is correct.
404OutputExpiredResult private link has expiredThis private result link has expired and can no longer be opened. Upload the image again to recompress it.
413PayloadTooLargeExceeds the plan's per-file size limitThis image is over the 5 MB per-file limit on the free plan. Upgrade to Pro to compress files up to 80 MB.
415UnsupportedMediaTypeInput is not a supported image formatThis format is not supported yet. We currently support PNG, JPEG, WebP, HEIC, GIF, BMP, TIFF and AVIF.
422DecodeErrorCorrupt file or spoofed extensionWe could not decode this image: the file may be corrupted or not a valid image. Check it and upload again.
422ImageTooComplexExceeds the 100-megapixel limitThis image is over the 100-megapixel processing limit. Resize it smaller and try again.
422ContentBlockedBlocked by content safety screening (not billed)This image did not pass our content safety check. It was blocked and permanently deleted, and was not counted against your usage. If you believe this is a mistake, contact [email protected].
429TooManyRequestsRate or concurrency limit exceeded (with Retry-After)Too many requests right now, so this image could not be queued. Wait a moment and try again.
429AccountLimitReachedFree quota used up and no payment on file (with upgrade_url)You have used up today's free quota. Sign in to remove the daily limit (1,000 images per month); Pro raises the per-file limit to 80 MB.
500InternalServerErrorService error (with request_id)Something went wrong on our side and this image was not compressed. Please try again shortly.
501NotImplementedCapability not yet available (such as resize thumb)This feature is not available yet. Watch the developer docs for updates.
503ServiceUnavailableOverloaded or under maintenance (with Retry-After)The service is busy and this image was not compressed. Please try again shortly.