Lewati ke konten
javinfo

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.

EndpointMengembalikanPer 1.000 panggilan
GET /resolveKode kanonik, varian, sumber, tautan, kartu inline$1.20
POST /resolve/batchDitemukan atau tidak untuk hingga 100 kode$0.40 per kelompok 10 kode unik yang dimulai
GET /resolve/compareDua judul berdampingan$0.40
GET /resolve/provenanceSumber dan keyakinan per field$0.40
GET /resolve/streamsKetersediaan stream, sampel, dan magnet$0.40

GET /resolve

Menormalkan ejaan apa pun ke satu kode kanonik; mengembalikan varian, sumber, tautan /movie, kartu 1200×630.

ParameterTipeWajibArti
qstringyaKode atau ejaan yang di-resolve. Minimal 2 karakter.
formatpng, jpg, atau svgtidakEncoding 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>.

FieldArti
inputString yang Anda kirim, tanpa diubah.
codeKode kanonik.
variantsSetiap ejaan yang memetakan ke judul yang sama, paling kanonik dulu.
sourcesId publik sumber yang mencantumkan judul itu.
contentIdGuessId konten DMM bila indeks etalase memilikinya, jika tidak null.
linkPath API untuk judul yang sama, /movie?q=<code>. Relatif terhadap https://api.javinfo.dev dan butuh header x-javinfo-key milikmu.
cardKartu 1200×630 sebagai data URI, atau null.
foundtrue pada 200. Meleset adalah 404.
shareSlugSlug 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 bodyTipeWajibArti
codesarray stringya1 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.

ParameterTipeWajibArti
astringyaKode pertama. Minimal 2 karakter.
bstringyaKode 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.

ParameterTipeWajibArti
qstringyaKode 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.

ParameterTipeWajibArti
qstringyaKode 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:

FieldArti
magnetsInfo hash magnet berbeda di seluruh sumber.
streamAda master HLS.
sampleAda klip sampel atau trailer.
trailerKhusus trailer.
galleryJumlah gambar galeri dari sumber yang dipilih untuk media.
subtitlesBahasa subtitle yang terdeteksi di metadata. zh satu-satunya yang ditandai saat ini.
uncensoredMetadata menandai judul itu sebagai tanpa sensor.
scoreKelengkapan 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 unikPer 1.000 panggilan
1–10$0.40
11–20$0.80
21–30$1.20
100$4.00

Kode status

EndpointKode
GET /resolve200, 400, 401, 402, 404, 429
POST /resolve/batch200, 400, 401, 402, 429
GET /resolve/compare200, 400, 401, 402, 429
GET /resolve/provenance200, 400, 401, 402, 404, 429
GET /resolve/streams200, 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.

Di halaman ini