Documentação da API
Envie arquivos de qualquer projeto — bots de Discord, Telegram, WhatsApp, scripts e aplicações — usando uma chave própria.
Como funciona
Cada arquivo enviado é gravado no disco do próprio servidor e recebe um link público único no formato
/f/{id}. Por padrão o link é permanente (sem expiração), mas dá pra pedir um link
temporário de 5 ou 10 minutos já na hora do upload — veja expireMinutes abaixo, ou use
/api/temp-link depois para um arquivo já hospedado. A API é protegida por uma chave
secreta gerada no painel do site.
POST /api/upload
Envia um arquivo. Autenticação pela chave no cabeçalho Authorization.
O arquivo deve ser enviado no campo file, como multipart/form-data.
Opcionalmente, envie também o campo expireMinutes com 5 ou 10
para já hospedar o arquivo com um link temporário — sem precisar de uma segunda chamada em
/api/temp-link. Se omitido, o link é permanente (comportamento padrão, igual antes).
curl -X POST https://seudominio.com/api/upload \
-H "Authorization: Bearer aalt_SUA_CHAVE" \
-F "file=@foto.png" \
-F "expireMinutes=5"
Resposta 201 (criado com sucesso):
{
"file": {
"id": "f7a1c30e-...",
"name": "foto.png",
"contentType": "image/png",
"sizeBytes": 420000,
"publicUrl": "https://seudominio.com/f/f7a1c30e-..."
},
"tempLink": {
"token": "t_9c2e...",
"minutes": 5,
"expiresAt": 1735689900000,
"url": "https://seudominio.com/t/t_9c2e..."
}
}
tempLink só aparece quando expireMinutes foi enviado. Nesse caso, o arquivo
é apagado do servidor sozinho quando o tempo acaba — inclusive derrubando o publicUrl
permanente listado acima, já que é o mesmo arquivo.
Se a chave estiver ausente ou errada, a resposta será 401.
Arquivos acima de 500 MB são rejeitados com 400.
POST /api/temp-link
Gera um link temporário (5 ou 10 minutos) para um arquivo já hospedado, a partir do id
retornado no upload. Autenticação pela mesma chave Bearer. Corpo em JSON: {"id", "minutes"},
onde minutes só aceita 5 ou 10.
Atenção: quando o tempo expira, o servidor apaga o arquivo inteiro do disco,
não só o link temporário — inclusive o link permanente /f/{id} daquele arquivo para de funcionar.
Isso existe para não acumular arquivos esquecidos no servidor.
curl -X POST https://seudominio.com/api/temp-link \
-H "Authorization: Bearer aalt_SUA_CHAVE" \
-H "Content-Type: application/json" \
-d '{"id": "f7a1c30e-...", "minutes": 5}'
Resposta 201:
{
"token": "t_9c2e...",
"minutes": 5,
"expiresAt": 1735689900000,
"url": "https://seudominio.com/t/t_9c2e..."
}
O link em url serve o arquivo normalmente até o horário em expiresAt
(timestamp em milissegundos). No máximo ~15 segundos depois de expirar, o servidor apaga o arquivo
automaticamente (mesmo que ninguém tenha acessado o link); a partir daí, tanto /t/{token}
quanto o antigo /f/{id} respondem 404/410.
Usando em bots
Qualquer linguagem que faça requisições HTTP pode usar a API. Exemplo em JavaScript (Node.js):
import fs from "node:fs";
const form = new FormData();
form.set("file", new Blob([fs.readFileSync("./foto.png")]), "foto.png");
// opcional: form.set("expireMinutes", "5") para link temporário de 5 min
const res = await fetch("https://seudominio.com/api/upload", {
method: "POST",
headers: { Authorization: "Bearer aalt_SUA_CHAVE" },
body: form,
});
const data = await res.json();
console.log(data.file.publicUrl);
Em Python:
import requests
with open("foto.png", "rb") as f:
res = requests.post(
"https://seudominio.com/api/upload",
headers={"Authorization": "Bearer aalt_SUA_CHAVE"},
files={"file": ("foto.png", f)},
# opcional: data={"expireMinutes": "5"} para link temporário de 5 min
)
print(res.json()["file"]["publicUrl"])
Gerenciando a chave
A chave é gerada no painel do site, na seção API externa. Ela é exibida apenas uma vez — anote-a. A rota abaixo (autenticada pelo painel) informa se existe uma chave ativa:
GET /api/keys/me
Responde {"exists": true, "prefix": "aalt_..."} quando há uma chave ativa.
POST /api/keys
Gera uma nova chave, retornando o segredo completo uma única vez.
POST /api/keys/revoke
Revoga a chave atual. As integrações pararão de funcionar imediatamente.
Acessando arquivos
Todo arquivo publicado fica acessível em /f/{id} sem autenticação, para sempre,
até ser excluído pelo painel. Imagens e vídeos abrem direto no navegador; outros tipos são baixados.
Já um link gerado por /api/temp-link (ou pelo botão "Link 5min"/"Link 10min" no painel)
fica em /t/{token} e só funciona até o tempo escolhido (5 ou 10 minutos) expirar.
Quando expira, o arquivo é apagado do servidor automaticamente — não fica acumulando
arquivo nenhum. Isso também derruba o link permanente /f/{id} daquele arquivo, caso ele
já tivesse sido compartilhado antes.
Referência rápida
| Recurso | Método | Autenticação | O que faz |
|---|---|---|---|
/api/upload | POST | Chave Bearer | Envia um arquivo (máx. 500 MB) |
/f/{id} | GET | Pública | Serve o arquivo hospedado (permanente) |
/api/temp-link | POST | Chave Bearer | Gera link temporário de 5 ou 10 min |
/t/{token} | GET | Pública (até expirar) | Serve o arquivo via link temporário |
/api/keys/me | GET | Painel (cookie) | Verifica chave ativa |
/api/keys | POST | Painel (cookie) | Gera nova chave |
/api/keys/revoke | POST | Painel (cookie) | Revoga a chave |
As variáveis de ambiente AA_PORT, AA_PUBLIC_URL, AA_MAX_BYTES,
AA_USER e AA_PASS configuram o servidor. Veja o README.md do pacote.