Documentación para desarrolladores

MiniPic ofrece dos capas de API: una capa de compatibilidad (con autenticación y estructura de respuesta compatibles con las API de compresión populares: integra solo cambiando el endpoint y la clave) y una capa nativa (/v1/*, compresión síncrona y consultas de uso). Pagas solo por las compresiones correctas, las primeras 500 de cada mes son gratis, cada respuesta lleva cabeceras de uso y tu factura es conciliable línea por línea.

Compromiso de estabilidad: los cambios incompatibles en /shrink y /v1 se anuncian con 90 días de antelación.

Guía rápida

Comprime tu primera imagen en 30 segundos: crea una clave de API en la consola y luego envía una solicitud.

# Comprimir un PNG (autenticación Basic, usuario fijo api) curl -s --user api:TU_CLAVE_DE_API \ --data-binary @input.png \ -o output.png \ https://api.minipic.ai/v1/compress

El resultado se devuelve mediante un enlace privado cifrado al que solo tú, el titular de la clave, puedes acceder: las imágenes se usan únicamente para esta compresión, cifradas todo el tiempo, nunca filtradas y nunca usadas para entrenamiento ni ningún otro fin.

Autenticación

  • HTTP Basic (compatible con las API de compresión populares): usuario fijo a api, la contraseña es tu clave de API — Authorization: Basic base64("api:KEY")
  • Bearer (recomendado para la capa nativa): Authorization: Bearer KEY

Los prefijos de las claves son mp_live_ (producción) y mp_test_ (sandbox); el servidor almacena solo un hash de la clave, y la clave completa se muestra solo una vez en la creación. Cada cuenta puede tener hasta 5 claves. Los fallos de autenticación siempre devuelven 401 sin distinguir la causa (para evitar la enumeración).

POST /shrink Comprimir una imagen

El cuerpo de la solicitud es una de dos opciones: una imagen binaria en bruto (PNG / JPEG / WebP / HEIC / GIF / BMP / TIFF / AVIF), o JSON especificando una URL de origen (solo direcciones http/https públicas, tiempo de espera de descarga de 10 segundos). Cuando no se especifica un formato de salida, se mantiene el formato original: PNG / JPEG / WebP / GIF / TIFF / AVIF se generan en su formato original (AVIF→AVIF, TIFF→TIFF); HEIC se convierte a JPEG; BMP, que no se puede comprimir en su propio formato, se convierte a PNG. GIF se optimiza sin pérdidas por defecto (sigue siendo GIF), y también se puede convertir a WebP para ahorrar más.

# Opción 1: subir el binario directamente curl -s --user api:TU_CLAVE_DE_API \ --data-binary @input.png \ https://api.minipic.ai/shrink
# Opción 2: dejar que el servidor descargue una URL curl -s --user api:TU_CLAVE_DE_API \ -H "Content-Type: application/json" \ -d '{"source": {"url": "https://example.com/input.png"}}' \ https://api.minipic.ai/shrink

Si tiene éxito, devuelve 201 Created, con cabeceras de respuesta que incluyen Location (la dirección del resultado) y Compression-Count (imágenes facturadas este mes):

{ "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} Descargar el resultado

Requiere autenticación; devuelve el binario del resultado comprimido. Los resultados se sirven mediante un enlace privado cifrado; una vez que el enlace caduca, devuelve 404 OutputExpired, y puedes volver a comprimir para obtenerlo de nuevo. Volver a descargar el mismo resultado no se factura.

POST /output/{id} Operaciones derivadas

Ejecuta resize / convert / preserve sobre un resultado comprimido; cada salida derivada cuenta como 1 imagen:

# Escalar proporcionalmente a 800px de ancho y convertir a WebP curl -s --user api:TU_CLAVE_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 un lado) / fit (encajar por completo) / cover (recortar para rellenar, actualmente recorte centrado)
  • convert.type: convertir entre image/webp, image/png e image/jpeg
  • preserve: conservar los metadatos copyright / creation / location
Limitaciones actuales (léelas antes de integrar): las miniaturas inteligentes thumb aún no están disponibles (devuelve 501 NotImplemented); cover es un recorte centrado (la detección inteligente del sujeto está planificada); no se admite la salida AVIF; no se admite la subida directa store a S3/GCS (la subida directa al almacenamiento de objetos está planificada).

POST /v1/compress Compresión síncrona (capa nativa)

Una sola solicitud devuelve directamente el binario del resultado comprimido, ahorrando un viaje de ida y vuelta: práctico para CI:

# El preajuste de calidad y el formato de salida se establecen mediante parámetros de consulta curl -s -H "Authorization: Bearer TU_CLAVE_DE_API" \ --data-binary @input.jpg \ -o output.jpg \ "https://api.minipic.ai/v1/compress?quality=smart&format=keep"
  • quality: smart (por defecto) / high / extreme / 1-100
  • format: keep (mantener el formato original) / webp
  • Cabeceras de respuesta: X-Input-Size / X-Output-Size / X-Ratio / Compression-Count

GET /v1/usage Consulta de uso

Devuelve el recuento de este mes, la cuota gratuita restante y el saldo restante de paquetes de crédito: idéntico a la consola:

{ "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 } }

Cuotas y límites de tasa

  • Tasa: 10 sol/s por clave, ráfaga 20 (token bucket); superarlo devuelve 429 + Retry-After
  • Concurrencia: tareas en curso por clave <= 20
  • Cuota mensual gratuita: 500 imágenes/mes/cuenta; una vez agotada y sin pago registrado, devuelve 429 AccountLimitReached
  • Por archivo: 5 MB gratis; 80 MB de pago; personalizable para empresas
  • Píxeles: <= 100 megapíxeles; superarlo devuelve 422 ImageTooComplex

Cabeceras de respuesta en todos los endpoints medidos: Compression-Count, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.

Facturación

  • POST /shrink con éxito (201): cuenta como 1 imagen
  • POST /v1/compress con éxito (200): cuenta como 1 imagen
  • GET /output/{id} nueva descarga: no se factura
  • POST /output/{id} operación derivada con éxito: cuenta como 1 imagen cada vez
  • 4xx / 5xx, bloqueos del filtrado de contenido y fallos de descarga de URL: no se facturan; en un reintento con éxito solo cuenta la llamada correcta

Orden de descuento: cuota mensual del plan → paquetes de crédito (el comprado primero se usa primero, nunca caducan). De prepago, sin factura mensual por uso: una vez agotada la cuota se pausa, y comprar un paquete de crédito la restaura.

Integración con IA / Skill

MiniPic ofrece una Agent Skill oficial (minipic-compress): una vez instalada, dile a cualquier agente de IA que admita el estándar abierto Anthropic Agent Skills (Claude Code / Cursor / Codex CLI / Copilot CLI, etc.) algo como "comprime las imágenes de esta carpeta" y llamará automáticamente a la API de MiniPic para comprimir, convertir a WebP, procesar por lotes e informar de la tasa de compresión, sin necesidad de escribir curl ni lógica de reintentos a mano.

Instalación

Elige una de las siguientes (tres opciones):

# Opción 1: mediante skills.sh (npx, recomendado) npx skills add minipic/minipic-skill
# Opción 2: mediante gh skill gh skill install minipic/minipic-skill
# Opción 3: colócala manualmente en el directorio de skills (nivel de usuario / proyecto de Claude Code) cp -r minipic-compress ~/.claude/skills/ # O a nivel de proyecto: cp -r minipic-compress <tu-proyecto>/.claude/skills/

Para otros agentes que admitan el estándar Agent Skills (Cursor / Codex CLI / Copilot CLI, etc.), sigue su documentación para colocar el directorio minipic-compress/ en la ruta de skills correspondiente.

Configura tu clave de API

La clave se lee solo desde una variable de entorno y nunca se escribe en duro ni se muestra por pantalla. Tras crear una clave en la consola, configúrala en tu entorno:

# Obligatorio: tu clave de API (500 imágenes gratis/mes/cuenta) export MINIPIC_API_KEY=mp_live_tu_clave # Opcional: anula la URL base de la API (por defecto https://api.minipic.ai) # export MINIPIC_API_BASE=https://api.minipic.ai

Alcance y ejemplos de activación

La Skill se activa automáticamente cuando expresas intenciones como:

  • "Comprime esta imagen / las imágenes de esta carpeta"
  • "Convierte hero.png a WebP y déjalo lo más pequeño posible"
  • "Estas imágenes son demasiado grandes: optimízalas por lotes antes de empaquetar y dime cuánto ahorré"

Capacidades: compresión de un solo archivo / lote de carpeta / URL remota, conversión entre PNG·JPEG·WebP·GIF, selección de preajuste de calidad (smart / high / extreme), cálculo e informe automáticos del porcentaje de ahorro, y reintento automático con retroceso ante la limitación de tasa 429.

Extensión de VS Code

La extensión oficial MiniPic Image Compression te permite comprimir las imágenes del espacio de trabajo directamente en tu editor, sin escribir curl a mano, con la potencia del motor propio de MiniPic. Admite PNG / JPEG / WebP / GIF / AVIF / TIFF y puede convertir de formato mientras comprime (por ejemplo, a WebP / AVIF para ahorrar más), y funciona en VS Code, Cursor y otros editores compatibles.

Instalación

Elige una de las siguientes:

Configura tu clave de API

Tras crear una clave (que empieza por mp_live_) en la consola, ejecuta MiniPic: Set API Key desde la paleta de comandos (⇧⌘P) y pégala. La clave se almacena de forma segura en VS Code SecretStorage y nunca se escribe en configuración en texto plano ni se sincroniza mediante settings.json.

Cómo usarla

  • Comprimir con clic derecho: selecciona imágenes o carpetas en el Explorador (individuales, multiselección o todo el directorio de forma recursiva) → clic derecho en MiniPic: Compress Images para comprimir en el sitio usando los ajustes actuales de calidad y formato.
  • Convertir a WebP y actualizar las referencias: clic derecho en MiniPic: Convert to WebP and Update References para convertir a WebP mientras se actualizan automáticamente las referencias a esa imagen en todo tu espacio de trabajo.
  • Compresión automática: cuando está activada, vigila las imágenes nuevas/modificadas del espacio de trabajo y las comprime automáticamente (desactivada por defecto, ya que consume cuota); actívala desde la barra de estado o con MiniPic: Toggle Auto-Compress.
  • Ver el uso: ejecuta MiniPic: View Usage para ver el recuento comprimido de este mes, el saldo gratuito y la estimación de uso: idéntico a la consola.

Ajustes habituales

AjustePor defectoDescripción
minipic.qualitysmartPreajuste de calidad: smart / high / extreme / lossless
minipic.formatkeepFormato de salida: keep / png / jpeg / webp / gif / avif / tiff
minipic.skipIfLargertrueOmitir y no sobrescribir el original cuando la compresión en el mismo formato lo hace más grande
minipic.keepOriginalOnConverttrueConservar el archivo original al convertir de formato
minipic.maxFileSizeMB80Omitir archivos mayores que este tamaño para evitar provocar un 413
minipic.baseUrlhttps://api.minipic.aiDirección del servicio de la API; cámbiala a tu propia pasarela para despliegues autoalojados
La extensión se factura contra la misma API de compresión de imágenes: una compresión correcta cuenta como 1 imagen y disfruta de la misma cuota mensual gratuita; el uso es idéntico al de la consola. Código fuente en GitHub.

Códigos de error

El cuerpo del error sigue la convención de las API de compresión populares: {"error": "código", "message": "descripción legible"}; los campos solo se añaden, nunca se eliminan.

HTTPerrorDesencadenanteDescripción
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.