Фильтрация
Фильтруйте, сортируйте и листайте результаты /query; здесь же поддержка каждого провайдера.
Фильтрация применяется только к
/query./movieи/randomс одним результатом фильтры не принимают.
1. Быстрый старт
/query принимает четыре необязательных параметра помимо q: 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").
$0.40 за 1000 вызовов при num=10, растёт с размером страницы
(тарификация). Фильтры цену не меняют. Без результатов (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" | Есть стрим / magnet-ссылки / субтитры / отдельный тайтл |
sort
relevance (по умолчанию), release, update, rating, views.
relevance— релевантность текста. По умолчанию.release— сначала новые по дате выпуска.update— сначала недавно добавленные или обновлённые.rating— сначала с высоким рейтингом.views— зарезервировано. Не поддерживается (всегда отклоняется).
page
Целое с 1. Не указано = страница 1. Размер задаёт num.
Предел глубокой пагинации. Индекс fanza/dmm ограничивает набор 1000 строками, поэтому
page × num≤ 1000: приnum: 50страница 20 последняя. Дальше —404(нет результатов), не ошибка. Чтобы уйти глубже, сузьте запрос черезfilter.
num
Результатов на страницу. Целое, по умолчанию 10, максимум 50 (большие значения
ограничиваются, не отклоняются; num < 1 → 400). missav ограничен своим числом
результатов; остальные листаются. Смещение page считается из num (страница 2 при
num=10 пропускает первые 10).
Числовые входные данные приводятся к числу в обоих методах, включая page и
filter[...]; GET с filter[runtimeMin]=120 работает.
3. Матрица возможностей провайдеров
/query ищет по нескольким провайдерам, и не все поддерживают все фильтры. Прочитайте
таблицу перед составлением запроса.
Провайдеры (и их идентификаторы): query:fanza, query:dmm (две витрины DMM + FANZA),
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. Всегда первая страница по релевантности. - javdatabase, sextb, javlibrary и javbus — наш каталог. Фильтрация и пагинация быстрые и полные, без ограничений источника.
4. Как работает выбор провайдера (каскад)
/query пробует провайдеров по порядку; побеждает первый действительный результат:
FANZA → DMM → javdatabase → sextb → javlibrary → javbus → missav → javdbПервые семь (до 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или значение не совпадёт, и провайдер пропускается.
Если значение не совпало, вы просто получите меньше строк или ни одной (и, без закрепления, каскад продолжится). Ошибки нет: пустое совпадение — не ошибка.
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\"" }Форма результата — стандартное тело /query из §6. Запись /movie и торренты — в
разделе javbus.
8. Что невозможно в v1
- Нормализация значений между провайдерами. Единого словаря нет; говорите на диалекте каждого провайдера (английский или японский, точные строки).
sort: views— зарезервировано, не реализовано.- Несколько значений на измерение. Одно на поле (
genre: ["a","b"]нельзя). - Диапазоны на javdb. Везде, кроме него, работают.
availabilityвне javdb.- Произвольные комбинации фильтров на javdb. Фильтров по полям нет.
actorна javbus. Нет измерения для мужского актёра.sort: update,ratingилиviewsна javbus. Толькоrelevanceиrelease.- Пагинация и сортировка на missav.
- Пагинация дальше 1000 результатов на fanza/dmm (
page × num≤ 1000). - Фильтрация
/movieили/random.
Если комбинация невозможна: закреплено → 422 с причиной; не закреплено → провайдер
пропускается и пробуется следующий.
Далее
- Справочник API: операция
/queryсо всеми параметрами и песочницей. - Ошибки: случаи
400и422.