Перейти к основному содержанию
GET
/
prices
/
snapshot.ndjson.gz
Full price-list snapshot (gzipped NDJSON)
curl --request GET \
  --url https://csboard.com/v1/prices/snapshot.ndjson.gz \
  --header 'Authorization: Bearer <token>'
"<string>"
Эндпоинт snapshot отдаёт полный список цен CSBoard в виде одного gzip-сжатого файла NDJSON. Каждая распакованная строка — это один JSON-объект PriceRow, той же схемы, что возвращает GET /v1/prices. Это рекомендуемый путь для потребителей полного каталога: сайтов сравнения, арбитражных ботов или дата-пайплайнов, которым нужна полная локальная копия списка цен. Для точечных запросов по подмножеству товаров используйте GET /v1/prices. Требуется аутентификация. Отправьте ключ как Authorization: Bearer csb_pub_.... Лимит запросов: 1 запрос в минуту, отдельно от общего лимита 30 запросов/мин. Планируйте интервал опроса соответствующе.

Заголовки запроса

If-None-Match
string
Передайте значение ETag из предыдущего ответа snapshot, чтобы сделать условный запрос. Если снимок не изменился с момента этого ETag, сервер вернёт 304 Not Modified без тела, экономя трафик и избегая повторной загрузки.

Заголовки ответа

ЗаголовокОписание
ETagНепрозрачная строка версии, идентифицирующая этот снимок. Сохраните её и отправьте обратно в If-None-Match при следующем запросе.
Content-Encodinggzip — тело всегда сжато gzip.

Тело ответа

Поток, сжатый gzip. После распаковки каждая строка (разделитель — перевод строки) представляет собой валидный JSON-объект, соответствующий схеме PriceRow:
ПолеТипОписание
market_hash_namestringSteam market hash name.
wearstring | nullДиапазон износа или null.
doppler_phasestring | nullФаза Doppler или null.
min_price_usdnumberСамая дешёвая текущая цена продажи в USD.
qtyintegerКоличество листингов в этой группе.

Пример: загрузка и просмотр

curl https://csboard.com/v1/prices/snapshot.ndjson.gz \
  -H "Authorization: Bearer csb_pub_..." \
  --output snapshot.ndjson.gz \
  && gunzip -c snapshot.ndjson.gz | head -5
Пример распакованного вывода:
{"market_hash_name":"AK-47 | Redline (Field-Tested)","wear":"Field-Tested","doppler_phase":null,"min_price_usd":11.92,"qty":73}
{"market_hash_name":"AWP | Asiimov (Field-Tested)","wear":"Field-Tested","doppler_phase":null,"min_price_usd":54.20,"qty":12}
{"market_hash_name":"Karambit | Doppler (Factory New)","wear":"Factory New","doppler_phase":"Ruby","min_price_usd":1240.00,"qty":1}

Пример: условный запрос с ETag

При первой загрузке вы получаете заголовок ETag. Передавайте его обратно в последующих запросах, чтобы не скачивать неизменённый снимок повторно:
# Первый запрос — сохраните ETag из заголовков ответа
curl https://csboard.com/v1/prices/snapshot.ndjson.gz \
  -H "Authorization: Bearer csb_pub_..." \
  --dump-header headers.txt \
  --output snapshot.ndjson.gz

# Последующий запрос — условная загрузка
curl https://csboard.com/v1/prices/snapshot.ndjson.gz \
  -H "Authorization: Bearer csb_pub_..." \
  -H "If-None-Match: \"etag-value\"" \
  --output snapshot.ndjson.gz
Ответ 304 Not Modified означает, что снимок идентичен уже имеющемуся у вас — повторная загрузка не нужна.

Коды ошибок

HTTP-статусКодЗначение
304(без тела)Снимок не изменился с переданного If-None-Match ETag.
401unauthorizedОтсутствует или некорректный API-ключ.
429snapshot_rate_limitedПревышен отдельный лимит снимка — 1 запрос/мин. Подождите перед повтором.
Всегда сохраняйте ETag из каждой успешной загрузки и отправляйте его обратно в If-None-Match при следующем запросе. Ответ 304 не расходует квоту лимита запросов и позволяет поддерживать локальную копию в актуальном состоянии без лишних повторных загрузок.
Этот эндпоинт предназначен для массовой загрузки полного каталога. Если вам нужны цены только для конкретного товара или отфильтрованного подмножества, используйте GET /v1/prices — он поддерживает фильтры по search, category и wear и не учитывается в лимите snapshot.

Авторизации

Authorization
string
header
обязательно

Send your key as a Bearer token on every request: Authorization: Bearer csb_pub_.... Generate keys in your CSBoard profile.

Заголовки

If-None-Match
string

Conditional request. Pass the ETag from a previous snapshot to receive 304 if unchanged.

Ответ

Gzipped NDJSON stream. Each decompressed line is one PriceRow JSON object. Sets an ETag header.

The response is of type file.