Pemfilteran
Filter, urutkan, dan paginasi hasil /query, plus dukungan tiap penyedia.
Pemfilteran hanya berlaku untuk
/query. Endpoint hasil-tunggal/moviedan/randomtidak menerima filter.
1. Memulai Cepat
/query menerima empat masukan opsional di samping q: filter, sort, page, dan num
(ukuran halaman). GET dan POST sama-sama berfungsi.
KEY="jvi_..." # your API key, sent as the x-javinfo-key header
# POST — genre + runtime filter, newest first
curl -s -X POST https://api.javinfo.dev/query \
-H "x-javinfo-key: $KEY" -H 'content-type: application/json' \
-d '{
"q": "ema kisaki",
"filter": { "genre": "Big Tits", "runtimeMin": 120 },
"sort": "release",
"page": 1
}'
# GET — same thing, flattened into query params
curl -s "https://api.javinfo.dev/query?q=ema%20kisaki&filter[genre]=Big%20Tits&filter[runtimeMin]=120&sort=release" \
-H "x-javinfo-key: $KEY"q opsional jika ada filter. Kamu bisa menjelajahi seluruh kategori tanpa kata kunci:
# All "creampie" titles, no search term
curl -s -X POST https://api.javinfo.dev/query \
-H "x-javinfo-key: $KEY" -H 'content-type: application/json' \
-d '{ "filter": { "genre": "creampie" } }'Tanpa q dan tanpa filter → 400 ("provide a search query or at least one filter").
$0.40 per 1.000 panggilan pada num=10, bertambah dengan ukuran halaman
(tagihan). Filter tidak mengubah harga. Tanpa hasil (200 dengan
count: 0) atau error: gratis.
2. Masukan
filter
Objek. Semua field opsional; setel yang perlu saja.
| Field | Tipe | Arti |
|---|---|---|
genre | string | Kategori / genre |
actress | string | Aktris (pemeran) |
maker | string | Pembuat / studio |
series | string | Seri |
director | string | Sutradara |
label | string | Label |
actor | string | Aktor pria |
censored | "censored" | "uncensored" | Status mosaik |
runtimeMin | number (menit) | Durasi minimum |
runtimeMax | number (menit) | Durasi maksimum |
releaseAfter | string YYYY-MM-DD | Dirilis pada/setelah |
releaseBefore | string YYYY-MM-DD | Dirilis pada/sebelum |
availability | "playable" | "magnets" | "subtitle" | "single" | Memiliki stream / magnet / subtitle / merupakan judul tunggal |
sort
relevance (bawaan), release, update, rating, views.
relevance— relevansi kecocokan teks. Bawaan.release— rilis terbaru dulu.update— yang baru ditambahkan atau diperbarui dulu.rating— rating tertinggi dulu.views— dicadangkan. Belum ada penyedia yang mendukung (selalu ditolak).
page
Bilangan bulat dari 1. Dihilangkan = halaman 1. Ukuran diatur oleh num.
Batas paginasi dalam. Indeks fanza/dmm membatasi hasil pada 1.000 baris, jadi
page × num≤ 1000 — dengannum: 50, halaman 20 adalah yang terakhir. Lebih dari itu menghasilkan404(tanpa hasil), bukan error. Untuk menjangkau lebih jauh, persempit denganfilteralih-alih menambah halaman.
num
Hasil per halaman. Bilangan bulat, bawaan 10, maksimum 50 (nilai lebih tinggi
dipangkas, bukan ditolak; num < 1 → 400). missav dibatasi jumlah pencariannya
sendiri; penyedia lain berpaginasi. Offset page dihitung dari num (halaman 2 dengan
num=10 melewati 10 pertama).
Masukan numerik dikoersi pada kedua metode, termasuk page dan filter[...] bersarang;
GET dengan filter[runtimeMin]=120 berfungsi.
3. Matriks Kemampuan Penyedia
/query mencari di beberapa penyedia dan tidak semuanya mendukung semua filter. Baca
tabelnya sebelum menyusun kueri.
Penyedia (dan id-nya): query:fanza, query:dmm (dua etalase DMM + FANZA),
query:javdatabase, query:sextb, query:javlibrary, query:javbus, query:missav,
query:javdb.
| Kemampuan | fanza / dmm | missav | javdb | javdatabase | sextb | javlibrary | javbus |
|---|---|---|---|---|---|---|---|
genre | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
actress | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
maker | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
series | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
director | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
label | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
actor | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ |
censored: censored | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
censored: uncensored | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
runtimeMin / runtimeMax | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
releaseAfter / releaseBefore | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
availability | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Gabungkan beberapa filter | kombinasi apa pun | kombinasi apa pun | ❌ tidak ada | kombinasi apa pun | kombinasi apa pun | kombinasi apa pun | kombinasi apa pun |
sort: relevance | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
sort: release | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
sort: update | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
sort: rating | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
sort: views | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
page | ✅ | ❌ (selalu halaman 1) | ✅ | ✅ | ✅ | ✅ | ✅ |
Legenda: ✅ didukung · ❌ tidak didukung.
Catatan:
- fanza/dmm hanya tersensor. Filter
uncensoredmengecualikannya. - javdb tidak punya filter per-field. Hanya tab tersensor,
availability, dan pengurutan kaya; meminta dimensi bernama akan mengecualikannya. - javlibrary hanya tersensor. Filter
uncensoredmengecualikannya. - javbus tidak punya dimensi
actor.filter.actoryang disematkan mengembalikan422. Pengurutan juga hanyarelevanceataurelease;sort: ratingditolak. - javbus menerima nama Jepang atau Inggris. Klausa aktris, pembuat, dan genre membaca
kedua field, jadi
三上悠亜danYua Mikamisama-sama cocok. Genre berupa nama Inggris dengan padanan Jepang. - javdatabase hanya bahasa Inggris. Korpusnya situs bahasa Inggris; kueri Jepang
(
巨乳) tidak cocok dan dilewati. Masukkan romaji atau bahasa Inggris. - missav mengabaikan
pagedansort. Selalu halaman pertama, urut relevansi. - javdatabase, sextb, javlibrary, dan javbus dari katalog kami sendiri. Pemfilteran dan paginasi cepat dan lengkap, tanpa batas hulu.
4. Cara Kerja Pemilihan Penyedia
/query mencoba penyedia secara berurutan dan hasil valid pertama menang:
FANZA → DMM → javdatabase → sextb → javlibrary → javbus → missav → javdbTujuh pertama (sampai missav) dari indeks kami. javdb diambil langsung sebagai cadangan.
Filter yang tidak bisa dipenuhi bergantung pada apakah kamu menyematkan penyedia.
Tanpa disematkan (bawaan) — lewati dan lanjutkan
Tanpa providers, semua penyedia terdaftar menjadi kandidat. Yang tidak bisa memenuhi filter
penuh dilewati diam-diam dan waterfall lanjut. Yang menjawab adalah penyedia pertama yang
bisa memenuhi seluruh permintaan.
# sort=rating is javdb-only → every other provider is skipped, javdb answers.
curl -s -X POST https://api.javinfo.dev/query \
-H "x-javinfo-key: $KEY" -H 'content-type: application/json' \
-d '{ "q": "ABP", "sort": "rating" }'
# → { "source": "javdb", ... }Jika tidak ada yang bisa, kamu mendapat 422 dengan alasannya.
Disematkan — error keras
Kirim providers untuk memaksa penyedia tertentu. Jika tidak bisa memenuhi, permintaan gagal dengan 422 dan message berisi alasan; tidak pernah dibuang diam-diam.
# Pin javdb, ask for a genre it can't filter → 422
curl -s -X POST https://api.javinfo.dev/query \
-H "x-javinfo-key: $KEY" -H 'content-type: application/json' \
-d '{ "q": "x", "providers": ["query:javdb"], "filter": { "genre": "creampie" } }'
# → 422 { "message": "does not support filter \"genre\"" }
# Pin fanza, ask for uncensored → 422
# → { "message": "does not support uncensored content" }providers menerima daftar dipisah koma atau array, dengan atau tanpa prefiks query::
"providers": ["fanza","missav"] atau "providers": "javdb".
5. Nilai Diteruskan Apa Adanya
Pass-through v1: nilai filter dikirim ke backend penyedia apa adanya. Tidak ada taksonomi bersama atau pencocokan samar. Nilai yang berfungsi di satu penyedia sering tidak cocok di penyedia lain, karena tiap sumber menyimpan metadata berbeda.
Yang perlu diantisipasi:
-
Genre berbeda per penyedia.
- fanza/dmm, javdatabase, dan sextb memakai bahasa Inggris (
"Big Tits","creampie"). - missav memakai bahasa Jepang (
"巨乳","フィスト"). Genre Inggris tidak mengembalikan apa pun. - javbus menerima keduanya dan mencocokkan keduanya.
- fanza/dmm, javdatabase, dan sextb memakai bahasa Inggris (
-
Nama harus cocok persis. Bukan substring. Indeks DMM + FANZA menyimpan alias di dalam nama, mis.
"Ema Kisaki (HARUKI, Haruki Kato)";actress: "Ema Kisaki"mengembalikan nol baris. Kamu perlu string lengkap yang tersimpan. (Kekasaran v1 yang diketahui.) -
censoredberbeda makna per sumber. missav tidak punya flag harfiah; API memetakancensoredke judul mosaik arus utama danuncensoredke semua lainnya (Caribbeancom, 10musume, Tokyo-Hot, 1pondo, FC2, bocoran tanpa sensor, …). -
javdatabase hanya bahasa Inggris. Masukkan bahasa Inggris atau romaji;
qatau nilai Jepang tidak cocok dan penyedia dilewati.
Jika tidak cocok, kamu hanya mendapat sedikit atau nol baris dari penyedia itu (dan, tanpa sematan, waterfall lanjut). Tidak ada error — kecocokan kosong bukan error.
6. Bentuk Respons
Body-nya kumpulan hasil dari penyedia pemenang:
{
"q": "ema kisaki", // your query, echoed
"source": "fanza", // which provider answered
"count": 10, // page size (default 10, set by num)
"results": [
{
"id": "118abp00999", // stable id (content id or dvd id)
"dvdId": "ABP-999",
"title": "…",
"cover": "https://…/…ps.jpg",
"releaseDate": "2019-01-04",
"extra": { // provider-specific, keys vary by source
"runtimeMins": 130,
"maker": "…",
"categories": ["Big Tits", "…"],
"actresses": [{ "name": "…", "image": "https://…|null" }],
"duration": 7800, // missav (seconds)
"genres": ["巨乳"], // missav
"studio": "…", "url": "…" // javdatabase
// …
}
}
]
}extra adalah superset: hanya kunci dari penyedia yang menjawab. Field inti (id, dvdId,
title, cover, releaseDate) sama di semua penyedia.
Header respons membawa metadata: X-Response-Time-Ms, X-Balance-Remaining.
7. Contekan Per-Penyedia
fanza / dmm (DMM + FANZA) — pemfilteran terstruktur terkaya.
- Semua dimensi bernama, digabung bebas. Genre dan nama bahasa Inggris.
runtimeMin/runtimeMaxdalam menit.sort: release. Berpaginasi.- Hanya katalog tersensor. Tanpa
uncensored, tanpaavailability.
# Big-tits titles over 120 min, newest first
-d '{ "filter": { "genre": "Big Tits", "runtimeMin": 120 }, "sort": "release" }'Mencari berdasarkan nama. Judul bahasa Inggris hanya sampai pertengahan 2022; yang lebih baru berbahasa Jepang. Nama pemeran (romaji) diindeks terpisah, jadi
qdengan"Yua Mikami"tetap menjangkau rilis terbaru. Tambahkan"sort": "release"agar yang baru dulu: padarelevancebawaan, judul lama yang menyebut nama itu naik ke atas.
# Newest Yua Mikami titles first
-d '{ "q": "Yua Mikami", "providers": ["fanza"], "sort": "release" }'
# Exact-match browse (see §5 on stored name strings)
-d '{ "filter": { "actress": "Yua Mikami" }, "sort": "release" }'missav — permukaan filter terluas, hanya urut relevansi.
- Semua dimensi bernama (genre Jepang), rentang durasi dan rilis,
censoreddua arah. - Tanpa
sort, tanpa paginasi sungguhan (halaman 1), tanpaavailability.
# Uncensored titles matching "caribbean"
-d '{ "q": "caribbean", "filter": { "censored": "uncensored" } }'
# Japanese genre browse
-d '{ "q": "SSIS", "filter": { "genre": "巨乳" } }'javdb — tanpa filter field, tetapi pengurutan dan ketersediaan terbaik.
- Hanya
censored(keduanya),availability, dansort(relevance/release/update/rating). - Berpaginasi. Tanpa genre/actress/maker.
# Playable, highest rated
-d '{ "q": "ABP", "filter": { "availability": "playable" }, "sort": "rating" }'javdatabase — katalog bahasa Inggris lengkap. Tersensor dan tanpa sensor, semua dimensi
bernama, kedua rentang. Hanya nilai Inggris (q Jepang dilewati). sort: release.
Berpaginasi. Tanpa availability.
# Creampie titles from S1
-d '{ "filter": { "genre": "creampie", "maker": "S1 NO.1 STYLE" } }'sextb — termasuk stream, dari katalog kami. Semua dimensi bernama, kedua rentang,
censored dua arah. sort: release. Berpaginasi. Tanpa availability.
javlibrary — hanya tersensor, dari katalog kami. Semua dimensi bernama, kedua rentang.
sort: release. Berpaginasi. Tanpa availability.
javbus — torrent dan katalog Jepang luas, dari indeks kami. Semua dimensi bernama kecuali
actor, kedua rentang, censored dua arah. Aktris, pembuat, dan genre menerima Jepang atau
Inggris. sort: relevance / release. Berpaginasi. Tanpa availability. Torrent ikut di
/movie sebagai extra.downloadLinks.
# Japanese actress, newest first (POST)
-d '{ "providers": ["javbus"], "filter": { "actress": "三上悠亜" }, "sort": "release", "num": 2 }'
# Japanese genre + runtime, over GET
curl -s 'https://api.javinfo.dev/query?providers=javbus&filter%5Bgenre%5D=%E5%B7%A8%E4%B9%B3&filter%5BruntimeMin%5D=120&num=2' \
-H "x-javinfo-key: $KEY"
# Uncensored releases since 2026, newest first (POST)
-d '{ "providers": ["javbus"], "filter": { "censored": "uncensored", "releaseAfter": "2026-01-01" }, "sort": "release", "num": 2 }'Sematkan javbus dan minta yang tidak bisa dilakukannya → 422 sungguhan:
# No male-actor dimension → 422
-d '{ "providers": ["javbus"], "filter": { "actor": "Shimiken" } }'
# → { "defined": false, "code": "BAD_REQUEST", "status": 422, "message": "does not support filter \"actor\"" }
# No rating sort → 422
-d '{ "providers": ["javbus"], "q": "ABP", "sort": "rating" }'
# → { "defined": false, "code": "BAD_REQUEST", "status": 422, "message": "does not support sort \"rating\"" }Bentuk hasilnya body /query standar §6. Untuk rekaman /movie dan torrent, lihat
bagian javbus.
8. Batasan v1
- Normalisasi nilai antar penyedia. Tidak ada kosakata terpadu; pakai dialek tiap penyedia (Inggris vs Jepang, string persis).
sort: views— dicadangkan, belum diimplementasikan.- Multi-nilai per dimensi. Satu nilai per field (
genre: ["a","b"]tidak bisa). - Rentang pada javdb. Berfungsi di tempat lain.
availabilityselain di javdb.- Menggabungkan filter sembarang pada javdb. Tidak punya filter per-field.
actorpada javbus. Tidak ada dimensi aktor pria.sort: update,rating, atauviewspada javbus. Hanyarelevancedanrelease.- Paginasi atau pengurutan pada missav.
- Membuka halaman melewati 1.000 hasil di fanza/dmm (
page × num≤ 1000). - Memfilter
/movieatau/random.
Jika kombinasi mustahil: disematkan → 422 dengan alasan; tanpa sematan → dilewati dan
berikutnya dicoba.
Selanjutnya
- Referensi API: operasi
/querydengan semua parameter dan playground. - Error: kasus
400dan422.