Saltar al contenido
javinfo

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 /movie y /random no 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.

CampoTipoSignificado
genrestringCategoría / género
actressstringActriz (intérprete)
makerstringFabricante / estudio
seriesstringSerie
directorstringDirector
labelstringSello
actorstringActor masculino
censored"censored" | "uncensored"Estado del mosaico
runtimeMinnumber (minutos)Duración mínima
runtimeMaxnumber (minutos)Duración máxima
releaseAfterstring YYYY-MM-DDLanzado en/después de
releaseBeforestring YYYY-MM-DDLanzado 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: con num: 50, la página 20 es la última. Más allá recibes un 404 (sin resultados), no un error. Para llegar más lejos, acota con filter en 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.

Capacidadfanza / dmmmissavjavdbjavdatabasesextbjavlibraryjavbus
genre✅✅❌✅✅✅✅
actress✅✅❌✅✅✅✅
maker✅✅❌✅✅✅✅
series✅✅❌✅✅✅✅
director✅✅❌✅✅✅✅
label✅✅❌✅✅✅✅
actor✅✅❌✅✅✅❌
censored: censored✅✅✅✅✅✅✅
censored: uncensored❌✅✅✅✅❌✅
runtimeMin / runtimeMax✅✅❌✅✅✅✅
releaseAfter / releaseBefore✅✅❌✅✅✅✅
availability❌❌✅❌❌❌❌
Combinar varios filtroscualquier combinacióncualquier combinación❌ ningunocualquier combinacióncualquier combinacióncualquier combinacióncualquier 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 uncensored los excluye.
  • javdb no tiene filtros por campo. Solo la pestaña de censurados, availability y ordenación avanzada; pedir una dimensión con nombre lo excluye.
  • javlibrary es solo censurado. Un filtro uncensored lo excluye.
  • javbus no tiene dimensión actor. Un filter.actor fijado devuelve 422. Solo ordena por relevance o release; sort: rating se rechaza.
  • javbus acepta nombres en japonés o inglés. Sus cláusulas de actriz, maker y género leen ambos campos, así que 三上悠亜 y Yua Mikami coinciden. 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 page y sort. 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 → javdb

Los 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.
  • 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.)

  • censored significa cosas distintas según la fuente. missav no tiene una marca literal; la API asigna censored a títulos de mosaico convencionales y uncensored a todo lo demás (Caribbeancom, 10musume, Tokyo-Hot, 1pondo, FC2, filtraciones, …).

  • javdatabase es solo en inglés. Pasa inglés o romaji; una q o 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/runtimeMax en minutos. sort: release. Paginado.
  • Solo catálogo censurado. Sin uncensored ni availability.
# 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 q con "Yua Mikami" alcanza lanzamientos recientes. Añade "sort": "release" para ver primero los nuevos: con relevance, 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, censored en ambos sentidos.
  • Sin sort, sin paginación real (solo página 1), sin availability.
# 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), availability y sort (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.
  • availability fuera de javdb.
  • Combinar filtros arbitrarios en javdb. No tiene filtros por campo.
  • actor en javbus. No hay dimensión de actor masculino.
  • sort: update, rating o views en javbus. Solo relevance y release.
  • Paginación u ordenación en missav.
  • Paginar más allá de 1000 en fanza/dmm (page × num ≤ 1000).
  • Filtrar /movie o /random.

Si la combinación no es posible: fijado → 422 con motivo; sin fijar → se omite y se prueba el siguiente.

Siguiente

En esta página