CUTAD API Docs
REST API gratis untuk akses data anime, donghua, drama, dan film. Rate limit: 30 request/menit. Tidak perlu registrasi â generate key langsung.
đDapatkan API Key
Gratis, tanpa registrasi. Cukup masukkan nama dan email. Jika email sudah pernah dipakai, key lama akan dikembalikan.
đCara Penggunaan
Dapatkan API Key
Masukkan nama & email di atas, klik Generate Key.
Sertakan di Request
Kirim key via header X-API-Key atau query ?api_key=
Ikuti Alur per Provider
Setiap provider punya 3 langkah: Rank â dapat list + id, Detail â pakai id dapat episode, Watch â pakai episode id dapat video URL. Lihat tab provider di bawah.
Alur universal (berlaku untuk semua provider):
Dapat list item + ID
GET /anime/rank â { data: { sections: [{ items: [{ id, title }] }] } }Pakai ID dari langkah 1
GET /anime/detail?id=xxx â { data: { episodes: [{ id, title }] } }Pakai episode ID dari langkah 2
GET /anime/watch?id=ep-xxx â { data: { videoUrl: "..." } }đĻResponse Format
Semua response dibungkus dalam format { "data": ... }. Isi data bervariasi per endpoint:
Rank / Home (list kategori)
{ "data": { "sections": [{ "name": "Kategori", "items": [{ "id", "title", "cover" }] }] } }Rank / Search (flat list)
{ "data": [{ "id", "title", "thumbnail/poster/cover" }] }Detail
{ "data": { "title", "cover", "synopsis/description", "episodes": [{ "id/href", "title" }] } }Watch (streaming)
{ "data": { "videoUrl": "..." } } // atau { "data": { "streams": [{ "url", "quality" }] } }đĄ Video URL sudah otomatis di-wrap melalui proxy CUTAD (/api/proxy?url=...&ref=...) agar bisa diakses tanpa CORS/Referer issue.
đģContoh Request
cURL â full flow
# 1. Daftar anime populer curl -H "X-API-Key: YOUR_KEY" \ "https://www.cutad.web.id/public/api/v1/anime/rank" # 2. Detail anime (pakai id dari rank) curl -H "X-API-Key: YOUR_KEY" \ "https://www.cutad.web.id/public/api/v1/anime/detail?id=my-ridiculous-reincarnation" # 3. Video URL (pakai episode id dari detail) curl -H "X-API-Key: YOUR_KEY" \ "https://www.cutad.web.id/public/api/v1/anime/watch?id=my-ridiculous-reincarnation-episode-1-sub-indo"
JavaScript (fetch) â full flow
const API = "https://www.cutad.web.id/public/api/v1";
const HEADERS = { headers: { "X-API-Key": "YOUR_KEY" } };
// 1. Ambil daftar
const rank = await fetch(`${API}/anime/rank`, HEADERS)
.then(r => r.json());
// 2. Ambil detail
const animeId = rank.data.sections[0].items[0].id;
const detail = await fetch(
`${API}/anime/detail?id=${animeId}`, HEADERS
).then(r => r.json());
// 3. Ambil video
const epId = detail.data.episodes[0].id;
const watch = await fetch(
`${API}/anime/watch?id=${epId}`, HEADERS
).then(r => r.json());
console.log(watch.data.videoUrl);Python (requests) â full flow
import requests
API = "https://www.cutad.web.id/public/api/v1"
H = {"X-API-Key": "YOUR_KEY"}
# 1. Daftar film
rank = requests.get(f"{API}/film1/rank", headers=H).json()
# 2. Detail film pertama
film_id = rank["data"][0]["id"]
detail = requests.get(
f"{API}/film1/detail",
params={"id": film_id}, headers=H
).json()
# 3. Video URL
watch = requests.get(
f"{API}/film1/watch",
params={"id": film_id}, headers=H
).json()
print(watch["data"]["streams"][0]["url"])Response Headers
X-RateLimit-Limit: 30 # Max request per window X-RateLimit-Remaining: 29 # Sisa request sebelum kena limit X-RateLimit-Reset: 1712560860 # Unix timestamp kapan counter reset
Rate limit: 30 request per menit, per API key (bukan per IP). Counter auto-reset setiap menit.
âąī¸Rate Limiting
30
request / menit
per key
bukan per IP
auto reset
setiap menit
Jika dapat 429 Too Many Requests, cek header X-RateLimit-Reset untuk tau kapan bisa request lagi. Atau cek X-RateLimit-Remaining sebelum request untuk hindari limit.
đĄEndpoints per Provider
Anime Subtitle Indonesia (sumber: otakudesu / animasu)
đ Alur Penggunaan
Dapatkan daftar anime populer & terbaru
Input: -
Output: id (contoh: my-ridiculous-reincarnation)
Pakai id â dapat info anime + daftar episode
Input: id dari step 1
Output: episodes[].id (contoh: my-ridiculous-reincarnation-episode-1)
Pakai episode id â dapat URL video streaming
Input: episodes[].id dari step 2
Output: data.videoUrl
đĻ Response Schema
/public/api/v1/anime/rankDaftar anime populer & terbaru dari Otakudesu dan Anoboy
/public/api/v1/anime/detailDetail anime: judul, sinopsis, cover, genre, status, daftar episode lengkap
/public/api/v1/anime/episodesDaftar episode saja (subset dari detail)
/public/api/v1/anime/watchURL streaming video. â ī¸ Pakai episode ID, BUKAN anime ID!
/public/api/v1/anime/searchCari anime berdasarkan judul â hasil format sama dengan rank
â ī¸Error Codes
| Code | Meaning | Solusi |
|---|---|---|
401 | API key tidak disertakan | Tambahkan X-API-Key header atau ?api_key= query |
403 | API key tidak valid | Generate ulang di halaman docs ini |
404 | Provider atau endpoint tidak ditemukan | Cek penulisan provider/action. GET /public/api/v1/providers untuk list |
429 | Rate limit terlampaui (30 req/menit) | Tunggu sampai X-RateLimit-Reset, atau kurangi frekuensi request |
500 | Server error atau upstream timeout | Coba lagi dalam beberapa saat. Jika persisten, sumber data mungkin down |
đ§Troubleshooting
Dapat 401 Unauthorized padahal sudah kirim key?
Pastikan key dikirim via header X-API-Key: YOUR_KEY atau query ?api_key=YOUR_KEY. Jangan lupa spasi atau typo.
Dapat 429 Too Many Requests?
Kamu sudah lebih dari 30 request dalam 1 menit. Cek header X-RateLimit-Remaining sebelum request. Tunggu sampai X-RateLimit-Reset (unix timestamp) untuk reset.
Video tidak bisa diputar / CORS error?
Semua video URL sudah otomatis di-wrap melalui proxy CUTAD. Jangan akses URL asli langsung â gunakan videoUrl atau streams[].url dari response watch. URL proxy sudah include Referer yang benar.
Response kosong atau null?
Sumber data mungkin sedang down atau IP VPS diblokir (contoh: Melolo). Coba beberapa saat lagi atau pakai provider lain. Cek /public/api/v1/health untuk status.
Donghua/Film1 watch butuh URL lengkap, bukan slug?
Ya. Untuk Donghua, pakai episodes[].href (URL lengkap). Untuk Film1, pakai URL film dari rank atau episodes[].href untuk series. Slug saja tidak cukup.
Sfilmindo watch return streams kosong?
Parameter dp (detailPath) WAJIB disertakan. Ambil dari response detail â data.detailPath. Tanpa ini, endpoint tidak bisa resolve video.
DramaBox watch butuh 2 parameter?
Ya. Perlu id (bookId) DAN episodeId (chapterId, format: bookId_episodeNum). Ambil keduanya dari rank dan detail.
CUTAD API v1.0.0 â Gratis untuk penggunaan wajar
Powered by Next.js 14 + Express 5