Перейти к основному содержимому

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

Узнайте, как получить доступ к API ServerCon и правильно использовать ключи аутентификации.

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

Для использования большинства эндпоинтов API ServerCon вам потребуется API ключ.

📝 Как получить ключ

  1. Зарегистрируйтесь на платформе ServerCon
  2. Войдите в личный кабинет
  3. Перейдите в раздел "API" в настройках профиля
  4. Создайте новый API ключ с необходимыми разрешениями
  5. Скопируйте ключ - он больше не будет показан в интерфейсе

🎯 Типы ключей

Тип ключаОписаниеЛимиты (час/день/месяц)ЦенаДоступные эндпоинты
FreeБесплатная для тестирования50 / 500 / 10,000$0.00Серверы, игры, базовая аналитика
BasicДля малого бизнеса200 / 2,000 / 50,000$9.99+ Расширенная статистика
PremiumАктивное использование500 / 5,000 / 150,000$29.99+ История, графики, детальная аналитика
ProfessionalКрупные проекты1,000 / 10,000 / 300,000$79.99+ Массовые операции, экспорт данных
EnterpriseКорпоративные решения5,000 / 50,000 / 1,000,000$299.99+ Приоритетная поддержка, кастомные лимиты

🆓 Тестовый ключ

Для разработки и тестирования вы можете использовать наш тестовый ключ:

test_key_12345
Ограничения тестового ключа

Тестовый ключ имеет ограниченные возможности и предназначен только для разработки. Для продакшена необходимо получить полноценный API ключ.

🔑 Использование ключей

🎫 Bearer Token аутентификация

Все запросы к API должны содержать заголовок Authorization с Bearer токеном:

Authorization: Bearer ваш_api_ключ_здесь

🧪 Примеры запросов

🔧 Интерактивный API Тестер

Попробуйте наши API эндпоинты прямо здесь

⚠️ Примечание: Используется прокси для обхода CORS. Если запросы не работают, проверьте подключение к интернету.
Тестовый ключ

🔥 Популярные эндпоинты

⚡ Лимиты и ограничения

📊 Лимиты запросов

Тип ключаЗапросов в часЗапросов в деньЗапросов в месяц
Free5050010,000
Basic2002,00050,000
Premium5005,000150,000
Professional1,00010,000300,000
Enterprise5,00050,0001,000,000

⚠️ Обработка превышения лимитов

При превышении лимитов API вернет ошибку 429 Too Many Requests:

{
"success": false,
"error": {
"code": 429,
"message": "Превышен лимит запросов",
"details": "Лимит: 60 запросов в минуту. Попробуйте через 45 секунд.",
"retry_after": 45
}
}

📝 Примеры ответов с ошибками (API v3.2)

401 Unauthorized

{
"success": false,
"error": {
"code": "UNAUTHORIZED",
"message": "Отсутствует или неверный API ключ",
"status_code": 401,
"details": {
"hint": "Добавьте заголовок: Authorization: Bearer YOUR_API_KEY",
"documentation": "/api/v1/docs"
}
},
"timestamp": 1640995200.0
}

403 Forbidden

{
"success": false,
"error": {
"code": "INSUFFICIENT_PERMISSIONS",
"message": "Недостаточно прав для операции",
"status_code": 403,
"details": {
"hint": "Обновите тип API ключа или обратитесь к администратору",
"documentation": "/api/v1/docs"
}
},
"timestamp": 1640995200.0
}

404 Not Found

{
"success": false,
"error": {
"code": "SERVER_NOT_FOUND",
"message": "Сервер не найден (ID: 99999)",
"status_code": 404
},
"timestamp": 1640995200.0
}

422 Unprocessable Entity

{
"success": false,
"error": {
"code": "VALIDATION_FAILED",
"message": "Ошибка валидации данных",
"status_code": 422,
"details": {
"field_errors": {
"server_id": "Должно быть положительным числом",
"name": "Обязательное поле"
}
}
},
"timestamp": 1640995200.0
}

429 Too Many Requests (обновленный формат)

{
"success": false,
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Превышен лимит запросов. Дождитесь сброса лимита",
"status_code": 429,
"details": {
"hint": "Дождитесь сброса лимита или обновите подписку",
"retry_after": "3600",
"documentation": "/api/v1/docs"
}
},
"timestamp": 1640995200.0
}

500 Internal Server Error

{
"success": false,
"error": {
"code": "DATABASE_ERROR",
"message": "Внутренняя ошибка сервера",
"status_code": 500,
"details": {
"hint": "Попробуйте позже или обратитесь в поддержку",
"documentation": "/api/v1/docs"
}
},
"timestamp": 1640995200.0
}

📊 Формат ответов API v3.2

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

{
"success": true,
"message": "Операция выполнена успешно",
"data": {
"servers": [...],
"total": 150,
"page": 1,
"per_page": 20
},
"timestamp": 1640995200.0
}

❌ Ответ с ошибкой

{
"success": false,
"error": {
"code": "UNAUTHORIZED",
"message": "Отсутствует или неверный API ключ",
"status_code": 401,
"details": {
"hint": "Добавьте заголовок: Authorization: Bearer YOUR_API_KEY",
"documentation": "/api/v1/docs"
}
},
"timestamp": 1640995200.0
}

🔄 Структура ответа

  • success - булево значение, указывающее на успех операции
  • message - краткое описание результата (только для успешных ответов)
  • data - основные данные ответа (только для успешных ответов)
  • error - объект с информацией об ошибке (только для ошибок)
  • timestamp - время ответа в Unix timestamp

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

🔒 Рекомендации по безопасности

  1. Не раскрывайте API ключи

    • Никогда не добавляйте ключи в публичные репозитории
    • Используйте переменные окружения в продакшене
    • Регулярно обновляйте ключи
  2. Ограничивайте разрешения

    • Создавайте ключи только с необходимыми правами
    • Используйте разные ключи для разных приложений
    • Отзывайте неиспользуемые ключи
  3. Мониторинг использования

    • Регулярно проверяйте статистику использования
    • Настройте уведомления о подозрительной активности
    • Отслеживайте IP адреса запросов

🌍 Переменные окружения

# .env файл
SERVERCON_API_KEY=ваш_api_ключ_здесь
SERVERCON_API_URL=http://138.124.109.53:5000
// Использование в коде
const apiKey = process.env.SERVERCON_API_KEY;
const apiUrl = process.env.SERVERCON_API_URL;

const response = await fetch(`${apiUrl}/api/v1/servers`, {
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json'
}
});

❌ Коды ошибок аутентификации

КодОшибкаОписаниеРешение
401UnauthorizedОтсутствует или неверный API ключПроверьте заголовок Authorization
403ForbiddenНедостаточно прав для операцииОбновите тип API ключа
429Too Many RequestsПревышен лимит запросовДождитесь сброса лимита

📋 HTTP статус-коды API v3.2

КодНазваниеОписаниеПримеры использования
200OKЗапрос выполнен успешноПолучение списка серверов, статистики
201CreatedРесурс создан успешноСоздание нового API ключа
400Bad RequestНекорректный запросОтсутствуют обязательные параметры
401UnauthorizedНеверный API ключОтсутствует авторизация
403ForbiddenНедостаточно правОбычный ключ для админских операций
404Not FoundРесурс не найденНесуществующий сервер или игра
422Unprocessable EntityОшибка валидацииНекорректные данные в запросе
429Too Many RequestsПревышен лимитСлишком много запросов
500Internal Server ErrorВнутренняя ошибкаПроблемы с базой данных

🔍 Коды ошибок API

Код ошибкиHTTP статусОписаниеРешение
UNAUTHORIZED401Отсутствует или неверный API ключПроверьте заголовок Authorization
INSUFFICIENT_PERMISSIONS403Недостаточно прав для операцииОбновите тип API ключа
RESOURCE_NOT_FOUND404Ресурс не найденПроверьте правильность ID
VALIDATION_FAILED422Ошибка валидации данныхПроверьте формат данных
RATE_LIMIT_EXCEEDED429Превышен лимит запросовДождитесь сброса лимита
IP_BLOCKED403IP адрес заблокированОбратитесь в поддержку
DATABASE_ERROR500Ошибка базы данныхПопробуйте позже

🔗 Примеры интеграции

🟨 JavaScript/Node.js

class ServerConAPI {
constructor(apiKey, baseUrl = 'http://138.124.109.53:5000') {
this.apiKey = apiKey;
this.baseUrl = baseUrl;
}

async request(endpoint, options = {}) {
const url = `${this.baseUrl}${endpoint}`;
const headers = {
'Authorization': `Bearer ${this.apiKey}`,
'Content-Type': 'application/json',
...options.headers
};

try {
const response = await fetch(url, {
...options,
headers
});

if (!response.ok) {
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
}

return await response.json();
} catch (error) {
console.error('API Error:', error);
throw error;
}
}

// Получить все серверы
async getServers(params = {}) {
const query = new URLSearchParams(params).toString();
return this.request(`/api/v1/servers${query ? '?' + query : ''}`);
}

// Получить сервер по ID
async getServer(serverId) {
return this.request(`/api/v1/servers/${serverId}`);
}
}

// Использование
const api = new ServerConAPI(process.env.SERVERCON_API_KEY);

async function example() {
try {
const servers = await api.getServers({ game_id: 30, limit: 10 });
console.log('Minecraft серверы:', servers.data);
} catch (error) {
console.error('Ошибка получения серверов:', error);
}
}

🐍 Python

import requests
import os
from typing import Dict, Any, Optional

class ServerConAPI:
def __init__(self, api_key: str, base_url: str = "http://138.124.109.53:5000"):
self.api_key = api_key
self.base_url = base_url
self.session = requests.Session()
self.session.headers.update({
'Authorization': f'Bearer {api_key}',
'Content-Type': 'application/json'
})

def request(self, endpoint: str, method: str = 'GET', **kwargs) -> Dict[Any, Any]:
url = f"{self.base_url}{endpoint}"

try:
response = self.session.request(method, url, **kwargs)
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
print(f"API Error: {e}")
raise

def get_servers(self, **params) -> Dict[Any, Any]:
return self.request('/api/v1/servers', params=params)

def get_server(self, server_id: int) -> Dict[Any, Any]:
return self.request(f'/api/v1/servers/{server_id}')

# Использование
api = ServerConAPI(os.getenv('SERVERCON_API_KEY'))

try:
servers = api.get_servers(game_id=30, limit=10)
print("Minecraft серверы:", servers['data'])
except Exception as e:
print(f"Ошибка: {e}")

💻 cURL

# Получить статистику API ключа
curl -H "Authorization: Bearer ваш_api_ключ" \
http://138.124.109.53:5000/api/v1/stats

# Получить серверы Minecraft
curl -H "Authorization: Bearer ваш_api_ключ" \
"http://138.124.109.53:5000/api/v1/servers?game_id=30&limit=10"

# Получить информацию о конкретном сервере
curl -H "Authorization: Bearer ваш_api_ключ" \
http://138.124.109.53:5000/api/v1/servers/12345

🐛 Отладка

✅ Проверка валидности ключа

Если у вас возникают проблемы с аутентификацией, используйте эндпоинт /api/v1/stats для проверки вашего ключа:

async function checkApiKey(apiKey) {
try {
const response = await fetch('http://138.124.109.53:5000/api/v1/stats', {
headers: { 'Authorization': `Bearer ${apiKey}` }
});

if (response.ok) {
const data = await response.json();
console.log('API ключ валиден:', data.data.api_key_info);
return true;
} else {
console.error('Невалидный API ключ:', response.status);
return false;
}
} catch (error) {
console.error('Ошибка проверки ключа:', error);
return false;
}
}

🚀 Быстрый старт

1️⃣ Получите API ключ

Используйте тестовый ключ test_key_12345 или получите свой в личном кабинете.

2️⃣ Сделайте первый запрос

curl -H "Authorization: Bearer test_key_12345" \
http://138.124.109.53:5000/api/v1/servers?limit=5

3️⃣ Изучите ответ

{
"success": true,
"data": [
{
"id": 12345,
"name": "Мой сервер",
"game_id": 30,
"game_name": "Minecraft",
"players": {
"online": 45,
"max": 100
},
"status": "online"
}
]
}

📚 Дополнительные ресурсы

🆘 Поддержка

Если у вас возникли проблемы с аутентификацией:

  1. Проверьте правильность API ключа
  2. Убедитесь в корректности заголовка Authorization
  3. Проверьте лимиты запросов
  4. Обратитесь в поддержку через личный кабинет
Совет

Всегда используйте переменные окружения для хранения API ключей в продакшене!