API Documentation

Интегрируйте мощные инструменты мониторинга Хитрой Лисы в ваши приложения и системы. Наш RESTful API предоставляет полный программный доступ ко всем функциям платформы.

Обзор API

API Хитрой Лисы позволяет программно управлять мониторингом ваших сервисов. С его помощью вы можете интегрировать данные о доступности и производительности в ваши системы, автоматизировать процессы и создавать собственные интерфейсы.

Базовый URL

https://api.slyfox.su/v1

Формат данных

Все запросы и ответы используют формат JSON с кодировкой UTF-8.

Версионирование

Версия API указывается в URL. Мы гарантируем обратную совместимость в пределах одной мажорной версии.

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

Все запросы к API должны включать заголовок авторизации с вашим приватным API ключом. Ключ предоставляется только нашим клиентам после заключения договора.

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

1

Войдите в личный кабинет на платформе Хитрой Лисы

2

Перейдите в раздел "Интеграции"

3

Нажмите "Создать API ключ"

4

Укажите название и права доступа

5

Скопируйте сгенерированный ключ

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

Включите ваш API ключ в заголовок Authorization всех запросов:

Authorization: Bearer YOUR_API_KEY

Ограничения запросов

Для обеспечения стабильности сервиса применяются следующие ограничения:

Лимиты

  • 1000 запросов в час для каждого API ключа
  • 100 запросов в минуту для каждого IP адреса
  • При превышении лимитов возвращается код 429

Заголовки ограничений

В каждом ответе API возвращает заголовки с информацией об ограничениях:

X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 999
X-RateLimit-Reset: 1609459200

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

Обработка ошибок

API возвращает стандартные HTTP коды состояния для указания успешности запроса или типа ошибки.

Код Описание
200 Успешный запрос
400 Некорректный запрос - проверьте параметры
401 Неавторизованный доступ - проверьте API ключ
403 Доступ запрещен - недостаточно прав
404 Ресурс не найден
429 Превышены лимиты запросов
500 Внутренняя ошибка сервера
503 Сервис временно недоступен

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

В случае ошибки API возвращает JSON с описанием:

{
  "status": "error",
  "message": "Invalid API key",
  "code": 401
}

Мониторы

Мониторы представляют собой отслеживаемые вами сервисы. Каждый монитор имеет уникальный идентификатор и набор метрик.

Типы мониторов

Тип Описание
HTTP(s) Проверка доступности веб-сайтов и API
Keyword Проверка наличия ключевых слов на странице
Port Проверка доступности TCP/UDP портов
Ping Проверка доступности хоста через ICMP

Получить список мониторов

GET /monitors

Получить список всех мониторов с возможностью фильтрации и пагинации.

Параметры запроса

Параметр Тип Обязательный Описание
page integer Нет Номер страницы (по умолчанию 1)
per_page integer Нет Количество элементов на странице (по умолчанию 10, максимум 100)
status string Нет Фильтр по статусу (online, offline, warning)
group string Нет Фильтр по группе мониторов

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

curl -X GET "https://api.slyfox.su/v1/monitors?page=1&per_page=10" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json"

Пример ответа

{
  "status": "success",
  "data": [
    {
      "id": "m789012",
      "friendly_name": "Основной веб-сервер",
      "url": "https://example.com",
      "type": "HTTP(s)",
      "status": "online",
      "response_time": 124,
      "last_check": "2025-11-04T14:30:22Z",
      "uptime_ratio": 99.98,
      "custom_uptime_ratio": "99.95",
      "average_response_time": 142,
      "monitor_group": "Production",
      "created_at": "2025-01-15T08:30:00Z"
    }
  ],
  "meta": {
    "total": 1,
    "page": 1,
    "per_page": 10,
    "total_pages": 1
  }
}

Создать монитор

POST /monitors

Создать новый монитор для отслеживания сервиса.

Параметры запроса

Параметр Тип Обязательный Описание
friendly_name string Да Название монитора
url string Да URL для мониторинга
type string Да Тип монитора (HTTP(s), Keyword, Port, Ping)
interval integer Нет Интервал проверки в секундах (по умолчанию 300)
monitor_group string Нет Группа мониторов

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

curl -X POST "https://api.slyfox.su/v1/monitors" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "friendly_name": "Мой веб-сайт",
    "url": "https://mywebsite.com",
    "type": "HTTP(s)",
    "interval": 300
  }'

Пример ответа

{
  "status": "success",
  "data": {
    "id": "m987654",
    "friendly_name": "Мой веб-сайт",
    "url": "https://mywebsite.com",
    "type": "HTTP(s)",
    "status": "pending",
    "response_time": 0,
    "last_check": null,
    "uptime_ratio": 0,
    "custom_uptime_ratio": "0",
    "average_response_time": 0,
    "monitor_group": null,
    "created_at": "2025-11-04T15:30:00Z"
  }
}

Обновить монитор

PUT /monitors/{id}

Обновить настройки существующего монитора.

Параметры запроса

Параметр Тип Обязательный Описание
friendly_name string Нет Название монитора
url string Нет URL для мониторинга
interval integer Нет Интервал проверки в секундах
monitor_group string Нет Группа мониторов

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

curl -X PUT "https://api.slyfox.su/v1/monitors/m987654" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "friendly_name": "Обновленный веб-сайт",
    "interval": 600
  }'

Удалить монитор

DELETE /monitors/{id}

Удалить монитор и все связанные с ним данные.

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

curl -X DELETE "https://api.slyfox.su/v1/monitors/m987654" \
  -H "Authorization: Bearer YOUR_API_KEY"

Приостановить мониторинг

POST /monitors/{id}/pause

Временно приостановить мониторинг для указанного монитора.

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

curl -X POST "https://api.slyfox.su/v1/monitors/m987654/pause" \
  -H "Authorization: Bearer YOUR_API_KEY"

Возобновить мониторинг

POST /monitors/{id}/resume

Возобновить мониторинг для приостановленного монитора.

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

curl -X POST "https://api.slyfox.su/v1/monitors/m987654/resume" \
  -H "Authorization: Bearer YOUR_API_KEY"

Webhooks

Webhooks позволяют получать уведомления о событиях в реальном времени.

Настройка webhook

1

Перейдите в раздел "Интеграции" в личном кабинете

2

Выберите "Webhooks"

3

Укажите URL для получения уведомлений

4

Выберите события для уведомлений

5

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

Формат уведомлений

Уведомления отправляются в формате JSON POST запросом:

{
  "event": "monitor_status_change",
  "timestamp": "2025-11-04T14:30:22Z",
  "data": {
    "monitor_id": "m789012",
    "monitor_name": "Основной веб-сервер",
    "previous_status": "online",
    "current_status": "offline",
    "response_time": 0,
    "error_message": "Connection timeout"
  }
}

Практические примеры использования API

Хотя официальные SDK находятся в разработке, вы можете эффективно использовать наше REST API с помощью HTTP-клиентов в любом языке программирования. Ниже приведены практические примеры для наиболее распространенных сценариев.

Получение статуса всех мониторов

Часто используемый запрос для получения текущего состояния всех отслеживаемых сервисов:

// JavaScript (fetch API)
const response = await fetch('https://api.slyfox.su/v1/monitors', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json'
  }
});

const data = await response.json();
console.log('Статус мониторов:', data);
# Python (requests library)
import requests

headers = {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json'
}

response = requests.get('https://api.slyfox.su/v1/monitors', headers=headers)
data = response.json()
print(f'Статус мониторов: {data}')

Создание нового монитора с обработкой ошибок

Пример создания монитора с полной обработкой ошибок и валидацией:

// JavaScript с обработкой ошибок
async function createMonitor(monitorData) {
  try {
    const response = await fetch('https://api.slyfox.su/v1/monitors', {
      method: 'POST',
      headers: {
        'Authorization': 'Bearer YOUR_API_KEY',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify(monitorData)
    });
    
    if (!response.ok) {
      const error = await response.json();
      throw new Error(`Ошибка API: ${error.message}`);
    }
    
    const result = await response.json();
    console.log('Монитор создан:', result.data);
    return result.data;
  } catch (error) {
    console.error('Ошибка при создании монитора:', error.message);
    throw error;
  }
}

// Использование
const newMonitor = {
  friendly_name: 'Мой веб-сервис',
  url: 'https://mywebsite.com',
  type: 'HTTP(s)',
  interval: 300
};

createMonitor(newMonitor);

Мониторинг с автоматическим восстановлением

Пример реализации автоматического перезапуска упавших сервисов:

# Python - автоматическое восстановление сервисов
import requests
import time
import subprocess

class ServiceMonitor:
    def __init__(self, api_key):
        self.api_key = api_key
        self.headers = {
            'Authorization': f'Bearer {api_key}',
            'Content-Type': 'application/json'
        }
    
    def get_monitor_status(self, monitor_id):
        """Получить статус конкретного монитора"""
        url = f'https://api.slyfox.su/v1/monitors/{monitor_id}'
        response = requests.get(url, headers=self.headers)
        return response.json()
    
    def restart_service(self, service_name):
        """Перезапустить сервис (пример для Linux)"""
        try:
            result = subprocess.run(['systemctl', 'restart', service_name], 
                                  capture_output=True, text=True)
            return result.returncode == 0
        except Exception as e:
            print(f'Ошибка перезапуска: {e}')
            return False
    
    def monitor_and_recover(self, monitor_id, service_name, check_interval=60):
        """Мониторить сервис и автоматически перезапускать при падении"""
        print(f'Начинаем мониторинг сервиса {service_name}')
        
        while True:
            try:
                status = self.get_monitor_status(monitor_id)
                
                if status['data']['status'] == 'offline':
                    print(f'Сервис {service_name} упал. Пытаемся перезапустить...')
                    if self.restart_service(service_name):
                        print(f'Сервис {service_name} успешно перезапущен')
                    else:
                        print(f'Ошибка перезапуска сервиса {service_name}')
                
                time.sleep(check_interval)
                
            except Exception as e:
                print(f'Ошибка мониторинга: {e}')
                time.sleep(check_interval)

# Использование
# monitor = ServiceMonitor('YOUR_API_KEY')
# monitor.monitor_and_recover('monitor_id_123', 'my-web-service')

Аналитика и отчеты

Пример сбора аналитики по доступности сервисов за последнюю неделю:

// JavaScript - анализ доступности сервисов
async function generateAvailabilityReport() {
  try {
    const response = await fetch('https://api.slyfox.su/v1/monitors', {
      method: 'GET',
      headers: {
        'Authorization': 'Bearer YOUR_API_KEY',
        'Content-Type': 'application/json'
      }
    });
    
    const data = await response.json();
    const monitors = data.data;
    
    console.log('=== Отчет о доступности сервисов ===');
    
    monitors.forEach(monitor => {
      const uptime = monitor.custom_uptime_ratio || monitor.uptime_ratio;
      const statusEmoji = monitor.status === 'online' ? '✅' : '❌';
      
      console.log(`${statusEmoji} ${monitor.friendly_name}`);
      console.log(`  URL: ${monitor.url}`);
      console.log(`  Доступность: ${uptime}%`);
      console.log(`  Среднее время отклика: ${monitor.average_response_time}ms`);
      console.log(`  Последняя проверка: ${monitor.last_check}`);
      console.log('---');
    });
    
    // Расчет общей статистики
    const totalMonitors = monitors.length;
    const onlineMonitors = monitors.filter(m => m.status === 'online').length;
    const averageUptime = monitors.reduce((sum, m) => sum + parseFloat(m.uptime_ratio), 0) / totalMonitors;
    
    console.log(`\nОбщая статистика:`);
    console.log(`  Всего сервисов: ${totalMonitors}`);
    console.log(`  Работают: ${onlineMonitors}/${totalMonitors}`);
    console.log(`  Средняя доступность: ${averageUptime.toFixed(2)}%`);
    
  } catch (error) {
    console.error('Ошибка генерации отчета:', error);
  }
}

// Запуск отчета
generateAvailabilityReport();

Интеграция с системами оповещения

Пример интеграции с Telegram для отправки уведомлений:

# Python - интеграция с Telegram
import requests
import json

class TelegramNotifier:
    def __init__(self, bot_token, chat_id):
        self.bot_token = bot_token
        self.chat_id = chat_id
        self.api_url = f'https://api.telegram.org/bot{bot_token}'
    
    def send_message(self, message):
        """Отправить сообщение в Telegram"""
        url = f'{self.api_url}/sendMessage'
        data = {
            'chat_id': self.chat_id,
            'text': message,
            'parse_mode': 'Markdown'
        }
        
        try:
            response = requests.post(url, data=data)
            return response.json().get('ok', False)
        except Exception as e:
            print(f'Ошибка отправки в Telegram: {e}')
            return False

def monitor_status_changes(api_key, bot_token, chat_id):
    """Мониторить изменения статуса и отправлять уведомления"""
    notifier = TelegramNotifier(bot_token, chat_id)
    
    headers = {
        'Authorization': f'Bearer {api_key}',
        'Content-Type': 'application/json'
    }
    
    # Получаем начальное состояние
    response = requests.get('https://api.slyfox.su/v1/monitors', headers=headers)
    previous_status = {m['id']: m['status'] for m in response.json()['data']}
    
    print('Начинаем мониторинг изменений статуса...')
    
    while True:
        try:
            # Получаем текущее состояние
            response = requests.get('https://api.slyfox.su/v1/monitors', headers=headers)
            current_status = {m['id']: m['status'] for m in response.json()['data']}
            
            # Проверяем изменения
            for monitor_id, status in current_status.items():
                if monitor_id in previous_status and previous_status[monitor_id] != status:
                    # Найдено изменение статуса
                    monitor_info = next(m for m in response.json()['data'] if m['id'] == monitor_id)
                    message = f"""
🔔 *Изменение статуса монитора*

📌 Название: {monitor_info['friendly_name']}
🌐 URL: {monitor_info['url']}
📊 Новый статус: {'✅ Онлайн' if status == 'online' else '❌ Офлайн'}
⏰ Время: {monitor_info['last_check']}
                    """
                    
                    if notifier.send_message(message):
                        print(f'Уведомление отправлено для {monitor_info["friendly_name"]}')
                    else:
                        print(f'Ошибка отправки уведомления для {monitor_info["friendly_name"]}')
            
            previous_status = current_status.copy()
            time.sleep(300)  # Проверяем каждые 5 минут
            
        except Exception as e:
            print(f'Ошибка мониторинга: {e}')
            time.sleep(300)

# Использование (раскомментируйте для запуска)
# monitor_status_changes('YOUR_API_KEY', 'YOUR_BOT_TOKEN', 'YOUR_CHAT_ID')

Советы по использованию API

  • Всегда используйте обработку ошибок в production коде
  • Соблюдайте rate limiting (1000 запросов в час)
  • Храните API ключи в переменных окружения
  • Используйте HTTPS для всех запросов
  • Кэшируйте результаты для уменьшения нагрузки