Pterohost docs

YourControl API

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

YourControl API

Полная документация по Developer API для интеграции с серверами игровой панели (Pterodactyl + кастомные YourControl, например query)

Содержание

  1. Введение
  2. Аутентификация
  3. Query API
  4. Webhook Tokens API
  5. Public Webhook API
  6. Discord Webhooks API
  7. Rate Limiting & Caching
  8. Примеры кода
  9. Коды ответов

Введение

Developer API предоставляет возможность получать информацию о состоянии игровых серверов, управлять webhook токенами и настраивать Discord уведомления.

Base URL: https://gcp.pterohost.com/api

Доступ к API:


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

API Key (Authorization)

Для авторизованных запросов используйте ваш API ключ в заголовке:

Authorization: Bearer YOUR_API_KEY
Accept: application/json

Получение API ключа:

  1. Зайдите в /account/api
  2. Вкладка “API Ключи”
  3. Создайте новый ключ с описанием

Webhook Token (Public Access)

Для публичного доступа без авторизации используйте Webhook Token:

GET /api/public/server/{token}/query

Получение Webhook Token:

  1. Зайдите в /account/api
  2. Вкладка “Query API”
  3. Выберите сервер
  4. Создайте Webhook Token

Query API

GET /api/client/servers/{server}/developer/query

Получить текущий онлайн игроков и информацию о сервере.

Параметры пути:

  • server (string, required) - UUID сервера

Заголовки:

Authorization: Bearer YOUR_API_KEY
Accept: application/json

Ответ:

{
  "success": true,
  "data": {
    "info": {
      "hostname": "My Minecraft Server",
      "map": "world",
      "players": 15,
      "maxplayers": 100,
      "version": "1.20.1",
      "dedicated": true,
      "password": false
    },
    "players": [
      {
        "id": "uuid-here",
        "name": "Player1"
      }
    ],
    "online_players": 15,
    "max_players": 100
  }
}

Кэширование: 30 секунд Rate Limit: 300 запросов в час


GET /api/client/servers/{server}/developer/query/history

Получить историю онлайна за период.

Параметры пути:

  • server (string, required) - UUID сервера

Query параметры:

  • period (string, optional) - Период: day, week, month (по умолчанию: week)

Заголовки:

Authorization: Bearer YOUR_API_KEY
Accept: application/json

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

GET /api/client/servers/{server}/developer/query/history?period=week

Ответ:

{
  "data": [
    {
      "recorded_at": "2025-12-16T01:30:00+03:00",
      "online_players": 45,
      "max_players": 100,
      "map": "de_dust2",
      "hostname": "My Server",
      "extra_data": null
    },
    {
      "recorded_at": "2025-12-16T01:25:00+03:00",
      "online_players": 42,
      "max_players": 100,
      "map": "de_dust2",
      "hostname": "My Server",
      "extra_data": null
    }
  ]
}

Частота записи: каждые 5 минут Хранение: 30 дней Rate Limit: 300 запросов в час


GET /api/client/servers/{server}/developer/query/players

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

Параметры пути:

  • server (string, required) - UUID сервера

Заголовки:

Authorization: Bearer YOUR_API_KEY
Accept: application/json

Ответ:

{
  "success": true,
  "data": {
    "info": {
      "hostname": "My Server",
      "map": "de_dust2",
      "players": 10,
      "maxplayers": 32
    },
    "players": [
      {
        "id": 0,
        "name": "Player1",
        "score": 150,
        "time": 3600,
        "ping": 25
      }
    ],
    "online_players": 10,
    "max_players": 32
  }
}

Кэширование: 30 секунд Rate Limit: 300 запросов в час


GET /api/client/servers/{server}/developer/stats

Получить метрики сервера (CPU, RAM, Disk, Network).

Параметры пути:

  • server (string, required) - UUID сервера

Заголовки:

Authorization: Bearer YOUR_API_KEY
Accept: application/json

Ответ:

{
  "success": true,
  "data": {
    "cpu": 45.5,
    "memory": {
      "current": 2147483648,
      "limit": 4294967296
    },
    "disk": {
      "current": 5368709120,
      "limit": 10737418240
    },
    "network": {
      "rx_bytes": 1073741824,
      "tx_bytes": 536870912
    },
    "uptime": 86400,
    "state": "running"
  }
}

Описание полей:

  • cpu - Использование CPU в процентах
  • memory.current - Использованная RAM в байтах
  • memory.limit - Лимит RAM в байтах
  • disk.current - Использованное место на диске в байтах
  • disk.limit - Лимит диска в байтах
  • network.rx_bytes - Получено байт
  • network.tx_bytes - Отправлено байт
  • uptime - Время работы в секундах
  • state - Состояние: running, offline, starting, stopping

Кэширование: 30 секунд Rate Limit: 300 запросов в час


Webhook Tokens API

GET /api/client/servers/{server}/developer/tokens

Получить все webhook токены для сервера.

Параметры пути:

  • server (string, required) - UUID сервера

Заголовки:

Authorization: Bearer YOUR_API_KEY
Accept: application/json

Ответ:

{
  "data": [
    {
      "id": 1,
      "token": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "webhook_url": "https://gcp.pterohost.com/api/public/server/a1b2c3d4-e5f6-7890-abcd-ef1234567890/query",
      "created_at": "2025-12-16T01:00:00+03:00",
      "updated_at": "2025-12-16T01:00:00+03:00"
    }
  ]
}

POST /api/client/servers/{server}/developer/tokens

Создать новый webhook токен.

Параметры пути:

  • server (string, required) - UUID сервера

Заголовки:

Authorization: Bearer YOUR_API_KEY
Accept: application/json

Тело запроса: Не требуется

Ответ:

{
  "data": {
    "id": 2,
    "token": "new-uuid-token-here",
    "webhook_url": "https://gcp.pterohost.com/api/public/server/new-uuid-token-here/query",
    "created_at": "2025-12-16T02:00:00+03:00",
    "updated_at": "2025-12-16T02:00:00+03:00"
  }
}

POST /api/client/servers/{server}/developer/tokens/{tokenId}/regenerate

Регенерировать существующий webhook токен.

Параметры пути:

  • server (string, required) - UUID сервера
  • tokenId (integer, required) - ID токена

Заголовки:

Authorization: Bearer YOUR_API_KEY
Accept: application/json

Тело запроса: Не требуется

Ответ:

{
  "data": {
    "id": 2,
    "token": "regenerated-uuid-token",
    "webhook_url": "https://gcp.pterohost.com/api/public/server/regenerated-uuid-token/query",
    "created_at": "2025-12-16T02:00:00+03:00",
    "updated_at": "2025-12-16T02:30:00+03:00"
  }
}

⚠️ Предупреждение: Старый токен станет невалидным после регенерации.


DELETE /api/client/servers/{server}/developer/tokens/

Удалить webhook токен.

Параметры пути:

  • server (string, required) - UUID сервера
  • tokenId (integer, required) - ID токена

Заголовки:

Authorization: Bearer YOUR_API_KEY
Accept: application/json

Ответ:

HTTP/1.1 204 No Content

Public Webhook API

GET /api/public/server-query/{serverUuid}/query

Получить данные query БЕЗ токена (ограничен по IP).

Параметры пути:

  • serverUuid (string, required) - UUID сервера

Заголовки:

Accept: application/json

⚠️ Авторизация НЕ требуется ⚠️ Rate Limit: 10 запросов в час на IP адрес

Ответ: Аналогично /developer/query


GET /api/public/server/{token}/query

Получить данные query с webhook токеном (рекомендуется).

Параметры пути:

  • token (string, required) - Webhook токен (UUID)

Заголовки:

Accept: application/json

⚠️ Авторизация НЕ требуется ✅ Rate Limit: 150 запросов в час на токен (выше чем без токена)

Ответ:

{
  "success": true,
  "data": {
    "info": {
      "hostname": "My Server",
      "map": "world",
      "players": 20,
      "maxplayers": 100,
      "version": "1.20.1"
    },
    "players": [...],
    "online_players": 20,
    "max_players": 100
  }
}

Кэширование: 30 секунд Rate Limit: 150 запросов в час на токен


GET /api/public/server/{token}/query/history

Получить историю онлайна без авторизации.

Параметры пути:

  • token (string, required) - Webhook токен (UUID)

Query параметры:

  • period (string, optional) - day, week, month

Заголовки:

Accept: application/json

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

GET /api/public/server/a1b2c3d4-e5f6-7890-abcd-ef1234567890/query/history?period=week

Ответ:

{
  "success": true,
  "data": [
    {
      "recorded_at": "2025-12-16T01:30:00+03:00",
      "online_players": 45,
      "max_players": 100,
      "map": "de_dust2",
      "hostname": "My Server",
      "extra_data": null
    }
  ]
}

Rate Limit: 150 запросов в час на токен


Discord Webhooks API

GET /api/client/servers/{server}/discord-webhooks

Получить все Discord webhooks для сервера.

Параметры пути:

  • server (string, required) - UUID сервера

Заголовки:

Authorization: Bearer YOUR_API_KEY
Accept: application/json

Ответ:

{
  "data": [
    {
      "id": 1,
      "server_id": 123,
      "webhook_url": "https://discord.com/api/webhooks/****/****",
      "webhook_url_full": "https://discord.com/api/webhooks/123456789/abcdefg",
      "name": "Главный канал",
      "is_enabled": true,
      "cooldown_seconds": 60,
      "failed_attempts": 0,
      "last_failed_at": null,
      "created_at": "2025-12-16T01:00:00+03:00",
      "updated_at": "2025-12-16T01:00:00+03:00"
    }
  ]
}

POST /api/client/servers/{server}/discord-webhooks

Создать новый Discord webhook.

Параметры пути:

  • server (string, required) - UUID сервера

Заголовки:

Authorization: Bearer YOUR_API_KEY
Accept: application/json
Content-Type: application/json

Тело запроса:

{
  "webhook_url": "https://discord.com/api/webhooks/123456789/abcdefg",
  "name": "Уведомления сервера",
  "is_enabled": true,
  "cooldown_seconds": 60
}

Поля:

  • webhook_url (string, required) - Discord webhook URL
  • name (string, required) - Название webhook (макс. 100 символов)
  • is_enabled (boolean, optional) - Включен ли webhook (по умолчанию: true)
  • cooldown_seconds (integer, optional) - Минимальный интервал между отправками в секундах (0-3600, по умолчанию: 60)

Ответ: Объект созданного webhook


PATCH /api/client/servers/{server}/discord-webhooks/

Обновить Discord webhook.

Параметры пути:

  • server (string, required) - UUID сервера
  • webhookId (integer, required) - ID webhook

Заголовки:

Authorization: Bearer YOUR_API_KEY
Accept: application/json
Content-Type: application/json

Тело запроса:

{
  "webhook_url": "https://discord.com/api/webhooks/new-url",
  "name": "Новое название",
  "is_enabled": false,
  "cooldown_seconds": 120
}

Все поля опциональны

Ответ: Объект обновленного webhook


DELETE /api/client/servers/{server}/discord-webhooks/

Удалить Discord webhook.

Параметры пути:

  • server (string, required) - UUID сервера
  • webhookId (integer, required) - ID webhook

Заголовки:

Authorization: Bearer YOUR_API_KEY
Accept: application/json

Ответ:

HTTP/1.1 204 No Content

POST /api/client/servers/{server}/discord-webhooks/{webhookId}/test

Отправить тестовое сообщение в Discord.

Параметры пути:

  • server (string, required) - UUID сервера
  • webhookId (integer, required) - ID webhook

Заголовки:

Authorization: Bearer YOUR_API_KEY
Accept: application/json

Ответ:

{
  "success": true,
  "data": {
    "message": "Test message sent successfully"
  }
}

GET /api/client/servers/{server}/discord-webhooks/settings

Получить настройки уведомлений Discord.

Параметры пути:

  • server (string, required) - UUID сервера

Заголовки:

Authorization: Bearer YOUR_API_KEY
Accept: application/json

Ответ:

{
  "data": [
    {
      "id": 1,
      "server_id": 123,
      "notification_type": "server_status",
      "is_enabled": true,
      "config": {
        "notify_start": true,
        "notify_stop": true
      },
      "created_at": "2025-12-16T01:00:00+03:00",
      "updated_at": "2025-12-16T01:00:00+03:00"
    }
  ]
}

Типы уведомлений:

  • server_status - Уведомления о старте/остановке сервера
  • online_report - Периодические отчеты об онлайне
  • player_event - События игроков (join, leave, ban, op)
  • custom_trigger - Кастомные триггеры

PATCH /api/client/servers/{server}/discord-webhooks/settings

Обновить настройку уведомлений.

Параметры пути:

  • server (string, required) - UUID сервера

Заголовки:

Authorization: Bearer YOUR_API_KEY
Accept: application/json
Content-Type: application/json

Тело запроса:

{
  "notification_type": "online_report",
  "is_enabled": true,
  "config": {
    "interval_minutes": 10,
    "webhook_id": 1
  }
}

Поля:

  • notification_type (string, required) - Тип уведомления
  • is_enabled (boolean, required) - Включено/выключено
  • config (object, optional) - Конфигурация для типа

Ответ: Объект обновленной настройки


GET /api/client/servers/{server}/discord-webhooks/triggers

Получить все кастомные триггеры.

Параметры пути:

  • server (string, required) - UUID сервера

Заголовки:

Authorization: Bearer YOUR_API_KEY
Accept: application/json

Ответ:

{
  "data": [
    {
      "id": 1,
      "server_id": 123,
      "name": "High Online Alert",
      "description": "Уведомление при большом онлайне",
      "trigger_type": "online_players",
      "condition_operator": ">",
      "threshold_value": 50,
      "duration_seconds": 0,
      "cooldown_minutes": 10,
      "last_triggered_at": null,
      "webhook_id": 1,
      "is_enabled": true,
      "created_at": "2025-12-16T01:00:00+03:00",
      "updated_at": "2025-12-16T01:00:00+03:00"
    }
  ]
}

Типы триггеров:

  • online_players - Количество игроков онлайн
  • tps - TPS сервера (в разработке)
  • cpu_usage - Использование CPU в процентах
  • memory - Использование RAM в процентах
  • disk - Использование диска в процентах

Операторы условий:

  • > - Больше
  • < - Меньше
  • == - Равно
  • >= - Больше или равно
  • <= - Меньше или равно

POST /api/client/servers/{server}/discord-webhooks/triggers

Создать новый триггер.

Параметры пути:

  • server (string, required) - UUID сервера

Заголовки:

Authorization: Bearer YOUR_API_KEY
Accept: application/json
Content-Type: application/json

Тело запроса:

{
  "name": "CPU Alert",
  "description": "Уведомление при высокой нагрузке CPU",
  "trigger_type": "cpu_usage",
  "condition_operator": ">",
  "threshold_value": 80,
  "duration_seconds": 60,
  "cooldown_minutes": 15,
  "webhook_id": 1,
  "is_enabled": true
}

Поля:

  • name (string, required) - Название триггера (макс. 100 символов)
  • description (string, optional) - Описание (макс. 500 символов)
  • trigger_type (string, required) - Тип метрики
  • condition_operator (string, required) - Оператор сравнения
  • threshold_value (integer, required) - Пороговое значение (>=0)
  • duration_seconds (integer, optional) - Длительность условия в секундах (0-600, по умолчанию: 0)
  • cooldown_minutes (integer, required) - Cooldown между срабатываниями (1-1440 минут)
  • webhook_id (integer, required) - ID webhook для отправки
  • is_enabled (boolean, optional) - Включен ли триггер (по умолчанию: true)

Ответ: Объект созданного триггера


PATCH /api/client/servers/{server}/discord-webhooks/triggers/

Обновить триггер.

Параметры пути:

  • server (string, required) - UUID сервера
  • triggerId (integer, required) - ID триггера

Заголовки:

Authorization: Bearer YOUR_API_KEY
Accept: application/json
Content-Type: application/json

Тело запроса: Все поля опциональны, аналогично созданию

Ответ: Объект обновленного триггера


DELETE /api/client/servers/{server}/discord-webhooks/triggers/

Удалить триггер.

Параметры пути:

  • server (string, required) - UUID сервера
  • triggerId (integer, required) - ID триггера

Заголовки:

Authorization: Bearer YOUR_API_KEY
Accept: application/json

Ответ:

HTTP/1.1 204 No Content

Rate Limiting & Caching

Rate Limiting

Авторизованные запросы (с API ключом):

  • Лимит: 300 запросов в час
  • Ключ: Привязан к пользователю + серверу
  • Заголовок: X-RateLimit-Limit, X-RateLimit-Remaining

Публичные webhook запросы:

  • Лимит: 150 запросов в час на токен
  • Ключ: Привязан к webhook токену
  • Превышение: HTTP 429 Too Many Requests

При превышении лимита:

{
  "errors": [
    {
      "code": "TooManyRequestsException",
      "status": "429",
      "detail": "Too many requests. Please try again later."
    }
  ]
}

Caching

Все read-only endpoints кэшируются на 30 секунд:

  • /developer/query - 30 сек
  • /developer/query/players - 30 сек
  • /developer/stats - 30 сек
  • /public/server/{token}/query - 30 сек

История НЕ кэшируется (быстрые запросы к БД)


Примеры кода

JavaScript / TypeScript

// Получить онлайн игроков
const response = await fetch('https://gcp.pterohost.com/api/client/servers/YOUR_SERVER_UUID/developer/query', {
    headers: {
        'Authorization': 'Bearer YOUR_API_KEY',
        'Accept': 'application/json'
    }
});
const data = await response.json();
console.log('Online players:', data.data.online_players);

// Получить историю онлайна за неделю
const history = await fetch('https://gcp.pterohost.com/api/client/servers/YOUR_SERVER_UUID/developer/query/history?period=week', {
    headers: {
        'Authorization': 'Bearer YOUR_API_KEY',
        'Accept': 'application/json'
    }
});
const historyData = await history.json();
console.log('History:', historyData.data);

// Использование Webhook Token (без API ключа)
const publicQuery = await fetch('https://gcp.pterohost.com/api/public/server/YOUR_WEBHOOK_TOKEN/query', {
    headers: {
        'Accept': 'application/json'
    }
});
const publicData = await publicQuery.json();

PHP (cURL)

<?php
// Получить онлайн игроков
$ch = curl_init('https://gcp.pterohost.com/api/client/servers/YOUR_SERVER_UUID/developer/query');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Authorization: Bearer YOUR_API_KEY',
    'Accept: application/json'
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$data = json_decode($response, true);
echo 'Online players: ' . $data['data']['online_players'];

// Получить статистику сервера
$ch = curl_init('https://gcp.pterohost.com/api/client/servers/YOUR_SERVER_UUID/developer/stats');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Authorization: Bearer YOUR_API_KEY',
    'Accept: application/json'
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$stats = json_decode($response, true);

// Использование Webhook Token (без API ключа)
$ch = curl_init('https://gcp.pterohost.com/api/public/server/YOUR_WEBHOOK_TOKEN/query');
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Accept: application/json']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$publicData = json_decode($response, true);
?>

Python (requests)

import requests

# Настройка
headers = {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Accept': 'application/json'
}
server_uuid = 'YOUR_SERVER_UUID'

# Получить онлайн игроков
response = requests.get(
    f'https://gcp.pterohost.com/api/client/servers/{server_uuid}/developer/query',
    headers=headers
)
data = response.json()
print(f"Online players: {data['data']['online_players']}")

# Получить историю онлайна
history_response = requests.get(
    f'https://gcp.pterohost.com/api/client/servers/{server_uuid}/developer/query/history',
    headers=headers,
    params={'period': 'week'}
)
history = history_response.json()

# Использование Webhook Token (без API ключа)
webhook_token = 'YOUR_WEBHOOK_TOKEN'
public_response = requests.get(
    f'https://gcp.pterohost.com/api/public/server/{webhook_token}/query',
    headers={'Accept': 'application/json'}
)
public_data = public_response.json()

cURL (Command Line)

# Получить онлайн игроков (с API ключом)
curl -X GET "https://gcp.pterohost.com/api/client/servers/YOUR_SERVER_UUID/developer/query" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json"

# Получить онлайн БЕЗ токена (10 req/hour по IP)
curl -X GET "https://gcp.pterohost.com/api/public/server-query/YOUR_SERVER_UUID/query" \
  -H "Accept: application/json"

# Получить историю онлайна за неделю
curl -X GET "https://gcp.pterohost.com/api/client/servers/YOUR_SERVER_UUID/developer/query/history?period=week" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json"

# Получить статистику сервера
curl -X GET "https://gcp.pterohost.com/api/client/servers/YOUR_SERVER_UUID/developer/stats" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json"

# Использование Webhook Token (без API ключа)
curl -X GET "https://gcp.pterohost.com/api/public/server/YOUR_WEBHOOK_TOKEN/query" \
  -H "Accept: application/json"

# Создать Discord webhook
curl -X POST "https://gcp.pterohost.com/api/client/servers/YOUR_SERVER_UUID/discord-webhooks" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "webhook_url": "https://discord.com/api/webhooks/123456789/abcdefg",
    "name": "Главный канал"
  }'

# Тестировать Discord webhook
curl -X POST "https://gcp.pterohost.com/api/client/servers/YOUR_SERVER_UUID/discord-webhooks/1/test" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json"

Коды ответов

Успешные ответы

КодОписание
200OK - Запрос выполнен успешно
201Created - Ресурс создан
204No Content - Запрос выполнен, тело ответа пустое

Ошибки клиента

КодОписание
400Bad Request - Некорректные данные запроса
401Unauthorized - Отсутствует или невалидный API ключ
403Forbidden - Нет прав доступа к ресурсу
404Not Found - Ресурс не найден
422Unprocessable Entity - Ошибка валидации
429Too Many Requests - Превышен rate limit

Ошибки сервера

КодОписание
500Internal Server Error - Внутренняя ошибка сервера
503Service Unavailable - Сервис временно недоступен

Формат ошибок

{
  "errors": [
    {
      "code": "ValidationException",
      "status": "422",
      "detail": "The webhook url field is required."
    }
  ]
}

Scheduler Tasks

Автоматические задачи выполняются в фоновом режиме:

Сохранение истории онлайна

  • Частота: каждые 5 минут
  • Действие: Сохранение снимка онлайна в БД
  • Хранение: 30 дней

Периодические отчеты в Discord

  • Частота: каждые 10 минут (настраиваемо)
  • Условие: Включена настройка online_report
  • Формат: Discord embed с онлайном, картой, hostname

Проверка триггеров

  • Частота: каждые 2 минуты
  • Действие: Оценка всех активных триггеров
  • Cooldown: Учитывается cooldown каждого триггера

Очистка старых данных

  • Частота: ежедневно
  • Действие: Удаление записей старше 30 дней
  • Таблицы: server_query_history, discord_webhook_logs

Поддерживаемые игры (Query)

Query API поддерживает автоматическое определение протокола для:

Minecraft (eggs: 1, 2, 3, 4, 5, 17, 55, 56, 62, 63)

  • Minecraft Java Edition
  • Minecraft Bedrock Edition
  • PaperMC, Spigot, Bukkit
  • BungeeCord, Velocity

Source Engine (eggs: 6, 7, 8, 9, 10, 11, 16, 64)

  • Counter-Strike: GO
  • Counter-Strike: Source
  • Garry’s Mod
  • Team Fortress 2
  • Half-Life 2: Deathmatch

Rust (egg: 76)

  • Rust (через RCON)

Другие игры

  • TeamSpeak 3 (egg: 13)
  • GTA V FiveM (egg: 18)
  • ARK Survival Evolved (egg: 19)
  • И другие (через GameQ library)

Безопасность

API Ключи

  • ✅ Храните API ключи в безопасности
  • ✅ Не передавайте ключи третьим лицам
  • ✅ Удаляйте неиспользуемые ключи
  • ✅ Используйте HTTPS для всех запросов

Webhook Токены

  • ✅ Read-only доступ (безопасно для публичного использования)
  • ✅ Можно регенерировать при компрометации
  • ✅ Привязаны к конкретному серверу
  • ✅ Rate limiting предотвращает злоупотребление

Discord Webhooks

  • ✅ Webhook URL маскируется в API ответах
  • ✅ Cooldown предотвращает спам
  • ✅ Логирование всех отправок
  • ✅ Автоматическое отключение при неудачах

FAQ

Как получить UUID сервера?

UUID сервера можно найти:

  1. В панели управления → Консоль сервера → URL: /server/{UUID}
  2. Через API: GET /api/client → получить список серверов

Как работает кэширование?

Query endpoints кэшируются на 30 секунд. Повторные запросы в течение этого времени вернут кэшированные данные без обращения к игровому серверу.

Что делать при превышении rate limit?

Подождите указанное время в заголовке Retry-After или используйте webhook токены для публичного доступа (отдельный лимит).

Как настроить Discord уведомления?

  1. Создайте Discord webhook в настройках канала
  2. Добавьте webhook URL в панели: /account/api → Discord Webhooks
  3. Протестируйте отправку
  4. Настройте триггеры и типы уведомлений

Поддерживается ли мой тип игры?

Проверьте список поддерживаемых egg ID в разделе “Поддерживаемые игры”. Если вашего типа нет - напишите в поддержку.


Поддержка

Техническая поддержка:

Обновления API:

  • История изменений публикуется в Discord
  • Breaking changes анонсируются заранее
  • Версионирование API планируется в будущем

Последнее обновление: 16 декабря 2025 Версия API: 1.0.0