본문으로 건너뛰기
javinfo

탐색 엔드포인트

시작 코드 없이 카탈로그 탐색: 트렌딩, 유사 작품, 일별 출시, 스튜디오, 시리즈, 장르, 무작위 추천.

코드 하나가 아니라 카탈로그 전체를 다루는 열세 개의 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

작품 카드

탐색 응답의 작품은 모두 이 형태입니다. 엔드포인트는 같은 카드를 쓰므로 렌더러는 한 번만 작성하면 됩니다.

필드타입비고
codestring정규화된 작품 코드, 예: ABP-002
titlestring | null영어 제목만; 소스에 없으면 null. javbus 행은 흔히 title: null이고 일본어 제목은 titleJa에 있습니다
titleJastring | null일본어 제목
releaseDatestring | nullYYYY-MM-DD
runtimeMinsnumber | null분
makerstring | null스튜디오 / 제작사
labelstring | null레이블
seriesstring | null소스가 표기한 그대로의 시리즈
categoriesstring[]장르 태그
actressesstring[]출연진, 소스에 있으면 영어 이름
coverstring | null재킷 URL
ratingnumber | nulljavlibrary만, 1–10; 다른 모든 소스에서는 null
sourcestring이 카드를 제공한 소스: fanza, javdatabase, javlibrary, javbus, missav
urlstring | null소스 사이트의 페이지(소스가 저장하고 있는 경우)

여러 인덱스가 응답하면 카드는 code로 합쳐지고, 선호 순서 첫 인덱스가 메타데이터를 제공합니다. rating은 예외입니다. 평점은 javlibrary에만 있으므로 다른 소스의 카드는, 작품이 다른 곳에서 평가되어도 null입니다.

meta:

필드타입비고
sourcesstring[]적중이나 패싯 수로 응답한 공개 소스 이름. 빈 배열은 보통 카탈로그에 닿지 못했다는 뜻
scannednumber순위 지정이나 필터링 전에 읽은 문서 수. 패싯 전용 엔드포인트에서는 0
latencyMsnumber서버 측 시간

예시는 축약했습니다. 배열은 앞 항목만, 반복은 "…", 긴 제목은 잘랐습니다. 남은 값은 실제 응답값입니다.

/discover/trending

API: /discover/trending

품질과 날짜로 순위를 매긴 최근 출시작입니다. 홈 페이지나 "이번 주 신작" 목록에 쓰세요.

매개변수타입기본값범위
rangeinteger301–365, 거슬러 볼 일수
numinteger201–50
genrestring없음정확한 카테고리 이름

가격: 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

놓치기 쉬운 오래된 작품을 날짜보다 평점 위주로 순위 매깁니다. "숨은 작품" 선반에 쓰세요.

매개변수타입기본값범위
minAgeDaysinteger36530–3650, 최소 경과 일수
numinteger201–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

검색 상자 자동완성입니다. 한 번의 호출로 코드, 출연자, 태그, 스튜디오를 섞어 중복을 제거하고 코드를 먼저 반환합니다.

매개변수타입기본값범위
qstring필수최소 1자
numinteger81–20

가격: num=8에서 1,000회당 $0.40, num=20이면 $0.80.

각 항목의 종류와 옆에 표시할 내용:

kindvaluelabelextra
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

"이것과 비슷한 작품." 코드를 넘기면 순위 이웃, 기준 카드, 사용한 점수를 반환합니다. 상세 페이지에 쓰세요.

매개변수타입기본값범위
qstring필수작품 코드
numinteger121–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면 누구나 같은 카드 두 장을 봅니다.

매개변수타입기본값범위
seedstring오늘의 UTC 날짜임의의 문자열
genrestring없음정확한 카테고리 이름
performerstring없음정확한 출연자 이름

가격: 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

두 날짜 사이의 출시작을 일별로 묶습니다. 출시 캘린더에 쓰세요.

매개변수타입기본값범위
fromstring오늘YYYY-MM-DD
tostring오늘 + 30일YYYY-MM-DD

가격: 1,000회당 $0.40, 정액. 아래 루프의 각 호출은 따로 청구됩니다.

두 날짜 모두 경계를 포함합니다. 기본값은 독립적이라 from만 줘도 30일 후에 끝납니다. 과거 구간에는 둘 다 넘기세요. 출시작이 없는 날은 빠지고 버킷은 오름차순입니다. 각 출시작은 완전한 작품 카드입니다.

긴 범위는 일찍 멈춥니다

각 소스는 호출당 최대 1,000행이라 출시작이 많은 범위는 약 5일이면 찹니다. 엔드포인트는 완전한 날만 반환하고 멈춘 곳을 알려 줍니다:

필드의미
through완전히 포함된 마지막 날, YYYY-MM-DD. 답이 잘리지 않았다면 to와 같습니다.
truncatedthrough 이후의 날이 잘렸으면 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

최근 기간의 태그 수를 많은 순서로 보여 줍니다. "트렌딩 태그" 블록에 쓰세요.

매개변수타입기본값범위
rangeinteger301–365, 거슬러 볼 일수
numinteger301–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.

매개변수타입기본값범위
qstring없음정확한 스튜디오 이름, 카탈로그 모드로 전환
rangeinteger36530–3650, 목록 모드 전용
numinteger목록 30, 카탈로그 20목록 1–100; 카탈로그는 최대 50
pageinteger11 이상, 카탈로그 모드 전용

가격: 목록 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

한 시리즈의 카탈로그를 최신순으로 보여 줍니다. 호출자가 작품 하나를 열었을 때 나머지 항목을 나열 할 때 쓰세요.

매개변수타입기본값범위
qstring필수정확한 시리즈 이름
numinteger201–50
pageinteger11 이상

가격: 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

전체 카탈로그 기준 장르 분류와 수입니다. 필터 메뉴에 쓰세요.

매개변수타입기본값범위
numinteger601–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

선택적 필터에 맞는 무작위 작품입니다. "아무거나 보여 줘" 버튼에 쓰세요.

매개변수타입기본값범위
genrestring없음정확한 카테고리 이름
performerstring없음정확한 출연자 이름
studiostring없음정확한 스튜디오 이름
censoredstring없음censored 또는 uncensored
numinteger101–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

계정의 검색 기록에서 나온 추천입니다. 같은 계정의 키 두 개는 기록을 공유합니다. 기록은 키가 아니라 사용자별로 저장됩니다.

매개변수타입기본값범위
numinteger201–50
lookbackinteger201–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은 호출 후 남은 크레딧.

이 페이지의 내용