REST & WebSocket API
Базовый URL: https://api.bluestudz.ru. Разверните раздел, чтобы увидеть заголовки, тело запроса и пример ответа.
Авторизация
Обмен launch-токена лаунчера на игровую сессию и подтверждение владения игрой.
POST/auth/game/launch▾
Выдаёт короткоживущий (5 мин) одноразовый launchToken для запускаемой игры. Вызывается лаунчером — использует его собственную сессию (cookie), не SDK.
Тело запроса
{ "gameId": "<game-uuid>" }Пример вызова cURL
curl -X POST https://api.bluestudz.ru/auth/game/launch \
-H "Content-Type: application/json" \
-H "Cookie: session=<launcher-cookie>" \
-d '{"gameId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"}'Ответ
{ "launchToken": "<jwt, 5 min>" }Возможные HTTP статусы
POST/auth/game/verify▾
Обменивает launchToken на игровой userToken (game_session JWT, 30 мин). Вызывается SDK при старте игры.
Тело запроса
{ "launchToken": "<jwt from BLUESTUDZ_LAUNCH_TOKEN>" }Пример вызова cURL
curl -X POST https://api.bluestudz.ru/auth/game/verify \
-H "Content-Type: application/json" \
-d '{"launchToken": "eyJhbGciOi..."}'Ответ
{
"gameToken": "<jwt, 30 min>",
"user": { "id": "usr_12345", "nickname": "Alex", "displayName": "Alexander", "role": "User" }
}Возможные HTTP статусы
POST/sdk/auth/verify▾
Подтверждает владение игрой и валидность игровой сессии. Регистрирует активность игрока (sdkGameActivity).
Тело запроса
{
"gameId": "<game-uuid>",
"secretToken": "<developer secret>",
"userId": "<from /auth/game/verify>",
"userToken": "<gameToken from /auth/game/verify>"
}Пример вызова cURL
curl -X POST https://api.bluestudz.ru/sdk/auth/verify \
-H "Content-Type: application/json" \
-d '{"gameId":"uuid","secretToken":"sec_token","userId":"usr_123","userToken":"eyJhbGciOi..."}'Ответ
{ "success": true }Возможные HTTP статусы
Друзья и Presence
Список друзей и Rich Presence статус игрока.
GET/sdk/friends▾
Список друзей игрока, доступных для внутриигровых приглашений.
Заголовки
- Authorization: Bearer <userToken>
- x-bs-gameid: <gameId>
Пример вызова cURL
curl -X GET https://api.bluestudz.ru/sdk/friends \
-H "Authorization: Bearer <userToken>" \
-H "x-bs-gameid: <gameId>"Ответ
{ "friends": [{ "id": "usr_99", "nickname": "Friend1", "online": true }] }Возможные HTTP статусы
POST/sdk/presence/status▾
Steamworks SetRichPresence-эквивалент. Помечает игрока как активного в игре (виден друзьям как «Играет в <игра>»).
Заголовки
- Authorization: Bearer <userToken>
- x-bs-gameid: <gameId>
Тело запроса
{ "active": true }Пример вызова cURL
curl -X POST https://api.bluestudz.ru/sdk/presence/status \
-H "Authorization: Bearer <userToken>" \
-H "x-bs-gameid: <gameId>" \
-H "Content-Type: application/json" \
-d '{"active": true}'Ответ
{ "success": true }Возможные HTTP статусы
Ачивки
Разблокировка достижений, подтверждённая секретным токеном разработчика.
POST/sdk/achievements/unlock▾
Разблокирует ачивку для игрока. Требует secretToken разработчика — игрок не может подделать чужую разблокировку.
Заголовки
- Authorization: Bearer <userToken>
- x-bs-gameid: <gameId>
- x-bs-secrettoken: <developer secret>
Тело запроса
{ "achievementId": "first_blood" }Пример вызова cURL
curl -X POST https://api.bluestudz.ru/sdk/achievements/unlock \
-H "Authorization: Bearer <userToken>" \
-H "x-bs-gameid: <gameId>" \
-H "x-bs-secrettoken: <secretToken>" \
-H "Content-Type: application/json" \
-d '{"achievementId": "first_blood"}'Ответ
{ "success": true }Возможные HTTP статусы
Облачные сохранения
Регистрация и статус синхронизированных сохранений между устройствами.
POST/sdk/cloudsaves/sync▾
Регистрирует загруженный архив сохранения (сначала загрузите файл через presigned URL из POST /storage/presign). Обнаруживает конфликты между устройствами по baseVersion.
Заголовки
- Authorization: Bearer <userToken>
- x-bs-gameid: <gameId>
Тело запроса
{
"sha256": "<sha256 of the save archive>",
"sizeBytes": 204800,
"storageKey": "<key returned by /storage/presign>",
"baseVersion": 3
}Пример вызова cURL
curl -X POST https://api.bluestudz.ru/sdk/cloudsaves/sync \
-H "Authorization: Bearer <userToken>" \
-H "x-bs-gameid: <gameId>" \
-H "Content-Type: application/json" \
-d '{"sha256":"e3b0c442...","sizeBytes":204800,"storageKey":"saves/slot1.bin","baseVersion":3}'Ответ
{ "success": true, "conflict": false, "status": "active" }Возможные HTTP статусы
GET/library/games/:id/cloudsave/status▾
Текущая версия и метаданные облачного сохранения. Доступ по обычной игровой/веб-сессии, не по SDK-заголовкам.
Заголовки
- Authorization: Bearer <session token>
Пример вызова cURL
curl -X GET https://api.bluestudz.ru/library/games/a1b2c3d4/cloudsave/status \
-H "Authorization: Bearer <sessionToken>"Ответ
{ "version": 3, "sha256": "...", "sizeBytes": 204800, "updatedAt": "..." }Возможные HTTP статусы
Прогресс и мэтчмейкинг
Боевой пропуск и быстрая очередь мэтчмейкинга.
POST/sdk/battlepass/sync▾
Синхронизирует прогресс боевого пропуска. Значения xp/tier применяются как максимум (GREATEST) — клиент не может откатить прогресс назад.
Заголовки
- Authorization: Bearer <userToken>
- x-bs-gameid: <gameId>
- x-bs-secrettoken: <developer secret>
Тело запроса
{ "xp": 1500, "tier": 4, "hasPremium": false, "claimedTiers": [1, 2, 3] }Пример вызова cURL
curl -X POST https://api.bluestudz.ru/sdk/battlepass/sync \
-H "Authorization: Bearer <userToken>" \
-H "x-bs-gameid: <gameId>" \
-H "x-bs-secrettoken: <secretToken>" \
-H "Content-Type: application/json" \
-d '{"xp":1500,"tier":4,"hasPremium":false,"claimedTiers":[1,2,3]}'Ответ
{ "success": true }Возможные HTTP статусы
POST/sdk/matchmaking/join▾
Ставит игрока в очередь мэтчмейкинга (аналог SteamMatchmaking для quick-play).
Заголовки
- Authorization: Bearer <userToken>
- x-bs-gameid: <gameId>
Пример вызова cURL
curl -X POST https://api.bluestudz.ru/sdk/matchmaking/join \
-H "Authorization: Bearer <userToken>" \
-H "x-bs-gameid: <gameId>"Ответ
{ "status": "Queued", "serverAddress": "" }Возможные HTTP статусы
POST/sdk/matchmaking/leave▾
Убирает игрока из очереди мэтчмейкинга.
Заголовки
- Authorization: Bearer <userToken>
- x-bs-gameid: <gameId>
Пример вызова cURL
curl -X POST https://api.bluestudz.ru/sdk/matchmaking/leave \
-H "Authorization: Bearer <userToken>" \
-H "x-bs-gameid: <gameId>"Ответ
{ "status": "Left" }Возможные HTTP статусы
Лобби
Полноценные лобби (matchmaking-service) - серверный релей, без прямого P2P.
POST/lobby▾
SteamMatchmaking()->CreateLobby() эквивалент (matchmaking-service). Трафик лобби проксируется сервером — участники не обмениваются IP.
Заголовки
- Authorization: Bearer <session token>
Тело запроса
{ "gameId": "<game-uuid>", "maxPlayers": 4, "isPrivate": false }Пример вызова cURL
curl -X POST https://api.bluestudz.ru/lobby \
-H "Authorization: Bearer <sessionToken>" \
-H "Content-Type: application/json" \
-d '{"gameId":"uuid","maxPlayers":4,"isPrivate":false}'Ответ
{ "lobbyId": "lob_991", "hostId": "usr_123" }Возможные HTTP статусы
POST/lobby/:id/join▾
Присоединение к существующему лобби по ID.
Заголовки
- Authorization: Bearer <session token>
Пример вызова cURL
curl -X POST https://api.bluestudz.ru/lobby/lob_991/join \
-H "Authorization: Bearer <sessionToken>"Ответ
{ "success": true }Возможные HTTP статусы
WebSocket
Реалтайм-события поверх Socket.IO.
WSwss://ws.bluestudz.ru (Socket.IO, matchmaking & relay namespace)▾
Реалтайм-шлюз мэтчмейкинга и Relay. SDK-игры используют безопасный серверный релей для обмена бинарными пакетами (до 128 КБ на чанк).
Ответ
// client -> server (Socket.IO events)
socket.emit("join_queue", { gameId })
socket.emit("leave_queue", { gameId })
socket.emit("relay_packet", { roomId, chunkIndex, data })