フィルタリング
/query の結果をフィルター・ソート・ページングし、プロバイダー別の対応機能を確認する。
フィルタリングは
/queryのみ。単一結果の/movieと/randomはフィルターを受け付けません。
1. クイックスタート
/query は q に加えて 4 つの任意入力を受け付けます:filter、sort、page、num
(ページサイズ)。GET と POST の両方で動作します。
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 は省略可能。キーワードなしでカテゴリー全体を閲覧できます:
# 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" } }'q もフィルターもない → 400("provide a search query or at least one filter")。
デフォルト num=10 で 1,000 コールあたり $0.40、ページサイズに比例
(料金)。フィルターは料金を変えません。結果なし(200 と
count: 0)やエラーは無料です。
2. 入力パラメーター
filter
オブジェクト。全フィールド任意。必要なものだけ設定します。
| フィールド | 型 | 意味 |
|---|---|---|
genre | 文字列 | カテゴリー / ジャンル |
actress | 文字列 | 女優(出演者) |
maker | 文字列 | メーカー / スタジオ |
series | 文字列 | シリーズ |
director | 文字列 | 監督 |
label | 文字列 | レーベル |
actor | 文字列 | 男優 |
censored | "censored" | "uncensored" | モザイクの状態 |
runtimeMin | 数値(分) | 最短の再生時間 |
runtimeMax | 数値(分) | 最長の再生時間 |
releaseAfter | 文字列 YYYY-MM-DD | この日付以降に発売 |
releaseBefore | 文字列 YYYY-MM-DD | この日付以前に発売 |
availability | "playable" | "magnets" | "subtitle" | "single" | ストリーム / マグネット / 字幕あり / 単一作品 |
sort
relevance(デフォルト)、release、update、rating、views。
relevance— テキストの関連度。デフォルト。release— 発売日の新しい順。update— 最近追加・更新された順。rating— 評価の高い順。views— 予約済み。どのプロバイダーも未対応(常に拒否)。
page
1 始まりの整数。省略時は 1 ページ目。ページサイズは num。
深いページングの上限。 fanza/dmm のインデックスは結果セットを 1,000 件で打ち切る ため、
page × numは 1000 以下に。num: 50なら 20 ページ目が最後です。それ以上は エラーではなく404(結果なし)。さらに掘るにはfilterで絞り込みます。
num
1 ページの結果数。整数、デフォルト 10、最大 50。超過は拒否ではなくクランプ。
num < 1 → 400。missav は自身の検索件数が上限。他はページング対応。page の
オフセットは num から算出(num=10 の 2 ページ目は最初の 10 件をスキップ)。
数値入力は両メソッドで変換され、page やネストした filter[...] も含みます。
filter[runtimeMin]=120 付きの GET も機能します。
3. プロバイダー対応マトリクス
/query は複数プロバイダーを検索し、すべてが全フィルターに対応するわけではありません。
クエリを組み立てる前に表を読んでください。
プロバイダーと ID:query:fanza、query:dmm(DMM + FANZA の2つのストアフロント)、query:javdatabase、query:sextb、
query:javlibrary、query:javbus、query:missav、query:javdb。
| 機能 | fanza / dmm | missav | javdb | javdatabase | sextb | javlibrary | javbus |
|---|---|---|---|---|---|---|---|
genre | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
actress | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
maker | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
series | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
director | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
label | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
actor | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ |
censored: censored | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
censored: uncensored | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
runtimeMin / runtimeMax | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
releaseAfter / releaseBefore | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
availability | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| 複数フィルターの組み合わせ | 任意の組み合わせ | 任意の組み合わせ | ❌ なし | 任意の組み合わせ | 任意の組み合わせ | 任意の組み合わせ | 任意の組み合わせ |
sort: relevance | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
sort: release | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
sort: update | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
sort: rating | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
sort: views | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
page | ✅ | ❌(常に 1 ページ目) | ✅ | ✅ | ✅ | ✅ | ✅ |
凡例:✅ 対応 · ❌ 非対応。
補足:
- fanza/dmm はモザイクありのみ。
uncensoredで除外されます。 - javdb にフィールド単位のフィルターはありません。 粗いモザイク有無、
availability、 充実したソートのみ。名前付き次元を要求すると除外されます。 - javlibrary はモザイクありのみ。
uncensoredで除外されます。 - javbus に
actor次元はありません。filter.actorを固定すると422。ソートはrelevanceとreleaseのみで、sort: ratingは拒否。 - javbus は日本語名と英語名を受け付けます。 出演者・メーカー・ジャンルは両方の
フィールドを読むため、
三上悠亜もYua Mikamiも一致。ジャンルは英語名で、日本語名も 併記。 - javdatabase は英語のみ。 コーパスは英語サイトそのまま。日本語クエリ(
巨乳)は 一致せず、スキップされます。ローマ字か英語を渡してください。 - missav は
pageとsortを無視。 常に 1 ページ目を関連度順で返します。 - javdatabase、sextb、javlibrary、javbus は自前のカタログ。 フィルタリングとページングが 高速かつ完全で、上流の上限もありません。
4. プロバイダー選択の仕組み(ウォーターフォール)
/query はプロバイダーを順番に試し、最初の有効な結果を採用します:
FANZA → DMM → javdatabase → sextb → javlibrary → javbus → missav → javdb最初の 7 つ(missav まで)は自前のインデックス。javdb はライブ取得のフォールバックです。
満たせないフィルターの扱いは、ピン留めの有無で変わります。
ピン留めなし(デフォルト)— スキップして次へ
providers を送らない場合、全プロバイダーが候補。完全に満たせないものは黙って
スキップされ、次へ進みます。リクエスト全体を満たす最初のプロバイダーが応答します。
# 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", ... }どのプロバイダーも満たせない → 理由付きの 422。
ピン留めあり — ハードエラー
providers で特定のプロバイダーを強制。満たせない場合は 422 で失敗し、message に
理由。黙って破棄されることはありません。
# 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 はカンマ区切りリストか配列。query: プレフィックスは任意です:
"providers": ["fanza","missav"] または "providers": "javdb"。
5. 値はそのまま透過
v1 のパススルー:フィルター値はプロバイダーのバックエンドにそのまま送られます。 共有の分類体系も、あいまい検索もありません。あるプロバイダーで効く値が別のプロバイダーでは 一致しないことはよくあり、メタデータの保存方法の違いによります。
考慮すべき点:
-
ジャンルはプロバイダーごとに異なります。
- fanza/dmm、javdatabase、sextb は英語(
"Big Tits"、"creampie")。 - missav は日本語(
"巨乳"、"フィスト")。英語では何も返りません。 - javbus は両方を受け付け、両方に照合します。
- fanza/dmm、javdatabase、sextb は英語(
-
名前は完全一致。 部分文字列ではありません。DMM + FANZA のインデックスは別名を名前 に組み込みます(例:
"Ema Kisaki (HARUKI, Haruki Kato)")。actress: "Ema Kisaki"では ゼロ件。保存された完全な文字列が必要です。(v1 の既知の粗さ。) -
censoredの意味はソースごとに違います。 missav にフラグはありません。API がcensoredを主流のモザイク作品、uncensoredをそれ以外すべて(Caribbeancom、 10musume、Tokyo-Hot、1pondo、FC2、無修正流出など)に割り当てます。 -
javdatabase は英語のみ。 英語かローマ字を渡してください。日本語の
qや値は一致 せず、スキップされます。
一致しなくても、件数が減るか 0 件になるだけです。ピン留めなしならウォーターフォールは 続行し、エラーにはなりません。
6. レスポンスの構造
ボディは採用プロバイダーの結果セットです:
{
"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 はスーパーセットで、応答プロバイダーのキーだけを含みます。コアフィールド(id、
dvdId、title、cover、releaseDate)は全プロバイダーで共通です。
レスポンスヘッダー:X-Response-Time-Ms、X-Balance-Remaining。
7. プロバイダー別チートシート
fanza / dmm(DMM + FANZA)— 最も充実した構造化フィルター。
- 全名前付き次元を自由に組み合わせ。英語のジャンルと名前。
runtimeMin/runtimeMaxは分単位。sort: release。ページング。- モザイクありのみ。
uncensored、availabilityなし。
# Big-tits titles over 120 min, newest first
-d '{ "filter": { "genre": "Big Tits", "runtimeMin": 120 }, "sort": "release" }'名前で検索。 英語タイトルは 2022 年半ばまでで、以降は日本語のみ。出演者名 (ローマ字)は別にインデックスされるため、
qに"Yua Mikami"と入れれば新作にも 届きます。"sort": "release"で新しい順に。デフォルトのrelevanceでは、英語タイトル に名前を含む古い作品が上位に来ます。
# 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 — 最も広いフィルター範囲、関連度順のみ。
- 全名前付き次元(ジャンルは日本語)、再生時間と発売日の範囲、
censored両方向。 sortなし、実質ページングなし(1 ページ目のみ)、availabilityなし。
# Uncensored titles matching "caribbean"
-d '{ "q": "caribbean", "filter": { "censored": "uncensored" } }'
# Japanese genre browse
-d '{ "q": "SSIS", "filter": { "genre": "巨乳" } }'javdb — フィールドフィルターなし、最高のソートと availability。
censored(両方向)、availability、sort(relevance/release/update/rating)のみ。- ページング。genre/actress/maker なし。
# Playable, highest rated
-d '{ "q": "ABP", "filter": { "availability": "playable" }, "sort": "rating" }'javdatabase — 完全な英語カタログ。有碼と無修正、全名前付き次元、両方の範囲。英語の値
のみ(日本語 q はスキップ)。sort: release。ページング。availability なし。
# Creampie titles from S1
-d '{ "filter": { "genre": "creampie", "maker": "S1 NO.1 STYLE" } }'sextb — ストリーム込み、自前カタログ。全名前付き次元、両方の範囲、censored 両方向。
sort: release。ページング。availability なし。
javlibrary — モザイクありのみ、自前カタログ。全名前付き次元、両方の範囲。
sort: release。ページング。availability なし。
javbus — トレントと広い日本語カタログ、自前インデックス。actor を除く全名前付き次元、
両方の範囲、censored 両方向。出演者・メーカー・ジャンルは日本語か英語。
sort: relevance / release。ページング。availability なし。トレントは /movie の
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 }'javbus を固定してできないことを要求 → 本物の 422:
# 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\"" }結果は §6 の標準 /query ボディ。/movie のレコードとトレントは
javbus の節へ。
8. v1 の制限
- プロバイダー間の値の正規化。 統一語彙はなく、各プロバイダーの方言(英語 vs 日本語、 完全一致)を使います。
sort: views— 予約済みで未実装。- 1 次元 1 値。
genre: ["a","b"]は不可。 - javdb の範囲指定。 他はすべて対応。
- javdb 以外の
availability。 - javdb の任意フィルター組み合わせ。 フィールドフィルターがありません。
- javbus の
actor。 男優次元がありません。 - javbus の
sort: update、rating、views。relevanceとreleaseのみ。 - missav のページングとソート。
- fanza/dmm の 1,000 件超えページング(
page × num≤ 1000)。 /movieや/randomのフィルタリング。
不可能な組み合わせ:ピン留めあり → 理由付き 422、なし → スキップして次へ。
次へ
- API リファレンス:
/queryの全フィルターパラメーターとライブプレイグラウンド。 - エラー:
400と422。