counts.items from /v1/meta is 298 (def_index, paint_index) pairs; the 146 above are item files, each covering one or more paint indexes.
Data shape
item AK-47 | Case Hardened def_index 7, paint_index 44
└ guide one Steam guide, one author
└ system one property being ranked "Blue Gem", "Max Black"
└ level one place in that ranking "top", "1", "2"
└ seeds
scale.kind
levels
tier
numbered, 1 best
rank
strict order, P1..Pn
group
one level, membership only
sublevel
named, best first
band
numeric thresholds (Fade %)
Key: (def_index, paint_index). Slugs and market hash names are aliases → /v1/resolve.
Levels are ordered best first. level.key is opaque, never an ordinal. Use place / of.
scale.kind says how to draw a system, not how to read it. Same JSON for every kind.
Guides are stored as written. Contradictions stay, in discrepancies. A seed listed twice gets two verdicts.
1-based place in that system's own list, best first, and its length: "2nd of 4"
rank
author's explicit rank within the level, else null
equivalent_to
seed the author says this one equals, else null
value
{name, value} written beside the entry, else null
evidence, quote
text, caption or image, and the verbatim span
404 not_found
unknown def or paint
200 verdicts: []
known item, seed no guide grades; every covering system in not_listed
GET/v1/items/{def}/{paint}/patterns
param
in
type
def, paint
path
int
item key
Bulk twin of /seeds/{seed}. One fetch per item page, then look up each listing locally. Guide and system details are given once; of = length of that system's levels.
The whole dataset in one request: every item and every guide. Served gzip when Accept-Encoding includes it, cached per dataset_version and reused for every request. For a bulk consumer that wants a local copy rather than crawling item by item.