탐색 엔드포인트
시작 코드 없이 카탈로그 탐색: 트렌딩, 유사 작품, 일별 출시, 스튜디오, 시리즈, 장르, 무작위 추천.
코드 하나가 아니라 카탈로그 전체를 다루는 열세 개의 GET 엔드포인트입니다. 모두
x-javinfo-key로 인증하며 과금됩니다. 대부분은 meta를 반환합니다: 응답 소스, 스캔 수, 호출 시간.
기본 가격은 1,000회당 $0.40. num을 받으면 10을 넘는 페이지 크기에 비례해 가격이 오릅니다.
num=20은 $0.80. 계산식은 속도 제한 및 요금에 있습니다.
| 엔드포인트 | 용도 | 기본값 기준 1,000회당 |
|---|---|---|
/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 쌍 | $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 | string | 정규화된 작품 코드, 예: ABP-002 |
title | string | null | 영어 제목만; 소스에 없으면 null. javbus 행은 흔히 title: null이고 일본어 제목은 titleJa에 있습니다 |
titleJa | string | null | 일본어 제목 |
releaseDate | string | null | YYYY-MM-DD |
runtimeMins | number | null | 분 |
maker | string | null | 스튜디오 / 제작사 |
label | string | null | 레이블 |
series | string | null | 소스가 표기한 그대로의 시리즈 |
categories | string[] | 장르 태그 |
actresses | string[] | 출연진, 소스에 있으면 영어 이름 |
cover | string | null | 재킷 URL |
rating | number | null | javlibrary만, 1–10; 다른 모든 소스에서는 null |
source | string | 이 카드를 제공한 소스: fanza, javdatabase, javlibrary, javbus, missav |
url | string | null | 소스 사이트의 페이지(소스가 저장하고 있는 경우) |
여러 인덱스가 응답하면 카드는 code로 합쳐지고, 선호 순서 첫 인덱스가 메타데이터를 제공합니다.
rating은 예외입니다. 평점은 javlibrary에만 있으므로 다른 소스의 카드는, 작품이 다른 곳에서
평가되어도 null입니다.
meta:
| 필드 | 타입 | 비고 |
|---|---|---|
sources | string[] | 적중이나 패싯 수로 응답한 공개 소스 이름. 빈 배열은 보통 카탈로그에 닿지 못했다는 뜻 |
scanned | number | 순위 지정이나 필터링 전에 읽은 문서 수. 패싯 전용 엔드포인트에서는 0 |
latencyMs | number | 서버 측 시간 |
예시는 축약했습니다. 배열은 앞 항목만, 반복은 "…", 긴 제목은 잘랐습니다. 남은 값은 실제 응답값입니다.
/discover/trending
API: /discover/trending
품질과 날짜로 순위를 매긴 최근 출시작입니다. 홈 페이지나 "이번 주 신작" 목록에 쓰세요.
| 매개변수 | 타입 | 기본값 | 범위 |
|---|---|---|---|
range | integer | 30 | 1–365, 거슬러 볼 일수 |
num | integer | 20 | 1–50 |
genre | string | 없음 | 정확한 카테고리 이름 |
가격: num=20에서 1,000회당 $0.80, num ≤ 10이면 $0.40.
핸들러는 최근 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 |
가격: num=20에서 1,000회당 $0.80, num ≤ 10이면 $0.40.
평점은 javlibrary에만 있어 후보 풀은 이 인덱스에서만 만듭니다. 기준일 이전 12년에서 30일 구간 여덟 개를 무작위로 씁니다. 평점 없는 작품은 버리고, 점수는 더 오래되고 평점이 높고 기록이 완전한 쪽을 선호합니다.
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 |
가격: num=8에서 1,000회당 $0.40, num=20이면 $0.80.
각 항목의 종류와 옆에 표시할 내용:
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 |
가격: num=12에서 1,000회당 $0.48, num ≤ 10이면 $0.40.
기준 작품은 영화 인덱스에서 찾습니다. 후보는 첫 출연자나 처음 세 태그 하나를 공유하고, 출연진,
태그, 제작사, 레이블, 시리즈, 재생 시간, 출시일로 순위를 매깁니다. 기준 작품은 results에서
제외됩니다. scores는 results와 코드로 정렬되며 0–1, 소수점 셋째 자리입니다.
어느 인덱스도 모르는 코드는 빈 200이 아니라 404입니다. 오타에는 요금이 부과되지
않습니다.
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 | 없음 | 정확한 출연자 이름 |
가격: 1,000회당 $0.40, 정액. 페이지 크기 조절은 없습니다.
풀은 DMM + FANZA, javdatabase, javlibrary 각 인덱스의 최신 40작품입니다. 코드로 중복을 제거하고,
출시되었으며 출연진이 있는 작품만 남깁니다. genre와 performer가 범위를 좁힙니다. 시드 PRNG가
둘을 골라 코드로 정렬하므로 a와 b는 모든 호출자에게 같은 쪽입니다. 풀은 새 작품마다 움직이므로
시드는 그 창에서만 고정입니다. 후보가 둘 미만이면 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 |
가격: 1,000회당 $0.40, 정액. 아래 루프의 각 호출은 따로 청구됩니다.
두 날짜 모두 경계를 포함합니다. 기본값은 독립적이라 from만 줘도 30일 후에 끝납니다.
과거 구간에는 둘 다 넘기세요. 출시작이 없는 날은 빠지고 버킷은 오름차순입니다. 각 출시작은 완전한
작품 카드입니다.
긴 범위는 일찍 멈춥니다
각 소스는 호출당 최대 1,000행이라 출시작이 많은 범위는 약 5일이면 찹니다. 엔드포인트는 완전한 날만 반환하고 멈춘 곳을 알려 줍니다:
| 필드 | 의미 |
|---|---|
through | 완전히 포함된 마지막 날, YYYY-MM-DD. 답이 잘리지 않았다면 to와 같습니다. |
truncated | through 이후의 날이 잘렸으면 true. |
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
}
}이 응답에는 11월 1일부터 5일까지 1,011개의 작품이 들어 있습니다. 범위가 맞으면 통째로 돌아옵니다:
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 |
가격: num=30에서 1,000회당 $1.20, num ≤ 10이면 $0.40.
수는 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 이상, 카탈로그 모드 전용 |
가격: 목록 num=30에서 1,000회당 $1.20, 카탈로그 num=20에서 $0.80. num 상한 50이라 최고
$2.00.
q가 있으면 range, 없으면 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 이상 |
가격: num=20에서 1,000회당 $0.80, num ≤ 10이면 $0.40.
q는 DMM + FANZA 인덱스의 시리즈 이름에 대한 정확한 일치이며 검색이 아닙니다. 카탈로그가 저장한
문자열을 넘기세요. 어느 작품의 series에서든 읽을 수 있습니다. 부분 일치나 다른 표기는 404가 아니라
count: 0인 빈 200입니다. 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 |
가격: num=60에서 1,000회당 $2.40, num ≤ 10이면 $0.40, num=200이면 $8.00.
값은 표시 레이블(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 |
가격: num=10에서 1,000회당 $0.40, num=50이면 $2.00.
필터는 AND로 결합됩니다. 추출은 균등하지 않습니다. 핸들러는 무작위로 다섯 달을 읽고 각 달에서 오프셋을 잡아 풀을 섞으며, 좁은 필터로 부족하면 채웁니다. 연속 호출은 무관한 작품을 반환합니다.
censored는 uncensored일 때만 의미가 있습니다. 그때는 DMM + FANZA 대신 javbus 무검열 섹션을 읽습니다. 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, 읽을 최근 검색 수 |
가격: num=20에서 1,000회당 $0.80, num ≤ 10이면 $0.40.
성공한 /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
소스별 카탈로그 총계와 타임스탬프. 매개변수 없음.
가격: 1,000회 호출당 $0.40, 정액입니다.
수는 인덱스 문서 수라 두 소스의 작품은 두 번 셉니다. 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.
오류
입력은 핸들러 전에 검증됩니다. 잘못된 매개변수는 code: "BAD_REQUEST",
message: "Input validation failed"와 매개변수를 지목하는 issues 배열이 담긴 400입니다. 이 API는
422를 반환하지 않습니다. 범위 초과도 타입 오류도 400입니다. range는 일수이므로
range=7은 동작하고 range=week는 issues[].path가 ["range"]인 400입니다. 최대값 50을 넘는
/discover/trending?num=500의 본문입니다:
{
"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은 호출 후 남은 크레딧.