Endpoints de découverte
Parcourez le catalogue sans code initial : tendances, titres similaires, sorties par jour, studios, séries, genres et sélections aléatoires.
Treize endpoints GET sur le catalogue, pas sur un seul code. Tous utilisent x-javinfo-key et sont
facturés. La plupart renvoient meta avec les sources, les documents parcourus et la durée.
Prix de base : $0.40 pour 1 000 appels. Avec num, le prix suit la taille de page au-delà de 10 :
num=20 coûte $0.80. Formule sur Limites de débit et facturation.
| Endpoint | À utiliser pour | Pour 1 000 au défaut |
|---|---|---|
/discover/trending | Sorties récentes, classées | $0.80 (num=20) |
/discover/underrated | Titres anciens bien notés | $0.80 (num=20) |
/discover/suggestion | Saisie assistée sur codes, interprètes, tags et studios | $0.40 (num=8) |
/discover/similar | Titres proches d'un code de départ | $0.48 (num=12) |
/discover/duel | Une paire A/B avec graine | $0.40 |
/discover/calendar | Sorties regroupées par jour | $0.40 |
/discover/tags | Comptages de tags sur une fenêtre | $1.20 (num=30) |
/discover/studios | Annuaire de studios, ou catalogue d'un studio | $1.20 / $0.80 |
/discover/series | Une série, de la plus récente à la plus ancienne | $0.80 (num=20) |
/discover/genres | Comptages de genres sur tout le catalogue | $2.40 (num=60) |
/discover/random | Titres aléatoires correspondant à des filtres | $0.40 (num=10) |
/discover/for-you | Sélections issues de l'historique de recherche du compte | $0.80 (num=20) |
/discover/stats | Totaux du catalogue par source | $0.40 |
Carte de film
Chaque titre d'une réponse de découverte a cette forme. Une carte suffit pour tous les endpoints ci-dessous.
| Champ | Type | Notes |
|---|---|---|
code | string | Code de titre normalisé, p. ex. ABP-002 |
title | string | null | Titre anglais uniquement ; null quand la source n'en a pas. Les lignes javbus ont souvent title: null avec le titre japonais dans titleJa |
titleJa | string | null | Titre japonais |
releaseDate | string | null | YYYY-MM-DD |
runtimeMins | number | null | Minutes |
maker | string | null | Studio / maker |
label | string | null | Label |
series | string | null | Série, telle que la source l'écrit |
categories | string[] | Tags de genre |
actresses | string[] | Distribution, noms anglais quand une source en a |
cover | string | null | URL de la jaquette |
rating | number | null | javlibrary uniquement, 1–10 ; null sur toutes les autres sources |
source | string | Quelle source a fourni cette carte : fanza, javdatabase, javlibrary, javbus ou missav |
url | string | null | Page sur le site de la source, quand la source en stocke une |
Les réponses se regroupent par code ; le premier index dans l'ordre de préférence fournit les
métadonnées. rating fait exception : seul javlibrary note, donc une autre source vaut null même si
le titre est noté.
meta décrit l'appel :
| Champ | Type | Notes |
|---|---|---|
sources | string[] | Noms publics des sources ayant répondu avec des résultats ou des comptages de facettes. Un tableau vide signifie généralement que le catalogue n'a pas pu être atteint |
scanned | number | Documents lus avant classement ou filtrage. 0 sur les endpoints qui ne renvoient que des facettes |
latencyMs | number | Temps côté serveur |
Exemples tronqués : premiers éléments, "…" pour les répétitions, titres longs coupés. Les valeurs
sont réelles.
/discover/trending
API : /discover/trending
Sorties récentes classées par qualité et par date. Pour une page d'accueil ou un rail « nouveautés de la semaine ».
| Paramètre | Type | Défaut | Plage |
|---|---|---|---|
range | integer | 30 | 1–365, jours en arrière à examiner |
num | integer | 20 | 1–50 |
genre | string | aucun | Nom exact de catégorie |
Prix : $0.80 pour 1 000 avec num=20 ; $0.40 avec num ≤ 10.
Le gestionnaire lit les derniers range jours, du plus récent au plus ancien, puis reclasse par
fraîcheur, note, galerie, aperçu et distribution. Sans borne supérieure, les annonces futures
apparaissent aussi.
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
}
}État : 200, 400, 401, 402, 429.
/discover/underrated
API : /discover/underrated
Titres anciens passés inaperçus, classés plus par note que par date. Pour un rayon « oubliés ».
| Paramètre | Type | Défaut | Plage |
|---|---|---|---|
minAgeDays | integer | 365 | 30–3650, âge minimum en jours |
num | integer | 20 | 1–50 |
Prix : $0.80 pour 1 000 avec num=20 ; $0.40 avec num ≤ 10.
Seul javlibrary note, donc le pool vient de cet index : huit tranches aléatoires de 30 jours sur les 12 années avant la limite. Les titres sans note sont écartés ; le score favorise les plus anciens, mieux notés et complets.
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
}
}État : 200, 400, 401, 402, 429.
/discover/suggestion
API : /discover/suggestion
Saisie assistée pour un champ de recherche : codes, interprètes, tags et studios, dédupliqués, codes en premier.
| Paramètre | Type | Défaut | Plage |
|---|---|---|---|
q | string | obligatoire | au moins 1 caractère |
num | integer | 8 | 1–20 |
Prix : $0.40 pour 1 000 avec num=8 ; $0.80 avec num=20.
Chaque entrée dit ce qu'elle est et quoi afficher à côté :
kind | value | label | extra |
|---|---|---|---|
code | Code de titre | Le même code | Titre anglais, ou le titre japonais quand il n'y a pas de titre anglais |
idol | Id de l'interprète | Nom | URL d'image |
tag | Slug de tag | Le même slug | Comptage |
studio | Nom du studio | Le même nom | Comptage |
extra peut être null. La recherche reprend le préfixe des index de films ; pas d'index n-grammes. Les
suggestions se construisent par type et se coupent à 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 manquant est rejeté avant l'exécution du gestionnaire :
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"
}
]
}
}État : 200, 400, 401, 402, 429.
/discover/similar
API : /discover/similar
« Plus comme ça. » Un code, des voisins classés, la carte de départ et les scores. Pour une page de détail.
| Paramètre | Type | Défaut | Plage |
|---|---|---|---|
q | string | obligatoire | Un code de titre |
num | integer | 12 | 1–50 |
Prix : $0.48 pour 1 000 avec num=12 ; $0.40 avec num ≤ 10.
La graine est résolue dans les index de films. Les candidats partagent son premier interprète ou l'un de
ses trois premiers tags, puis sont classés par distribution, tags, maker, label, série, durée et date.
La graine est exclue de results ; scores s'aligne avec results par code, 0 à 1, trois décimales.
Un code qu'aucun index ne connaît est un 404, pas un 200 vide. Une faute de frappe n'est jamais
facturée.
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 },
"…"
]
}Même code, inconnu :
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\""
}État : 200, 400, 401, 402, 404, 429.
/discover/duel
API : /discover/duel
Paire A/B pour un jeu « lequel ». La même seed montre les deux mêmes cartes à tous.
| Paramètre | Type | Défaut | Plage |
|---|---|---|---|
seed | string | la date UTC du jour | n'importe quelle chaîne |
genre | string | aucun | Nom exact de catégorie |
performer | string | aucun | Nom exact d'interprète |
Prix : $0.40 pour 1 000, forfaitaire. Pas de réglage de page.
Le pool réunit les 40 titres les plus récents de DMM + FANZA, javdatabase et javlibrary, dédupliqués par
code, sortis et avec distribution. genre et performer le resserrent. Un PRNG amorcé en choisit deux
et les ordonne par code, donc a et b tombent des mêmes côtés pour tous. Le pool bouge à chaque
sortie : la graine ne tient que cette fenêtre. a et b peuvent être null sous deux candidats.
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/"
}
}État : 200, 401, 402, 429.
/discover/calendar
API : /discover/calendar
Sorties entre deux dates, par jour. Pour un calendrier.
| Paramètre | Type | Défaut | Plage |
|---|---|---|---|
from | string | aujourd'hui | YYYY-MM-DD |
to | string | aujourd'hui + 30 jours | YYYY-MM-DD |
Prix : $0.40 pour 1 000, forfaitaire. Chaque appel de la boucle ci-dessous est facturé à part.
Les deux dates sont inclusives. Les valeurs sont indépendantes : from seul finit quand même 30 jours
après aujourd'hui, donc passez les deux pour le passé. Les jours vides sont omis ; les groupes montent.
Chaque sortie est une carte complète.
Les longues plages s'arrêtent tôt
Chaque source renvoie au plus 1 000 lignes par appel : une plage chargée se remplit en 5 jours environ. Seuls les jours complets reviennent, et l'endpoint dit où il s'est arrêté :
| Champ | Signification |
|---|---|
through | Le dernier jour entièrement couvert, YYYY-MM-DD. Égal à to sauf si la réponse a été coupée. |
truncated | true quand les jours après through ont été coupés. |
from=2026-11-01&to=2026-11-14 est trop long pour un seul appel :
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
}
}Cette réponse contient 1,011 titres du 1er au 5 novembre. Une plage qui tient revient entière :
from=2026-11-01&to=2026-11-03 renvoie "through": "2026-11-03" et "truncated": false.
Pour le reste, rappelez avec from au jour après through et répétez jusqu'à truncated à false.
Le deuxième appel est 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
}
}La même boucle en code :
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 jour dépasse le plafond, il revient partiel, through est ce jour et la boucle continue.
État : 200, 400, 401, 402, 429.
/discover/tags
API : /discover/tags
Comptages de tags récents, du plus élevé au plus faible. Pour un bloc « tags en tendance ».
| Paramètre | Type | Défaut | Plage |
|---|---|---|---|
range | integer | 30 | 1–365, jours en arrière |
num | integer | 30 | 1–100 |
Prix : $1.20 pour 1 000 avec num=30 ; $0.40 avec num ≤ 10.
Les comptages viennent de facettes de DMM + FANZA et javdatabase. Les tags sont canonisés avant comptage, donc les variantes fusionnent. Les valeurs sont des slugs, pas des noms.
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
}
}État : 200, 400, 401, 402, 429.
/discover/studios
API : /discover/studios
Une route, deux formes. Sans q, un annuaire de studios par production sur range ; avec q, le
catalogue du studio, du plus récent au plus ancien. kind dit lequel : directory ou catalogue.
| Paramètre | Type | Défaut | Plage |
|---|---|---|---|
q | string | aucun | Nom exact du studio ; bascule en mode catalogue |
range | integer | 365 | 30–3650, mode annuaire uniquement |
num | integer | 30 en annuaire, 20 en catalogue | 1–100 en annuaire ; le catalogue est plafonné à 50 |
page | integer | 1 | 1 et au-delà, mode catalogue uniquement |
Prix : annuaire $1.20 pour 1 000 avec num=30 ; catalogue $0.80 avec num=20. Le catalogue
plafonne num à 50, donc $2.00 au maximum.
range est ignoré avec q ; page, sans. En mode catalogue, total estime les titres du studio :
paginez dessus.
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
}
}État : 200, 400, 401, 402, 429.
/discover/series
API : /discover/series
Le catalogue d'une série, du plus récent au plus ancien. Pour lister le reste quand quelqu'un ouvre un titre.
| Paramètre | Type | Défaut | Plage |
|---|---|---|---|
q | string | obligatoire | Nom exact de la série |
num | integer | 20 | 1–50 |
page | integer | 1 | 1 et au-delà |
Prix : $0.80 pour 1 000 avec num=20 ; $0.40 avec num ≤ 10.
q est une correspondance exacte du nom de série dans DMM + FANZA, pas une recherche. Passez la chaîne
stockée, lisible dans series de n'importe quel titre. Un nom partiel ou une autre écriture renvoie
200 avec count: 0, pas 404. total estime les titres de la série.
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
}État : 200, 400, 401, 402, 429.
/discover/genres
API : /discover/genres
La taxonomie des genres avec des comptages sur tout le catalogue. Pour amorcer un menu de filtres.
| Paramètre | Type | Défaut | Plage |
|---|---|---|---|
num | integer | 60 | 1–200 |
Prix : $2.40 pour 1 000 avec num=60 ; $0.40 avec num ≤ 10 ; $8.00 avec num=200.
Ici, des libellés d'affichage (Featured Actress), pas des slugs comme /discover/tags. Les comptages
viennent de DMM + FANZA seul ; une autre source n'ajoute rien.
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
}
}État : 200, 400, 401, 402, 429.
/discover/random
API : /discover/random
Titres aléatoires avec filtres facultatifs. Pour un bouton « surprends-moi ».
| Paramètre | Type | Défaut | Plage |
|---|---|---|---|
genre | string | aucun | Nom exact de catégorie |
performer | string | aucun | Nom exact d'interprète |
studio | string | aucun | Nom exact de studio |
censored | string | aucun | censored ou uncensored |
num | integer | 10 | 1–50 |
Prix : $0.40 pour 1 000 avec num=10 ; $2.00 avec num=50.
Les filtres se combinent avec AND. Le tirage n'est pas uniforme : le gestionnaire lit cinq mois aléatoires, prend un décalage dans chacun, mélange le pool et le complète si un filtre étroit le laisse court. Des appels consécutifs renvoient des titres sans rapport.
censored ne change qu'avec uncensored, qui lit la section non censurée de javbus au lieu de
DMM + FANZA. Passer censored équivaut à l'omettre. Sans cache, chaque appel rééchantillonne. La
réponse n'a ni 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
},
"…"
]
}Et avec le filtre non censuré :
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"
},
"…"
]
}État : 200, 400, 401, 402, 429.
/discover/for-you
API : /discover/for-you
Recommandations issues de l'historique de recherche du compte. Deux clés d'un compte le partagent : l'historique est par utilisateur, pas par clé.
| Paramètre | Type | Défaut | Plage |
|---|---|---|---|
num | integer | 20 | 1–50 |
lookback | integer | 20 | 1–100, combien de recherches récentes lire |
Prix : $0.80 pour 1 000 avec num=20 ; $0.40 avec num ≤ 10.
Seuls les appels réussis à /movie, /query et /idols comptent. Le gestionnaire lit les lookback
dernières lignes, garde jusqu'à cinq requêtes distinctes, prend les tags de leurs meilleurs résultats et
choisit des titres récents qui les partagent. Le score de /discover/trending ordonne.
basis explique le choix pour l'afficher : requêtes utilisées, tags dérivés et fallback. Sans
historique, fallback vaut true et la réponse est les titres les plus récents de 30 jours.
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
}
}État : 200, 400, 401, 402, 429.
/discover/stats
API : /discover/stats
Totaux par source, avec horodatage. Aucun paramètre.
Prix : $0.40 pour 1 000 appels, forfaitaire.
Les comptages sont des documents d'index : un titre sur deux sources compte deux fois. asOf est
l'heure de lecture. Le GET /stats public ne demande pas de clé et cache un jour, mais
rapporte des comptages par fournisseur : FANZA et DMM séparés, sans 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"
}État : 200, 401, 402, 429.
Erreurs
L'entrée est validée avant le gestionnaire. Un mauvais paramètre renvoie 400 avec
code: "BAD_REQUEST", message: "Input validation failed" et un tableau issues qui le nomme. Cette
surface ne renvoie jamais 422 : hors plage comme mauvais type sont 400. range compte des jours,
donc range=7 marche et range=week est 400 avec issues[].path valant ["range"]. Le corps de
/discover/trending?num=500, au-dessus 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"
}
]
}
}Une clé absente et une clé rejetée diffèrent. Sans clé :
{
"defined": false,
"code": "UNAUTHORIZED",
"status": 401,
"message": "Unauthorized"
}Une clé que le portail n'accepte pas :
{ "error": "invalid api key" }Crédit insuffisant. Rien n'est facturé ; Retry-After vaut une heure :
{
"defined": false,
"code": "PAYMENT_REQUIRED",
"status": 402,
"message": "insufficient balance"
}Au-dessus du plafond par minute du compte. Retry-After est en secondes :
{ "error": "rate limit exceeded" }Le 404 est spécifique à /discover/similar, montré plus haut. Aucun autre endpoint de découverte
ne le renvoie.
Ce qui est gratuit
Seul un 200 frais est facturé. Gratuit :
- Un hit de cache :
X-Cache: HIT, aucun crédit./discover/randomn'a pas de cache. - Tout
4xx. Une requête échouée n'est jamais facturée. - Une réponse dégradée : une lecture en amont échoue, l'API sert ce qu'elle a, met
X-Degradedau nombre d'échecs et ne facture ni ne cache. Vérifiez-le si la réponse paraît maigre.
X-Balance-Remaining est le crédit restant après l'appel.