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.
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.
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):
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:
resize.method:scale(proporcional por um lado) /fit(cabe inteiro) /cover(recorta para preencher, atualmente recorte central)convert.type: converte entreimage/webp,image/pngeimage/jpegpreserve: mantém os metadados decopyright/creation/location
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:
quality:smart(padrão) /high/extreme/1-100format: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:
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 /shrinkcom sucesso (201): conta como 1 imagemPOST /v1/compresscom sucesso (200): conta como 1 imagemGET /output/{id}baixar novamente: não é cobradoPOST /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):
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:
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:
- No painel de Extensões do VS Code (
⇧⌘X), pesquise MiniPic e clique em Instalar; - ou execute
ext install minipic.minipic-vscodena paleta de comandos; - ou acesse a página da extensão no Visual Studio Marketplace e clique em Instalar.
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ção | Padrão | Descrição |
|---|---|---|
minipic.quality | smart | Predefinição de qualidade: smart / high / extreme / lossless |
minipic.format | keep | Formato de saída: keep / png / jpeg / webp / gif / avif / tiff |
minipic.skipIfLarger | true | Pula e não sobrescreve o original quando a compressão no mesmo formato o deixa maior |
minipic.keepOriginalOnConvert | true | Mantém o arquivo original ao converter de formato |
minipic.maxFileSizeMB | 80 | Pula arquivos maiores que este tamanho para evitar acionar 413 |
minipic.baseUrl | https://api.minipic.ai | Endereço do serviço de API; altere para o seu próprio gateway em implantações auto-hospedadas |
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.
| HTTP | error | Acionamento | Descrição |
|---|---|---|---|
| 400 | BadRequest | Empty body, invalid JSON, or out-of-range parameters | Something was off with this request, so the image was not compressed. Try again, and contact [email protected] if it keeps happening. |
| 400 | InputMissing | Request body has no image content | This file is empty, so there is nothing to compress. Check the file and upload it again. |
| 401 | Unauthorized | Missing, invalid, or disabled key | This API key is invalid or disabled. Double-check the key, or create a new one in the console. |
| 403 | AccountSuspended | Account banned or overdue | This account has been suspended. Contact [email protected] if you think this is a mistake. |
| 404 | NotFound | Wrong path | We could not find what you requested. Check that the link is correct. |
| 404 | OutputExpired | Result private link has expired | This private result link has expired and can no longer be opened. Upload the image again to recompress it. |
| 413 | PayloadTooLarge | Exceeds the plan's per-file size limit | This image is over the 5 MB per-file limit on the free plan. Upgrade to Pro to compress files up to 80 MB. |
| 415 | UnsupportedMediaType | Input is not a supported image format | This format is not supported yet. We currently support PNG, JPEG, WebP, HEIC, GIF, BMP, TIFF and AVIF. |
| 422 | DecodeError | Corrupt file or spoofed extension | We could not decode this image: the file may be corrupted or not a valid image. Check it and upload again. |
| 422 | ImageTooComplex | Exceeds the 100-megapixel limit | This image is over the 100-megapixel processing limit. Resize it smaller and try again. |
| 422 | ContentBlocked | Blocked 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]. |
| 429 | TooManyRequests | Rate 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. |
| 429 | AccountLimitReached | Free 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. |
| 500 | InternalServerError | Service error (with request_id) | Something went wrong on our side and this image was not compressed. Please try again shortly. |
| 501 | NotImplemented | Capability not yet available (such as resize thumb) | This feature is not available yet. Watch the developer docs for updates. |
| 503 | ServiceUnavailable | Overloaded or under maintenance (with Retry-After) | The service is busy and this image was not compressed. Please try again shortly. |