Filtrado
Filtra, ordena y pagina los resultados de /query, y consulta lo que admite cada proveedor.
El filtrado solo se aplica a
/query. Los endpoints de resultado único/moviey/randomno aceptan filtros.
1. Inicio rápido
/query acepta cuatro entradas opcionales además de q: filter, sort, page y num
(tamaño de página). Funciona con GET y 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 es opcional si hay un filtro. Puedes recorrer una categoría entera sin palabra clave:
# 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" } }'Sin q ni filtro → 400 ("provide a search query or at least one filter").
$0.40 por 1000 llamadas con num=10, y escala con el tamaño de página
(facturación). Los filtros no cambian el precio. Sin resultados (200
con count: 0) o con error: gratis.
2. Las entradas
filter
Objeto. Todos los campos son opcionales; configura solo los necesarios.
| Campo | Tipo | Significado |
|---|---|---|
genre | string | Categoría / género |
actress | string | Actriz (intérprete) |
maker | string | Fabricante / estudio |
series | string | Serie |
director | string | Director |
label | string | Sello |
actor | string | Actor masculino |
censored | "censored" | "uncensored" | Estado del mosaico |
runtimeMin | number (minutos) | Duración mínima |
runtimeMax | number (minutos) | Duración máxima |
releaseAfter | string YYYY-MM-DD | Lanzado en/después de |
releaseBefore | string YYYY-MM-DD | Lanzado en/antes de |
availability | "playable" | "magnets" | "subtitle" | "single" | Tiene stream / imanes / subtítulos / es un título único |
sort
Uno de: relevance (predeterminado), release, update, rating, views.
relevance— relevancia de coincidencia de texto. Predeterminado.release— lanzamiento más reciente primero.update— añadidos o actualizados recientemente primero.rating— mejor valorados primero.views— reservado. Ningún proveedor lo admite (siempre se rechaza).
page
Entero desde 1. Omitido = página 1. El tamaño lo define num.
Límite de paginación profunda. El índice de fanza/dmm corta cada conjunto en 1000 filas, así que
page × num≤ 1000: connum: 50, la página 20 es la última. Más allá recibes un404(sin resultados), no un error. Para llegar más lejos, acota confilteren vez de paginar.
num
Resultados por página. Entero, predeterminado 10, máximo 50 (los mayores se
recortan, no se rechazan; num < 1 → 400). missav se limita a su propio recuento; el
resto pagina. El desplazamiento de page sale de num (la página 2 con num=10 omite las
10 primeras).
Las entradas numéricas se convierten en ambos métodos, incluidos page y filter[...]; un
GET con filter[runtimeMin]=120 funciona.
3. Matriz de capacidades por proveedor
/query busca en varios proveedores y no todos admiten todos los filtros. Lee la tabla antes
de construir la consulta.
Proveedores e ids: query:fanza, query:dmm (las dos tiendas DMM + FANZA),
query:javdatabase, query:sextb, query:javlibrary, query:javbus, query:missav,
query:javdb.
| Capacidad | fanza / dmm | missav | javdb | javdatabase | sextb | javlibrary | javbus |
|---|---|---|---|---|---|---|---|
genre | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
actress | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
maker | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
series | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
director | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
label | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
actor | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ |
censored: censored | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
censored: uncensored | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
runtimeMin / runtimeMax | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
releaseAfter / releaseBefore | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
availability | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Combinar varios filtros | cualquier combinación | cualquier combinación | ❌ ninguno | cualquier combinación | cualquier combinación | cualquier combinación | cualquier combinación |
sort: relevance | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
sort: release | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
sort: update | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
sort: rating | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
sort: views | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
page | ✅ | ❌ (siempre página 1) | ✅ | ✅ | ✅ | ✅ | ✅ |
Leyenda: ✅ admitido · ❌ no admitido.
Notas:
- fanza/dmm son solo censurados. Un filtro
uncensoredlos excluye. - javdb no tiene filtros por campo. Solo la pestaña de censurados,
availabilityy ordenación avanzada; pedir una dimensión con nombre lo excluye. - javlibrary es solo censurado. Un filtro
uncensoredlo excluye. - javbus no tiene dimensión
actor. Unfilter.actorfijado devuelve422. Solo ordena porrelevanceorelease;sort: ratingse rechaza. - javbus acepta nombres en japonés o inglés. Sus cláusulas de actriz, maker y género leen
ambos campos, así que
三上悠亜yYua Mikamicoinciden. Los géneros son nombres en inglés con equivalente japonés. - javdatabase es solo en inglés. Su corpus es el sitio en inglés; una consulta japonesa
(
巨乳) no coincide y se omite. Pasa romaji o inglés. - missav ignora
pageysort. Siempre devuelve la primera página por relevancia. - javdatabase, sextb, javlibrary y javbus vienen de nuestro catálogo. Filtrado y paginación rápidos y completos, sin tope aguas arriba.
4. Cómo funciona la selección
/query prueba los proveedores en orden y gana el primer resultado válido:
FANZA → DMM → javdatabase → sextb → javlibrary → javbus → missav → javdbLos siete primeros (hasta missav) salen de nuestro índice. javdb se obtiene en vivo como
reserva.
Qué pasa con un filtro imposible depende de si fijaste proveedores.
Sin fijar (predeterminado) — omitir y avanzar
Sin providers, todos los proveedores registrados son candidatos. El que no pueda satisfacer
el filtro por completo se omite en silencio y la cascada avanza. Responde el primero que
atienda toda la solicitud.
# 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", ... }Si ninguno puede, recibes 422 con el motivo.
Fijado — error definitivo
Envía providers para forzar uno o varios. Si el fijado no puede, la solicitud falla con
422 y un message con el motivo; nunca se descarta en silencio.
# 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 acepta una lista separada por comas o un array, con o sin query::
"providers": ["fanza","missav"] o "providers": "javdb".
5. Los valores se pasan tal cual
Paso directo v1: el valor del filtro se envía al backend del proveedor tal cual. No hay taxonomía compartida ni coincidencia aproximada. Un valor que funciona en un proveedor a menudo no coincide en otro, porque cada fuente guarda sus metadatos de forma distinta.
Consecuencias:
-
Los géneros difieren según el proveedor.
- fanza/dmm, javdatabase y sextb usan inglés (
"Big Tits","creampie"). - missav usa japonés (
"巨乳","フィスト"). Un género en inglés no devuelve nada. - javbus acepta ambos idiomas y coincide con los dos.
- fanza/dmm, javdatabase y sextb usan inglés (
-
Los nombres deben coincidir exactamente. Coincidencia exacta, no subcadena. El índice DMM + FANZA guarda los alias dentro del nombre, p. ej.
"Ema Kisaki (HARUKI, Haruki Kato)";actress: "Ema Kisaki"devuelve cero filas. Necesitas la cadena completa. (Aspereza conocida de la v1.) -
censoredsignifica cosas distintas según la fuente. missav no tiene una marca literal; la API asignacensoreda títulos de mosaico convencionales yuncensoreda todo lo demás (Caribbeancom, 10musume, Tokyo-Hot, 1pondo, FC2, filtraciones, …). -
javdatabase es solo en inglés. Pasa inglés o romaji; una
qo un valor en japonés no coincide y el proveedor se omite.
Si un valor no coincide, solo obtienes menos filas o ninguna de ese proveedor (y, sin fijar, la cascada sigue). Nada da error: una coincidencia vacía no es un error.
6. Forma de la respuesta
El cuerpo es el conjunto del proveedor ganador:
{
"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 es un superconjunto: solo aparecen las claves del proveedor que responde. Los campos
principales (id, dvdId, title, cover, releaseDate) son iguales en todos.
Los encabezados llevan metadatos: X-Response-Time-Ms, X-Balance-Remaining.
7. Guía rápida por proveedor
fanza / dmm (DMM + FANZA) — el filtrado estructurado más completo.
- Todas las dimensiones con nombre, combinadas libremente. Género y nombre en inglés.
runtimeMin/runtimeMaxen minutos.sort: release. Paginado.- Solo catálogo censurado. Sin
uncensoredniavailability.
# Big-tits titles over 120 min, newest first
-d '{ "filter": { "genre": "Big Tits", "runtimeMin": 120 }, "sort": "release" }'Buscar por nombre. El catálogo solo tiene títulos en inglés hasta mediados de 2022; los nuevos están solo en japonés. Los nombres de intérpretes (romaji) se indexan aparte, así que
qcon"Yua Mikami"alcanza lanzamientos recientes. Añade"sort": "release"para ver primero los nuevos: conrelevance, los títulos antiguos que mencionan el nombre quedan arriba.
# 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 — la mayor superficie de filtros, solo por relevancia.
- Todas las dimensiones con nombre (géneros en japonés), rangos de duración y
lanzamiento,
censoreden ambos sentidos. - Sin
sort, sin paginación real (solo página 1), sinavailability.
# Uncensored titles matching "caribbean"
-d '{ "q": "caribbean", "filter": { "censored": "uncensored" } }'
# Japanese genre browse
-d '{ "q": "SSIS", "filter": { "genre": "巨乳" } }'javdb — sin filtros por campo, pero la mejor ordenación y disponibilidad.
- Solo
censored(ambos),availabilityysort(relevance/release/update/rating). - Paginado. Sin genre/actress/maker.
# Playable, highest rated
-d '{ "q": "ABP", "filter": { "availability": "playable" }, "sort": "rating" }'javdatabase — el catálogo completo en inglés. Censurado y sin censura, todas las
dimensiones con nombre, ambos rangos. Solo valores en inglés (una q en japonés se omite).
sort: release. Paginado. Sin availability.
# Creampie titles from S1
-d '{ "filter": { "genre": "creampie", "maker": "S1 NO.1 STYLE" } }'sextb — con streams, desde nuestro catálogo. Todas las dimensiones con nombre, ambos
rangos, censored en ambos sentidos. sort: release. Paginado. Sin availability.
javlibrary — solo censurado, desde nuestro catálogo. Todas las dimensiones con nombre,
ambos rangos. sort: release. Paginado. Sin availability.
javbus — torrents y un catálogo japonés amplio, desde nuestro índice. Todas las
dimensiones con nombre excepto actor, ambos rangos, censored en ambos sentidos. Actriz,
maker y género aceptan japonés o inglés. sort: relevance / release. Paginado. Sin
availability. Los torrents viajan en /movie como 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 }'Fija javbus y pide algo imposible → el 422 real:
# 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\"" }La forma del resultado es el cuerpo estándar de /query de §6. Para el registro de /movie y los
torrents, consulta la sección de javbus.
8. Límites de la v1
- Normalización entre proveedores. No hay vocabulario unificado; usa el dialecto de cada proveedor (inglés vs japonés, cadenas exactas).
sort: views— reservado, sin implementar.- Varios valores por dimensión. Uno por campo (
genre: ["a","b"]no). - Rangos en javdb. Funcionan en todos los demás.
availabilityfuera de javdb.- Combinar filtros arbitrarios en javdb. No tiene filtros por campo.
actoren javbus. No hay dimensión de actor masculino.sort: update,ratingoviewsen javbus. Solorelevanceyrelease.- Paginación u ordenación en missav.
- Paginar más allá de 1000 en fanza/dmm (
page × num≤ 1000). - Filtrar
/movieo/random.
Si la combinación no es posible: fijado → 422 con motivo; sin fijar → se omite y se prueba
el siguiente.
Siguiente
- Referencia de la API: la operación
/querycon todos los parámetros y playground. - Errores: casos
400y422.