The javlibrary provider is the deep-catalog fallback: great when a code is missing everywhere else, wrong if you pin it for every request and wonder why things feel slow. Here’s how to call it without guessing.
When to reach for it
Use javlibrary when:
- A code 404s on FANZA/DMM, missav, javdb, and javdatabase
- You want JavLibrary’s page URL + sample images for a known DVD ID
- You’re doing a bare keyword search and the faster providers return nothing useful
Don’t pin it as your default “always try this first” source. Browser scrape means higher latency. Leave it last in the fan-out unless you have a reason.
Background on why it exists: JavLibrary API.
1. Get a key
Sign up at app.javinfo.dev. Put the key in x-javinfo-key. Same key works on RapidAPI via their headers if you prefer that path.
2. Full record: POST /movie
Exact code, full normalized row:
curl -X POST "https://api.javinfo.dev/movie" \ -H "x-javinfo-key: YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{ "q": "SSIS-001", "providers": "javlibrary" }'You get title, cast, genres (categories), runtime, release date, studio (makers / label), cover (jacketFullUrl), plus extra.pageUrl and extra.sampleImages. source will be "javlibrary".
No magnets. No .m3u8 streams. If you need those, pin javdb or missav instead — same metadata shape, different extras.
3. List search: POST /query
Keyword search over codes and labels. Keep it bare:
curl -X POST "https://api.javinfo.dev/query" \ -H "x-javinfo-key: YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{ "q": "SSIS", "providers": "javlibrary", "num": 10, "page": 1 }'What works:
q— code fragment or label-ish keywordnum— page size (default 10, max 50). Rows are capped tonumbefore cover enrichmentpage— 1-based; javlibrary serves large list pages and we slice tonum
What silently (or loudly) drops javlibrary:
- Any
filter(genre, actress, runtime range, censored, …) - Any
sortother thanrelevance(or default)
In fan-out mode those params skip javlibrary and try the next capable provider. If you pin "providers": "javlibrary" with a filter it can’t satisfy, you get a 422 with a reason — not a partial guess.
Query hits look like:
{ "q": "SSIS", "source": "javlibrary", "count": 10, "results": [ { "id": "javmezzbqu", "dvdId": "SSIS-001", "title": "Newcomer NO.1 STYLE ...", "cover": "https://...", "releaseDate": "2020-07-07", "extra": { "url": "https://www.javlibrary.com/en/..." } } ]}Covers and release dates are backfilled from the DMM/FANZA index when we can match the code. List thumbnails are the fallback.
Fan-out vs pin
Default order (first full hit wins):
FANZA → DMM → missav → javdb → javdatabase → javlibraryOmit providers and javlibrary only answers when everyone ahead of it misses or can’t satisfy the request. Pin it when you want that source even if a faster one would also work.
Mistakes that waste a call
Expecting download links. Wrong provider. Use javdb.
Sending filter.genre while pinned to javlibrary. 422. Drop the filter or pin a source that supports it (fanza/dmm, missav, javdatabase).
Using it for speed. It’s last for a reason. Cache hits help on repeat codes (cacheTtl is an hour server-side), but the first scrape is still a browser job.
Treating /query like a full archive browser. It’s keyword relevance, not genre ∩ studio archives. For archive-style browsing, javdatabase is closer.
Pricing + next step
Successful /movie = $0.0005. Successful /query = $0.0002. Misses and errors aren’t charged. New signups get 1,000+ free lookups.
Grab a key, run the curl above, then wire the same body into your app. One provider-agnostic integration — JavLibrary is just another id in providers.