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

EVA Platform предоставляет REST API для получения метрик и управления серверами.

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

Публичные методы (/api/health, /api/status, /api/plans, /api/login, /api/register, /api/recover) доступны без авторизации. Остальные требуют токен, полученный при входе: он передаётся в заголовке X-Auth-Token. HTTP Basic Auth также поддерживается.

# Вход: получаем токен
curl -s -X POST -H "Content-Type: application/json"   -d '{"login":"user@example.com","password":"********"}'   https://evasea.space/api/login

# Запрос с токеном (TTL 1 час, продление — POST /api/refresh)
curl -H "X-Auth-Token: <token>" https://evasea.space/api/stats.json

# Завершение сессии
curl -X POST -H "X-Auth-Token: <token>" https://evasea.space/api/logout

Эндпоинты

GET /api/status

Состояние сервисов платформы. Доступен без авторизации; используется на странице /status.

GET /api/plans

Список тарифов и лимитов. Доступен без авторизации.

GET /api/health

Проверка доступности API. Возвращает {"ok":true}.

GET /api/stats.json

Текущие метрики сервера в реальном времени.

{
  "ts": 1719000000,
  "cpu": 12.5,
  "ram_percent": 45.2,
  "ram_used": 858993459,
  "ram_total": 1900000000,
  "disk_percent": 32.1,
  "disk_used": 8589934592,
  "disk_total": 26843545600,
  "net_rx": 102400,
  "net_tx": 51200,
  "load1": 0.45,
  "load5": 0.32,
  "load15": 0.28,
  "uptime": 1209600,
  "connections": 42,
  "services": {
    "frontend": "active",
    "backend": "active",
    "worker": "active"
  }
}

GET /api/history.jsonl

Исторические данные в формате JSON Lines. Каждая строка — снимок метрик за 30-секундный интервал.

// Каждая строка — независимый JSON-объект
{"ts":1719000000,"cpu":12.5,"ram":45.2,"rx":102400,"tx":51200,"load":0.45,"conn":42,"disk":32.1}
{"ts":1719000030,"cpu":10.1,"ram":44.8,"rx":98304,"tx":49152,"load":0.38,"conn":41,"disk":32.1}
...

POST /api/login

Аутентификация пользователя. В ответ приходит токен для заголовка Authorization.

{
  "login": "user@example.com",
  "password": "********"
}

POST /api/register

Регистрация нового пользователя. Требуется подтверждение email.

{
  "email": "user@example.com",
  "name": "Иван Петров",
  "password": "********"
}

POST /api/recover

Запрос на восстановление пароля. На указанный email отправляется ссылка для сброса.

{
  "email": "user@example.com"
}

Форматы ответов

Все ответы возвращаются в формате application/json. Ошибки содержат поле error с описанием: 400 — некорректный запрос, 401 — нет или истёк токен, 403 — нет доступа к объекту, 404 — объект не найден, 413 — слишком большое тело, 429 — превышен лимит запросов (в ответе retry_after, в заголовке Retry-After).

Ограничения

Частота запросов ограничена: не более 120 запросов в минуту на IP для тарифа Starter, 600 для Pro. Вход ограничен 12 попытками за 5 минут с IP и 8 попытками за 15 минут на аккаунт. При превышении возвращается HTTP 429 с заголовком Retry-After.