Documentation

API Reference

EpannStream API v1.0.0 — base URL untuk seluruh endpoint:

https://api.epannxd.my.id/api/v1
Tanpa autentikasi. Semua endpoint bersifat publik, metode GET, dan mengembalikan application/json.

Format Respons

Setiap respons sukses dibungkus envelope berikut. Data asli scraper selalu berada di properti result.

{
  "status": true,
  "code": 200,
  "creator": "Epann",
  "service": "EpannStream API",
  "version": "1.0.0",
  "endpoint": "/api/v1/anime/latest",
  "cached": false,
  "durationMs": 812,
  "timestamp": "2025-01-01T00:00:00.000Z",
  "module": "anime",
  "source": "https://v2.samehadaku.how",
  "result": { "...": "payload endpoint" }
}

Error Handling

KodeArtiPenyebab umum
400Bad RequestParameter wajib kosong atau nilai enum tidak valid.
404Not FoundRoute API tidak terdaftar di registry.
429Too Many RequestsMelebihi 90 request / 60 detik.
502Bad GatewaySumber down atau struktur HTML berubah.
500Server ErrorKesalahan internal tak terduga.
{
  "status": false,
  "code": 400,
  "endpoint": "/api/v1/anime/search",
  "error": {
    "message": "Missing required parameter: q",
    "hint": "Example -> /api/v1/anime/search?q=naruto&page=1"
  },
  "timestamp": "2025-01-01T00:00:00.000Z"
}

Rate Limit & Cache

Rate Limit

Maksimal 90 request per 60 detik per IP.

  • X-RateLimit-Limit
  • X-RateLimit-Remaining
  • X-RateLimit-Reset

Cache

TTL diatur per endpoint (lihat label Cache di tiap seksi). Respons dari cache ditandai "cached": true.

  • Default TTL 120s
  • Flush: POST /api/v1/cache/flush

Auto Connection

Registry memindai folder src/scrapers saat boot dan memantaunya secara realtime. Menambah file scraper baru = endpoint baru langsung hidup, termasuk halaman dokumentasi dan form playground ini.

1
Buat file

Salin _TEMPLATE.js menjadi mis. tiktok.js.

2
Isi manifest

Definisikan meta dan array endpoints berisi handler().

3
Simpan

Watcher mendeteksi perubahan, registry reload otomatis.

4
Selesai

Route /api/v1/<id>/<path> siap dipakai.

module.exports = {
  meta: { id: 'tiktok', name: 'TikTok Downloader', icon: 'music-4' },
  endpoints: [{
    name: 'Download',
    method: 'GET',
    path: '/download',
    description: 'Ambil metadata & link video tanpa watermark.',
    cache: 30,
    params: [{ name: 'url', in: 'query', required: true, example: 'https://vt.tiktok.com/xxxx' }],
    handler: async ({ query }) => ({ url: query.url })
  }]
};

Manhwa / Manga stable

Scraper komik: populer terbaru, pencarian judul, detail seri lengkap dengan daftar chapter, dan panel gambar per chapter.

/api/v1/manhwa 5 endpoint manhwa.js manwhaku.my.id
GET /api/v1/manhwa/home cache 180s Discovery Try

Daftar komik yang tampil di halaman utama (update terbaru & populer).

Endpoint ini tidak memerlukan parameter.

Contoh Request

curl -s "https://api.epannxd.my.id/api/v1/manhwa/home"
const res  = await fetch("https://api.epannxd.my.id/api/v1/manhwa/home");
const json = await res.json();
console.log(json.result);
import requests
r = requests.get("https://api.epannxd.my.id/api/v1/manhwa/home", timeout=30)
print(r.json()["result"])

Struktur result

{
  "count": "number",
  "data": "[{ title, slug, url, cover, rating, chapter, type }]"
}
GET /api/v1/manhwa/list cache 180s Discovery Try

Katalog komik dengan pagination.

Parameter

NamaLokasiTipeWajibDefaultKeterangan
page query number optional 1 Nomor halaman katalog.

Contoh Request

curl -s "https://api.epannxd.my.id/api/v1/manhwa/list?page=1"
const res  = await fetch("https://api.epannxd.my.id/api/v1/manhwa/list?page=1");
const json = await res.json();
console.log(json.result);
import requests
r = requests.get("https://api.epannxd.my.id/api/v1/manhwa/list?page=1", timeout=30)
print(r.json()["result"])
GET /api/v1/manhwa/search cache 120s Discovery Try

Cari komik berdasarkan judul / keyword.

Parameter

NamaLokasiTipeWajibDefaultKeterangan
q query string required - Kata kunci pencarian.
page query number optional 1 Nomor halaman hasil.

Contoh Request

curl -s "https://api.epannxd.my.id/api/v1/manhwa/search?q=lookism&page=1"
const res  = await fetch("https://api.epannxd.my.id/api/v1/manhwa/search?q=lookism&page=1");
const json = await res.json();
console.log(json.result);
import requests
r = requests.get("https://api.epannxd.my.id/api/v1/manhwa/search?q=lookism&page=1", timeout=30)
print(r.json()["result"])
GET /api/v1/manhwa/detail/:slug cache 300s Content Try

Detail seri: judul, cover, sinopsis, dan seluruh daftar chapter.

Parameter

NamaLokasiTipeWajibDefaultKeterangan
slug path string required - Slug seri komik.

Contoh Request

curl -s "https://api.epannxd.my.id/api/v1/manhwa/detail/lookism"
const res  = await fetch("https://api.epannxd.my.id/api/v1/manhwa/detail/lookism");
const json = await res.json();
console.log(json.result);
import requests
r = requests.get("https://api.epannxd.my.id/api/v1/manhwa/detail/lookism", timeout=30)
print(r.json()["result"])
GET /api/v1/manhwa/chapter/:slug cache 600s Content Try

Ambil seluruh panel gambar dari satu chapter beserta navigasi prev/next.

Parameter

NamaLokasiTipeWajibDefaultKeterangan
slug path string required - Slug chapter.

Contoh Request

curl -s "https://api.epannxd.my.id/api/v1/manhwa/chapter/lookism-chapter-623"
const res  = await fetch("https://api.epannxd.my.id/api/v1/manhwa/chapter/lookism-chapter-623");
const json = await res.json();
console.log(json.result);
import requests
r = requests.get("https://api.epannxd.my.id/api/v1/manhwa/chapter/lookism-chapter-623", timeout=30)
print(r.json()["result"])

Drama Pendek (WebDracin) beta

Scraper drama pendek / short drama: daftar platform, daftar drama per platform, pencarian, detail drama, detail episode dengan URL video, dan full detail (dengan sample video).

/api/v1/dracin 8 endpoint drachin.js webdracin.com
GET /api/v1/dracin/platforms cache 3600s Discovery Try

Daftar semua platform drama pendek yang tersedia.

Endpoint ini tidak memerlukan parameter.

Contoh Request

curl -s "https://api.epannxd.my.id/api/v1/dracin/platforms"
const res  = await fetch("https://api.epannxd.my.id/api/v1/dracin/platforms");
const json = await res.json();
console.log(json.result);
import requests
r = requests.get("https://api.epannxd.my.id/api/v1/dracin/platforms", timeout=30)
print(r.json()["result"])

Struktur result

{
  "data": "[string]"
}
GET /api/v1/dracin/list cache 180s Discovery Try

Daftar drama terbaru dari halaman utama atau platform tertentu.

Parameter

NamaLokasiTipeWajibDefaultKeterangan
platform query string optional - Nama platform (tanpa akhiran "gratis"). Kosongkan untuk halaman utama.
limit query number optional 50 Jumlah maksimal hasil.

Contoh Request

curl -s "https://api.epannxd.my.id/api/v1/dracin/list?platform=dramabox&limit=20"
const res  = await fetch("https://api.epannxd.my.id/api/v1/dracin/list?platform=dramabox&limit=20");
const json = await res.json();
console.log(json.result);
import requests
r = requests.get("https://api.epannxd.my.id/api/v1/dracin/list?platform=dramabox&limit=20", timeout=30)
print(r.json()["result"])
GET /api/v1/dracin/all cache 600s Discovery Try

Scrape semua platform sekaligus (paralel).

Parameter

NamaLokasiTipeWajibDefaultKeterangan
limitPerPlatform query number optional 10 Jumlah maksimal drama per platform.

Contoh Request

curl -s "https://api.epannxd.my.id/api/v1/dracin/all?limitPerPlatform=10"
const res  = await fetch("https://api.epannxd.my.id/api/v1/dracin/all?limitPerPlatform=10");
const json = await res.json();
console.log(json.result);
import requests
r = requests.get("https://api.epannxd.my.id/api/v1/dracin/all?limitPerPlatform=10", timeout=30)
print(r.json()["result"])
GET /api/v1/dracin/search cache 120s Discovery Try

Cari drama berdasarkan judul.

Parameter

NamaLokasiTipeWajibDefaultKeterangan
q query string required - Kata kunci pencarian.
limit query number optional 50 Jumlah maksimal hasil.

Contoh Request

curl -s "https://api.epannxd.my.id/api/v1/dracin/search?q=drama%20cinta&limit=30"
const res  = await fetch("https://api.epannxd.my.id/api/v1/dracin/search?q=drama%20cinta&limit=30");
const json = await res.json();
console.log(json.result);
import requests
r = requests.get("https://api.epannxd.my.id/api/v1/dracin/search?q=drama%20cinta&limit=30", timeout=30)
print(r.json()["result"])
GET /api/v1/dracin/detail/:slug cache 300s Content Try

Detail drama dari halaman statis (title, sinopsis, cover, jumlah episode, watch URL).

Parameter

NamaLokasiTipeWajibDefaultKeterangan
slug path string required - Slug drama.

Contoh Request

curl -s "https://api.epannxd.my.id/api/v1/dracin/detail/drama-cinta"
const res  = await fetch("https://api.epannxd.my.id/api/v1/dracin/detail/drama-cinta");
const json = await res.json();
console.log(json.result);
import requests
r = requests.get("https://api.epannxd.my.id/api/v1/dracin/detail/drama-cinta", timeout=30)
print(r.json()["result"])
GET /api/v1/dracin/watch/:slug cache 300s Content Try

Detail drama lengkap termasuk daftar episode dengan metadata dari RSC payload.

Parameter

NamaLokasiTipeWajibDefaultKeterangan
slug path string required - Slug drama dari URL /watch/.

Contoh Request

curl -s "https://api.epannxd.my.id/api/v1/dracin/watch/drama-cinta"
const res  = await fetch("https://api.epannxd.my.id/api/v1/dracin/watch/drama-cinta");
const json = await res.json();
console.log(json.result);
import requests
r = requests.get("https://api.epannxd.my.id/api/v1/dracin/watch/drama-cinta", timeout=30)
print(r.json()["result"])
GET /api/v1/dracin/episode cache 600s Content Try

Ambil URL streaming untuk satu episode.

Parameter

NamaLokasiTipeWajibDefaultKeterangan
dramaId query string required - ID drama dari watch detail.
ep query number required - Nomor episode.
eid query string required - ID episode dari watch detail.

Contoh Request

curl -s "https://api.epannxd.my.id/api/v1/dracin/episode?dramaId=abc123&ep=1&eid=ep123"
const res  = await fetch("https://api.epannxd.my.id/api/v1/dracin/episode?dramaId=abc123&ep=1&eid=ep123");
const json = await res.json();
console.log(json.result);
import requests
r = requests.get("https://api.epannxd.my.id/api/v1/dracin/episode?dramaId=abc123&ep=1&eid=ep123", timeout=30)
print(r.json()["result"])
GET /api/v1/dracin/full/:slug cache 600s Content Try

Detail lengkap + sample video URL untuk beberapa episode pertama.

Parameter

NamaLokasiTipeWajibDefaultKeterangan
slug path string required - Slug drama.
eps query number optional 3 Jumlah episode sample yang diambil videonya.

Contoh Request

curl -s "https://api.epannxd.my.id/api/v1/dracin/full/drama-cinta?eps=3"
const res  = await fetch("https://api.epannxd.my.id/api/v1/dracin/full/drama-cinta?eps=3");
const json = await res.json();
console.log(json.result);
import requests
r = requests.get("https://api.epannxd.my.id/api/v1/dracin/full/drama-cinta?eps=3", timeout=30)
print(r.json()["result"])

IDLIX Streaming stable

Scraper film bioskop, series TV, drama pendek & shorts dari IDLIX dengan resolusi direct HLS m3u8 stream link dan multi-bahasa subtitle.

/api/v1/idlix 4 endpoint idlix.js z2.idlixku.com
GET /api/v1/idlix/home cache 180s Discovery Try

Daftar kurasi film & series dari beranda IDLIX (Trending, Popular, Latest update).

Endpoint ini tidak memerlukan parameter.

Contoh Request

curl -s "https://api.epannxd.my.id/api/v1/idlix/home"
const res  = await fetch("https://api.epannxd.my.id/api/v1/idlix/home");
const json = await res.json();
console.log(json.result);
import requests
r = requests.get("https://api.epannxd.my.id/api/v1/idlix/home", timeout=30)
print(r.json()["result"])
GET /api/v1/idlix/search cache 120s Discovery Try

Pencarian film, serial, dan drama pendek.

Parameter

NamaLokasiTipeWajibDefaultKeterangan
q query string required - Kata kunci pencarian.

Contoh Request

curl -s "https://api.epannxd.my.id/api/v1/idlix/search?q=avatar"
const res  = await fetch("https://api.epannxd.my.id/api/v1/idlix/search?q=avatar");
const json = await res.json();
console.log(json.result);
import requests
r = requests.get("https://api.epannxd.my.id/api/v1/idlix/search?q=avatar", timeout=30)
print(r.json()["result"])
GET /api/v1/idlix/detail cache 300s Content Try

Detail komprehensif film atau series beserta direct streaming URL (HLS m3u8) & subtitle.

Parameter

NamaLokasiTipeWajibDefaultKeterangan
url query string required - Slug atau URL target (contoh: avatar-the-way-of-water-2022 atau libang-libu-2026).
season query number optional - Nomor season (khusus serial).
episode query number optional - Nomor episode (khusus serial).

Contoh Request

curl -s "https://api.epannxd.my.id/api/v1/idlix/detail?url=libang-libu-2026&season=1&episode=1"
const res  = await fetch("https://api.epannxd.my.id/api/v1/idlix/detail?url=libang-libu-2026&season=1&episode=1");
const json = await res.json();
console.log(json.result);
import requests
r = requests.get("https://api.epannxd.my.id/api/v1/idlix/detail?url=libang-libu-2026&season=1&episode=1", timeout=30)
print(r.json()["result"])
GET /api/v1/idlix/shorts cache 300s Discovery Try

Koleksi video shorts & short drama dari IDLIX.

Endpoint ini tidak memerlukan parameter.

Contoh Request

curl -s "https://api.epannxd.my.id/api/v1/idlix/shorts"
const res  = await fetch("https://api.epannxd.my.id/api/v1/idlix/shorts");
const json = await res.json();
console.log(json.result);
import requests
r = requests.get("https://api.epannxd.my.id/api/v1/idlix/shorts", timeout=30)
print(r.json()["result"])

Film & TV (TMDB + LK21) stable

Scraper berbasis TMDB API untuk film & TV Series dengan embed streaming dari vidsrc.me, embed.su, dan vidsrc.pro.

/api/v1/tmdb 12 endpoint tmdb.js api.themoviedb.org/3
GET /api/v1/tmdb/search cache 120s Discovery Try

Cari film atau TV Series berdasarkan judul.

Parameter

NamaLokasiTipeWajibDefaultKeterangan
q query string required - Kata kunci pencarian.
page query number optional 1 Halaman hasil.

Contoh Request

curl -s "https://api.epannxd.my.id/api/v1/tmdb/search?q=avengers&page=1"
const res  = await fetch("https://api.epannxd.my.id/api/v1/tmdb/search?q=avengers&page=1");
const json = await res.json();
console.log(json.result);
import requests
r = requests.get("https://api.epannxd.my.id/api/v1/tmdb/search?q=avengers&page=1", timeout=30)
print(r.json()["result"])

Struktur result

{
  "total": "number",
  "data": "[{ id, title, year, type, rating, poster, overview }]"
}
GET /api/v1/tmdb/detail/:id cache 300s Content Try

Detail lengkap film/TV: judul, sinopsis, genre, cast, crew, server streaming.

Parameter

NamaLokasiTipeWajibDefaultKeterangan
id path number required - ID TMDB.
type query string optional movie Tipe konten.
Nilai: movie, tv

Contoh Request

curl -s "https://api.epannxd.my.id/api/v1/tmdb/detail/299536?type=movie"
const res  = await fetch("https://api.epannxd.my.id/api/v1/tmdb/detail/299536?type=movie");
const json = await res.json();
console.log(json.result);
import requests
r = requests.get("https://api.epannxd.my.id/api/v1/tmdb/detail/299536?type=movie", timeout=30)
print(r.json()["result"])
GET /api/v1/tmdb/stream cache 600s Content Try

Ambil URL embed streaming dari server pilihan.

Parameter

NamaLokasiTipeWajibDefaultKeterangan
id query number required - ID TMDB.
type query string optional movie Tipe konten.
Nilai: movie, tv
server query string optional vidsrc Server streaming.
Nilai: vidsrc, embedsu, vidsrcpro
season query number optional 1 Nomor season (TV).
episode query number optional 1 Nomor episode (TV).

Contoh Request

curl -s "https://api.epannxd.my.id/api/v1/tmdb/stream?id=299536&type=movie&server=vidsrc&season=1&episode=1"
const res  = await fetch("https://api.epannxd.my.id/api/v1/tmdb/stream?id=299536&type=movie&server=vidsrc&season=1&episode=1");
const json = await res.json();
console.log(json.result);
import requests
r = requests.get("https://api.epannxd.my.id/api/v1/tmdb/stream?id=299536&type=movie&server=vidsrc&season=1&episode=1", timeout=30)
print(r.json()["result"])
GET /api/v1/tmdb/trending cache 300s Discovery Try

Film & TV trending dari TMDB.

Parameter

NamaLokasiTipeWajibDefaultKeterangan
window query string optional week Jendela waktu.
Nilai: day, week

Contoh Request

curl -s "https://api.epannxd.my.id/api/v1/tmdb/trending?window=week"
const res  = await fetch("https://api.epannxd.my.id/api/v1/tmdb/trending?window=week");
const json = await res.json();
console.log(json.result);
import requests
r = requests.get("https://api.epannxd.my.id/api/v1/tmdb/trending?window=week", timeout=30)
print(r.json()["result"])
GET /api/v1/tmdb/trending/movies cache 300s Discovery Try

Film trending.

Parameter

NamaLokasiTipeWajibDefaultKeterangan
window query string optional week Jendela waktu.
Nilai: day, week

Contoh Request

curl -s "https://api.epannxd.my.id/api/v1/tmdb/trending/movies?window=week"
const res  = await fetch("https://api.epannxd.my.id/api/v1/tmdb/trending/movies?window=week");
const json = await res.json();
console.log(json.result);
import requests
r = requests.get("https://api.epannxd.my.id/api/v1/tmdb/trending/movies?window=week", timeout=30)
print(r.json()["result"])
GET /api/v1/tmdb/trending/tv cache 300s Discovery Try

TV Series trending.

Parameter

NamaLokasiTipeWajibDefaultKeterangan
window query string optional week Jendela waktu.
Nilai: day, week

Contoh Request

curl -s "https://api.epannxd.my.id/api/v1/tmdb/trending/tv?window=week"
const res  = await fetch("https://api.epannxd.my.id/api/v1/tmdb/trending/tv?window=week");
const json = await res.json();
console.log(json.result);
import requests
r = requests.get("https://api.epannxd.my.id/api/v1/tmdb/trending/tv?window=week", timeout=30)
print(r.json()["result"])
GET /api/v1/tmdb/recommendations/:id cache 300s Content Try

Rekomendasi film/TV serupa.

Parameter

NamaLokasiTipeWajibDefaultKeterangan
id path number required - ID TMDB.
type query string optional movie Tipe konten.
Nilai: movie, tv
limit query number optional 12 Maksimal hasil.

Contoh Request

curl -s "https://api.epannxd.my.id/api/v1/tmdb/recommendations/299536?type=movie&limit=12"
const res  = await fetch("https://api.epannxd.my.id/api/v1/tmdb/recommendations/299536?type=movie&limit=12");
const json = await res.json();
console.log(json.result);
import requests
r = requests.get("https://api.epannxd.my.id/api/v1/tmdb/recommendations/299536?type=movie&limit=12", timeout=30)
print(r.json()["result"])
GET /api/v1/tmdb/top-rated cache 600s Discovery Try

Film dengan rating tertinggi.

Parameter

NamaLokasiTipeWajibDefaultKeterangan
limit query number optional 20 Maksimal hasil.

Contoh Request

curl -s "https://api.epannxd.my.id/api/v1/tmdb/top-rated?limit=20"
const res  = await fetch("https://api.epannxd.my.id/api/v1/tmdb/top-rated?limit=20");
const json = await res.json();
console.log(json.result);
import requests
r = requests.get("https://api.epannxd.my.id/api/v1/tmdb/top-rated?limit=20", timeout=30)
print(r.json()["result"])
GET /api/v1/tmdb/popular cache 300s Discovery Try

Film populer saat ini.

Parameter

NamaLokasiTipeWajibDefaultKeterangan
limit query number optional 20 Maksimal hasil.

Contoh Request

curl -s "https://api.epannxd.my.id/api/v1/tmdb/popular?limit=20"
const res  = await fetch("https://api.epannxd.my.id/api/v1/tmdb/popular?limit=20");
const json = await res.json();
console.log(json.result);
import requests
r = requests.get("https://api.epannxd.my.id/api/v1/tmdb/popular?limit=20", timeout=30)
print(r.json()["result"])
GET /api/v1/tmdb/discover/:type cache 300s Discovery Try

Cari konten dengan filter canggih: genre, tahun, rating minim, pengurutan.

Parameter

NamaLokasiTipeWajibDefaultKeterangan
type path string required - Tipe konten.
Nilai: movie, tv
withGenres query number optional - ID genre TMDB.
sortBy query string optional popularity.desc Pengurutan.
Nilai: popularity.asc, popularity.desc, vote_average.asc, vote_average.desc, release_date.asc, release_date.desc
year query number optional - Filter tahun.
ratingGte query number optional - Rating minimum (0-10).
page query number optional 1 Halaman.

Contoh Request

curl -s "https://api.epannxd.my.id/api/v1/tmdb/discover/movie?withGenres=28&sortBy=popularity.desc&year=2024&ratingGte=7&page=1"
const res  = await fetch("https://api.epannxd.my.id/api/v1/tmdb/discover/movie?withGenres=28&sortBy=popularity.desc&year=2024&ratingGte=7&page=1");
const json = await res.json();
console.log(json.result);
import requests
r = requests.get("https://api.epannxd.my.id/api/v1/tmdb/discover/movie?withGenres=28&sortBy=popularity.desc&year=2024&ratingGte=7&page=1", timeout=30)
print(r.json()["result"])
GET /api/v1/tmdb/genres cache 3600s Metadata Try

Daftar genre film & TV dari TMDB.

Endpoint ini tidak memerlukan parameter.

Contoh Request

curl -s "https://api.epannxd.my.id/api/v1/tmdb/genres"
const res  = await fetch("https://api.epannxd.my.id/api/v1/tmdb/genres");
const json = await res.json();
console.log(json.result);
import requests
r = requests.get("https://api.epannxd.my.id/api/v1/tmdb/genres", timeout=30)
print(r.json()["result"])
GET /api/v1/tmdb/episode/:id/:season/:episode cache 300s Content Try

Detail satu episode TV Series + URL streaming.

Parameter

NamaLokasiTipeWajibDefaultKeterangan
id path number required - ID TV Series.
season path number required - Nomor season.
episode path number required - Nomor episode.

Contoh Request

curl -s "https://api.epannxd.my.id/api/v1/tmdb/episode/1399/1/1"
const res  = await fetch("https://api.epannxd.my.id/api/v1/tmdb/episode/1399/1/1");
const json = await res.json();
console.log(json.result);
import requests
r = requests.get("https://api.epannxd.my.id/api/v1/tmdb/episode/1399/1/1", timeout=30)
print(r.json()["result"])