Descomprimir un ZIP
Envíe un archivo comprimido y reciba de vuelta un listado estructurado de todo lo que contiene, o los archivos ya extraídos, sin descomprimir nada en sus propios servidores. Está pensado para flujos que reciben comprimidos de usuarios, socios o buckets de almacenamiento y necesitan saber qué hay adentro antes de decidir qué hacer con ello.
Ejecutar — gratis
Corre en su navegador. Gratis y sin límite: sus datos no salen de esta página.
Por qué un comprimido es una caja negra riesgosa
Un archivo ZIP es una incógnita hasta que se abre, y abrir comprimidos no confiables directamente en producción es la manera más común de terminar con una zip bomb o un ataque de path traversal ('zip slip') documentado en un reporte de incidente. Los equipos que aceptan subidas de usuarios — bibliotecas de medios de un CMS, mercados de plugins, herramientas de importación masiva — necesitan inspeccionar y extraer el contenido en un entorno aislado, para que un archivo malformado o malicioso nunca toque la máquina que corre la aplicación.
Qué hace exactamente el endpoint
POST /data/unzip acepta un comprimido por subida directa o por URL, junto con una operación: list para devolver nombres de archivo, tamaños, ratio de compresión y fechas sin extraer nada, o extract para descomprimir rutas específicas (o todo) y devolver los resultados como archivos individuales detrás de enlaces firmados, o empaquetados en un comprimido nuevo. La llamada devuelve un task_id de inmediato; el trabajo real ocurre de forma asíncrona.
Una breve historia de un formato muy antiguo
El formato ZIP nació en 1989 con PKZIP de PKWARE, diseñado para comprimir archivos en la era de los disquetes. Se volvió un estándar de facto porque su especificación es abierta y cualquier herramienta puede implementarla, razón por la cual hoy aparece en todas partes: documentos de Office (que internamente son ZIPs), paquetes APK de Android, archivos JAR de Java y mods de videojuegos. Nuestro endpoint procesa las mismas entradas basadas en DEFLATE de las que dependen todos esos formatos.
Qué esperar de la respuesta
Listar un comprimido de 500 entradas y extraer tres archivos puntuales suele terminar en bien menos de un segundo de procesamiento real una vez que arranca la tarea; el tiempo de entrega depende de si está sondeando el estado, esperando un webhook o descargando el enlace firmado, que permanece válido durante 24 horas. La estructura de carpetas, los metadatos de permisos y las fechas originales se conservan en la respuesta para que el código que sigue pueda reconstruir la organización exacta del comprimido.
Dónde encaja dentro de un flujo más amplio
Este es un paso, no una tubería completa: combínelo con nuestros endpoints de conversión y procesamiento de archivos para, por ejemplo, descomprimir un paquete de tema, validar el tipo de cada archivo y enviar las imágenes a una tarea de redimensionado y las hojas de estilo a un minificador, todo encadenado desde el mismo webhook. Como las tareas fallidas nunca se cobran, puede conectar esto directamente al manejador de subidas de su aplicación sin preocuparse por pagar por los comprimidos corruptos o vacíos que inevitablemente envían los usuarios.
Qué puede hacer con ella
Mercados de plugins y temas
Revise el listado de archivos de un ZIP de plugin subido antes de extraerlo, para rechazar cualquiera que traiga ejecutables o rutas sospechosas fuera de la carpeta esperada.
Importaciones masivas de medios
Extraiga cientos de imágenes de producto desde un solo comprimido enviado por un proveedor y envíe cada una directamente a una tarea de redimensionado o marca de agua.
Herramientas de respaldo y migración
Descomprima en el servidor un comprimido de exportación de un sitio o base de datos para que un script de migración lea archivos individuales sin escribir nunca el ZIP crudo en disco.
Conjuntos de datos enviados por usuarios
Liste el contenido de un ZIP recibido a través de un formulario público para confirmar que solo trae los archivos CSV o JSON esperados antes de seguir procesándolo.
Preguntas frecuentes
¿Cómo extraigo un archivo ZIP usando la API?
Envíe una solicitud POST a /data/unzip con el comprimido como subida o como URL y defina la operación como extract; recibirá un task_id y los archivos extraídos llegan por webhook o enlace firmado.
¿Puedo solo listar el contenido sin extraer nada?
Sí, defina la operación como list para obtener nombres, tamaños y fechas sin descomprimir nada, algo útil para validar un comprimido antes de extraerlo por completo.
¿Existe un plan gratuito para la API de descomprimir ZIP?
La herramienta de arriba es gratis en su navegador. La API es de pago: cada llamada se descuenta de su saldo prepago de ForHosting KIT — se recarga desde $10.00 (no caduca), se paga el precio publicado de cada solicitud, y una llamada sin saldo devuelve HTTP 402. Sin suscripción, sin tokens, y una tarea fallida no se cobra.
¿Qué pasa si el ZIP está corrupto o protegido con contraseña?
La tarea falla de forma controlada con un error descriptivo tras un número limitado de reintentos, y una tarea fallida nunca se cobra.
¿Cuánto cuesta el endpoint de descomprimir?
Cuesta $0.002 por solicitud sin importar cuántos archivos contenga el comprimido, así que listar o extraer un ZIP de 2 o de 2,000 archivos cuesta lo mismo.
¿Soporta ZIPs anidados, es decir, un comprimido dentro de otro?
El endpoint extrae el comprimido de primer nivel; si una entrada es a su vez un ZIP, puede volver a pasarla por el mismo endpoint en una segunda llamada.
¿Por cuánto tiempo están disponibles los archivos extraídos?
Los enlaces firmados de resultado son válidos por 24 horas, y recomendamos usar un webhook para todo lo que necesite procesar de inmediato o guardar de forma permanente.
¿Se conserva el comprimido que subí después de procesarlo?
No, tanto el comprimido como su contenido extraído se eliminan al vencer la ventana de retención y nunca se usan para entrenar modelos.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, y pronto desde nuestra app, el email y Telegram.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/data/unzip \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"input":"…"}'const res = await fetch("https://api.kit.forhosting.com/data/unzip", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"input": "…"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/data/unzip",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"input": "…"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/data/unzip", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"input":"…"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"input":"…"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/data/unzip", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"input": "…"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "data.unzip",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_mb | 25 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |