Начало работы

Руководство по миграции

Миграция с SteamApis v1 на v2. Обновлённая аутентификация, обёртка ответа, имена полей Steam-пользователя и значительно более широкий набор endpoint'ов.

Миграция с v1 на v2

Это руководство описывает изменения, которые тебе нужно внести при переходе с SteamApis API v1 на v2. В v2 добавлены новые категории (Аккаунт, Market Data), реорганизованы endpoint'ы Steam-пользователей и приложений и введена стандартизированная обёртка ответа.

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

v1 передавала API-ключ как query-параметр, обычно api_key или key:

GET /steam/profile/76561198038526790?api_key=YOUR_KEY

v2 передаёт API-ключ через request header x-api-key (рекомендуется) или query-параметр ?key= (всё ещё поддерживается):

index.js
fetch('https://api.steamapis.com/v2/steam/users/76561198038526790', {
  headers: { 'x-api-key': 'YOUR_KEY' }
})

Использовать header рекомендуется, потому что так ключ не попадает в серверные логи, историю браузера и referer'ы.

Обёртка ответа

v1 возвращала данные напрямую на верхнем уровне:

{
  "steamid": "76561198038526790",
  "personaname": "PEPZ"
}

v2 оборачивает каждый ответ в стандартную обёртку. Точная форма зависит от того, возвращает ли endpoint одиночный ресурс или постраничный список:

Одиночный ресурс
{
  "success": true,
  "result": { "steamID": "76561198038526790", "nickname": "PEPZ" }
}
Постраничный список
{
  "success": true,
  "results": [ { /* ... */ } ],
  "cursor": "6789abcdef012345",
  "hasMore": true
}

Ошибки используют ту же обёртку с success: false:

Ошибка
{
  "success": false,
  "error": { "name": "NOT_FOUND", "message": "User not found", "meta": {} }
}

Чтобы получить данные, используй data.result (одиночный ресурс) или data.results (список) вместо чтения верхнего уровня напрямую.

В нескольких ранних документациях v2-endpoint'ов всё ещё используется старый ключ response вместо result. Считай это дрейфом — авторитетная обёртка — { success, result } / { success, results, cursor, hasMore }.

Переименования полей Steam-пользователя

v2-endpoint пользователя возвращает те же данные Steam, но с именами полей в camelCase и вложенным объектом avatar. Если ты парсишь ответы по пользователям, обнови свои типы:

Поле v1Поле v2Примечания
steamidsteamIDПереименование.
personanamenicknameПереименование.
profileurlurlПереименование.
personastatepersonaStatecamelCase.
personastateflagspersonaStateFlagscamelCase.
primaryclanidprimaryGroupIDПереименование.
timecreatedcreatedTimestampПереименование.
loccountrycodecountryCodeПереименование.
commentpermission (number)allowsComments (boolean)Изменение типа.
communityvisibilitystate (enum)visible (boolean)Сведено к булевому.
avatar, avatarmedium, avatarfull, avatarhashavatar.small, avatar.medium, avatar.large, avatar.hashПлоские поля перенесены во вложенный объект avatar.
profilestate—Удалено.
—lastLogOffTimestampНовое.

Параметр Steam ID

В v1 endpoint'ы пользователей требовали SteamID64 (17-значный числовой ID). В v2 параметр steamid принимает несколько форматов Steam ID — SteamID64, SteamID, SteamID3 — и API разрешает их автоматически.

Маппинг endpoint'ов

Таблицы ниже сопоставляют каждый v1-endpoint с его v2-эквивалентом, сгруппированы по категории. Записи с пометкой «Новое в v2» не имеют v1-предшественника.

Аккаунт

Endpoint v1Endpoint v2Примечания
—GET /v2/accountНовое в v2. Возвращает баланс, конфигурацию overage и статус подписок по продуктам с использованием в текущем цикле.

Steam-пользователи

Endpoint v1Endpoint v2Примечания
GET /steam/profile/{SteamID64}GET /v2/steam/users/{steamid}Переименован. Имена полей тоже изменились — см. Переименования полей Steam-пользователя.
GET /steam/profile/{SteamID64}/summaryGET /v2/steam/users/{steamid} + GET /v2/steam/users/{steamid}/badgesSummary разделён. Основной профиль сливается с endpoint'ом пользователя; badges — отдельный endpoint.
GET /steam/profile/{SteamID64}/gamesGET /v2/steam/users/{steamid}/gamesИзменён путь.
GET /steam/profile/vanity/{VanityName}GET /v2/steam/users/vanity/{vanityUrl}Изменён путь.
GET /steam/inventory/{SteamID64}/{AppId}/{ContextId}GET /v2/steam/users/{steamid}/inventory/{appId}/{contextId}Изменён путь (endpoint инвентаря остаётся в Steam users).
—GET /v2/steam/users/{steamid}/bansНовое в v2. Отдельный endpoint статуса банов.
—GET /v2/steam/users/{steamid}/recently-playedНовое в v2. Игры за последние две недели с минутами по платформам.
—GET /v2/steam/users/{steamid}/achievements/{appid}Новое в v2. Достижения по игре с timestamp'ами разблокировки.
—GET /v2/steam/users/{steamid}/stats/{appid}Новое в v2. Статистика по игре + разблокированные достижения.
—GET /v2/steam/users/{steamid}/friendsНовое в v2. Список друзей с timestamp'ами дружбы.
—GET /v2/steam/users/{steamid}/groupsНовое в v2. Группы, в которых состоит пользователь.

Steam-приложения

Endpoint v1Endpoint v2Примечания
GET /market/appsGET /v2/steam/appsПереименован и переработан. Возвращает постраничный список всех отслеживаемых Steam-приложений. Используй cursor для пагинации.
GET /market/app/{AppID}GET /v2/steam/apps/{appId}Переименован. Детали приложения (имя, тип, last modified и т. д.).
GET /market/stats—Прямого аналога нет. Ближайшие эквиваленты — GET /v2/steam/apps/player-counts и GET /v2/steam/apps/store/rankings/{type}.
—GET /v2/steam/apps/player-countsНовое в v2. Текущее количество одновременных игроков по приложению, постранично.
—GET /v2/steam/apps/{appId}/changesНовое в v2. Changelog приложения.
—GET /v2/steam/apps/{appId}/global-achievementsНовое в v2. Глобальный процент разблокировки по достижениям.
—GET /v2/steam/apps/{appId}/newsНовое в v2. Агрегированные community announcements и внешние пресс-материалы.
—GET /v2/steam/apps/{appId}/schemaНовое в v2. Полная схема стат/достижений (отображаемые имена, описания, URL-ы иконок).
—GET /v2/steam/apps/store/rankings/{type}Новое в v2. Списки рейтингов Steam Store (popularnew, topsellers, popularcomingsoon, specials, trendingfree, mostplayed).

Steam-предметы

Endpoint v1Endpoint v2Примечания
GET /market/items/{AppID}GET /v2/steam/itemsПереименован и переработан. Постраничный список всех отслеживаемых предметов; фильтруй по appId.
GET /market/item/{AppID}/{MarketHashName}GET /v2/steam/items/{appId}/{marketHashName}Изменён путь. Один предмет с текущей ценой/объёмом.
GET /market/items/{AppID}/histogramsGET /v2/steam/items/{itemId}/histogramsИзменён путь. Теперь по внутреннему itemId вместо appId.
GET /market/items/{AppID}/descriptions—Удалено. Описания Steam больше не доступны как отдельный endpoint.
GET /market/items/cards—Удалено. Прямого аналога нет.
GET /market/items/{AppID}/assetinfos—Удалено.
—GET /v2/steam/items/{itemId}/metaНовое в v2. Метаданные предмета (тип, теги, описание).
—GET /v2/steam/items/{itemId}/pricesНовое в v2. Временной ряд истории цен предмета.
—GET /v2/steam/items/{itemId}/changesНовое в v2. Changelog предмета.
—GET /v2/steam/items/{appId}/listНовое в v2. Заранее сгенерированный массовый прайс-лист для всего рынка приложения (302-редирект на файл в CDN).

Изображения

Endpoint v1Endpoint v2Примечания
GET /image/item/{AppID}/{MarketHashName}—Удалено. Формируй URL-ы Steam CDN напрямую из hash-полей предмета.
GET /image/items/{AppID}—Удалено.

Market Data (сторонние маркетплейсы)

Market Data — новая категория в v2. Агрегирует ценовые данные, офферы, продажи и order book с 26 сторонних маркетплейсов — функциональность, которой не было в v1.

Endpoint'ы Market Data размещены на https://marketplaceapi.steamapis.com/ — это другая base URL, чем у основного API (https://api.steamapis.com/).

Помимо REST-endpoint'ов ниже, v2 также предоставляет WebSocket-стрим офферов в реальном времени:

Endpoint v1Endpoint v2ПротоколПримечания
—wss://marketplaceapi.steamapis.com/ws/v2/offersWebSocketНовое в v2. Пушит отдельные листинги маркетплейсов по мере их обнаружения.
Endpoint v1Endpoint v2Примечания
—GET /v2/marketplacesНовое в v2. Список поддерживаемых маркетплейсов.
—GET /v2/itemsНовое в v2. Один предмет по разным маркетплейсам.
—GET /v2/items/searchНовое в v2. Поиск предметов по имени.
—GET /v2/items/compareНовое в v2. Сравнение предмета по маркетплейсам.
—GET /v2/buy-ordersНовое в v2.
—GET /v2/price-historyНовое в v2. Временной ряд истории цен.
—GET /v2/salesНовое в v2. Последние продажи.

Сводка критических изменений

  1. Аутентификация — перенеси API-ключ из query-параметра api_key в request header x-api-key (или оставь как ?key=, если работать с header'ом непрактично).
  2. Обёртка ответа — распаковывай data.result (одиночный ресурс) или data.results (список) вместо чтения верхнего уровня. Постраничные ответы списков также включают cursor и hasMore.
  3. Поля Steam-пользователя — переименуй steamid → steamID, personaname → nickname, profileurl → url и далее (см. полную таблицу выше). Плоские поля аватара перенесены во вложенный объект avatar.
  4. Пути endpoint'ов — endpoint'ы Steam-пользователей теперь под /v2/steam/users/, endpoint'ы приложений — под /v2/steam/apps/, endpoint'ы предметов — под /v2/steam/items/.
  5. Ввод Steam ID — v2 принимает несколько форматов Steam ID, не только SteamID64.
  6. Новые endpoint'ы — Аккаунт, bans, recently-played, achievements, stats, friends, groups, player-counts, global-achievements, news, schema, store rankings, список предметов и вся категория Market Data.
  7. Формат ошибок — ошибки возвращают { "success": false, "error": { "name": "...", "message": "...", "meta": ... } } вместо разных форматов под разные endpoint'ы.