Эндпоинты обзора
Просмотр каталога без кода старта: тренды, похожие тайтлы, релизы по дням, студии, серии, жанры и случайные подборки.
Тринадцать эндпоинтов 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 | строка | null | YYYY-MM-DD |
runtimeMins | число | null | Минуты |
maker | строка | null | Студия / мейкер |
label | строка | null | Лейбл |
series | строка | null | Серия, как её пишет источник |
categories | строка[] | Теги жанров |
actresses | строка[] | Состав, английские имена, где они есть у источника |
cover | строка | null | URL обложки |
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
Свежие релизы, ранжированные по качеству и дате. Для главной или полки «новое за неделю».
| Параметр | Тип | По умолчанию | Диапазон |
|---|---|---|---|
range | integer | 30 | 1–365, на сколько дней назад смотреть |
num | integer | 20 | 1–50 |
genre | string | нет | Точное название категории |
Цена: $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
Тайтлы, достаточно старые, чтобы их пропустили, с уклоном в рейтинг, а не дату. Для полки «незамеченное».
| Параметр | Тип | По умолчанию | Диапазон |
|---|---|---|---|
minAgeDays | integer | 365 | 30–3650, минимальный возраст в днях |
num | integer | 20 | 1–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
Автодополнение для поиска: коды, исполнители, теги, студии вперемешку, без дублей, коды первыми.
| Параметр | Тип | По умолчанию | Диапазон |
|---|---|---|---|
q | string | обязательно | минимум 1 символ |
num | integer | 8 | 1–20 |
Цена: $0.40 за 1000 при num=8; $0.80 при num=20.
Каждая запись говорит, что это и что показывать рядом:
kind | value | label | extra |
|---|---|---|---|
code | Код тайтла | Тот же код | Английское название или японское, когда английского нет |
idol | Id исполнителя | Имя | URL изображения |
tag | Slug тега | Тот же 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
«Больше похожего». Один код, ранжированные соседи, исходная карточка и оценки. Для страницы тайтла.
| Параметр | Тип | По умолчанию | Диапазон |
|---|---|---|---|
q | string | обязательно | Код тайтла |
num | integer | 12 | 1–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 показывает всем две одинаковые карточки.
| Параметр | Тип | По умолчанию | Диапазон |
|---|---|---|---|
seed | string | сегодняшняя дата UTC | любая строка |
genre | string | нет | Точное название категории |
performer | string | нет | Точное имя исполнителя |
Цена: $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
Релизы между двумя датами по дням. Для календаря релизов.
| Параметр | Тип | По умолчанию | Диапазон |
|---|---|---|---|
from | string | сегодня | YYYY-MM-DD |
to | string | сегодня + 30 дней | YYYY-MM-DD |
Цена: $0.40 за 1000, фиксированно. Каждый вызов в цикле ниже — отдельный.
Обе даты включительно. Значения независимы: только from всё равно кончается через 30 дней от
сегодня, поэтому для прошлого передавайте обе. Дни без релизов опускаются; группы по возрастанию.
Каждый релиз — полная карточка.
Длинные диапазоны обрываются раньше
Каждый источник возвращает не более 1000 строк за вызов, поэтому насыщенный диапазон заполняется примерно за 5 дней. Возвращаются только полные дни, а эндпоинт говорит, где остановился:
| Поле | Значение |
|---|---|
through | Последний полностью покрытый день, YYYY-MM-DD. Равен to, если ответ не обрезан. |
truncated | true, когда дни после 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
Счётчики тегов за окно, от большего к меньшему. Для блока «теги в тренде».
| Параметр | Тип | По умолчанию | Диапазон |
|---|---|---|---|
range | integer | 30 | 1–365, дней назад |
num | integer | 30 | 1–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.
| Параметр | Тип | По умолчанию | Диапазон |
|---|---|---|---|
q | string | нет | Точное название студии; переключает в режим каталога |
range | integer | 365 | 30–3650, только режим справочника |
num | integer | 30 справочник, 20 каталог | 1–100 справочник; каталог ограничен 50 |
page | integer | 1 | от 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
Каталог одной серии, сначала новые. Чтобы перечислить остальное, когда вызывающий открыл тайтл.
| Параметр | Тип | По умолчанию | Диапазон |
|---|---|---|---|
q | string | обязательно | Точное название серии |
num | integer | 20 | 1–50 |
page | integer | 1 | от 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
Таксономия жанров со счётчиками по каталогу. Чтобы наполнить меню фильтров.
| Параметр | Тип | По умолчанию | Диапазон |
|---|---|---|---|
num | integer | 60 | 1–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
Случайные тайтлы под необязательные фильтры. Для кнопки «удиви меня».
| Параметр | Тип | По умолчанию | Диапазон |
|---|---|---|---|
genre | string | нет | Точное название категории |
performer | string | нет | Точное имя исполнителя |
studio | string | нет | Точное название студии |
censored | string | нет | censored или uncensored |
num | integer | 10 | 1–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
Рекомендации по истории поиска аккаунта. Два ключа одного аккаунта делят историю: она на пользователя, а не на ключ.
| Параметр | Тип | По умолчанию | Диапазон |
|---|---|---|---|
num | integer | 20 | 1–50 |
lookback | integer | 20 | 1–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 — остаток кредитов после вызова.