Idols
Search the merged performer catalog by attribute, or fetch one performer by id.
/idols searches performers, not titles. The catalog merges javdatabase and DMM, rebuilt
weekly, so one query reaches both.
Browse by attribute — G-cup, height, birthplace — or fetch one by id or slug.
Titles: /query. /idols is the people search.
Search and lookup
Two shapes:
/idols: slim teasers.GETorPOST./idols/{id}: one performer, full record, by id or slug.GETonly.
# A list of matches
curl -s -X POST https://api.javinfo.dev/idols \
-H "x-javinfo-key: $KEY" -H 'content-type: application/json' \
-d '{ "q": "yui", "num": 20 }'
# One performer
curl -s https://api.javinfo.dev/idols/dmm-1005467 \
-H "x-javinfo-key: $KEY"No matches: a normal 200 with count: 0 and empty results. Free, like every
empty /query. A /idols/{id} miss is 404.
Filters
Set one or more. Neither q nor a filter → 400.
| Filter | Type | Meaning |
|---|---|---|
source | "javdatabase" | "dmm" | Which source lists the performer |
tag | string | Free-form tag |
cup | string | Cup size, e.g. "G" |
blood | string | Blood type |
sign | string | Star sign |
birthplace | string | Place of birth |
hairColor | string | Hair color |
hairLength | string | Hair length |
ageMin / ageMax | number | Age range |
heightMin / heightMax | number | Height range, in cm |
# Every G-cup performer, tallest first
-d '{ "filter": { "cup": "G" }, "sort": "height" }'Sorting and paging
sort is one of relevance (default), name, age, debut, height. debut
sorts by birth date, newest first — the closest the catalog gets; it can't sort on
debut date.
num is 1–50 (default 10), page 1-based. Both work as on /query.
List item shape
/idols returns a slim teaser per match, just what a card renders. Full record via
/idols/{id}.
{
"q": "yui",
"source": "idols",
"count": 10,
"total": 42, // estimated matches across all pages (may be capped)
"results": [
{
"id": "dmm-1005467",
"name": "…",
"nameJa": "…",
"image": "https://…",
"tags": ["…"],
"pageUrl": "https://…"
}
]
}Pass the id to /idols/{id}. It is a javdatabase slug, or dmm-<n> for performers
only DMM knows. The internal key never appears.
Performer shape
{
"q": "dmm-1005467",
"source": "idols",
"result": {
"id": "dmm-1005467",
"name": "…",
"nameJa": "…",
"image": "https://…",
"tags": ["…"],
"pageUrl": "https://…",
"slug": "…",
"age": 37,
"dob": "1990-01-01",
"debut": "…",
"debutAge": 20,
"birthplace": "…",
"sign": "…",
"blood": "…",
"measurements": "…",
"cup": "…",
"heightCm": 165,
"shoeSize": 24.5,
"hairLengths": ["…"],
"hairColors": ["…"],
"aliases": ["…"],
"images": ["https://…"],
"sources": ["javdatabase", "dmm"],
"ids": { "javdatabase": "…", "dmm": 1005467 }
}
}Every field is best-effort; unknown values stay null. age is computed from dob
at request time, so it stays current between rebuilds.
Cost
$0.50 per 1,000 calls at num=10, scaling with page size. Only a fresh 200 is
charged; cache hits and empty results are free (billing).
Next
- API reference:
/idolsand/idols/{id}with a live playground. - Filtering: the same filter/sort grammar on
/query.