API Documentation
Интегрируйте мощные инструменты мониторинга Хитрой Лисы в ваши приложения и системы. Наш RESTful API предоставляет полный программный доступ ко всем функциям платформы.
Обзор API
API Хитрой Лисы позволяет программно управлять мониторингом ваших сервисов. С его помощью вы можете интегрировать данные о доступности и производительности в ваши системы, автоматизировать процессы и создавать собственные интерфейсы.
Базовый URL
https://api.slyfox.su/v1
Формат данных
Все запросы и ответы используют формат JSON с кодировкой UTF-8.
Версионирование
Версия API указывается в URL. Мы гарантируем обратную совместимость в пределах одной мажорной версии.
Аутентификация
Все запросы к API должны включать заголовок авторизации с вашим приватным API ключом. Ключ предоставляется только нашим клиентам после заключения договора.
Получение API ключа
Войдите в личный кабинет на платформе Хитрой Лисы
Перейдите в раздел "Интеграции"
Нажмите "Создать API ключ"
Укажите название и права доступа
Скопируйте сгенерированный ключ
Использование ключа
Включите ваш 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 |
Получить список мониторов
Получить список всех мониторов с возможностью фильтрации и пагинации.
Параметры запроса
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| 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
}
}
Создать монитор
Создать новый монитор для отслеживания сервиса.
Параметры запроса
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| 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"
}
}
Обновить монитор
Обновить настройки существующего монитора.
Параметры запроса
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| 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
}'
Удалить монитор
Удалить монитор и все связанные с ним данные.
Пример запроса
curl -X DELETE "https://api.slyfox.su/v1/monitors/m987654" \
-H "Authorization: Bearer YOUR_API_KEY"
Приостановить мониторинг
Временно приостановить мониторинг для указанного монитора.
Пример запроса
curl -X POST "https://api.slyfox.su/v1/monitors/m987654/pause" \
-H "Authorization: Bearer YOUR_API_KEY"
Возобновить мониторинг
Возобновить мониторинг для приостановленного монитора.
Пример запроса
curl -X POST "https://api.slyfox.su/v1/monitors/m987654/resume" \
-H "Authorization: Bearer YOUR_API_KEY"
Webhooks
Webhooks позволяют получать уведомления о событиях в реальном времени.
Настройка webhook
Перейдите в раздел "Интеграции" в личном кабинете
Выберите "Webhooks"
Укажите URL для получения уведомлений
Выберите события для уведомлений
Сохраните настройки
Формат уведомлений
Уведомления отправляются в формате 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 для всех запросов
- Кэшируйте результаты для уменьшения нагрузки