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 para | Por 1000 con el valor predeterminado |
|---|---|---|
/discover/trending | Lanzamientos recientes, ordenados | $0.80 (num=20) |
/discover/underrated | Títulos antiguos con buena valoración | $0.80 (num=20) |
/discover/suggestion | Autocompletado entre códigos, intérpretes, etiquetas y estudios | $0.40 (num=8) |
/discover/similar | Títulos parecidos a un código semilla | $0.48 (num=12) |
/discover/duel | Un par A/B con semilla | $0.40 |
/discover/calendar | Lanzamientos agrupados por día | $0.40 |
/discover/tags | Recuentos de etiquetas en una ventana temporal | $1.20 (num=30) |
/discover/studios | Directorio de estudios, o el catálogo de un estudio | $1.20 / $0.80 |
/discover/series | Una serie, de lo más nuevo a lo más antiguo | $0.80 (num=20) |
/discover/genres | Recuentos de géneros de todo el catálogo | $2.40 (num=60) |
/discover/random | Títulos aleatorios que cumplen filtros | $0.40 (num=10) |
/discover/for-you | Elecciones a partir del historial de búsqueda de la cuenta | $0.80 (num=20) |
/discover/stats | Totales 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.
| Campo | Tipo | Notas |
|---|---|---|
code | string | Código de título normalizado, p. ej. ABP-002 |
title | string | null | Solo 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 |
titleJa | string | null | Título en japonés |
releaseDate | string | null | YYYY-MM-DD |
runtimeMins | number | null | Minutos |
maker | string | null | Estudio / maker |
label | string | null | Sello |
series | string | null | Serie, tal como la escribe la fuente |
categories | string[] | Etiquetas de género |
actresses | string[] | Reparto, nombres en inglés cuando una fuente los tiene |
cover | string | null | URL de la carátula |
rating | number | null | Solo javlibrary, 1–10; null en todas las demás fuentes |
source | string | Qué fuente aportó esta tarjeta: fanza, javdatabase, javlibrary, javbus o missav |
url | string | null | Pá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:
| Campo | Tipo | Notas |
|---|---|---|
sources | string[] | 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 |
scanned | number | Documentos leídos antes de ordenar o filtrar. 0 en los endpoints que solo devuelven facetas |
latencyMs | number | Tiempo 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ámetro | Tipo | Predeterminado | Rango |
|---|---|---|---|
range | integer | 30 | 1–365, días hacia atrás que mirar |
num | integer | 20 | 1–50 |
genre | string | ninguno | Nombre 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ámetro | Tipo | Predeterminado | Rango |
|---|---|---|---|
minAgeDays | integer | 365 | 30–3650, antigüedad mínima en días |
num | integer | 20 | 1–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ámetro | Tipo | Predeterminado | Rango |
|---|---|---|---|
q | string | obligatorio | al menos 1 carácter |
num | integer | 8 | 1–20 |
Precio: $0.40 por 1000 con num=8; $0.80 con num=20.
Cada entrada dice qué es y qué mostrar al lado:
kind | value | label | extra |
|---|---|---|---|
code | Código de título | El mismo código | Título en inglés, o el japonés cuando no hay título en inglés |
idol | Id del intérprete | Nombre | URL de imagen |
tag | Slug de etiqueta | El mismo slug | Recuento |
studio | Nombre del estudio | El mismo nombre | Recuento |
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ámetro | Tipo | Predeterminado | Rango |
|---|---|---|---|
q | string | obligatorio | Un código de título |
num | integer | 12 | 1–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ámetro | Tipo | Predeterminado | Rango |
|---|---|---|---|
seed | string | la fecha UTC de hoy | cualquier cadena |
genre | string | ninguno | Nombre exacto de categoría |
performer | string | ninguno | Nombre 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ámetro | Tipo | Predeterminado | Rango |
|---|---|---|---|
from | string | hoy | YYYY-MM-DD |
to | string | hoy + 30 días | YYYY-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ó:
| Campo | Significado |
|---|---|
through | El último día cubierto por completo, YYYY-MM-DD. Es igual a to salvo que la respuesta se haya cortado. |
truncated | true 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ámetro | Tipo | Predeterminado | Rango |
|---|---|---|---|
range | integer | 30 | 1–365, días hacia atrás |
num | integer | 30 | 1–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ámetro | Tipo | Predeterminado | Rango |
|---|---|---|---|
q | string | ninguno | Nombre exacto del estudio; cambia al modo catálogo |
range | integer | 365 | 30–3650, solo en modo directorio |
num | integer | 30 en directorio, 20 en catálogo | 1–100 en directorio; el catálogo está limitado a 50 |
page | integer | 1 | 1 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ámetro | Tipo | Predeterminado | Rango |
|---|---|---|---|
q | string | obligatorio | Nombre exacto de la serie |
num | integer | 20 | 1–50 |
page | integer | 1 | 1 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ámetro | Tipo | Predeterminado | Rango |
|---|---|---|---|
num | integer | 60 | 1–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ámetro | Tipo | Predeterminado | Rango |
|---|---|---|---|
genre | string | ninguno | Nombre exacto de categoría |
performer | string | ninguno | Nombre exacto de intérprete |
studio | string | ninguno | Nombre exacto de estudio |
censored | string | ninguno | censored o uncensored |
num | integer | 10 | 1–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ámetro | Tipo | Predeterminado | Rango |
|---|---|---|---|
num | integer | 20 | 1–50 |
lookback | integer | 20 | 1–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/randomno 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-Degradedcon 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.