Skip to content

Data quality and semantics

asks are seller offers. bids are buy orders. Their spread is not guaranteed profit: fees, purchase/withdrawal availability, trade locks and liquidity matter. Daily price history is not a feed of completed transactions.

Quotes use integer USD cents: amount: 12345, currency: USD, minor_units: 2 means USD 123.45. Large capitalization values and decimal index/FX values are strings to preserve precision. Do not implicitly convert large monetary values to JavaScript Number.

rate_per_usd means units of the target currency per 1 USD. steam and cbr rates are not interchangeable.

  • generated_at is the API response generation time.
  • as_of is the source observation time when known.
  • as_of: null means unknown; never substitute the current time.
  • cache_recently_checked describes the cache, not a new trade or marketplace quote.
  • Empty history means no available observations, not a zero price.

The local pipeline supports 30-minute shared-feed refreshes and the first verified cached frame per UTC hour. Hourly history reads those frames; it does not promise all-game catalog or historical coverage. checked_at is cache verification, ingested_at mirror publication, and source_observed_at remains null without actual source timestamps. The daily /history remains separate. Never fabricate hourly observations by repeating daily values.

Do not merge items by name alone: Doppler phases can share market_hash_name. Use item_id and phase. Indexes retain methodology and membership versions; verify compatibility before combining versions into one continuous series.

Daily/index/ROI/FX history requests span at most 366 calendar days; hourly market history spans at most 31. Split longer periods into sequential windows. When meta.next_page is present, continue using after and unchanged filters. For catalog pagination, pass meta.next_cursor as cursor. Do not retry empty windows indefinitely.