Saltar al contenido
javinfo

Endpoints de descubrimiento

Explora el catálogo sin código inicial: tendencias, títulos similares, lanzamientos por día, estudios, series, géneros y elecciones aleatorias.

Trece endpoints GET sobre el catálogo, no sobre un solo código. Todos usan x-javinfo-key y se facturan. La mayoría devuelve meta con fuentes, documentos escaneados y tiempo.

El precio base es $0.40 por 1000 llamadas. Con num, el precio escala por encima de 10: num=20 cuesta $0.80. Fórmula en Límites de tasa y facturación.

EndpointÚsalo paraPor 1000 con el valor predeterminado
/discover/trendingLanzamientos recientes, ordenados$0.80 (num=20)
/discover/underratedTítulos antiguos con buena valoración$0.80 (num=20)
/discover/suggestionAutocompletado entre códigos, intérpretes, etiquetas y estudios$0.40 (num=8)
/discover/similarTítulos parecidos a un código semilla$0.48 (num=12)
/discover/duelUn par A/B con semilla$0.40
/discover/calendarLanzamientos agrupados por día$0.40
/discover/tagsRecuentos de etiquetas en una ventana temporal$1.20 (num=30)
/discover/studiosDirectorio de estudios, o el catálogo de un estudio$1.20 / $0.80
/discover/seriesUna serie, de lo más nuevo a lo más antiguo$0.80 (num=20)
/discover/genresRecuentos de géneros de todo el catálogo$2.40 (num=60)
/discover/randomTítulos aleatorios que cumplen filtros$0.40 (num=10)
/discover/for-youElecciones a partir del historial de búsqueda de la cuenta$0.80 (num=20)
/discover/statsTotales del catálogo por fuente$0.40

Tarjeta de película

Todo título de una respuesta de descubrimiento tiene esta forma. Una tarjeta sirve para todos los endpoints de abajo.

CampoTipoNotas
codestringCódigo de título normalizado, p. ej. ABP-002
titlestring | nullSolo título en inglés; null cuando la fuente no tiene ninguno. Las filas de javbus suelen traer title: null con el título japonés en titleJa
titleJastring | nullTítulo en japonés
releaseDatestring | nullYYYY-MM-DD
runtimeMinsnumber | nullMinutos
makerstring | nullEstudio / maker
labelstring | nullSello
seriesstring | nullSerie, tal como la escribe la fuente
categoriesstring[]Etiquetas de género
actressesstring[]Reparto, nombres en inglés cuando una fuente los tiene
coverstring | nullURL de la carátula
ratingnumber | nullSolo javlibrary, 1–10; null en todas las demás fuentes
sourcestringQué fuente aportó esta tarjeta: fanza, javdatabase, javlibrary, javbus o missav
urlstring | nullPágina en el sitio de la fuente, cuando la fuente guarda una

Varias respuestas se agrupan por code; el primer índice en orden de preferencia aporta los metadatos. rating es la excepción: solo javlibrary valora, así que otra fuente da null aunque el título esté valorado.

meta describe la llamada:

CampoTipoNotas
sourcesstring[]Nombres públicos de las fuentes que respondieron con resultados o recuentos de facetas. Un array vacío suele significar que no se pudo alcanzar el catálogo
scannednumberDocumentos leídos antes de ordenar o filtrar. 0 en los endpoints que solo devuelven facetas
latencyMsnumberTiempo del lado del servidor

Ejemplos recortados: primeros elementos, "…" para repetidos, títulos largos cortados. Los valores son reales.

/discover/trending

API: /discover/trending

Lanzamientos recientes ordenados por calidad y fecha. Para una página de inicio o una fila de "novedades de la semana".

ParámetroTipoPredeterminadoRango
rangeinteger301–365, días hacia atrás que mirar
numinteger201–50
genrestringningunoNombre exacto de categoría

Precio: $0.80 por 1000 con num=20; $0.40 con num ≤ 10.

El manejador lee los últimos range días, de más nuevo a más antiguo, y reordena por recencia, valoración, galería, vista previa y reparto. Sin límite superior de fecha, también aparecen anuncios futuros.

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
  }
}

Estado: 200, 400, 401, 402, 429.

/discover/underrated

API: /discover/underrated

Títulos antiguos que pasaron desapercibidos, ordenados más por valoración que por fecha. Para una estantería de "olvidados".

ParámetroTipoPredeterminadoRango
minAgeDaysinteger36530–3650, antigüedad mínima en días
numinteger201–50

Precio: $0.80 por 1000 con num=20; $0.40 con num ≤ 10.

Solo javlibrary valora, así que el pool sale de ese índice: ocho franjas aleatorias de 30 días en los 12 años previos al corte. Los títulos sin valoración se descartan; la puntuación premia lo más antiguo, mejor valorado y completo.

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
  }
}

Estado: 200, 400, 401, 402, 429.

/discover/suggestion

API: /discover/suggestion

Autocompletado para un buscador: códigos, intérpretes, etiquetas y estudios, sin duplicados, códigos primero.

ParámetroTipoPredeterminadoRango
qstringobligatorioal menos 1 carácter
numinteger81–20

Precio: $0.40 por 1000 con num=8; $0.80 con num=20.

Cada entrada dice qué es y qué mostrar al lado:

kindvaluelabelextra
codeCódigo de títuloEl mismo códigoTítulo en inglés, o el japonés cuando no hay título en inglés
idolId del intérpreteNombreURL de imagen
tagSlug de etiquetaEl mismo slugRecuento
studioNombre del estudioEl mismo nombreRecuento

extra puede ser null. La búsqueda usa el mismo prefijo que los índices de películas; no hay índice n-gramas. Las sugerencias se ordenan por tipo y se cortan a 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"
    },
    "…"
  ]
}

Un q ausente se rechaza antes de que se ejecute el manejador:

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"
      }
    ]
  }
}

Estado: 200, 400, 401, 402, 429.

/discover/similar

API: /discover/similar

"Más como esto". Un código, vecinos ordenados, la tarjeta semilla y las puntuaciones. Para una página de detalle.

ParámetroTipoPredeterminadoRango
qstringobligatorioUn código de título
numinteger121–50

Precio: $0.48 por 1000 con num=12; $0.40 con num ≤ 10.

La semilla se resuelve en los índices de películas. Los candidatos comparten su primer intérprete o una de sus tres primeras etiquetas, y se ordenan por reparto, etiquetas, maker, sello, serie, duración y fecha. La semilla queda fuera de results; scores se alinea con results por código, 0–1, tres decimales.

Un código que ningún índice conoce es un 404, no un 200 vacío. Una errata nunca se factura.

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 },
    "…"
  ]
}

Mismo código, desconocido:

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\""
}

Estado: 200, 400, 401, 402, 404, 429.

/discover/duel

API: /discover/duel

Par A/B para un juego de "cuál". La misma seed muestra las mismas dos tarjetas a todos.

ParámetroTipoPredeterminadoRango
seedstringla fecha UTC de hoycualquier cadena
genrestringningunoNombre exacto de categoría
performerstringningunoNombre exacto de intérprete

Precio: $0.40 por 1000, fijo. Sin ajuste de página.

El pool son los 40 títulos más nuevos de DMM + FANZA, javdatabase y javlibrary, sin duplicados por código, lanzados y con reparto. genre y performer lo estrechan. Un PRNG con semilla elige dos y ordena por código, así que a y b caen en los mismos lados para todos. El pool cambia con cada lanzamiento: la semilla solo dura esa ventana. a y b pueden ser null con menos de dos candidatos.

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/"
  }
}

Estado: 200, 401, 402, 429.

/discover/calendar

API: /discover/calendar

Lanzamientos entre dos fechas, por día. Para un calendario.

ParámetroTipoPredeterminadoRango
fromstringhoyYYYY-MM-DD
tostringhoy + 30 díasYYYY-MM-DD

Precio: $0.40 por 1000, fijo. Cada llamada del bucle de abajo se cobra aparte.

Ambas fechas son inclusivas. Los valores son independientes: solo from también termina 30 días después de hoy, así que pasa ambos para el pasado. Los días vacíos se omiten; los grupos suben. Cada lanzamiento es una tarjeta completa.

Los rangos largos se cortan antes de tiempo

Cada fuente devuelve como máximo 1000 filas por llamada, así que un rango cargado se llena en unos 5 días. Solo vuelven días completos, y dice dónde paró:

CampoSignificado
throughEl último día cubierto por completo, YYYY-MM-DD. Es igual a to salvo que la respuesta se haya cortado.
truncatedtrue cuando se cortaron los días posteriores a through.

from=2026-11-01&to=2026-11-14 es demasiado largo para una sola llamada:

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
  }
}

Esa respuesta tiene 1,011 títulos del 1 al 5 de noviembre. Un rango que cabe vuelve entero: from=2026-11-01&to=2026-11-03 devuelve "through": "2026-11-03" y "truncated": false.

Para el resto, llama con from en el día después de through y repite hasta que truncated sea false. La segunda llamada es 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
  }
}

El mismo bucle en código:

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);
}

Si un día supera el límite, vuelve parcial, through es ese día y el bucle sigue.

Estado: 200, 400, 401, 402, 429.

/discover/tags

API: /discover/tags

Recuentos de etiquetas recientes, de mayor a menor. Para un bloque de "etiquetas en tendencia".

ParámetroTipoPredeterminadoRango
rangeinteger301–365, días hacia atrás
numinteger301–100

Precio: $1.20 por 1000 con num=30; $0.40 con num ≤ 10.

Los recuentos vienen de facetas de DMM + FANZA y javdatabase. Las etiquetas se canonizan antes de contar, así que las variantes se fusionan. Los valores son slugs, no nombres.

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
  }
}

Estado: 200, 400, 401, 402, 429.

/discover/studios

API: /discover/studios

Una ruta, dos formas. Sin q, directorio de estudios por producción en range; con q, el catálogo del estudio, de más nuevo a más antiguo. kind dice cuál: directory o catalogue.

ParámetroTipoPredeterminadoRango
qstringningunoNombre exacto del estudio; cambia al modo catálogo
rangeinteger36530–3650, solo en modo directorio
numinteger30 en directorio, 20 en catálogo1–100 en directorio; el catálogo está limitado a 50
pageinteger11 en adelante, solo en modo catálogo

Precio: directorio $1.20 por 1000 con num=30; catálogo $0.80 con num=20. El catálogo limita num a 50, así que su máximo es $2.00.

range se ignora con q; page, sin él. En modo catálogo, total estima los títulos del estudio: pagina contra él.

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
  }
}

Estado: 200, 400, 401, 402, 429.

/discover/series

API: /discover/series

El catálogo de una serie, de más nuevo a más antiguo. Para listar el resto cuando alguien abre un título.

ParámetroTipoPredeterminadoRango
qstringobligatorioNombre exacto de la serie
numinteger201–50
pageinteger11 en adelante

Precio: $0.80 por 1000 con num=20; $0.40 con num ≤ 10.

q es una coincidencia exacta con el nombre de la serie en DMM + FANZA, no una búsqueda. Pasa la cadena guardada, legible en series de cualquier título. Un nombre parcial u otra escritura devuelve 200 con count: 0, no 404. total estima los títulos de la serie.

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
}

Estado: 200, 400, 401, 402, 429.

/discover/genres

API: /discover/genres

La taxonomía de géneros con recuentos de todo el catálogo. Para sembrar un menú de filtros.

ParámetroTipoPredeterminadoRango
numinteger601–200

Precio: $2.40 por 1000 con num=60; $0.40 con num ≤ 10; $8.00 con num=200.

Aquí son etiquetas de visualización (Featured Actress), no slugs como /discover/tags. Los recuentos vienen solo de DMM + FANZA; otra fuente no suma.

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
  }
}

Estado: 200, 400, 401, 402, 429.

/discover/random

API: /discover/random

Títulos aleatorios con filtros opcionales. Para un botón de "sorpréndeme".

ParámetroTipoPredeterminadoRango
genrestringningunoNombre exacto de categoría
performerstringningunoNombre exacto de intérprete
studiostringningunoNombre exacto de estudio
censoredstringningunocensored o uncensored
numinteger101–50

Precio: $0.40 por 1000 con num=10; $2.00 con num=50.

Los filtros se combinan con AND. El sorteo no es uniforme: el manejador lee cinco meses aleatorios, toma un desplazamiento en cada uno, baraja el pool y lo rellena si un filtro estrecho lo deja corto. Llamadas seguidas devuelven títulos sin relación.

censored solo cambia con uncensored, que lee la sección sin censura de javbus en vez de DMM + FANZA. Pasar censored equivale a omitirlo. Sin caché, cada llamada muestrea de nuevo. La respuesta no trae meta ni 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
    },
    "…"
  ]
}

Y con el filtro sin censura:

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"
    },
    "…"
  ]
}

Estado: 200, 400, 401, 402, 429.

/discover/for-you

API: /discover/for-you

Recomendaciones del historial de búsqueda de la cuenta. Dos claves de una cuenta lo comparten: el historial es por usuario, no por clave.

ParámetroTipoPredeterminadoRango
numinteger201–50
lookbackinteger201–100, cuántas búsquedas recientes leer

Precio: $0.80 por 1000 con num=20; $0.40 con num ≤ 10.

Solo cuentan las llamadas correctas a /movie, /query e /idols. El manejador lee las últimas lookback filas, guarda hasta cinco consultas distintas, toma las etiquetas de sus mejores resultados y elige títulos recientes que las comparten. La puntuación de /discover/trending ordena.

basis explica la elección para mostrarla: consultas usadas, etiquetas derivadas y fallback. Sin historial, fallback es true y la respuesta son los títulos más nuevos de 30 días.

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
  }
}

Estado: 200, 400, 401, 402, 429.

/discover/stats

API: /discover/stats

Totales por fuente, con marca de tiempo. Sin parámetros.

Precio: $0.40 por 1000 llamadas, fijo.

Los recuentos son documentos de índice: un título en dos fuentes cuenta dos veces. asOf es la hora de lectura. El GET /stats público no necesita clave y cachea un día, pero informa recuentos por proveedor: FANZA y DMM separados, sin total.

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"
}

Estado: 200, 401, 402, 429.

Errores

La entrada se valida antes del manejador. Un parámetro malo devuelve 400 con code: "BAD_REQUEST", message: "Input validation failed" y un array issues que lo nombra. Esta superficie nunca devuelve 422: fuera de rango es 400, y un tipo incorrecto también. range son días, así que range=7 funciona y range=week es 400 con issues[].path de ["range"]. El cuerpo de /discover/trending?num=500, sobre el máximo de 50:

{
  "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"
      }
    ]
  }
}

Una clave ausente y una rechazada difieren. Sin clave:

{
  "defined": false,
  "code": "UNAUTHORIZED",
  "status": 401,
  "message": "Unauthorized"
}

Una clave que la puerta no acepta:

{ "error": "invalid api key" }

Sin crédito. Nada se cobra; Retry-After es una hora:

{
  "defined": false,
  "code": "PAYMENT_REQUIRED",
  "status": 402,
  "message": "insufficient balance"
}

Por encima del tope por minuto de la cuenta. Retry-After está en segundos:

{ "error": "rate limit exceeded" }

El 404 es solo de /discover/similar, mostrado arriba. Ningún otro endpoint de descubrimiento lo devuelve.

Qué es gratis

Solo se cobra un 200 nuevo. Gratis:

  • Acierto de caché: X-Cache: HIT, sin crédito. /discover/random no tiene caché.
  • Cualquier 4xx. Una solicitud fallida nunca se factura.
  • Respuesta degradada: una lectura aguas arriba falla, la API sirve lo que tiene, pone X-Degraded con las lecturas fallidas y no cobra ni cachea. Compruébalo si la respuesta parece escasa.

X-Balance-Remaining es el crédito restante tras la llamada.

En esta página