ScinScope docs

REST API

Базовый адрес — https://scinscope.com/api/v2. Ответы в JSON, кодировка UTF-8, время в RFC 3339 с зоной, денежные значения — числа с двумя знаками.

Аутентификация

Токен передаётся в заголовке. Области — read и write.

Authorization: Bearer sst_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Лимиты запросов

Лимит зависит от тарифа: 20, 120 или 600 запросов в минуту. Остаток возвращается в X-Rate-Limit-Remaining, момент сброса — в X-Rate-Limit-Reset. При исчерпании приходит 429 с Retry-After.

Каталог

get /items

Поиск позиций. Параметры: q — свободная строка, wear — фильтр по качеству, limit до 200, cursor для страниц.

GET /api/v2/items?q=Asiimov&wear=fn&limit=50

get /items/{id}

Одна позиция: сводная цена, число сделок за сутки, диапазон цен активных лотов, список площадок, где позиция сейчас представлена.

get /items/{id}/history

История цен и объёмов. Параметры from, to, step (1h, 1d, 1w). Окно не может превышать глубину истории на тарифе.

{
  "item": "itm_9c1af730",
  "step": "1d",
  "points": [
    ["2026-08-24", 14.90, 388],
    ["2026-08-25", 14.71, 402],
    ["2026-08-26", 14.62, 412]
  ]
}

Порядок значений в точке: дата, сводная цена, число сделок. Если сделок за интервал было меньше пяти, цена приходит как null.

Лоты

get /items/{id}/listings

Активные лоты по позиции. Фильтры: venue, float_min, float_max, pattern, price_max, stickers (any, none).

{
  "items": [
    {
      "id": "lst_4b70d2",
      "venue": "venue_c",
      "price": 13.10,
      "float": 0.2043,
      "pattern": 661,
      "stickers": [],
      "seen_at": "2026-08-26T11:02:55Z"
    }
  ],
  "next": "eyJvIjoyMDB9"
}

Спреды

get /items/{id}/spread

Лучшая пара площадок для позиции. Параметр venues ограничивает расчёт списком площадок, full=1 возвращает все пары, а не только лучшую.

get /spreads

Спреды по всему каталогу, отсортированные по убыванию процента.

ПараметрТипОписание
min_spread_pctчислоНижняя граница спреда в процентах. По умолчанию 5.
min_trades_24hцелоеОтсечь неликвид. По умолчанию 5.
max_hold_daysцелоеМаксимальный срок удержания на площадке покупки.
price_min, price_maxчислоДиапазон цены покупки.
venuesсписокУчитывать только эти площадки, через запятую.
Выдача /spreads кешируется на 20 секунд и одинакова для всех клиентов. Опрашивать её чаще смысла нет — за as_of видно возраст расчёта.

Площадки

get /venues

Комиссии, сроки вывода и правила удержания — те самые значения, которые используются в расчёте спреда.

{
  "items": [
    {
      "id": "venue_a",
      "fee": 0.125,
      "withdraw_fee": 0.35,
      "hold_days": 7,
      "status": "ok"
    }
  ]
}

Поле status принимает значения ok, degraded и down. Площадка в состоянии down в расчёт спредов не попадает, а её последние известные цены помечаются как устаревшие.

Инвентарь

get /inventory

Разбор инвентаря по публичному профилю. Параметр profile обязателен. Возвращается состав, оценка по сводным ценам и оценка по лучшим ценам продажи за вычетом комиссий.

{
  "profile": "76561198000000000",
  "count": 148,
  "value_quote": 2140.55,
  "value_net": 1863.20,
  "top": [
    { "item": "itm_5d2b91cc", "count": 1, "quote": 412.00 }
  ]
}

Закрытый профиль даёт 403 с кодом inventory_private. Это ограничение площадки, а не сервиса.

Отслеживания

get /watches

post /watches

Создание требует области write. Поле kind принимает spread или listing: первое следит за разницей между площадками, второе — за появлением конкретного лота дешевле указанной цены.

{
  "item": "itm_9c1af730",
  "kind": "listing",
  "price_max": 12.50,
  "float_max": 0.22,
  "venues": ["venue_a", "venue_c"],
  "channels": ["default"]
}

Ошибки

КодКогда
400Некорректные параметры: неизвестный step, окно шире тарифа, битая дата.
401Токен отсутствует, истёк или отозван.
403Не хватает области, либо профиль инвентаря закрыт.
404Позиция не найдена. Позиция без активных лотов даёт 200 с пустым списком.
422Условия отслеживания несовместимы — например, float_max ниже границы указанного качества.
429Превышен лимит запросов.
503Хранилище временно недоступно; повторяйте по Retry-After.
{
  "error": {
    "code": "window_too_wide",
    "message": "Запрошено 400 дней при глубине истории 30 дней",
    "field": "from"
  }
}