Dokumentasi API

Endpoint publik AIO Downloader. Semua request dalam format JSON dan tidak memerlukan autentikasi.

Contoh permintaan

cURL
curl -X POST "https://aio-dl.akaa.dev/api/v1/resolve" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://youtu.be/U2CBBWnw2RU"}'

Endpoint

  • GET/healthHealth check API (versi dan uptime).
  • POST/v1/resolveValidasi URL, deteksi platform, buat process ID.
  • GET/v1/jobs/{processId}Status job, tahap proses, dan persen progres nyata.
  • GET/v1/jobs/{processId}/eventsEvent stream (SSE) untuk satu job.
  • GET/v1/media/result/{processId}Output media dan metadata hasil unduhan.
  • GET/v1/media/{mediaId}/streamStreaming media dengan dukungan HTTP Range.
  • GET/v1/media/{mediaId}/downloadUnduhan browser-native dengan filename aman.
  • GET/v1/statisticsSnapshot statistik 7 hari: totals, platform, negara, volume data.
  • GET/v1/statistics/streamEvent stream (SSE) statistik realtime, update tiap 30 detik.
  • GET/v1/block-statusStatus blokir klien saat ini.

Progres job

Saat worker mengunduh, progressPercent berisi persen nyata dari extractor. Nilai null berarti tahap tidak memberikan persentase — bukan angka tiruan.

GET /v1/jobs/{processId} — 200 OK
{
  "processId": "V8fQx2aK7mP4zL9q",
  "stage": "downloading",
  "progressPercent": 42.7,
  "outputs": [],
  "failureReason": null
}

Contoh response

POST /v1/resolve — 200 OK
{
  "processId": "V8fQx2aK7mP4zL9q",
  "eventId": "ljf-oMDUhPJGhWX4QghsSx_g",
  "platform": "youtube",
  "normalizedUrl": "https://youtu.be/U2CBBWnw2RU",
  "canonicalUrl": "https://www.youtube.com/watch?v=U2CBBWnw2RU",
  "acceptedAt": "2026-09-19T15:21:58.962Z"
}

Statistik publik

Semua angka dihitung dari event nyata di database 7 hari terakhir. Negara berasal dari header negara Cloudflare, bukan IP — IP tidak pernah disimpan. Nilai null berarti data belum tersedia, bukan nol.

GET /v1/statistics — 200 OK
{
  "version": "D1Bd7hEe0AgJvFWe1GmLjP-D",
  "generatedAt": "2026-09-23T10:24:31.317Z",
  "totals": { "downloads": 99, "success": 73, "failure": 26, "healthPercent": 73.7 },
  "platforms": [
    { "platform": "youtube", "downloads": 24, "success": 19, "failure": 5 }
  ],
  "topRegions": [
    { "rank": 1, "label": "ID", "requests": 113 },
    { "rank": 2, "label": "SG", "requests": 30 }
  ],
  "activity": [
    { "bucketStart": "2026-09-22T14:00:00Z", "downloads": 1 }
  ],
  "bytesServed7d": 1078000000,
  "successRate": 73.7,
  "avgBytesPerDownload": 10890000,
  "failuresByClass": [
    { "klass": "extractor", "count": 9, "share": 34.6 }
  ],
  "dataVolume": { "gigabytes": 1.08, "formatted": "1.08 GB" }
}
  • topRegions.labelKode negara ISO 3166-1 alpha-2 (ID, SG, US, dst).
  • bytesServed7dTotal byte media tersaji via stream + download.
  • failuresByClassKegagalan dikelompokkan per kategori root-cause.
  • dataVolumeVolume terformat siap tampil (MB/GB).

Kode error

  • 429 rate_limited — terlalu banyak permintaan
  • 401 security_blocked — klien diblokir server
  • 404 not_found — proses atau media tidak ditemukan
  • 409 conflict — proses sama sedang berjalan
  • 422 invalid_url — URL tidak valid atau tidak didukung