Introducción
Tres formas de entrar, un mismo motor. Elegí la que mejor se adapte a tu flujo:
- MCP: pedile a Claude, Cursor o VS Code que descargue por vos, en lenguaje natural.
- CLI:
npx kliplot dl <links>guarda los archivos directo en disco. Ideal para scripts y cron. - API REST: creá lotes y consultá resultados desde cualquier lenguaje.
- Mismos lotes, mismos límites y mismo historial que la web. Los lotes corren en nuestros servidores: si tu cliente se desconecta, no se pierde nada.
API keys
El acceso a la API está incluido en los planes Pro y Empresa.
- Iniciá sesión y entrá a Cuenta → API y agentes de IA.
- Ponele un nombre a la key (ej. “Claude”, “CLI de la notebook”) y tocá Crear key.
- Copiala en el momento: por seguridad solo guardamos un hash, así que no se puede volver a mostrar.
Tratá las keys como contraseñas. Podés revocar una key cuando quieras desde la misma pantalla; deja de funcionar al instante.
MCP para agentes de IA
Kliplot tiene un servidor MCP remoto (Streamable HTTP) en /api/mcp. Conectalo una vez y pedile a tu agente cosas como “bajame estos 5 reels”.
claude.ai y Claude Desktop: sin key
- Abrí Configuración → Conectores → Agregar conector personalizado.
- Ponele Kliplot de nombre y pegá la URL: https://www.kliplot.com/api/mcp
- Tocá Conectar, iniciá sesión en Kliplot y tocá Permitir acceso. Listo.
Al conectar se crea una API key con el nombre de la app (ej. “Claude (MCP)”), que podés revocar cuando quieras en Cuenta → API y agentes de IA.
Con una API key
Claude Code: un solo comando.
claude mcp add --transport http kliplot https://www.kliplot.com/api/mcp \
--header "Authorization: Bearer dk_live_YOUR_KEY"Claude Desktop con archivo de config (alternativa): claude_desktop_config.json (Configuración → Desarrollador → Editar config).
{
"mcpServers": {
"kliplot": {
"command": "npx",
"args": [
"-y", "mcp-remote", "https://www.kliplot.com/api/mcp",
"--header", "Authorization:${KLIPLOT_AUTH}"
],
"env": { "KLIPLOT_AUTH": "Bearer dk_live_YOUR_KEY" }
}
}
}mcp-remote conecta el transporte stdio de Claude Desktop con nuestro servidor HTTP. Requiere Node.js 18+.
Cursor: ~/.cursor/mcp.json (o .cursor/mcp.json en tu proyecto).
{
"mcpServers": {
"kliplot": {
"url": "https://www.kliplot.com/api/mcp",
"headers": { "Authorization": "Bearer dk_live_YOUR_KEY" }
}
}
}VS Code (GitHub Copilot): .vscode/mcp.json. VS Code te pide la key de forma segura.
{
"servers": {
"kliplot": {
"type": "http",
"url": "https://www.kliplot.com/api/mcp",
"headers": { "Authorization": "Bearer ${input:kliplot-key}" }
}
},
"inputs": [
{ "type": "promptString", "id": "kliplot-key", "description": "Kliplot API key", "password": true }
]
}Tools
| download_media | Extrae uno o más links y espera (hasta 120 s) los links de descarga. Ideal para pocos links. |
| create_batch | Encola hasta 100 links sin esperar. Devuelve un batch_id. |
| get_batch | Progreso, estado por link y links de descarga actualizados de un lote. |
| list_batches | Tus lotes más recientes. |
| get_usage | Tu plan, descargas disponibles y espera. |
Probá pedirle
- “Descargá estos reels y pasame los links: <pegá los links>”
- “¿Cuántas descargas me quedan en Kliplot?”
- “Encolá estos 40 TikToks como lote y avisame cuando termine.”
CLI
CLI sin dependencias para Node.js 18+. Usa la API REST con tu key.
Guardá tu key una sola vez (queda en ~/.kliplot.json, legible solo por vos):
npx kliplot login dk_live_YOUR_KEYUso:
# Extract + download into ./media
npx kliplot dl https://www.instagram.com/reel/XXXX/ https://x.com/user/status/123 -o ./media
# One link per line ("-" reads stdin)
npx kliplot dl -f links.txt
# Only print links as JSON (scripts, pipelines)
npx kliplot dl https://www.tiktok.com/@user/video/1 --no-download --json
npx kliplot status <batch-id>
npx kliplot batches
npx kliplot usageCódigos de salida: 0 = ok (incluye lotes parciales), 1 = error de uso o de API, 2 = fallaron todos los links.
Variables de entorno: KLIPLOT_API_KEY (key) y KLIPLOT_URL (URL base).
API REST
Autenticá con Authorization: Bearer <key>. Creá un lote y consultalo cada 1–2 segundos hasta que su estado sea done, partial o failed.
1. Crear un lote (responde 202 al instante):
curl -X POST https://www.kliplot.com/api/v1/batches \
-H "Authorization: Bearer $KLIPLOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"urls":["https://www.instagram.com/reel/XXXX/","https://x.com/user/status/123"]}'2. Consultar progreso y links de descarga:
curl https://www.kliplot.com/api/v1/batches/<batch-id> \
-H "Authorization: Bearer $KLIPLOT_API_KEY"{
"batch": {
"id": "7717dd86-97c9-40bc-88a9-d37287d9e061",
"status": "done", // queued | running | done | partial | failed
"total": 2, "done": 2, "failed": 0,
"items": [
{
"url": "https://x.com/user/status/123",
"status": "done", // queued | processing | done | failed
"error": null,
"files": [
{
"type": "video",
"filename": "123.mp4",
"download_url": "https://www.kliplot.com/api/dl/…" // valid 24 hours
}
]
}
]
}
}Los links de descarga duran 24 horas: después, volvé a pedir el lote para obtener links nuevos.
Consultar tu plan y descargas disponibles:
curl https://www.kliplot.com/api/v1/usage -H "Authorization: Bearer $KLIPLOT_API_KEY"Ejemplos completos
const res = await fetch("https://www.kliplot.com/api/v1/batches", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.KLIPLOT_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ urls: ["https://www.tiktok.com/@user/video/1"] }),
})
let { batch } = await res.json()
while (batch.status === "queued" || batch.status === "running") {
await new Promise((r) => setTimeout(r, 1500))
batch = (await (await fetch(`https://www.kliplot.com/api/v1/batches/${batch.id}`, {
headers: { Authorization: `Bearer ${process.env.KLIPLOT_API_KEY}` },
})).json()).batch
}
for (const item of batch.items) {
for (const file of item.files) console.log(file.filename, file.download_url)
}import os, time, requests
API = "https://www.kliplot.com/api/v1"
H = {"Authorization": f"Bearer {os.environ['KLIPLOT_API_KEY']}"}
batch = requests.post(f"{API}/batches", headers=H,
json={"urls": ["https://www.pinterest.com/pin/123/"]}).json()["batch"]
while batch["status"] in ("queued", "running"):
time.sleep(1.5)
batch = requests.get(f"{API}/batches/{batch['id']}", headers=H).json()["batch"]
for item in batch["items"]:
for f in item["files"]:
print(f["filename"], f["download_url"])Límites y cobro
Cada link consume una descarga de tu ventana actual. Los límites son los mismos en todos los canales.
| Plan | Links por ventana | Lotes en simultáneo | API / CLI / MCP |
|---|---|---|---|
| Gratis | 5 | 1 | — |
| Básico | 20 | 2 | — |
| Pro | 50 | 3 | ✓ |
| Empresa | 100 | 5 | ✓ |
- La cuota del lote completo se reserva al crearlo (todo o nada).
- Los links que fallan (privados, borrados, no soportados) se reembolsan automáticamente.
- Todos los planes usan una ventana de 60 minutos que arranca con su primer link.
- Rate limits: 20 creaciones de lote y 240 consultas de estado por minuto; 60 llamadas a tools MCP por minuto.
Errores
Los errores usan un solo formato: { "error": { "code", "message" } }. Decidí según code, que es estable.
| 401 | invalid_api_key | Key faltante, mal formada o revocada. |
| 403 | plan_without_api_access | Tu plan no incluye acceso a la API. |
| 400 | invalid_urls | Links no soportados o mal formados (listados en invalid). |
| 429 | limit_exceeded | Ventana agotada: esperá a que termine la espera. |
| 429 | over_batch_limit | El lote es más grande que lo que te queda en la ventana. |
| 429 | too_many_active_batches | Demasiados lotes corriendo: esperá a que termine uno. |
| 429 | rate_limited | Demasiadas solicitudes: bajá el ritmo. |
| 404 | not_found | El lote no existe o no es tuyo. |
Preguntas
- ¿Qué plataformas están soportadas?
- Posts, reels, videos y carruseles públicos de Instagram, TikTok, Pinterest y Twitter/X.
- ¿Los links fallidos cuentan para mi plan?
- No. Si un link no se puede extraer (privado, borrado, no soportado), la descarga se reembolsa automáticamente.
- ¿Hay un sandbox?
- Usá tu key normal: cada ventana nueva te da cupo de nuevo y los fallos se reembolsan.
- ¿Puedo usarlo con contenido que no es mío?
- Solo si tenés derecho a descargarlo. Mirá nuestros Términos: bloqueamos las URLs denunciadas por DMCA.