L LUXIOS UPLOAD

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

RecursoMétodoAutenticaçãoO que faz
/api/uploadPOSTChave BearerEnvia um arquivo (máx. 500 MB)
/f/{id}GETPúblicaServe o arquivo hospedado (permanente)
/api/temp-linkPOSTChave BearerGera link temporário de 5 ou 10 min
/t/{token}GETPública (até expirar)Serve o arquivo via link temporário
/api/keys/meGETPainel (cookie)Verifica chave ativa
/api/keysPOSTPainel (cookie)Gera nova chave
/api/keys/revokePOSTPainel (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.