Lewati ke konten
javinfo

Pemfilteran

Filter, urutkan, dan paginasi hasil /query, plus dukungan tiap penyedia.

Pemfilteran hanya berlaku untuk /query. Endpoint hasil-tunggal /movie dan /random tidak 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.

FieldTipeArti
genrestringKategori / genre
actressstringAktris (pemeran)
makerstringPembuat / studio
seriesstringSeri
directorstringSutradara
labelstringLabel
actorstringAktor pria
censored"censored" | "uncensored"Status mosaik
runtimeMinnumber (menit)Durasi minimum
runtimeMaxnumber (menit)Durasi maksimum
releaseAfterstring YYYY-MM-DDDirilis pada/setelah
releaseBeforestring YYYY-MM-DDDirilis 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 — dengan num: 50, halaman 20 adalah yang terakhir. Lebih dari itu menghasilkan 404 (tanpa hasil), bukan error. Untuk menjangkau lebih jauh, persempit dengan filter alih-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.

Kemampuanfanza / dmmmissavjavdbjavdatabasesextbjavlibraryjavbus
genre✅✅❌✅✅✅✅
actress✅✅❌✅✅✅✅
maker✅✅❌✅✅✅✅
series✅✅❌✅✅✅✅
director✅✅❌✅✅✅✅
label✅✅❌✅✅✅✅
actor✅✅❌✅✅✅❌
censored: censored✅✅✅✅✅✅✅
censored: uncensored❌✅✅✅✅❌✅
runtimeMin / runtimeMax✅✅❌✅✅✅✅
releaseAfter / releaseBefore✅✅❌✅✅✅✅
availability❌❌✅❌❌❌❌
Gabungkan beberapa filterkombinasi apa punkombinasi apa pun❌ tidak adakombinasi apa punkombinasi apa punkombinasi apa punkombinasi 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 uncensored mengecualikannya.
  • javdb tidak punya filter per-field. Hanya tab tersensor, availability, dan pengurutan kaya; meminta dimensi bernama akan mengecualikannya.
  • javlibrary hanya tersensor. Filter uncensored mengecualikannya.
  • javbus tidak punya dimensi actor. filter.actor yang disematkan mengembalikan 422. Pengurutan juga hanya relevance atau release; sort: rating ditolak.
  • javbus menerima nama Jepang atau Inggris. Klausa aktris, pembuat, dan genre membaca kedua field, jadi 三上悠亜 dan Yua Mikami sama-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 page dan sort. 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 → javdb

Tujuh 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.
  • 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.)

  • censored berbeda makna per sumber. missav tidak punya flag harfiah; API memetakan censored ke judul mosaik arus utama dan uncensored ke semua lainnya (Caribbeancom, 10musume, Tokyo-Hot, 1pondo, FC2, bocoran tanpa sensor, …).

  • javdatabase hanya bahasa Inggris. Masukkan bahasa Inggris atau romaji; q atau 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/runtimeMax dalam menit. sort: release. Berpaginasi.
  • Hanya katalog tersensor. Tanpa uncensored, tanpa availability.
# 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 q dengan "Yua Mikami" tetap menjangkau rilis terbaru. Tambahkan "sort": "release" agar yang baru dulu: pada relevance bawaan, 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, censored dua arah.
  • Tanpa sort, tanpa paginasi sungguhan (halaman 1), tanpa availability.
# 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, dan sort (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.
  • availability selain di javdb.
  • Menggabungkan filter sembarang pada javdb. Tidak punya filter per-field.
  • actor pada javbus. Tidak ada dimensi aktor pria.
  • sort: update, rating, atau views pada javbus. Hanya relevance dan release.
  • Paginasi atau pengurutan pada missav.
  • Membuka halaman melewati 1.000 hasil di fanza/dmm (page × num ≤ 1000).
  • Memfilter /movie atau /random.

Jika kombinasi mustahil: disematkan → 422 dengan alasan; tanpa sematan → dilewati dan berikutnya dicoba.

Selanjutnya

  • Referensi API: operasi /query dengan semua parameter dan playground.
  • Error: kasus 400 dan 422.

Di halaman ini