Перейти к содержимому
javinfo

Фильтрация

Фильтруйте, сортируйте и листайте результаты /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 / dmmmissavjavdbjavdatabasesextbjavlibraryjavbus
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 принимает оба языка и сопоставляет по обоим.
  • Имена должны совпадать точно. Не подстрока. Индекс 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 с причиной; не закреплено → провайдер пропускается и пробуется следующий.

Далее

На этой странице