WebSocket
Эндпоинт
Этот эндпоинт предоставляет поток предложений маркетплейсов в реальном времени через WebSocket. После подключения и подписки вы получаете листинги предметов по мере их обнаружения на поддерживаемых торговых площадках.
Аутентификация
Укажите ваш API-ключ в качестве параметра запроса apiKey при подключении.
wss://marketplaceapi.steamapis.com/ws/v2/offers?apiKey=YourSecretAPIKey
websocketAccess. Свяжитесь со службой поддержки, если вам необходимо добавить это разрешение к вашему ключу.Сжатие
Сервер требует расширение WebSocket permessage-deflate. Большинство клиентов согласовывают это автоматически. Если ваш клиент этого не делает, отправьте заголовок расширения явно при подключении:
Sec-WebSocket-Extensions: permessage-deflate
Без него рукопожатие завершается ошибкой 400 Bad Request с сообщением permessage-deflate is required.
Лимиты
Каждый API-ключ ограничен 2 одновременными подключениями. Открытие третьего подключения приводит к его закрытию с кодом 1008 (Policy Violation).
Сообщение подписки
После подключения отправьте JSON-сообщение для подписки на определённые торговые площадки и игры. subscribeTo и games обязательны; newFloorOnly необязательно.
all или -1 для подписки на все торговые площадки. Регистр не учитывается. Полный список см. в Справочнике.all или -1 для подписки на все игры. Регистр не учитывается. Полный список см. в Справочнике.false. Когда true, отправляются только предложения, устанавливающие новый минимальный ценовой порог для своего предмета на своей торговой площадке.Пример подписки
const ws = new WebSocket('wss://marketplaceapi.steamapis.com/ws/v2/offers?apiKey=YOUR_API_KEY');
ws.onopen = () => {
ws.send(JSON.stringify({
subscribeTo: ['Buff163', 'CSFloat', 'SkinPort'],
games: ['CS2', 'Dota2'],
newFloorOnly: true
}));
};
ws.onmessage = (event) => {
const message = JSON.parse(event.data);
if (message.type === 'subscribed') {
console.log('Subscribed to:', message.marketplaces, message.games);
} else if (message.type === 'offer') {
console.log('New offer:', message.data.name, '$' + message.data.priceUSD);
} else if (message.type === 'error') {
console.error('Error:', message.error);
}
};
ws.onerror = (error) => console.error('WebSocket error:', error);
ws.onclose = () => console.log('Disconnected');
Сообщение подтверждения
При успешной подписке вы получаете сообщение с подтверждением.
{
"type": "subscribed",
"marketplaces": ["Buff163", "CSFloat", "SkinPort"],
"games": ["CS2", "Dota2"],
"message": "Successfully subscribed to offer stream"
}
Сообщения об ошибках
Ошибки возвращаются в виде JSON-сообщений с type: "error".
| Ошибка | Причина |
|---|---|
Invalid API key | Указанный API-ключ не найден |
WebSocket access not enabled | Ваш API-ключ не имеет разрешения websocketAccess |
API key disabled | Ваш аккаунт был отключён |
subscribeTo field is required | Отсутствует поле subscribeTo в сообщении подписки |
games field is required | Отсутствует поле games в сообщении подписки |
Unknown marketplace: X | Недопустимое название или ID торговой площадки |
Unknown game: X | Недопустимое название или ID игры |