Aller au contenu
javinfo

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 pourPour 1 000 au défaut
/discover/trendingSorties récentes, classées$0.80 (num=20)
/discover/underratedTitres anciens bien notés$0.80 (num=20)
/discover/suggestionSaisie assistée sur codes, interprètes, tags et studios$0.40 (num=8)
/discover/similarTitres proches d'un code de départ$0.48 (num=12)
/discover/duelUne paire A/B avec graine$0.40
/discover/calendarSorties regroupées par jour$0.40
/discover/tagsComptages de tags sur une fenêtre$1.20 (num=30)
/discover/studiosAnnuaire de studios, ou catalogue d'un studio$1.20 / $0.80
/discover/seriesUne série, de la plus récente à la plus ancienne$0.80 (num=20)
/discover/genresComptages de genres sur tout le catalogue$2.40 (num=60)
/discover/randomTitres aléatoires correspondant à des filtres$0.40 (num=10)
/discover/for-youSélections issues de l'historique de recherche du compte$0.80 (num=20)
/discover/statsTotaux 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.

ChampTypeNotes
codestringCode de titre normalisé, p. ex. ABP-002
titlestring | nullTitre anglais uniquement ; null quand la source n'en a pas. Les lignes javbus ont souvent title: null avec le titre japonais dans titleJa
titleJastring | nullTitre japonais
releaseDatestring | nullYYYY-MM-DD
runtimeMinsnumber | nullMinutes
makerstring | nullStudio / maker
labelstring | nullLabel
seriesstring | nullSérie, telle que la source l'écrit
categoriesstring[]Tags de genre
actressesstring[]Distribution, noms anglais quand une source en a
coverstring | nullURL de la jaquette
ratingnumber | nulljavlibrary uniquement, 1–10 ; null sur toutes les autres sources
sourcestringQuelle source a fourni cette carte : fanza, javdatabase, javlibrary, javbus ou missav
urlstring | nullPage 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 :

ChampTypeNotes
sourcesstring[]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
scannednumberDocuments lus avant classement ou filtrage. 0 sur les endpoints qui ne renvoient que des facettes
latencyMsnumberTemps 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ètreTypeDéfautPlage
rangeinteger301–365, jours en arrière à examiner
numinteger201–50
genrestringaucunNom 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ètreTypeDéfautPlage
minAgeDaysinteger36530–3650, âge minimum en jours
numinteger201–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ètreTypeDéfautPlage
qstringobligatoireau moins 1 caractère
numinteger81–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é :

kindvaluelabelextra
codeCode de titreLe même codeTitre anglais, ou le titre japonais quand il n'y a pas de titre anglais
idolId de l'interprèteNomURL d'image
tagSlug de tagLe même slugComptage
studioNom du studioLe même nomComptage

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ètreTypeDéfautPlage
qstringobligatoireUn code de titre
numinteger121–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ètreTypeDéfautPlage
seedstringla date UTC du journ'importe quelle chaîne
genrestringaucunNom exact de catégorie
performerstringaucunNom 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ètreTypeDéfautPlage
fromstringaujourd'huiYYYY-MM-DD
tostringaujourd'hui + 30 joursYYYY-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é :

ChampSignification
throughLe dernier jour entièrement couvert, YYYY-MM-DD. Égal à to sauf si la réponse a été coupée.
truncatedtrue 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ètreTypeDéfautPlage
rangeinteger301–365, jours en arrière
numinteger301–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ètreTypeDéfautPlage
qstringaucunNom exact du studio ; bascule en mode catalogue
rangeinteger36530–3650, mode annuaire uniquement
numinteger30 en annuaire, 20 en catalogue1–100 en annuaire ; le catalogue est plafonné à 50
pageinteger11 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ètreTypeDéfautPlage
qstringobligatoireNom exact de la série
numinteger201–50
pageinteger11 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ètreTypeDéfautPlage
numinteger601–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ètreTypeDéfautPlage
genrestringaucunNom exact de catégorie
performerstringaucunNom exact d'interprète
studiostringaucunNom exact de studio
censoredstringaucuncensored ou uncensored
numinteger101–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ètreTypeDéfautPlage
numinteger201–50
lookbackinteger201–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/random n'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-Degraded au 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.

Sur cette page