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

Эндпоинты обзора

Просмотр каталога без кода старта: тренды, похожие тайтлы, релизы по дням, студии, серии, жанры и случайные подборки.

Тринадцать эндпоинтов GET по каталогу, а не по одному коду. Все требуют x-javinfo-key и все тарифицируются. Большинство возвращает meta: источники, число документов, время вызова.

Базовая цена — $0.40 за 1000 вызовов. С num цена растёт с размером страницы выше 10: num=20 стоит $0.80. Формула в Лимитах и тарификации.

ЭндпоинтДля чегоЗа 1000 при значении по умолчанию
/discover/trendingСвежие релизы с рейтингом$0.80 (num=20)
/discover/underratedСтарые тайтлы с высоким рейтингом$0.80 (num=20)
/discover/suggestionАвтодополнение по кодам, исполнителям, тегам и студиям$0.40 (num=8)
/discover/similarТайтлы, похожие на один исходный код$0.48 (num=12)
/discover/duelПара A/B по seed$0.40
/discover/calendarРелизы, сгруппированные по дням$0.40
/discover/tagsСчётчики тегов за период$1.20 (num=30)
/discover/studiosКаталог студий или каталог одной студии$1.20 / $0.80
/discover/seriesОдна серия, сначала новые$0.80 (num=20)
/discover/genresСчётчики жанров по всему каталогу$2.40 (num=60)
/discover/randomСлучайные тайтлы по фильтрам$0.40 (num=10)
/discover/for-youПодборки по истории поиска аккаунта$0.80 (num=20)
/discover/statsИтоги каталога по источникам$0.40

Карточка тайтла

Каждый тайтл в ответе обзора имеет такую форму. Карточка одна для всех эндпоинтов ниже.

ПолеТипПримечания
codeстрокаНормализованный код тайтла, например ABP-002
titleстрока | nullТолько английское название; null, когда у источника его нет. У строк javbus часто title: null, а японское название в titleJa
titleJaстрока | nullЯпонское название
releaseDateстрока | nullYYYY-MM-DD
runtimeMinsчисло | nullМинуты
makerстрока | nullСтудия / мейкер
labelстрока | nullЛейбл
seriesстрока | nullСерия, как её пишет источник
categoriesстрока[]Теги жанров
actressesстрока[]Состав, английские имена, где они есть у источника
coverстрока | nullURL обложки
ratingчисло | nullтолько javlibrary, 1–10; null во всех остальных источниках
sourceстрокаИсточник, который дал эту карточку: fanza, javdatabase, javlibrary, javbus или missav
urlстрока | nullСтраница на сайте источника, если источник её хранит

Карточки схлопываются по code; метаданные берёт первый индекс в порядке предпочтения. rating исключение: рейтинги есть только у javlibrary, поэтому другая карточка остаётся null, даже если рейтинг у тайтла есть.

meta описывает вызов:

ПолеТипПримечания
sourcesстрока[]Публичные имена источников, ответивших попаданиями или счётчиками фасетов. Пустой массив обычно значит, что каталог недоступен
scannedчислоДокументы, прочитанные до ранжирования или фильтрации. 0 на эндпоинтах только с фасетами
latencyMsчислоВремя на стороне сервера

Примеры урезаны: первые элементы, "…" для повторов, длинные названия обрезаны. Значения из реальных ответов.

/discover/trending

API: /discover/trending

Свежие релизы, ранжированные по качеству и дате. Для главной или полки «новое за неделю».

ПараметрТипПо умолчаниюДиапазон
rangeinteger301–365, на сколько дней назад смотреть
numinteger201–50
genrestringнетТочное название категории

Цена: $0.80 за 1000 при num=20 по умолчанию; $0.40 при num ≤ 10.

Обработчик читает последние range дней, от новых, затем ранжирует пул по свежести, рейтингу, размеру галереи, превью и составу. Верхней границы дат нет, поэтому в окно попадают и анонсы с будущими датами.

curl -s 'https://api.javinfo.dev/discover/trending?range=7&num=3' \
  -H "x-javinfo-key: jvi_your_key_here"
{
  "source": "discover:trending",
  "count": 3,
  "results": [
    {
      "code": "FCDSS-120",
      "title": "4 Hours of the Best Anal Licking Service: Sticking My Tongue in Your Asshole! [FALENO Maniac Special Selection]",
      "titleJa": null,
      "releaseDate": "2026-12-03",
      "runtimeMins": 240,
      "maker": "Faleno",
      "label": "Faleno",
      "series": "FALENO Compilation",
      "categories": ["Anal Play", "Beautiful Girl", "…"],
      "actresses": ["Ayaka Tomoda", "Chiharu Mitsuha", "…"],
      "cover": "https://www.javdatabase.com/covers/full/1f/1fcdss00120pl.webp",
      "rating": null,
      "source": "javdatabase",
      "url": "https://www.javdatabase.com/movies/fcdss-120/"
    },
    "…"
  ],
  "meta": {
    "sources": ["fanza", "javdatabase", "…"],
    "scanned": 45,
    "latencyMs": 23
  }
}

Статус: 200, 400, 401, 402, 429.

/discover/underrated

API: /discover/underrated

Тайтлы, достаточно старые, чтобы их пропустили, с уклоном в рейтинг, а не дату. Для полки «незамеченное».

ПараметрТипПо умолчаниюДиапазон
minAgeDaysinteger36530–3650, минимальный возраст в днях
numinteger201–50

Цена: $0.80 за 1000 при num=20 по умолчанию; $0.40 при num ≤ 10.

Рейтинг есть только у javlibrary, поэтому пул из этого индекса: восемь случайных срезов по 30 дней в 12 годах до отсечки. Тайтлы без рейтинга отбрасываются; оценка предпочитает более старые, высоко оценённые и полные записи.

curl -s 'https://api.javinfo.dev/discover/underrated?num=3' \
  -H "x-javinfo-key: jvi_your_key_here"
{
  "source": "discover:underrated",
  "count": 3,
  "results": [
    {
      "code": "IRCP-016",
      "title": "The Price Of Chigasaki Lion Compliant With Me Naked",
      "titleJa": "裸のわたしと言いなりの値段 茅ヶ崎りおん",
      "releaseDate": "2014-07-13",
      "runtimeMins": 120,
      "maker": "Iromegane",
      "label": "Iromegane",
      "series": null,
      "categories": ["Solowork", "Girl", "…"],
      "actresses": ["Shiina Mayu (Chigasaki Rion)"],
      "cover": "https://pics.dmm.co.jp/mono/movie/adult/ircp016/ircp016pl.jpg",
      "rating": 10,
      "source": "javlibrary",
      "url": "https://www.javlibrary.com/en/javlijya24.html"
    },
    "…"
  ],
  "meta": {
    "sources": ["javlibrary"],
    "scanned": 640,
    "latencyMs": 63
  }
}

Статус: 200, 400, 401, 402, 429.

/discover/suggestion

API: /discover/suggestion

Автодополнение для поиска: коды, исполнители, теги, студии вперемешку, без дублей, коды первыми.

ПараметрТипПо умолчаниюДиапазон
qstringобязательноминимум 1 символ
numinteger81–20

Цена: $0.40 за 1000 при num=8; $0.80 при num=20.

Каждая запись говорит, что это и что показывать рядом:

kindvaluelabelextra
codeКод тайтлаТот же кодАнглийское название или японское, когда английского нет
idolId исполнителяИмяURL изображения
tagSlug тегаТот же slugСчётчик
studioНазвание студииТо же названиеСчётчик

extra может быть null. Поиск — то же префиксное совпадение, что в индексах фильмов; n-gram индекса нет. Подсказки строятся по типу и обрезаются до num.

curl -s 'https://api.javinfo.dev/discover/suggestion?q=ABP&num=3' \
  -H "x-javinfo-key: jvi_your_key_here"
{
  "q": "ABP",
  "count": 3,
  "results": [
    {
      "kind": "code",
      "value": "ABP-001",
      "label": "ABP-001",
      "extra": "Lola Misaki at Your Service Newest Beauty Salon Addict"
    },
    {
      "kind": "code",
      "value": "ABP-002",
      "label": "ABP-002",
      "extra": "NEW TOKYO Style 01 - Aikarin"
    },
    "…"
  ]
}

Отсутствующий q отклоняется до запуска обработчика:

curl -s 'https://api.javinfo.dev/discover/suggestion' \
  -H "x-javinfo-key: jvi_your_key_here"
{
  "defined": false,
  "code": "BAD_REQUEST",
  "status": 400,
  "message": "Input validation failed",
  "data": {
    "issues": [
      {
        "expected": "string",
        "code": "invalid_type",
        "path": ["q"],
        "message": "Invalid input: expected string, received undefined"
      }
    ]
  }
}

Статус: 200, 400, 401, 402, 429.

/discover/similar

API: /discover/similar

«Больше похожего». Один код, ранжированные соседи, исходная карточка и оценки. Для страницы тайтла.

ПараметрТипПо умолчаниюДиапазон
qstringобязательноКод тайтла
numinteger121–50

Цена: $0.48 за 1000 при num=12; $0.40 при num ≤ 10.

Исходный код сопоставляется по индексам фильмов. Кандидаты делят первую исполнительницу или один из первых трёх тегов, затем ранжируются по составу, тегам, мейкеру, лейблу, серии, длительности и дате. Исходный тайтл исключён из results; scores выровнен с results по коду, 0–1, три знака.

Код, которого не знает ни один индекс, — это 404, а не пустой 200. Опечатка никогда не тарифицируется.

curl -s 'https://api.javinfo.dev/discover/similar?q=ABP-002&num=3' \
  -H "x-javinfo-key: jvi_your_key_here"
{
  "source": "discover:similar",
  "count": 3,
  "results": [
    {
      "code": "WPC-013",
      "title": "WPC-013 WATER POLE Aikarin",
      "titleJa": "WPC-013 WATER POLE あいかりん",
      "releaseDate": "2023-03-20",
      "runtimeMins": 128,
      "maker": "Prestige",
      "label": "WPC",
      "series": "WATER POLE",
      "categories": ["Hot Girl", "Sailor Suit", "…"],
      "actresses": ["Aikarin"],
      "cover": null,
      "rating": null,
      "source": "missav",
      "url": null
    },
    "…"
  ],
  "meta": {
    "sources": ["fanza", "javdatabase", "…"],
    "scanned": 180,
    "latencyMs": 72
  },
  "seed": {
    "code": "ABP-002",
    "title": "NEW TOKYO Style 01 - Aikarin",
    "titleJa": null,
    "releaseDate": "2013-06-01",
    "runtimeMins": 127,
    "maker": "Prestige",
    "label": "ABSOLUTELY PERFECT",
    "series": "Tokyo Style",
    "categories": ["Facial", "Handjob"],
    "actresses": ["Aikarin"],
    "cover": "https://pics.dmm.co.jp/digital/video/118abp00002/118abp00002pl.jpg",
    "rating": null,
    "source": "fanza",
    "url": null
  },
  "scores": [
    { "code": "WPC-013", "score": 0.5 },
    { "code": "MAS-110", "score": 0.496 },
    "…"
  ]
}

Тот же запрос с неизвестным кодом:

curl -s 'https://api.javinfo.dev/discover/similar?q=ZZZZ-99999&num=3' \
  -H "x-javinfo-key: jvi_your_key_here"
{
  "defined": false,
  "code": "NOT_FOUND",
  "status": 404,
  "message": "no title found for \"ZZZZ-99999\""
}

Статус: 200, 400, 401, 402, 404, 429.

/discover/duel

API: /discover/duel

Пара A/B для игры «какой из двух». Один seed показывает всем две одинаковые карточки.

ПараметрТипПо умолчаниюДиапазон
seedstringсегодняшняя дата UTCлюбая строка
genrestringнетТочное название категории
performerstringнетТочное имя исполнителя

Цена: $0.40 за 1000, фиксированно. Ручки размера страницы нет.

Пул — 40 новейших тайтлов из DMM + FANZA, javdatabase и javlibrary, без дублей по коду, вышедшие и с составом. genre и performer сужают его. PRNG с seed выбирает два и упорядочивает по коду, поэтому a и b на одних сторонах у всех. Пул меняется с релизами, поэтому seed стабилен только в этом окне. a и b могут быть null, если кандидатов меньше двух.

curl -s 'https://api.javinfo.dev/discover/duel?seed=42' \
  -H "x-javinfo-key: jvi_your_key_here"
{
  "seed": "42",
  "a": {
    "code": "DSOD-124",
    "title": "That absolute, total fatso made me come so many times it was embarrassing…",
    "titleJa": "最低最悪なあのデブに恥ずかしいほど何度もイカされて…ションベン垂れ流す肉便器調教された言いなり美人清掃員 天川そら",
    "releaseDate": "2026-11-06",
    "runtimeMins": 141,
    "maker": "Das",
    "label": "Das",
    "series": null,
    "categories": ["Deep Throat", "Embarrassment", "…"],
    "actresses": ["Sora Amakawa"],
    "cover": "https://pics.dmm.co.jp/digital/video/dsod00124/dsod00124pl.jpg",
    "rating": null,
    "source": "fanza",
    "url": null
  },
  "b": {
    "code": "VRKM-1944",
    "title": "[VR] Getting Hooked on Sora Amakawa",
    "titleJa": null,
    "releaseDate": "2026-11-06",
    "runtimeMins": 84,
    "maker": "K M Produce",
    "label": "K M Produce",
    "series": "pond",
    "categories": ["8KVR", "Beautiful Tits", "…"],
    "actresses": ["Sora Amakawa"],
    "cover": "https://www.javdatabase.com/covers/full/vr/vrkm01944pl.webp",
    "rating": null,
    "source": "javdatabase",
    "url": "https://www.javdatabase.com/movies/vrkm-1944/"
  }
}

Статус: 200, 401, 402, 429.

/discover/calendar

API: /discover/calendar

Релизы между двумя датами по дням. Для календаря релизов.

ПараметрТипПо умолчаниюДиапазон
fromstringсегодняYYYY-MM-DD
tostringсегодня + 30 днейYYYY-MM-DD

Цена: $0.40 за 1000, фиксированно. Каждый вызов в цикле ниже — отдельный.

Обе даты включительно. Значения независимы: только from всё равно кончается через 30 дней от сегодня, поэтому для прошлого передавайте обе. Дни без релизов опускаются; группы по возрастанию. Каждый релиз — полная карточка.

Длинные диапазоны обрываются раньше

Каждый источник возвращает не более 1000 строк за вызов, поэтому насыщенный диапазон заполняется примерно за 5 дней. Возвращаются только полные дни, а эндпоинт говорит, где остановился:

ПолеЗначение
throughПоследний полностью покрытый день, YYYY-MM-DD. Равен to, если ответ не обрезан.
truncatedtrue, когда дни после through обрезаны.

from=2026-11-01&to=2026-11-14 слишком длинный для одного вызова:

curl -s 'https://api.javinfo.dev/discover/calendar?from=2026-11-01&to=2026-11-14' \
  -H "x-javinfo-key: jvi_your_key_here"
{
  "from": "2026-11-01",
  "to": "2026-11-14",
  "through": "2026-11-05",
  "truncated": true,
  "count": 1011,
  "days": [
    {
      "date": "2026-11-01",
      "count": 109,
      "releases": [
        {
          "code": "DANDYA-045",
          "title": null,
          "titleJa": "母親と行った銭湯でコッソリおちんちんをいじってくるお姉さんに逃げても追いかけられ何度も精子を飲まれてしまいました",
          "releaseDate": "2026-11-01",
          "runtimeMins": 175,
          "maker": "DANDY",
          "label": null,
          "series": null,
          "categories": [
            "4K",
            "Big Asses",
            "Big Tits",
            "…"
          ],
          "actresses": [],
          "cover": "https://pics.dmm.co.jp/digital/video/1dandya00045/1dandya00045pl.jpg",
          "rating": null,
          "source": "fanza",
          "url": null
        },
        "…"
      ]
    },
    "…"
  ],
  "meta": {
    "sources": [
      "fanza",
      "javdatabase",
      "javlibrary",
      "javbus",
      "missav"
    ],
    "scanned": 3136,
    "latencyMs": 352
  }
}

В ответе 1,011 тайтлов с 1 по 5 ноября. Диапазон, который помещается, возвращается целиком: from=2026-11-01&to=2026-11-03 даёт "through": "2026-11-03" и "truncated": false.

Остальное — повторный вызов с from на день после through, пока truncated не станет false. Второй вызов — from=2026-11-06&to=2026-11-14:

{
  "from": "2026-11-06",
  "to": "2026-11-14",
  "through": "2026-11-14",
  "truncated": false,
  "count": 1101,
  "days": [
    "…"
  ],
  "meta": {
    "sources": [
      "fanza",
      "javdatabase",
      "javbus",
      "missav"
    ],
    "scanned": 1957,
    "latencyMs": 627
  }
}

Тот же цикл в коде:

let from = '2026-11-01';
const to = '2026-11-14';
const days = [];

while (from <= to) {
  const res = await fetch(
    `https://api.javinfo.dev/discover/calendar?from=${from}&to=${to}`,
    { headers: { 'x-javinfo-key': KEY } },
  );
  const page = await res.json();
  days.push(...page.days);
  if (!page.truncated) break;

  const next = new Date(`${page.through}T00:00:00Z`);
  next.setUTCDate(next.getUTCDate() + 1);
  from = next.toISOString().slice(0, 10);
}

Если один день больше лимита, он возвращается частично, through равен этому дню, а цикл идёт дальше.

Статус: 200, 400, 401, 402, 429.

/discover/tags

API: /discover/tags

Счётчики тегов за окно, от большего к меньшему. Для блока «теги в тренде».

ПараметрТипПо умолчаниюДиапазон
rangeinteger301–365, дней назад
numinteger301–100

Цена: $1.20 за 1000 при num=30; $0.40 при num ≤ 10.

Счётчики из фасетов DMM + FANZA и javdatabase. Теги канонизируются до подсчёта, поэтому варианты сливаются. Значения — slug, а не отображаемые имена.

curl -s 'https://api.javinfo.dev/discover/tags?range=7&num=5' \
  -H "x-javinfo-key: jvi_your_key_here"
{
  "source": "discover:tags",
  "count": 5,
  "results": [
    { "tag": "featured-actress", "count": 3476 },
    { "tag": "hi-def", "count": 2834 },
    "…"
  ],
  "meta": {
    "sources": ["fanza", "javdatabase"],
    "scanned": 0,
    "latencyMs": 117
  }
}

Статус: 200, 400, 401, 402, 429.

/discover/studios

API: /discover/studios

Один маршрут, две формы. Без q — справочник студий по объёму выпуска за range; с q — каталог студии, сначала новые. kind говорит, что вы получили: directory или catalogue.

ПараметрТипПо умолчаниюДиапазон
qstringнетТочное название студии; переключает в режим каталога
rangeinteger36530–3650, только режим справочника
numinteger30 справочник, 20 каталог1–100 справочник; каталог ограничен 50
pageinteger1от 1 и выше, только режим каталога

Цена: справочник $1.20 за 1000 при num=30; каталог $0.80 при num=20. Каталог ограничивает num 50, поэтому максимум $2.00.

range игнорируется с q, page — без. В каталоге total — оценка числа тайтлов студии: листайте по ней.

curl -s 'https://api.javinfo.dev/discover/studios?num=3' \
  -H "x-javinfo-key: jvi_your_key_here"
{
  "kind": "directory",
  "source": "discover:studios",
  "count": 3,
  "results": [
    { "studio": "MOODYZ", "count": 2688 },
    { "studio": "S1 NO.1 STYLE", "count": 2382 },
    "…"
  ],
  "meta": {
    "sources": ["fanza"],
    "scanned": 0,
    "latencyMs": 416
  }
}
curl -s 'https://api.javinfo.dev/discover/studios?q=S1%20NO.1%20STYLE&num=3' \
  -H "x-javinfo-key: jvi_your_key_here"
{
  "kind": "catalogue",
  "source": "discover:studio",
  "studio": "S1 NO.1 STYLE",
  "total": 25713,
  "count": 3,
  "results": [
    {
      "code": "K9SNOS349",
      "title": null,
      "titleJa": "【数量限定】特大号新人 希望みう 104cm Iの素顔 濃厚なキスして、本能で交わって、ありのままを曝け出す。 (ブルーレイディスク) 生写真3枚セット",
      "releaseDate": "2026-11-25",
      "runtimeMins": 120,
      "maker": "S1 NO.1 STYLE",
      "label": "S1 NO.1 STYLE",
      "series": null,
      "categories": ["Big Tits", "Featured Actress", "…"],
      "actresses": ["希望みう"],
      "cover": "https://pics.dmm.co.jp/mono/movie/adult/k9snos349/k9snos349ps.jpg",
      "rating": null,
      "source": "fanza",
      "url": null
    },
    "…"
  ],
  "meta": {
    "sources": ["fanza"],
    "scanned": 3,
    "latencyMs": 7
  }
}

Статус: 200, 400, 401, 402, 429.

/discover/series

API: /discover/series

Каталог одной серии, сначала новые. Чтобы перечислить остальное, когда вызывающий открыл тайтл.

ПараметрТипПо умолчаниюДиапазон
qstringобязательноТочное название серии
numinteger201–50
pageinteger1от 1 и выше

Цена: $0.80 за 1000 при num=20 по умолчанию; $0.40 при num ≤ 10.

q — точное совпадение с названием серии в DMM + FANZA, не поиск. Передавайте строку, которую хранит каталог: её видно в series любого тайтла. Часть названия или другое написание вернёт 200 с count: 0, а не 404. total — оценка числа тайтлов серии.

curl -s 'https://api.javinfo.dev/discover/series?q=Unfaithful%20Housewife&num=2' \
  -H "x-javinfo-key: jvi_your_key_here"
{
  "source": "discover:series",
  "count": 2,
  "results": [
    {
      "code": "JUKD-481",
      "title": "Unfaithful Housewife 5",
      "titleJa": "不倫妻5",
      "releaseDate": "2006-12-25",
      "runtimeMins": 87,
      "maker": "MADONNA",
      "label": "Madonna",
      "series": "Unfaithful Housewife",
      "categories": ["69", "Adultery", "…"],
      "actresses": ["Anna Muto", "Hiromi Yuki", "…"],
      "cover": "https://pics.dmm.co.jp/digital/video/jukd00481/jukd00481pl.jpg",
      "rating": null,
      "source": "fanza",
      "url": null
    },
    "…"
  ],
  "meta": {
    "sources": ["fanza"],
    "scanned": 2,
    "latencyMs": 14
  },
  "series": "Unfaithful Housewife",
  "total": 7
}

Статус: 200, 400, 401, 402, 429.

/discover/genres

API: /discover/genres

Таксономия жанров со счётчиками по каталогу. Чтобы наполнить меню фильтров.

ПараметрТипПо умолчаниюДиапазон
numinteger601–200

Цена: $2.40 за 1000 при num=60; $0.40 при num ≤ 10; $8.00 при num=200.

Здесь отображаемые названия (Featured Actress), а не slug, как в /discover/tags. Счётчики только из DMM + FANZA; другой источник их не увеличивает.

curl -s 'https://api.javinfo.dev/discover/genres?num=5' \
  -H "x-javinfo-key: jvi_your_key_here"
{
  "source": "discover:genres",
  "count": 5,
  "results": [
    { "genre": "Featured Actress", "count": 589656 },
    { "genre": "Creampie", "count": 438721 },
    "…"
  ],
  "meta": {
    "sources": ["fanza"],
    "scanned": 0,
    "latencyMs": 163
  }
}

Статус: 200, 400, 401, 402, 429.

/discover/random

API: /discover/random

Случайные тайтлы под необязательные фильтры. Для кнопки «удиви меня».

ПараметрТипПо умолчаниюДиапазон
genrestringнетТочное название категории
performerstringнетТочное имя исполнителя
studiostringнетТочное название студии
censoredstringнетcensored или uncensored
numinteger101–50

Цена: $0.40 за 1000 при num=10; $2.00 при num=50.

Фильтры объединяются через AND. Выборка неравномерна: обработчик читает пять случайных месяцев, берёт смещение в каждом, перемешивает пул и добирает его, когда узкий фильтр оставляет мало. Последовательные вызовы дают несвязанные тайтлы.

censored меняет что-то только как uncensored: тогда читается раздел без цензуры javbus вместо DMM + FANZA. Передать censored — то же, что не передавать. Кэша нет, поэтому каждый вызов выбирает заново. В ответе нет meta и source.

curl -s 'https://api.javinfo.dev/discover/random?num=3' \
  -H "x-javinfo-key: jvi_your_key_here"
{
  "count": 3,
  "results": [
    {
      "code": "JUY-689",
      "title": "A Former Race Queen Married Woman Ai Izumi 32 Years Old Her Adult Video Debut!!",
      "titleJa": "元レースクイーンの人妻 和泉藍 32歳 AVDebut!!",
      "releaseDate": "2018-11-25",
      "runtimeMins": 120,
      "maker": "MADONNA",
      "label": "Madonna",
      "series": null,
      "categories": ["Debut", "Digital Mosaic", "…"],
      "actresses": ["Ai Izumi"],
      "cover": "https://pics.dmm.co.jp/digital/video/juy00689/juy00689pl.jpg",
      "rating": null,
      "source": "fanza",
      "url": null
    },
    "…"
  ]
}

И с фильтром без цензуры:

curl -s 'https://api.javinfo.dev/discover/random?censored=uncensored&num=2' \
  -H "x-javinfo-key: jvi_your_key_here"
{
  "count": 2,
  "results": [
    {
      "code": "KING-1009",
      "title": null,
      "titleJa": "Computer Fantasy",
      "releaseDate": "2004-08-24",
      "runtimeMins": 90,
      "maker": "POPMedia",
      "label": null,
      "series": null,
      "categories": [],
      "actresses": [],
      "cover": "https://www.javbus.com/imgs/cover/qq6_b.jpg",
      "rating": null,
      "source": "javbus",
      "url": "https://www.javbus.com/en/KING1009"
    },
    "…"
  ]
}

Статус: 200, 400, 401, 402, 429.

/discover/for-you

API: /discover/for-you

Рекомендации по истории поиска аккаунта. Два ключа одного аккаунта делят историю: она на пользователя, а не на ключ.

ПараметрТипПо умолчаниюДиапазон
numinteger201–50
lookbackinteger201–100, сколько последних поисков читать

Цена: $0.80 за 1000 вызовов при num=20 по умолчанию; $0.40 при num ≤ 10.

Считаются только успешные вызовы /movie, /query и /idols. Обработчик читает последние lookback строк, хранит до пяти разных запросов, берёт теги их верхних попаданий и выбирает свежие тайтлы с этими тегами. Порядок задаёт трендовый счёт /discover/trending.

basis объясняет выбор для показа: запросы, выведенные теги и fallback. Без истории fallback равен true, а ответ — новейшие тайтлы за 30 дней.

curl -s 'https://api.javinfo.dev/discover/for-you?num=3' \
  -H "x-javinfo-key: jvi_your_key_here"
{
  "source": "discover:for-you",
  "count": 1,
  "results": [
    {
      "code": "FC2-PPV-4973873",
      "title": "FC2-PPV-4973873 [50% OFF for one week] [First time] A 35-year-old married bank employee with a cold demeanor. She's unp…",
      "titleJa": "FC2-PPV-4973873 【一週間50%OFF】【初】35歳既婚の塩対応銀行員。近寄りがたいから一転、バキュームフェラで濃厚ザーメンを搾り取る。口内射精、ごっくん合計2発。",
      "releaseDate": "2026-09-09",
      "runtimeMins": 35,
      "maker": "Fc2",
      "label": null,
      "series": null,
      "categories": ["Wife", "Adultery", "…"],
      "actresses": [],
      "cover": null,
      "rating": null,
      "source": "missav",
      "url": null
    }
  ],
  "meta": {
    "sources": ["missav"],
    "scanned": 1,
    "latencyMs": 115
  },
  "basis": {
    "queries": ["JQJ-002", "JUR-851", "…"],
    "tags": ["featured-actress", "big-tits", "…"],
    "fallback": false
  }
}

Статус: 200, 400, 401, 402, 429.

/discover/stats

API: /discover/stats

Итоги по источникам с отметкой времени. Без параметров.

Цена: $0.40 за 1000, фиксированно.

Счётчики — документы индекса: тайтл из двух источников считается дважды. asOf — время чтения. Публичный GET /stats не требует ключа и кэшируется на сутки, но сообщает счётчики провайдеров: FANZA и DMM раздельно, без общего итога.

curl -s 'https://api.javinfo.dev/discover/stats' \
  -H "x-javinfo-key: jvi_your_key_here"
{
  "total": 3980531,
  "sources": {
    "fanza": 1759469,
    "javdatabase": 505464,
    "javlibrary": 430950,
    "javbus": 663879,
    "missav": 519017,
    "idols": 101752
  },
  "asOf": "2026-11-06T18:30:56.778Z"
}

Статус: 200, 401, 402, 429.

Ошибки

Входные данные проверяются до обработчика. Плохой параметр — 400 с code: "BAD_REQUEST", message: "Input validation failed" и массивом issues с именем параметра. Эта поверхность никогда не возвращает 422: значение вне диапазона тоже 400, как и неверный тип. range — это дни, поэтому range=7 работает, а range=week — 400 с issues[].path ["range"]. Тело /discover/trending?num=500, выше максимума 50:

{
  "defined": false,
  "code": "BAD_REQUEST",
  "status": 400,
  "message": "Input validation failed",
  "data": {
    "issues": [
      {
        "origin": "number",
        "code": "too_big",
        "maximum": 50,
        "inclusive": true,
        "path": ["num"],
        "message": "Too big: expected number to be <=50"
      }
    ]
  }
}

Отсутствующий ключ и отклонённый различаются. Совсем без ключа:

{
  "defined": false,
  "code": "UNAUTHORIZED",
  "status": 401,
  "message": "Unauthorized"
}

Ключ, который не принимает фильтр:

{ "error": "invalid api key" }

Не хватает кредитов. Ничего не списывается; Retry-After — час:

{
  "defined": false,
  "code": "PAYMENT_REQUIRED",
  "status": 402,
  "message": "insufficient balance"
}

Превышен минутный лимит аккаунта. Retry-After в секундах:

{ "error": "rate limit exceeded" }

404 есть только у /discover/similar, показан выше. Другие эндпоинты обзора его не возвращают.

Что бесплатно

Списывается только свежий 200. Бесплатно:

  • Попадание в кэш: X-Cache: HIT, без кредитов. У /discover/random кэша нет.
  • Любой 4xx. Неудачный запрос не тарифицируется.
  • Деградировавший ответ: чтение вышестоящего индекса не удалось, API отдаёт что есть, ставит X-Degraded в число неудач и не списывает и не кэширует. Проверяйте, если ответ скудный.

X-Balance-Remaining — остаток кредитов после вызова.

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