필터링
/query 결과를 필터링, 정렬, 페이지 매김하고 제공업체별 지원 기능을 확인하세요.
필터링은 **
/query**에만 적용됩니다. 단일 결과 엔드포인트인/movie와/random은 필터를 받지 않습니다.
1. 빠른 시작
/query는 q 외에 네 가지 선택적 입력을 받습니다: filter, sort, page, num(페이지
크기). GET과 POST 모두에서 동작합니다.
KEY="jvi_..." # your API key, sent as the x-javinfo-key header
# POST — genre + runtime filter, newest first
curl -s -X POST https://api.javinfo.dev/query \
-H "x-javinfo-key: $KEY" -H 'content-type: application/json' \
-d '{
"q": "ema kisaki",
"filter": { "genre": "Big Tits", "runtimeMin": 120 },
"sort": "release",
"page": 1
}'
# GET — same thing, flattened into query params
curl -s "https://api.javinfo.dev/query?q=ema%20kisaki&filter[genre]=Big%20Tits&filter[runtimeMin]=120&sort=release" \
-H "x-javinfo-key: $KEY"필터가 있으면 q는 선택 사항입니다. 키워드 없이 카테고리 전체를 둘러볼 수 있습니다:
# All "creampie" titles, no search term
curl -s -X POST https://api.javinfo.dev/query \
-H "x-javinfo-key: $KEY" -H 'content-type: application/json' \
-d '{ "filter": { "genre": "creampie" } }'q와 필터가 모두 없으면 400입니다("provide a search query or at least one filter").
기본 num=10에서 1,000회 호출당 $0.40이며 페이지 크기에 비례합니다
(요금). 필터는 가격을 바꾸지 않습니다. 결과 없음(count: 0인
200)과 오류는 무료입니다.
2. 입력
filter
객체입니다. 모든 필드는 선택 사항이며 필요한 것만 설정합니다.
| 필드 | 타입 | 의미 |
|---|---|---|
genre | 문자열 | 카테고리 / 장르 |
actress | 문자열 | 여배우(출연자) |
maker | 문자열 | 제작사 / 스튜디오 |
series | 문자열 | 시리즈 |
director | 문자열 | 감독 |
label | 문자열 | 레이블 |
actor | 문자열 | 남배우 |
censored | "censored" | "uncensored" | 모자이크 상태 |
runtimeMin | 숫자(분) | 최소 재생 시간 |
runtimeMax | 숫자(분) | 최대 재생 시간 |
releaseAfter | 문자열 YYYY-MM-DD | 해당일 이후 출시 |
releaseBefore | 문자열 YYYY-MM-DD | 해당일 이전 출시 |
availability | "playable" | "magnets" | "subtitle" | "single" | 스트림 / 마그넷 / 자막 있음 / 단일 작품 여부 |
sort
relevance(기본값), release, update, rating, views.
relevance— 텍스트 일치 관련성. 기본값.release— 최신 출시일 우선.update— 최근 추가·업데이트 우선.rating— 최고 평점 우선.views— 예약됨. 어떤 제공업체도 미지원(항상 거부).
page
1부터 시작하는 정수. 생략하면 1페이지. 페이지 크기는 num으로 설정합니다.
깊은 페이지네이션 상한. fanza/dmm 인덱스는 결과 집합을 1,000행으로 제한하므로
page × num은 1000 이하여야 합니다.num: 50이면 20페이지가 마지막입니다. 그 이상은 오류가 아니라404(결과 없음)입니다. 더 깊이 보려면filter로 범위를 좁히세요.
num
페이지당 결과 수. 정수, 기본값 10, 최대 50. 초과 값은 거부가 아니라 제한됩니다.
num < 1 → 400. missav는 자체 검색 개수가 상한입니다. 나머지는 모두 페이지
매김됩니다. page 오프셋은 num으로 계산됩니다(num=10일 때 2페이지는 처음 10개를
건너뜀).
숫자 입력은 두 메서드 모두에서 변환되며 page와 중첩된 filter[...]도 포함합니다.
filter[runtimeMin]=120을 넣은 GET도 동작합니다.
3. 제공업체 기능 매트릭스
/query는 여러 제공업체를 검색하며, 모든 제공업체가 모든 필터를 지원하지는 않습니다.
쿼리를 작성하기 전에 표를 읽으세요.
제공업체와 ID: query:fanza, query:dmm(두 DMM + FANZA 스토어프론트),
query:javdatabase, query:sextb, query:javlibrary, query:javbus,
query:missav, query:javdb.
| 기능 | fanza / dmm | missav | javdb | javdatabase | sextb | javlibrary | javbus |
|---|---|---|---|---|---|---|---|
genre | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
actress | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
maker | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
series | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
director | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
label | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
actor | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ |
censored: censored | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
censored: uncensored | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
runtimeMin / runtimeMax | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
releaseAfter / releaseBefore | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
availability | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| 여러 필터 결합 | 모든 조합 | 모든 조합 | ❌ 없음 | 모든 조합 | 모든 조합 | 모든 조합 | 모든 조합 |
sort: relevance | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
sort: release | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
sort: update | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
sort: rating | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
sort: views | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
page | ✅ | ❌ (항상 1페이지) | ✅ | ✅ | ✅ | ✅ | ✅ |
범례: ✅ 지원 · ❌ 미지원.
참고:
- fanza/dmm은 검열본 전용.
uncensored필터가 이들을 제외합니다. - javdb에는 필드 필터가 없습니다. 검열 탭,
availability, 정렬만 제공하며, 이름 지정 차원을 요청하면 제외됩니다. - javlibrary는 검열본 전용.
uncensored필터가 이를 제외합니다. - javbus에는
actor차원이 없습니다. 고정한filter.actor는422를 반환합니다. 정렬도relevance와release뿐이며sort: rating은 거부됩니다. - javbus는 일본어와 영어 이름을 모두 받습니다. 여배우·제작사·장르가 두 필드를 함께 읽어
三上悠亜와Yua Mikami가 모두 일치합니다. 장르는 영어 이름에 일본어 대응어가 붙습니다. - javdatabase는 영어 전용. 영어 사이트 코퍼스라 일본어 쿼리(
巨乳)는 일치하지 않고 건너뛰어집니다. 로마자나 영어를 쓰세요. - missav는
page와sort를 무시합니다. 항상 첫 페이지를 관련성 순으로 반환합니다. - javdatabase, sextb, javlibrary, javbus는 자체 카탈로그. 필터링과 페이지 매김이 빠르고 완전하며 상위 상한이 없습니다.
4. 제공업체 선택 작동 방식 (워터폴)
/query는 제공업체를 순서대로 시도하며 첫 번째 유효한 결과를 채택합니다:
FANZA → DMM → javdatabase → sextb → javlibrary → javbus → missav → javdb처음 일곱 개(missav까지)는 자체 인덱스. javdb는 실시간 폴백입니다.
충족할 수 없는 필터의 처리는 제공업체를 고정했는지에 따라 다릅니다.
고정 안 함(기본값) — 건너뛰고 진행
providers가 없으면 모든 등록 제공업체가 후보입니다. 완전히 충족할 수 없는 곳은 조용히
건너뛰고 다음으로 진행하며, 전체 요청을 처리할 수 있는 첫 곳이 응답합니다.
# sort=rating is javdb-only → every other provider is skipped, javdb answers.
curl -s -X POST https://api.javinfo.dev/query \
-H "x-javinfo-key: $KEY" -H 'content-type: application/json' \
-d '{ "q": "ABP", "sort": "rating" }'
# → { "source": "javdb", ... }어떤 제공업체도 충족할 수 없으면 이유와 함께 422를 받습니다.
고정함 — 하드 오류
providers로 특정 제공업체를 강제합니다. 충족할 수 없으면 message에 이유를 담아
**422**로 실패하며, 조용히 삭제되지 않습니다.
# Pin javdb, ask for a genre it can't filter → 422
curl -s -X POST https://api.javinfo.dev/query \
-H "x-javinfo-key: $KEY" -H 'content-type: application/json' \
-d '{ "q": "x", "providers": ["query:javdb"], "filter": { "genre": "creampie" } }'
# → 422 { "message": "does not support filter \"genre\"" }
# Pin fanza, ask for uncensored → 422
# → { "message": "does not support uncensored content" }providers는 쉼표 목록이나 배열을 받으며 query: 접두사는 선택입니다:
"providers": ["fanza","missav"] 또는 "providers": "javdb".
5. 값은 그대로 전달
v1 패스스루입니다. 필터 값은 제공업체 백엔드로 그대로 전송됩니다. 공유 분류 체계도 퍼지 매칭도 없습니다. 한 곳에서 작동하는 값이 다른 곳에서 일치하지 않는 경우가 많으며, 소스마다 메타데이터를 다르게 저장하기 때문입니다.
고려할 점:
-
장르는 제공업체마다 다릅니다.
- fanza/dmm, javdatabase, sextb는 영어 장르명을 씁니다(
"Big Tits","creampie"). - missav는 일본어입니다(
"巨乳","フィスト"). 영어 장르는 아무것도 반환하지 않습니다. - javbus는 두 언어 모두 받아 둘 다에 일치시킵니다.
- fanza/dmm, javdatabase, sextb는 영어 장르명을 씁니다(
-
이름은 정확히 일치해야 합니다. 부분 문자열이 아닌 완전 일치입니다. DMM + FANZA 인덱스는 별칭을 이름에 포함해 저장합니다(예:
"Ema Kisaki (HARUKI, Haruki Kato)").actress: "Ema Kisaki"로 필터링하면 0행입니다. 저장된 전체 문자열이 필요합니다. (알려진 v1의 거친 부분입니다.) -
censored는 소스마다 의미가 다릅니다. missav에는 플래그가 없습니다. API가censored를 주류 모자이크 작품,uncensored를 그 외 모든 것(Caribbeancom, 10musume, Tokyo-Hot, 1pondo, FC2, 무검열 유출 등)에 매핑합니다. -
javdatabase는 영어 전용. 영어나 로마자 값을 전달하세요. 일본어
q나 값은 일치하지 않아 건너뛰어집니다.
일치하지 않으면 해당 제공업체에서 행이 줄거나 0개가 될 뿐입니다. 고정하지 않았다면 워터폴은 계속 진행하며 오류는 나지 않습니다.
6. 응답 형태
본문은 채택된 제공업체의 결과 집합입니다:
{
"q": "ema kisaki", // your query, echoed
"source": "fanza", // which provider answered
"count": 10, // page size (default 10, set by num)
"results": [
{
"id": "118abp00999", // stable id (content id or dvd id)
"dvdId": "ABP-999",
"title": "…",
"cover": "https://…/…ps.jpg",
"releaseDate": "2019-01-04",
"extra": { // provider-specific, keys vary by source
"runtimeMins": 130,
"maker": "…",
"categories": ["Big Tits", "…"],
"actresses": [{ "name": "…", "image": "https://…|null" }],
"duration": 7800, // missav (seconds)
"genres": ["巨乳"], // missav
"studio": "…", "url": "…" // javdatabase
// …
}
}
]
}extra는 상위 집합이며 응답 제공업체의 키만 포함합니다. 핵심 필드(id, dvdId,
title, cover, releaseDate)는 모든 제공업체에서 같습니다.
응답 헤더: X-Response-Time-Ms, X-Balance-Remaining.
7. 제공업체별 요약표
fanza / dmm(DMM + FANZA) — 가장 풍부한 구조화 필터.
- 모든 이름 지정 차원 조합. 영어 장르와 이름.
runtimeMin/runtimeMax는 분.sort: release. 페이지 매김.- 검열본만.
uncensored,availability없음.
# Big-tits titles over 120 min, newest first
-d '{ "filter": { "genre": "Big Tits", "runtimeMin": 120 }, "sort": "release" }'이름으로 검색하기. 영어 제목은 2022년 중반까지이고 이후는 일본어뿐입니다. 출연자 이름(로마자)은 별도로 색인되므로
q에"Yua Mikami"를 넣으면 최신 작품도 찾습니다. 최신순으로 보려면"sort": "release"를 추가하세요. 기본relevance에서는 영어 제목에 이름이 들어간 예전 작품이 위에 옵니다.
# Newest Yua Mikami titles first
-d '{ "q": "Yua Mikami", "providers": ["fanza"], "sort": "release" }'
# Exact-match browse (see §5 on stored name strings)
-d '{ "filter": { "actress": "Yua Mikami" }, "sort": "release" }'missav — 가장 넓은 필터 범위, 관련성 순위만.
- 모든 이름 지정 차원(장르는 일본어), 재생 시간 및 출시일 범위,
censored양방향. sort없음, 실질 페이지 매김 없음(1페이지만),availability없음.
# Uncensored titles matching "caribbean"
-d '{ "q": "caribbean", "filter": { "censored": "uncensored" } }'
# Japanese genre browse
-d '{ "q": "SSIS", "filter": { "genre": "巨乳" } }'javdb — 필드 필터 없음, 최고의 정렬과 availability.
censored(양방향),availability,sort(relevance/release/update/rating)만.- 페이지 매김. genre/actress/maker 없음.
# Playable, highest rated
-d '{ "q": "ABP", "filter": { "availability": "playable" }, "sort": "rating" }'javdatabase — 전체 영어 카탈로그. 검열본·무검열, 모든 이름 지정 차원, 두 범위. 영어
값만(일본어 q는 건너뜀). sort: release. 페이지 매김. availability 없음.
# Creampie titles from S1
-d '{ "filter": { "genre": "creampie", "maker": "S1 NO.1 STYLE" } }'sextb — 스트림 포함, 자체 카탈로그. 모든 이름 지정 차원, 두 범위, censored 양방향.
sort: release. 페이지 매김. availability 없음.
javlibrary — 검열본 전용, 자체 카탈로그. 모든 이름 지정 차원, 두 범위.
sort: release. 페이지 매김. availability 없음.
javbus — 토렌트와 넓은 일본어 카탈로그, 자체 인덱스. actor 외 모든 이름 지정 차원,
두 범위, censored 양방향. 여배우·제작사·장르는 일본어나 영어. sort: relevance /
release. 페이지 매김. availability 없음. 토렌트는 /movie의 extra.downloadLinks.
# Japanese actress, newest first (POST)
-d '{ "providers": ["javbus"], "filter": { "actress": "三上悠亜" }, "sort": "release", "num": 2 }'
# Japanese genre + runtime, over GET
curl -s 'https://api.javinfo.dev/query?providers=javbus&filter%5Bgenre%5D=%E5%B7%A8%E4%B9%B3&filter%5BruntimeMin%5D=120&num=2' \
-H "x-javinfo-key: $KEY"
# Uncensored releases since 2026, newest first (POST)
-d '{ "providers": ["javbus"], "filter": { "censored": "uncensored", "releaseAfter": "2026-01-01" }, "sort": "release", "num": 2 }'javbus를 고정하고 할 수 없는 것을 요청하면 실제 422를 받습니다:
# No male-actor dimension → 422
-d '{ "providers": ["javbus"], "filter": { "actor": "Shimiken" } }'
# → { "defined": false, "code": "BAD_REQUEST", "status": 422, "message": "does not support filter \"actor\"" }
# No rating sort → 422
-d '{ "providers": ["javbus"], "q": "ABP", "sort": "rating" }'
# → { "defined": false, "code": "BAD_REQUEST", "status": 422, "message": "does not support sort \"rating\"" }결과 형태는 §6의 표준 /query 본문입니다. /movie 레코드와 토렌트는
javbus 섹션을 참조하세요.
8. v1의 제한
- 제공업체 간 값 정규화. 통합 어휘가 없어 각 제공업체의 방언(영어 vs 일본어, 정확한 문자열)을 씁니다.
sort: views— 예약됨, 미구현.- 차원당 다중 값. 필드당 하나의 값(
genre: ["a","b"]불가). - javdb의 범위. 다른 곳은 모두 지원합니다.
- javdb 외의
availability. - javdb의 임의 필터 결합. 필드별 필터가 없습니다.
- javbus의
actor. 남배우 차원이 없습니다. - javbus의
sort: update,rating,views.relevance와release만. - missav의 페이지 매김과 정렬.
- fanza/dmm의 1,000행 초과 페이지 매김 (
page × num≤ 1000). /movie또는/random필터링.
조합이 불가능하면: 고정 → 이유와 함께 422; 고정 안 함 → 건너뛰고 다음 시도.