Resolve API
Normalkan ejaan kode apa pun, lalu dapatkan varian, sumber, kartu, asal-usul, dan stream satu judul.
/resolve menjelaskan sebuah kode dan apa kata setiap sumber. /movie
mengembalikan penyedia pertama yang menjawab; endpoint ini memeriksa semua sumber dan menyimpan
perbedaannya.
Gunakan untuk menormalkan abp002, ABP-002, atau ABP-2, mencantumkan semua sumber, atau
mendapat kartu bagikan atau peta stream dalam satu panggilan.
| Endpoint | Mengembalikan | Per 1.000 panggilan |
|---|---|---|
GET /resolve | Kode kanonik, varian, sumber, tautan, kartu inline | $1.20 |
POST /resolve/batch | Ditemukan atau tidak untuk hingga 100 kode | $0.40 per kelompok 10 kode unik yang dimulai |
GET /resolve/compare | Dua judul berdampingan | $0.40 |
GET /resolve/provenance | Sumber dan keyakinan per field | $0.40 |
GET /resolve/streams | Ketersediaan stream, sampel, dan magnet | $0.40 |
GET /resolve
Menormalkan ejaan apa pun ke satu kode kanonik; mengembalikan varian, sumber, tautan /movie,
kartu 1200×630.
| Parameter | Tipe | Wajib | Arti |
|---|---|---|---|
q | string | ya | Kode atau ejaan yang di-resolve. Minimal 2 karakter. |
format | png, jpg, atau svg | tidak | Encoding kartu. Bawaannya png. |
curl -s 'https://api.javinfo.dev/resolve?q=abp002&format=jpg' \
-H "x-javinfo-key: jvi_your_key_here"{
"input": "abp002",
"code": "ABP-002",
"shareSlug": "85150B9G60S0M",
"found": true,
"variants": ["ABP-002", "ABP002"], // 7 total
"contentIdGuess": "118abp00002",
"sources": ["fanza", "javdatabase"], // 6 total
"link": "/movie?q=ABP-002",
"card": {
"format": "jpg",
"mime": "image/jpeg",
"dataUri": "data:image/jpeg;base64,…"
}
}Kartu disisipkan di card.dataUri, jadi responsnya besar: sekitar 1,1 MB dengan png
(bawaan), 900 KB dengan svg, 180 KB dengan jpg. Pilih jpg saat ukuran penting: raster
lossy, sekitar enam kali lebih kecil dari png. Payload base64 dipotong di contoh; dataUri
adalah URI data: lengkap untuk <img src>.
| Field | Arti |
|---|---|
input | String yang Anda kirim, tanpa diubah. |
code | Kode kanonik. |
variants | Setiap ejaan yang memetakan ke judul yang sama, paling kanonik dulu. |
sources | Id publik sumber yang mencantumkan judul itu. |
contentIdGuess | Id konten DMM bila indeks etalase memilikinya, jika tidak null. |
link | Path API untuk judul yang sama, /movie?q=<code>. Relatif terhadap https://api.javinfo.dev dan butuh header x-javinfo-key milikmu. |
card | Kartu 1200×630 sebagai data URI, atau null. |
found | true pada 200. Meleset adalah 404. |
shareSlug | Slug berchecksum untuk kode kanonik. |
Kartu menampilkan kode, judul Inggris (dipendekkan, atau kode bila tidak ada), hingga tiga nama
pemeran dan studio, hingga empat chip genre, lalu rating, durasi, tanggal rilis, dan magnet
bila diketahui. Lencana STREAMABLE menandai stream. Jaket di kanan, di atas sampul buram.
null bila rendering tidak tersedia: anggap opsional, pertahankan metadata.
Kode tanpa kecocokan: 404, bukan kartu kosong:
{
"defined": false,
"code": "NOT_FOUND",
"status": 404,
"message": "no title found for \"ZZZZ-99999\""
}POST /resolve/batch
Memeriksa hingga 100 kode dalam satu permintaan: bersihkan daftar pengguna atau cocokkan katalog tanpa 100 panggilan berurutan.
| Field body | Tipe | Wajib | Arti |
|---|---|---|---|
codes | array string | ya | 1 sampai 100 string tidak kosong. |
curl -s -X POST 'https://api.javinfo.dev/resolve/batch' \
-H "x-javinfo-key: jvi_your_key_here" \
-H 'content-type: application/json' \
-d '{"codes":["ABP-002","beb001","ZZZZ-99999"]}'{
"count": 3,
"found": 2,
"results": [
{ "input": "ABP-002", "code": "ABP-002", "found": true },
{ "input": "beb001", "code": "BEB-001", "found": true },
{ "input": "ZZZZ-99999", "code": "ZZZZ-99999", "found": false }
]
}Kode tak ditemukan: found: false di dalam 200, bukan 404; code berisi tebakan kanonik
terbaik. count adalah kode setelah deduplikasi; found, berapa yang cocok.
Kode dipangkas dan dideduplikasi sebelum dihitung. "ABP-002" dan " ABP-002 " memakan satu
slot dan muncul sekali di results. Setelah pemangkasan cocok persis, jadi abp-002 dan
ABP-002 dua slot.
Array codes kosong, lebih dari 100 kode, atau string kosong adalah 400:
{
"defined": false,
"code": "BAD_REQUEST",
"status": 400,
"message": "Input validation failed",
"data": {
"issues": [
{
"origin": "array",
"code": "too_small",
"minimum": 1,
"inclusive": true,
"path": ["codes"],
"message": "Too small: expected array to have >=1 items"
}
]
}
}Bentuk yang sama mencakup kegagalan validasi lain, dengan entri issues berbeda.
GET /resolve/compare
Dua judul berdampingan: kartu inti masing-masing, field bersama, dan skor kemiripan.
| Parameter | Tipe | Wajib | Arti |
|---|---|---|---|
a | string | ya | Kode pertama. Minimal 2 karakter. |
b | string | ya | Kode kedua. Minimal 2 karakter. |
curl -s 'https://api.javinfo.dev/resolve/compare?a=SSIS-001&b=ABP-002' \
-H "x-javinfo-key: jvi_your_key_here"{
"a": {
"input": "SSIS-001",
"code": "SSIS-001",
"shareSlug": "AD9MJMSD60R32E",
"found": true,
"variants": [
"SSIS-001",
"SSIS001",
"…"
],
"contentIdGuess": "ssis00001",
"sources": [
"fanza",
"javdatabase",
"javlibrary",
"javbus",
"missav",
"sextb"
],
"link": "/movie?q=SSIS-001"
},
"b": {
"input": "ABP-002",
"code": "ABP-002",
"shareSlug": "85150B9G60S0M",
"found": true,
"variants": [
"ABP-002",
"ABP002",
"…"
],
"contentIdGuess": "118abp00002",
"sources": [
"fanza",
"javdatabase",
"javlibrary",
"javbus",
"missav",
"sextb"
],
"link": "/movie?q=ABP-002"
},
"shared": {
"actresses": [],
"categories": [],
"maker": null
},
"similarity": 0.05
}Setiap sisi memakai bentuk inti /resolve, tanpa kartu. sources mencantumkan sumber yang
cocok; contentIdGuess adalah id konten DMM bila indeks etalase punya, sama seperti di
/resolve.
shared berisi irisan actresses dan categories tanpa beda huruf besar-kecil; maker hanya
terisi bila kedua judul membawa string pembuat yang persis sama.
similarity adalah campuran 0 sampai 1, terutama pemeran bersama (0.34) dan kategori (0.26),
plus pembuat sama (0.1), durasi (0.06), dan kedekatan tanggal rilis (0.06), dibulatkan ke 3
desimal. Jika satu kode tidak ditemukan, sisi itu found: false, shared kosong, similarity
0. Tidak pernah 404.
GET /resolve/provenance
Menunjukkan sumber setiap field, seberapa besar API mempercayainya, dan apa kata sumber lain.
| Parameter | Tipe | Wajib | Arti |
|---|---|---|---|
q | string | ya | Kode atau ejaan yang di-resolve. Minimal 2 karakter. |
curl -s 'https://api.javinfo.dev/resolve/provenance?q=ABP-002' \
-H "x-javinfo-key: jvi_your_key_here"{
"code": "ABP-002",
"found": true,
"sources": ["fanza", "javbus"], // 6 total, alphabetical
"fields": {
"title": {
"value": "NEW TOKYO Style 01 - Aikarin",
"source": "fanza",
"confidence": 1,
"candidates": [ // 6 total, trust order
{ "source": "fanza", "value": "NEW TOKYO Style 01 - Aikarin" },
{ "source": "javdatabase", "value": "NEW TOKYO Style 01 - Aikarin" }
]
},
"titleJa": {
"value": "NEW TOKYO流儀 01 あいかりん",
"source": "javlibrary",
"confidence": 0.8,
"candidates": [ // 4 total
{ "source": "javlibrary", "value": "NEW TOKYO流儀 01 あいかりん" },
{ "source": "javbus", "value": "NEW TOKYO流儀 01 あいかりん" }
]
},
"rating": {
"value": 8.1,
"source": "javlibrary",
"confidence": 0.8,
"candidates": [{ "source": "javlibrary", "value": 8.1 }]
}
// releaseDate, runtimeMins, maker, label, series, categories,
// actresses and cover follow the same shape
},
"data": {
"title": "NEW TOKYO Style 01 - Aikarin",
"titleJa": "NEW TOKYO流儀 01 あいかりん",
"rating": 8.1
// the merged value for every field above
}
}fields mencakup title, titleJa, releaseDate, runtimeMins, maker, label, series,
categories, actresses, cover, dan rating.
Skalar pergi ke sumber berbobot tertinggi; array seperti categories dan actresses digabung,
bukan diganti. candidates mendaftar setiap sumber yang menawarkan nilai, terbaik dulu, jadi
perbedaan terlihat tanpa keluar dari respons.
confidence adalah bobot pemenang dibagi bobot terbaik dalam respons: 1 untuk sumber teratas,
lebih rendah untuk sisanya. Bobot, tertinggi dulu: etalase 1, javdatabase 0.85, javlibrary
0.8, javbus 0.7, missav 0.6, sextb 0.55. sources alfabetis; candidates menurut
kepercayaan.
Kode tak dikenal: 404 dengan body GET /resolve.
GET /resolve/streams
Mengembalikan tempat menonton atau mengunduh judul: stream HLS, sampel, magnet, subtitle, dan ukuran galeri.
| Parameter | Tipe | Wajib | Arti |
|---|---|---|---|
q | string | ya | Kode atau ejaan yang di-resolve. Minimal 2 karakter. |
curl -s 'https://api.javinfo.dev/resolve/streams?q=ABP-002' \
-H "x-javinfo-key: jvi_your_key_here"{
"code": "ABP-002",
"found": true,
"playback": "hls",
"availability": {
"magnets": 47,
"stream": true,
"sample": false,
"trailer": false,
"gallery": 0,
"subtitles": [],
"uncensored": false,
"score": 0.7
},
"streams": {
"master": "https://surrit.com/c511196b-b4f8-47bf-a6b0-64ba625fc2a4/playlist.m3u8",
"variants": [
"https://surrit.com/c511196b-b4f8-47bf-a6b0-64ba625fc2a4/1280x720/video.m3u8",
"https://surrit.com/c511196b-b4f8-47bf-a6b0-64ba625fc2a4/842x480/video.m3u8"
]
},
"sampleUrl": null,
"galleryCount": 106,
"sources": ["fanza", "javdatabase"] // 6 total
}playback menjawab satu baris: hls bila ada stream, magnet bila ada magnet, sample bila
hanya sampel atau trailer, selain itu none.
availability menambahkan detail:
| Field | Arti |
|---|---|
magnets | Info hash magnet berbeda di seluruh sumber. |
stream | Ada master HLS. |
sample | Ada klip sampel atau trailer. |
trailer | Khusus trailer. |
gallery | Jumlah gambar galeri dari sumber yang dipilih untuk media. |
subtitles | Bahasa subtitle yang terdeteksi di metadata. zh satu-satunya yang ditandai saat ini. |
uncensored | Metadata menandai judul itu sebagai tanpa sensor. |
score | Kelengkapan 0 sampai 1: magnet 0.35, stream 0.35, sampel 0.15, galeri 0.1, subtitle 0.05. |
streams bernilai {master, variants} bila ada HLS, jika tidak null. master adalah playlist
untuk pemutar; variants, playlist per resolusi. sampleUrl adalah klip sampel bila ada;
galleryCount, jumlah galeri terbesar antar sumber.
Kode tak dikenal: 404 dengan body GET /resolve.
Biaya
Hanya 200 baru yang ditagih. Cache hit (X-Cache: HIT), respons 4xx, dan jawaban terdegradasi
(X-Degraded) gratis. Resolve, compare, dan provenance cache 1 jam; streams 15 menit. Batch
tidak cache.
GET /resolve berbiaya $1.20 per 1.000 panggilan karena merender kartu; endpoint resolve lain $0.40
per 1.000 panggilan.
Batch menagih kode tersisa setelah pemangkasan dan deduplikasi, per kelompok 10 yang dimulai:
| Kode unik | Per 1.000 panggilan |
|---|---|
| 1–10 | $0.40 |
| 11–20 | $0.80 |
| 21–30 | $1.20 |
| 100 | $4.00 |
Kode status
| Endpoint | Kode |
|---|---|
GET /resolve | 200, 400, 401, 402, 404, 429 |
POST /resolve/batch | 200, 400, 401, 402, 429 |
GET /resolve/compare | 200, 400, 401, 402, 429 |
GET /resolve/provenance | 200, 400, 401, 402, 404, 429 |
GET /resolve/streams | 200, 400, 401, 402, 404, 429 |
q di bawah 2 karakter, format tak dikenal, dan kegagalan body batch di atas adalah 400.
Error umum
Tanpa kunci atau kunci buruk: 401, dengan body berbeda.
# No key
curl -s 'https://api.javinfo.dev/resolve?q=ABP-002'{
"defined": false,
"code": "UNAUTHORIZED",
"status": 401,
"message": "Unauthorized"
}# Bad key
curl -s 'https://api.javinfo.dev/resolve?q=ABP-002' \
-H "x-javinfo-key: jvi_not_a_real_key"{ "error": "invalid api key" }402 berarti saldo di bawah harga panggilan. Tidak ada yang ditagih; Retry-After: 3600 adalah
petunjuk untuk klien otomatis.
{
"defined": false,
"code": "PAYMENT_REQUIRED",
"status": 402,
"message": "insufficient balance"
}429 adalah batas per akun per menit; Retry-After membawa detik tunggu.
{ "error": "rate limit exceeded" }Sisi akun: Batas laju & tagihan dan Error. Referensi tiap
operasi: /docs/api/discovery/resolve.