Skip to content
javinfo

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. GET or POST.
  • /idols/{id}: one performer, full record, by id or slug. GET only.
# 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.

FilterTypeMeaning
source"javdatabase" | "dmm"Which source lists the performer
tagstringFree-form tag
cupstringCup size, e.g. "G"
bloodstringBlood type
signstringStar sign
birthplacestringPlace of birth
hairColorstringHair color
hairLengthstringHair length
ageMin / ageMaxnumberAge range
heightMin / heightMaxnumberHeight 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: /idols and /idols/{id} with a live playground.
  • Filtering: the same filter/sort grammar on /query.

On this page