REST API
Construye con FlingDrop
Sube archivos y genera enlaces para compartir desde cualquier aplicación. Autentícate con una sola API key, sube en una solicitud o por partes, y deja que FlingDrop se encargue de la expiración y la entrega.
Inicio rápido
- 1
Crea una cuenta gratis
Regístrate en app.flingdrop.com — toma 30 segundos.
- 2
Obtén tu API Key
Tu API Key se envía por email al registrarte. También puedes generar nuevas keys desde tu dashboard en Configuración > API Keys.
- 3
Sube tu primer archivo
Usa el comando cURL a continuación para subir un archivo y obtener un enlace para compartir.
curl -X POST https://app.flingdrop.com/api/upload \ -H "X-API-Key: YOUR_API_KEY" \ -F "file=@document.pdf"
URL base y autenticación
Todas las solicitudes API van a:
https://app.flingdrop.comAutentifica cada solicitud incluyendo tu API Key en el header X-API-Key:
X-API-Key: your_api_key_hereTu API Key se envía por email al registrarte. También puedes crear nuevas keys desde tu dashboard.
Formato de respuesta
Todos los endpoints devuelven JSON con una estructura consistente:
Respuesta exitosa
{
"success": true,
"data": { ... }
}Respuesta de error
{
"success": false,
"error": {
"code": "INVALID_API_KEY",
"message": "..."
}
}Subir un archivo
POST /api/upload
Sube un archivo único usando multipart form data. El servidor detecta automáticamente duplicados por hash del archivo — si el mismo archivo ya fue subido y no ha expirado, se retorna la URL existente sin almacenar una segunda copia.
Headers
| Header | Description | |
|---|---|---|
| X-API-Key | Requerido | Tu API Key |
| X-Content-Encoding | Opcional | Establecer a zstd si el archivo está comprimido con zstd |
| X-Original-Size | Opcional | Tamaño original en bytes (requerido cuando se usa zstd) |
| X-File-Hash | Opcional | Hash SHA-256 del archivo original (evita el recálculo en el servidor) |
Body
multipart/form-data con un campo llamado file.
Respuesta
{
"success": true,
"data": {
"url": "https://app.flingdrop.com/f/abc123xyz",
"shortCode": "abc123xyz",
"fileName": "document.pdf",
"fileSize": 2048576,
"expiresAt": "2026-04-01T00:00:00Z",
"isDuplicate": false
}
}Cuando isDuplicate es true, no se almacenó un archivo nuevo — se retorna el enlace de descarga existente.
Upload por partes (chunked)
Para archivos grandes, usa upload chunked para dividir la transferencia en múltiples solicitudes. Esto evita timeouts y permite tracking de progreso.
Paso 1 — Inicializar sesión
POST /api/upload/init
Envía los metadatos del archivo para iniciar una sesión. Si se detecta un duplicado por hash, se retorna la URL existente inmediatamente y no es necesario subir.
Body JSON
{
"fileName": "large-video.mp4",
"totalSize": 524288000,
"fileHash": "A1B2C3...",
"isCompressed": false,
"originalSize": 524288000
}Respuesta
{
"success": true,
"data": {
"sessionId": "550e8400-e29b-41d4-a716-446655440000",
"isDuplicate": false
}
}Paso 2 — Subir chunks
PATCH /api/upload/{sessionId}?index={n}
Envía los bytes crudos de cada chunk en el body de la solicitud (no multipart). Máximo 50 MB por chunk. El parámetro index empieza en cero.
Respuesta
{
"success": true,
"data": {
"bytesReceived": 10485760,
"chunksReceived": 1
}
}Paso 3 — Completar upload
POST /api/upload/{sessionId}/complete
Reensambla los chunks, almacena el archivo final y crea el registro en la base de datos. Retorna la misma estructura de respuesta que el endpoint de upload simple.
Cancelar upload
DELETE /api/upload/{sessionId}
Cancela una sesión en progreso y limpia los archivos temporales.
Verificar duplicado
GET /api/check/{hash}
Verifica si un archivo con el hash SHA-256 dado ya existe en tu tenant. Útil para evitar subir un archivo que ya está disponible.
Respuesta
{
"success": true,
"data": {
"exists": true,
"url": "https://app.flingdrop.com/f/abc123xyz",
"expiresAt": "2026-04-01T00:00:00Z"
}
}Cuando exists es false, url y expiresAt son null.
URLs de descarga
Cada archivo subido obtiene una URL corta con el formato:
https://app.flingdrop.com/f/{shortCode}Estas URLs son públicas — no se necesita autenticación para descargar. Cualquiera con el enlace puede descargar el archivo hasta que expire.
La expiración depende del plan del tenant: 7 días (Free), 30 días (Pro) o 90 días (Business). Después de la expiración, el archivo se elimina permanentemente.
Health check
GET /api/status
Verifica que la API está operativa. No requiere autenticación.
{
"success": true,
"data": {
"status": "OK",
"serverTime": "2026-03-23T12:00:00Z"
}
}Invitaciones de equipo
Solo plan BusinessLos tenants del plan Business pueden invitar miembros de equipo vía la API. Las invitaciones se envían por email y expiran después de 7 días.
Crear invitación
POST /api/invitation
Body JSON
{
"email": "colleague@company.com",
"role": "Member",
"tenantId": "550e8400-e29b-41d4-a716-446655440000"
}Respuesta
{
"success": true,
"token": "...",
"invitationUrl": "https://app.flingdrop.com/invitation/...",
"message": "Invitation created successfully"
}Roles válidos: Owner, Admin, Member, ReadOnly.
Obtener info de invitación
GET /api/invitation/{token}
Obtiene los detalles de una invitación pendiente. No requiere autenticación.
{
"success": true,
"tenantName": "Acme Corp",
"email": "colleague@company.com",
"role": "Member",
"expiresAt": "2026-03-30T00:00:00Z"
}Aceptar invitación
POST /api/invitation/{token}/accept
Body JSON
{
"password": "securepassword123",
"name": "Jane Doe"
}Si el email ya tiene una cuenta, solo se crea la membresía. Para usuarios nuevos, password (mín. 8 caracteres) es requerido.
Códigos de error
Todas las respuestas de error incluyen un campo code legible por máquina:
| Código | HTTP Status | Descripción |
|---|---|---|
| INVALID_API_KEY | 401 | API key faltante, inválida o inactiva |
| TENANT_INACTIVE | 401 | Cuenta del tenant desactivada |
| INVALID_FILE | 400 / 413 / 429 | Validación de archivo fallida (vacío, muy grande o límite alcanzado) |
| FILE_TOO_LARGE | 413 | El archivo excede el límite de tamaño del plan |
| STORAGE_LIMIT_EXCEEDED | 429 | Límite mensual de almacenamiento excedido |
| HASH_MISMATCH | 400 | Verificación de hash del archivo fallida |
| INTERNAL_ERROR | 500 | Error del servidor |
Límites de tasa
Los endpoints de upload tienen límites de tasa. Cuando excedes el límite, recibes una respuesta HTTP 429 Too Many Requests con un header Retry-After indicando cuántos segundos esperar.
Implementa backoff exponencial en tu cliente para manejar los límites de tasa de manera elegante.
Límites por plan
Cada plan tiene límites específicos que la API aplica automáticamente:
| Límite | Free | Pro ($7/mes) | Business ($29/mes) |
|---|---|---|---|
| Tamaño máx. archivo | 100 MB | 2 GB | 10 GB |
| Uploads por día | 5 | 100 | Ilimitado |
| Expiración del enlace | 7 days | 30 days | 90 days |
| Transferencia mensual | Sin límite | Sin límite | 500 GB |
| Miembros de equipo | 1 | 1 | 25 |
| Invitaciones por API | No | No | Sí |
Ejemplos de código
# Subir un archivo
curl -X POST https://app.flingdrop.com/api/upload \
-H "X-API-Key: YOUR_API_KEY" \
-F "file=@/path/to/document.pdf"# pip install requests
import requests
response = requests.post(
"https://app.flingdrop.com/api/upload",
headers={"X-API-Key": "YOUR_API_KEY"},
files={"file": open("document.pdf", "rb")},
)
data = response.json()
if data["success"]:
print(f"Download URL: {data['data']['url']}")
print(f"Expires at: {data['data']['expiresAt']}")
else:
print(f"Error: {data['error']['code']} — {data['error']['message']}")// Node.js (v18+) o navegador
const form = new FormData();
form.append("file", fileInput.files[0]); // browser
// form.append("file", fs.createReadStream("document.pdf")); // Node.js
const res = await fetch("https://app.flingdrop.com/api/upload", {
method: "POST",
headers: { "X-API-Key": "YOUR_API_KEY" },
body: form,
});
const { success, data, error } = await res.json();
if (success) {
console.log("Download URL:", data.url);
console.log("Expires at:", data.expiresAt);
} else {
console.error(error.code, error.message);
}#!/bin/bash
# Subir todos los archivos .log de /var/log/myapp/
API_KEY="YOUR_API_KEY"
DIR="/var/log/myapp/"
for file in "$DIR"*.log; do
[ -f "$file" ] || continue
echo "Uploading $file..."
response=$(curl -s -X POST https://app.flingdrop.com/api/upload \
-H "X-API-Key: $API_KEY" \
-F "file=@$file")
url=$(echo "$response" | grep -o '"url":"[^"]*"' | cut -d'"' -f4)
echo " → $url"
done¿Listo para compartir?
Únete a miles de usuarios que ya confían en FlingDrop para compartir sus archivos de forma rápida y segura.