REST API
Construa com FlingDrop
Envie arquivos e gere links compartilháveis de qualquer aplicação. Autentique-se com uma única API key, envie em uma requisição ou em partes, e deixe o FlingDrop cuidar da expiração e da entrega.
Início rápido
- 1
Crie uma conta grátis
Registre-se em app.flingdrop.com — leva 30 segundos.
- 2
Obtenha sua API Key
Sua API Key é enviada por email ao se registrar. Você também pode gerar novas keys no seu dashboard em Configurações > API Keys.
- 3
Envie seu primeiro arquivo
Use o comando cURL abaixo para enviar um arquivo e obter um link compartilhável.
curl -X POST https://app.flingdrop.com/api/upload \ -H "X-API-Key: YOUR_API_KEY" \ -F "file=@document.pdf"
URL base e autenticação
Todas as requisições API vão para:
https://app.flingdrop.comAutentique cada requisição incluindo sua API Key no header X-API-Key:
X-API-Key: your_api_key_hereSua API Key é enviada por email ao se registrar. Você também pode criar novas keys no seu dashboard.
Formato de resposta
Todos os endpoints retornam JSON com uma estrutura consistente:
Resposta de sucesso
{
"success": true,
"data": { ... }
}Resposta de erro
{
"success": false,
"error": {
"code": "INVALID_API_KEY",
"message": "..."
}
}Enviar um arquivo
POST /api/upload
Envie um arquivo único usando multipart form data. O servidor detecta automaticamente duplicatas pelo hash do arquivo — se o mesmo arquivo já foi enviado e não expirou, a URL existente é retornada sem armazenar uma segunda cópia.
Headers
| Header | Description | |
|---|---|---|
| X-API-Key | Obrigatório | Sua API Key |
| X-Content-Encoding | Opcional | Defina como zstd se o arquivo está comprimido com zstd |
| X-Original-Size | Opcional | Tamanho original em bytes (obrigatório quando usando zstd) |
| X-File-Hash | Opcional | Hash SHA-256 do arquivo original (evita recálculo no servidor) |
Body
multipart/form-data com um campo chamado file.
Resposta
{
"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
}
}Quando isDuplicate é true, nenhum arquivo novo foi armazenado — o link de download existente é retornado.
Upload por partes (chunked)
Para arquivos grandes, use upload chunked para dividir a transferência em múltiplas requisições. Isso evita timeouts e permite acompanhamento do progresso.
Passo 1 — Inicializar sessão
POST /api/upload/init
Envie os metadados do arquivo para iniciar uma sessão. Se uma duplicata for detectada pelo hash, a URL existente é retornada imediatamente e nenhum upload é necessário.
Body JSON
{
"fileName": "large-video.mp4",
"totalSize": 524288000,
"fileHash": "A1B2C3...",
"isCompressed": false,
"originalSize": 524288000
}Resposta
{
"success": true,
"data": {
"sessionId": "550e8400-e29b-41d4-a716-446655440000",
"isDuplicate": false
}
}Passo 2 — Enviar chunks
PATCH /api/upload/{sessionId}?index={n}
Envie os bytes brutos de cada chunk no body da requisição (não multipart). Máximo 50 MB por chunk. O parâmetro index começa em zero.
Resposta
{
"success": true,
"data": {
"bytesReceived": 10485760,
"chunksReceived": 1
}
}Passo 3 — Completar upload
POST /api/upload/{sessionId}/complete
Remonta os chunks, armazena o arquivo final e cria o registro no banco de dados. Retorna a mesma estrutura de resposta do endpoint de upload simples.
Cancelar upload
DELETE /api/upload/{sessionId}
Cancela uma sessão em andamento e limpa os arquivos temporários.
Verificar duplicata
GET /api/check/{hash}
Verifique se um arquivo com o hash SHA-256 dado já existe no seu tenant. Útil para evitar enviar um arquivo que já está disponível.
Resposta
{
"success": true,
"data": {
"exists": true,
"url": "https://app.flingdrop.com/f/abc123xyz",
"expiresAt": "2026-04-01T00:00:00Z"
}
}Quando exists é false, url e expiresAt são null.
URLs de download
Cada arquivo enviado recebe uma URL curta no formato:
https://app.flingdrop.com/f/{shortCode}Essas URLs são públicas — não é necessária autenticação para baixar. Qualquer pessoa com o link pode baixar o arquivo até ele expirar.
A expiração depende do plano do tenant: 7 dias (Free), 30 dias (Pro) ou 90 dias (Business). Após a expiração, o arquivo é excluído permanentemente.
Health check
GET /api/status
Verifique se a API está operacional. Não requer autenticação.
{
"success": true,
"data": {
"status": "OK",
"serverTime": "2026-03-23T12:00:00Z"
}
}Convites de equipe
Apenas plano BusinessTenants do plano Business podem convidar membros da equipe via API. Os convites são enviados por email e expiram após 7 dias.
Criar convite
POST /api/invitation
Body JSON
{
"email": "colleague@company.com",
"role": "Member",
"tenantId": "550e8400-e29b-41d4-a716-446655440000"
}Resposta
{
"success": true,
"token": "...",
"invitationUrl": "https://app.flingdrop.com/invitation/...",
"message": "Invitation created successfully"
}Roles válidos: Owner, Admin, Member, ReadOnly.
Obter info do convite
GET /api/invitation/{token}
Obtém os detalhes de um convite pendente. Não requer autenticação.
{
"success": true,
"tenantName": "Acme Corp",
"email": "colleague@company.com",
"role": "Member",
"expiresAt": "2026-03-30T00:00:00Z"
}Aceitar convite
POST /api/invitation/{token}/accept
Body JSON
{
"password": "securepassword123",
"name": "Jane Doe"
}Se o email já tem uma conta, apenas a associação é criada. Para novos usuários, password (mín. 8 caracteres) é obrigatório.
Códigos de erro
Todas as respostas de erro incluem um campo code legível por máquina:
| Código | HTTP Status | Descrição |
|---|---|---|
| INVALID_API_KEY | 401 | API key ausente, inválida ou inativa |
| TENANT_INACTIVE | 401 | Conta do tenant desativada |
| INVALID_FILE | 400 / 413 / 429 | Validação do arquivo falhou (vazio, muito grande ou limite atingido) |
| FILE_TOO_LARGE | 413 | Arquivo excede o limite de tamanho do plano |
| STORAGE_LIMIT_EXCEEDED | 429 | Limite mensal de armazenamento excedido |
| HASH_MISMATCH | 400 | Verificação do hash do arquivo falhou |
| INTERNAL_ERROR | 500 | Erro do servidor |
Limites de taxa
Os endpoints de upload têm limites de taxa. Quando você excede o limite, recebe uma resposta HTTP 429 Too Many Requests com um header Retry-After indicando quantos segundos esperar.
Implemente backoff exponencial no seu cliente para lidar com limites de taxa de forma elegante.
Limites por plano
Cada plano tem limites específicos que a API aplica automaticamente:
| Limite | Free | Pro ($7/mês) | Business ($29/mês) |
|---|---|---|---|
| Tamanho máx. arquivo | 100 MB | 2 GB | 10 GB |
| Uploads por dia | 5 | 100 | Ilimitado |
| Expiração do link | 7 days | 30 days | 90 days |
| Transferência mensal | Sem limite | Sem limite | 500 GB |
| Membros da equipe | 1 | 1 | 25 |
| Convites por API | Não | Não | Sim |
Exemplos de código
# Enviar um arquivo
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+) ou 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
# Enviar todos os arquivos .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"
donePronto para compartilhar?
Junte-se a milhares de usuários que já confiam no FlingDrop para compartilhar seus arquivos de forma rápida e segura.