Analitik API
Statistik pemeran, candle, rekan main, peringkat, dan volume pasar mingguan.
/analytics mengubah katalog menjadi angka: keluaran pemeran, sebaran rating dan studio,
rekan main, peringkat, dan volume rilis mingguan pasar. Semua dari tanggal rilis, rating
javlibrary, dan hitungan facet yang sudah kami pegang. Tanpa tayangan, tanpa seri karangan.
Enam endpoint GET berkunci. Mulai $0.60 per 1.000 panggilan; peringkat dan graf rekan main
naik seiring num.
Id pemeran
Empat endpoint menerima q: stats, candle, linimasa, dan rekan main. q adalah id dari
/idols: slug javdatabase seperti yua-mikami, atau dmm-1005467 khusus DMM.
q adalah lookup dokumen, bukan pencarian. Nama Jepang seperti 三上悠亜 mengembalikan 404:
tidak cocok dengan nama maupun alias. Cari di /idols, lalu kirim id-nya:
curl -s -X POST https://api.javinfo.dev/idols \
-H "x-javinfo-key: $KEY" -H 'content-type: application/json' \
-d '{ "q": "yua" }'Statistik — /analytics/idols/stats
Kartu profil sekali panggil: keluaran, rentang, rating, sebaran genre dan studio, skor bintang 0–1. Untuk header pemeran atau memeringkat daftar pendek.
| Parameter | Tipe | Wajib | Catatan |
|---|---|---|---|
q | string | ya | id atau slug dari /idols |
curl -s 'https://api.javinfo.dev/analytics/idols/stats?q=yua-mikami' \
-H "x-javinfo-key: jvi_your_key_here"Respons 200 (array dipangkas):
{
"idol": {
"id": "yua-mikami",
"name": "Yua Mikami",
"nameJa": "三上悠亜",
"image": "https://pics.dmm.co.jp/mono/actjpgs/mikami_yua.jpg",
"tags": [
"Twenties",
"Big Tits"
],
"age": 33,
"heightCm": 159,
"cup": "G",
"debut": null,
"birthplace": "Aichi",
"aliases": [
"みかみゆあ"
]
},
"works": 1127,
"worksBySource": {
"fanza": 1127,
"javdatabase": 365,
"javlibrary": 457,
"javbus": 417,
"missav": 358
},
"firstRelease": "2015-06-01",
"lastRelease": "2026-11-20",
"releasesLast90": 30,
"avgRating": 8.02,
"ratedTitles": 168,
"studioCount": 8,
"topGenres": [
{
"genre": "Big Tits",
"count": 765
},
{
"genre": "Over 4 Hours",
"count": 610
},
"…"
],
"topStudios": [
{
"studio": "S1 NO.1 STYLE",
"count": 991
},
{
"studio": "ROOKIE",
"count": 48
},
"…"
],
"cadenceDays": 115,
"starPower": 0.885,
"starPower100": 88,
"asOf": "2026-11-08T07:34:17.700Z"
}works adalah hitungan sumber tunggal terbesar, bukan jumlah: judul yang sama ada di fanza,
javdatabase, javlibrary, javbus, dan missav; menjumlahkannya menggelembungkan sekitar
empat kali. worksBySource menunjukkan tumpang tindih: hitungan per sumber, bukan jumlah works.
avgRating adalah rata-rata javlibrary pada skala 1–10 atas hingga 200 judul berating;
ratedTitles menyebut jumlah ratingnya.
studioCount, topGenres, dan topStudios menghitung judul terdeduplikasi, tidak dijumlahkan
antar sumber; tidak ada yang melebihi works. Yua Mikami: works 1127, studioCount 8,
"Big Tits" 765 judul, "S1 NO.1 STYLE" 991.
cadenceDays adalah jarak terpanjang antara rilis berurutan, bukan rata-rata. starPower
menggabungkan volume, rating, keluaran 90 hari, sebaran studio, lama karier, dan kebaruan rilis
pada skala 0–1; starPower100 memakai skala 0–100.
Yang meleset: 404.
curl -s 'https://api.javinfo.dev/analytics/idols/stats?q=nobody-zzzz-qq' \
-H "x-javinfo-key: jvi_your_key_here"{
"defined": false,
"code": "NOT_FOUND",
"status": 404,
"message": "idol not found"
}Biaya: $0.60 per 1.000 panggilan. Kode status: 200, 400, 401, 402, 404, 429.
Referensi: idolStats.
Candle — /analytics/idols/ohlc
Candlestick karier pemeran: jumlah rilis kumulatif, dikelompokkan per hari, minggu, atau bulan. Close datar berarti tidak ada rilis di kelompok itu; naik berarti keluaran baru.
Bukan harga, tanpa riwayat tayangan. Yang bisa diamati hanya kapan rilis terjadi; itu yang digambar candle.
| Parameter | Tipe | Bawaan | Rentang |
|---|---|---|---|
q | string | wajib | id atau slug dari /idols |
bucket | "day" | "week" | "month" | "week" | |
limit | integer | 500 | 10–2000 |
limit membatasi jumlah candle. Jika kelompok lebih banyak, candle terbaru
dipertahankan, yang tertua dibuang. limit di bawah 10 atau bucket selain day, week,
atau month adalah 400.
curl -s 'https://api.javinfo.dev/analytics/idols/ohlc?q=yua-mikami&bucket=month&limit=12' \
-H "x-javinfo-key: jvi_your_key_here"Respons 200. Dua belas candle bulanan mencakup setahun terakhir; yang lebih lama dibuang
(candle dan ema dipangkas):
{
"id": "yua-mikami",
"metric": "cumulative_releases",
"source": "catalogue",
"bucket": "month",
"candles": [
{
"t": "2025-12-01",
"o": 1075,
"h": 1083,
"l": 1075,
"c": 1083,
"v": 9
},
{
"t": "2026-01-01",
"o": 1084,
"h": 1091,
"l": 1084,
"c": 1091,
"v": 8
},
"…",
{
"t": "2026-11-01",
"o": 1125,
"h": 1127,
"l": 1125,
"c": 1127,
"v": 3
}
],
"changePct": 4.84,
"ema": [
1083,
1085,
"…"
],
"totalReleases": 1127,
"truncated": true,
"asOf": "2026-11-08T07:34:17.117Z"
}Field candle:
| Field | Arti |
|---|---|
t | Awal kelompok, YYYY-MM-DD. Minggu dimulai hari Senin, bulan pada tanggal 1. |
o | Jumlah rilis kumulatif pada rilis pertama di kelompok itu. |
h | Jumlah kumulatif tertinggi yang dicapai di dalam kelompok itu. |
l | Jumlah kumulatif terendah di dalam kelompok itu. |
c | Jumlah kumulatif pada rilis terakhir di kelompok itu. |
v | Jumlah observasi di kelompok itu. |
Di seri katalog, satu observasi adalah satu baris rilis; v menghitung rilis di kelompok
itu. Kelompok dengan dua rilis dibuka setelah yang pertama, ditutup setelah yang kedua, dan
melaporkan v: 2.
metric dan source menunjukkan seri yang kamu dapat. Setelah job snapshot punya setidaknya
dua hari tercatat, endpoint beralih ke metric: "star_power" dan source: "snapshots":
candle mengukur skor bintang sepanjang waktu, diskalakan 1.000, dengan totalReleases: 0 dan
truncated: false.
changePct adalah perubahan dari open pertama ke close terakhir, atas candle yang diterima.
ema adalah rata-rata bergerak eksponensial 7 periode dari close, sama panjang dengan
candles.
truncated: true berarti candle lama dibuang agar muat di limit; yang terbaru selalu ada.
totalReleases adalah jumlah karier penuh, berapa pun limit. Naikkan limit hingga 2000
candle untuk kurva penuh.
Biaya: $0.60 per 1.000 panggilan. Kode status: 200, 400, 401, 402, 404, 429.
Referensi: idolOhlc.
Linimasa — /analytics/idols/timeline
Jumlah rilis bulanan dan empat nilai untuk halaman profil: debut, rilis terbaru, bulan puncak, jarak terpanjang. Semua dari tanggal rilis.
| Parameter | Tipe | Wajib | Catatan |
|---|---|---|---|
q | string | ya | id atau slug dari /idols |
curl -s 'https://api.javinfo.dev/analytics/idols/timeline?q=yua-mikami' \
-H "x-javinfo-key: jvi_your_key_here"Respons 200 (months dipangkas):
{
"id": "yua-mikami",
"debut": "2015-06-01",
"latest": "2026-11-24",
"peakMonth": "2023-07",
"longestGapDays": 115,
"months": [
{ "month": "2015-06", "releases": 2 },
{ "month": "2015-09", "releases": 2 }
],
"truncated": false,
"asOf": "2026-11-06T18:31:34.750Z"
}months menaik, YYYY-MM, hanya bulan yang punya rilis. peakMonth adalah bulan tersibuk;
longestGapDays, jarak terbesar antara tanggal rilis berurutan.
latest berasal dari kueri terbaru-dulu, jadi tetap tepat meskipun truncated bernilai
true. Flag itu berarti halaman menaik mencapai 10.000 baris; daftar bulanan berhenti
sebelum rilis terbaru.
Biaya: $0.60 per 1.000 panggilan. Kode status: 200, 400, 401, 402, 404, 429.
Referensi: idolTimeline.
Rekan main — /analytics/idols/costars
Rekan kerja, diperingkat berdasarkan judul bersama. Satu kueri facet atas filmografi; pemeran itu dikecualikan.
| Parameter | Tipe | Bawaan | Rentang |
|---|---|---|---|
q | string | wajib | id atau slug dari /idols |
num | integer | 15 | 1–50 |
curl -s 'https://api.javinfo.dev/analytics/idols/costars?q=yua-mikami&num=3' \
-H "x-javinfo-key: jvi_your_key_here"Respons 200 (results dipangkas):
{
"id": "yua-mikami",
"count": 3,
"results": [
{ "name": "Aika Yumeno", "sharedTitles": 771 },
{ "name": "Miharu Usa", "sharedTitles": 675 }
],
"asOf": "2026-11-06T18:31:34.119Z"
}sharedTitles menghitung judul dengan kedua nama di katalog.
Biaya: $0.90 per 1.000 panggilan pada num=15 bawaan. num hingga 10 berbiaya $0.60; di atas
itu naik sampai $3.00 pada num=50. Kode: 200, 400, 401, 402, 404, 429. Referensi:
idolCostars.
Peringkat — /analytics/leaderboard
Memeringkat pemeran dalam jendela berdasarkan tiga metrik.
metric | Dasar peringkat | score |
|---|---|---|
releases | Keluaran dalam jendela | Rilisnya ÷ rilis pemimpin, 0–1 |
rating | Rata-rata javlibrary yang disesuaikan | 0–1 |
momentum | Jendela dibanding jendela sebelumnya | Rasio ÷ 3, dibatasi 1 |
| Parameter | Tipe | Bawaan | Rentang |
|---|---|---|---|
range | integer | 90 | 7–365, jumlah hari |
metric | "releases" | "rating" | "momentum" | "releases" | |
num | integer | 20 | 1–100 |
curl -s 'https://api.javinfo.dev/analytics/leaderboard?range=30&metric=releases&num=3' \
-H "x-javinfo-key: jvi_your_key_here"Respons 200 (results dipangkas):
{
"metric": "releases",
"range": 30,
"count": 3,
"truncated": false,
"results": [
{
"name": "Yui Hatano",
"nameJa": null,
"releases": 67,
"avgRating": null,
"studios": 10,
"lastRelease": "2026-11-06",
"score": 1
},
{
"name": "Yui Tenma",
"nameJa": null,
"releases": 55,
"avgRating": null,
"studios": 4,
"lastRelease": "2026-11-06",
"score": 0.821
}
],
"asOf": "2026-11-06T18:31:35.824Z"
}releases adalah hitungan facet persis. studios dan lastRelease berasal dari 1.000 hit
terbaru, jadi bisa kurang pada range panjang.
avgRating adalah rata-rata 1–10 javlibrary untuk judul berating di jendela, atau null bila
tidak ada. rating hanya memeringkat pemeran dengan setidaknya satu judul berating dan menarik
rata-rata ke prior 3.5/5 sesuai jumlah; satu 10/10 tidak merebut posisi teratas.
momentum membagi rilis jendela ini dengan jendela sebelumnya yang sama panjang. Tanpa
rilis sebelumnya, rasio 2, yang memberi skor 0.667. Seri diputus oleh jumlah rilis.
name adalah kunci facet: nama Latin bila indeks punya, jika tidak nama Jepang. nameJa selalu null.
truncated: true berarti facet nama mencapai batas nilai indeks: hitungan mencakup nama
teratas, bukan semua.
Enum yang salah adalah 400, dengan parameter yang gagal di data.issues[].path:
curl -s 'https://api.javinfo.dev/analytics/leaderboard?metric=views' \
-H "x-javinfo-key: jvi_your_key_here"{
"defined": false,
"code": "BAD_REQUEST",
"status": 400,
"message": "Input validation failed",
"data": {
"issues": [
{
"code": "invalid_value",
"values": ["releases", "rating", "momentum"],
"path": ["metric"],
"message": "Invalid option: expected one of \"releases\"|\"rating\"|\"momentum\""
}
]
}
}Bentuk yang sama mencakup parameter lain: range di luar rentang, num di atas 100, bucket
salah. Issue menyebut parameternya.
Biaya: $1.20 per 1.000 panggilan pada num=20 bawaan. num hingga 10 berbiaya $0.60; di atas
itu naik sampai $6.00 pada num=100. Kode: 200, 400, 401, 402, 429. Referensi:
leaderboard.
Pasar — /analytics/market
Volume rilis mingguan katalog DMM + FANZA, plus genre yang naik dan turun di jendela itu. Untuk grafik beranda atau panel "apa yang bergerak".
| Parameter | Tipe | Bawaan | Rentang |
|---|---|---|---|
weeks | integer | 12 | 2–52 |
movers | integer | 10 | 1–50 |
curl -s 'https://api.javinfo.dev/analytics/market?weeks=4&movers=3' \
-H "x-javinfo-key: jvi_your_key_here"Respons 200 (dipangkas):
{
"weeks": 4,
"volume": [
{ "week": "2026-10-09", "releases": 1319 },
{ "week": "2026-10-16", "releases": 1421 }
],
"totalReleases": 5740,
"changePct": 1,
"truncated": false,
"genres": {
"gainers": [
{ "genre": "Knee-High Socks", "changePct": 700, "current": 8, "previous": 1 },
{ "genre": "Widow", "changePct": 700, "current": 16, "previous": 2 }
],
"losers": [
{ "genre": "Female Soldier", "changePct": -100, "current": 0, "previous": 19 },
{ "genre": "Fisting", "changePct": -100, "current": 0, "previous": 5 }
]
},
"asOf": "2026-11-06T18:31:37.397Z"
}volume punya satu entri per jendela 7 hari, terlama dulu; week adalah tanggal mulai. Ini
jendela bergulir, bukan minggu kalender.
weeks menentukan jumlah jendela; totalReleases, jumlahnya. changePct membandingkan
yang terbaru dengan terlama, satu desimal.
genres membandingkan floor(weeks ÷ 2) minggu terakhir dengan rentang sebelumnya. Genre
dengan kurang dari 5 rilis di kedua rentang dilewati; genre kecil tidak menghasilkan derau.
changePct adalah current terhadap previous; tanpa rilis di paruh sebelumnya, tampil 100.
gainers dan losers dipotong hingga movers.
truncated: true berarti facet genre mencapai batas nilai: daftar hanya genre teratas.
Biaya: $0.60 per 1.000 panggilan. weeks dan movers tidak mengubah harga. Kode: 200, 400,
401, 402, 429. Referensi: market.
Biaya
| Endpoint | Halaman bawaan | Per 1.000 panggilan |
|---|---|---|
/analytics/idols/stats | $0.60 | |
/analytics/idols/ohlc | limit=500 | $0.60 |
/analytics/idols/timeline | $0.60 | |
/analytics/idols/costars | num=15 | $0.90 |
/analytics/leaderboard | num=20 | $1.20 |
/analytics/market | $0.60 |
Ukuran di endpoint lain tidak memengaruhi harga: limit, weeks, dan movers gratis
dinaikkan.
Hanya 200 baru yang ditagih; cache hit, error, dan jawaban terdegradasi gratis. Respons
di-cache 30 sampai 60 menit; panggilan ulang di jendela itu adalah hit. Lihat batas laju
dan tagihan.
Error umum
401 tanpa kunci. Gerbang meloloskannya; handler menolak:
curl -s 'https://api.javinfo.dev/analytics/leaderboard'{
"defined": false,
"code": "UNAUTHORIZED",
"status": 401,
"message": "Unauthorized"
}401 kunci buruk. Ditolak lebih awal oleh gerbang; body lebih pendek:
curl -s 'https://api.javinfo.dev/analytics/leaderboard' \
-H "x-javinfo-key: jvi_not_a_real_key"{ "error": "invalid api key" }Status sama, dua body. Cabang dari kode status, bukan code.
402 kredit tidak cukup. Tidak ada yang ditagih. Retry-After: 3600 hanya anjuran; isi
ulang membuka blokir:
{
"defined": false,
"code": "PAYMENT_REQUIRED",
"status": 402,
"message": "insufficient balance"
}429 melewati batas per menit. Diterapkan sebelum handler; Retry-After dalam detik:
{ "error": "rate limit exceeded" }Per akun, bukan per kunci. Lihat batas laju.