Качество и смысл данных
Цена — не продажа
Заголовок раздела «Цена — не продажа»asks — выставленные предложения продавцов. bids — заявки покупателей. Разница между ними не является гарантированной прибылью: комиссии, доступность покупки и вывода, trade lock и ликвидность могут её изменить. Дневная история цен не является лентой завершённых сделок.
Единицы
Заголовок раздела «Единицы»Котировки возвращаются в целых центах USD: amount: 12345, currency: USD, minor_units: 2 означает 123,45 USD. Большие значения капитализации и десятичные значения индексов/FX передаются строкой для сохранения точности. Не используй неявное преобразование в JavaScript Number для больших сумм.
Курс rate_per_usd означает количество единиц выбранной валюты за 1 USD. Источники steam и cbr не взаимозаменяемы.
Время и пропуски
Заголовок раздела «Время и пропуски»generated_at— когда API сформировал ответ.as_of— исходное время наблюдения, когда оно известно.as_of: null— время неизвестно; не заменяй его текущим временем.cache_recently_checkedозначает проверку кеша, а не новую сделку или новую котировку на маркете.- Пустой массив истории — отсутствие доступных точек, не нулевая цена.
Локальный сборщик поддерживает обновление общего фида раз в 30 минут и первый проверенный снимок каждого часа UTC. Часовая история читает эти записи, не обещая полного каталога игры или истории за всё время. checked_at — проверка кэша, ingested_at — публикация зеркала, source_observed_at остаётся null без реального времени источника. Дневная /history — отдельные данные. Не создавай часовые наблюдения повторением дневной цены.
Идентичность
Заголовок раздела «Идентичность»Не объединяй предметы только по названию: фазы Doppler могут делить market_hash_name. Используй item_id и phase. Индекс содержит версии методологии и состава; нельзя склеивать несовместимые версии как одну непрерывную серию без проверки.
Объём истории
Заголовок раздела «Объём истории»Дневная история, индексы, ROI и FX — максимум 366 календарных дней за запрос; часовые рыночные цены — максимум 31 день. Для длинного периода запрашивай последовательные окна. При meta.next_page продолжай с after, сохраняя те же фильтры. В каталоге meta.next_cursor передаётся в cursor. Не делай бесконечные ретраи пустого периода.