API Документация

REST API для программного доступа к данным игроков Standoff 2.

Base URL http://lunarisapi.duckdns.org/api/v1

Авторизация заголовок X-API-Key: lun_ваш_ключ

Rate limit 30 запросов в минуту

Swagger UI /docs

Эндпоинты

GET
/api/v1/player/{player_id}

Получить полную информацию об игроке.

Параметры

ПараметрТипОписание
player_idstring (path)ID игрока Standoff 2

Пример запроса

curl -H "X-API-Key: lun_ваш_ключ" http://lunarisapi.duckdns.org/api/v1/player/123456789

Пример ответа (200)

{
  "status": "ok",
  "cached": false,
  "data": {
    "nickname": "PlayerName",
    "player_id": "123456789",
    "hours": 156.5,
    "last_login": "19.07.2018 в 03:45",
    "reg_date": "18.07.2018 в 22:25",
    "matchmaking": "Bronze II · 300",
    "allies": "Bronze II · 300",
    "duels": "Bronze II · 300",
    "best_matchmaking": "Silver I · 620",
    "best_allies": "Bronze III · 410",
    "best_duels": "Bronze II · 300",
    "banned": true,
    "ban_code": "1006",
    "ban_scope": "GLOBAL",
    "ban_until": "PERMAMENT",
    "error": "",
    "raw_text": "..."
  }
}
GET
/api/v1/player/{player_id}/check-hours

Проверка кол-ва часов на аккаунте и наличия бана.

Query-параметры

ПараметрТипПо умолчаниюОписание
hoursfloat100Необходимое кол-во часов

Пример запроса

curl -H "X-API-Key: lun_ваш_ключ" \
  "http://lunarisapi.duckdns.org/api/v1/player/123456789/check-hours?hours=50"

Пример ответа (200)

{
  "status": "ok",
  "player_id": "123456789",
  "hours": 156.5,
  "required_hours": 50,
  "has_required_hours": true,
  "banned": false,
  "cached": false
}
GET
/api/v1/me

Информация о владельце API-ключа.

Пример ответа (200)

{
  "status": "ok",
  "user": {
    "telegram_id": 123456789,
    "username": "myuser",
    "role": "premium",
    "queries": 42
  }
}

Коды ошибок

КодОписание
401Невалидный или отсутствующий API-ключ
404Игрок не найден
429Превышен rate limit
500Внутренняя ошибка сервера

Python пример

import requests

API_KEY = "lun_ваш_ключ"
BASE_URL = "http://lunarisapi.duckdns.org/api/v1"

def check_player(player_id: str, required_hours: float = 100) -> dict:
    resp = requests.get(
        f"{BASE_URL}/player/{player_id}/check-hours",
        params={"hours": required_hours},
        headers={"X-API-Key": API_KEY},
    )
    resp.raise_for_status()
    return resp.json()

result = check_player("123456789", 50)
print(f"Часов: {result['hours']} — проходит: {result['has_required_hours']}")