Providers
The sources javinfo aggregates, what each returns, and how to pick one with the providers parameter.
A provider is a source javinfo scrapes and normalizes. Every search fans out across the registered providers and returns the first structured hit, so one call gives you metadata, magnets and streams without you maintaining scrapers that break. You can let the API pick (fan-out) or pin the exact source you want.
The roster
| Provider | Best for | Returns | Endpoints |
|---|---|---|---|
fanza, dmm | Richest structured metadata & filtering | Metadata, jackets, sample images (censored catalog) | /movie, /query, /random |
missav | Streams & the broadest filters | .m3u8 stream URLs, Japanese genres, runtime + release ranges | /movie, /query |
javdb | Download links & sorting | Magnets / download links, ratings, availability | /movie, /query |
javdatabase | Descriptions & images | Description text, sample images, archive browsing | /movie, /query |
fanza and dmm are the two DMM + FANZA storefronts. Their query ids are
query:fanza, query:dmm, query:missav, query:javdb, query:javdatabase.
Selecting a provider
Default: fan-out
Omit providers and every registered provider is a candidate. The API tries them in
order and the first one that fully satisfies your request wins:
FANZA → DMM → missav → javdb → javdatabaseOn /query, a provider that can't satisfy your filter/sort is silently skipped and
the waterfall advances to the next. /movie and /random take no filters, so it's just
first-hit-wins. The provider that answered is echoed back as source:
{ "q": "SSIS-001", "source": "fanza", "result": { "...": "..." } }Pin with providers
Send providers to force a specific source (or set). It accepts an array or a comma
list, with or without the query: prefix:
curl -s -X POST https://api.javinfo.dev/query \
-H "x-javinfo-key: $KEY" -H 'content-type: application/json' \
-d '{ "q": "ABP", "providers": ["javdb"], "sort": "rating" }'"providers": "javdb", ["fanza","missav"], and "query:javdb" are all valid. A pinned
provider that can't satisfy the request on /query is not skipped: the call fails with
422 and a message naming the reason. An unknown id is 400. See Errors.
Where selection matters most is /query, where it drives pinning, the waterfall, and
per-filter capability. Which provider supports which filter/sort is the crux of the
system, spelled out in the capability matrix. /movie and /random
have no filters, so they just echo the winner as source. The MCP server
takes its own providers argument, where javdb is movie-only.
The providers
fanza / dmm
The DMM + FANZA storefronts, and the richest structured source: all named dimensions
(genre, actress, maker, series, director, label, actor), freely combined,
with English genre/name values, minute-based runtime filters, sort: release, and
pagination. Censored catalog only, so an uncensored filter excludes them.
missav
The broadest filter surface and the stream source (.m3u8 URLs). Every named dimension
(genres are Japanese, e.g. 巨乳), both runtime and release ranges, and censored both
ways. The catch: no sort (relevance only) and no real pagination (always page 1).
javdb
No per-field filters, but the best sorting and the download source. Only the coarse
censored tab (both ways), availability (playable / magnets / subtitle /
single), and rich sort (relevance / release / update / rating). Paginated.
Pin it for magnets and download links.
javdatabase
Archive browsing by a single dimension (genre, actress, maker, series,
director), where only genre + maker combine into a genre ∩ studio archive. English
values, auto-slugified ("S1 NO.1 STYLE" → s1-no-1-style). Censored and uncensored.
Paginated, newest-first. Good for descriptions and sample images.
Next
- Filtering: the full per-provider capability matrix and
/querycheat sheet. - MCP server: providers as tool arguments.
- API reference: every endpoint with a live playground.