API для мониторинга сайтов: интеграция в ваши процессы
REST API для мониторинга сайтов: аутентификация, endpoints, примеры на curl, Python и JavaScript. Интеграция мониторинга в CRM, Slack, дашборды и автоматизированные процессы.
API для мониторинга сайтов — это программный интерфейс, позволяющий интегрировать функции ToNews Radar в ваши собственные системы, приложения и бизнес-процессы. REST API предоставляет полный доступ к управлению мониторами, получению истории изменений, запуску проверок и удалению мониторов через стандартные HTTP-запросы. Для команд разработки в Москве, Санкт-Петербурге, Новосибирске и по всей России API открывает возможности, недоступные через веб-интерфейс: автоматизация рутинных задач, интеграция с корпоративными системами и создание кастомных дашбордов.
Аутентификация
Все запросы к API требуют аутентификации через API-ключ. Ключ передаётся в HTTP-заголовке X-Api-Key с каждым запросом.
Получить API-ключ можно в личном кабинете ToNews Radar: перейдите в раздел «Настройки» и нажмите «Сгенерировать API-ключ». Ключ отображается один раз — сохраните его в безопасном месте.
Базовый URL
Все запросы к API выполняются по базовому URL:
https://tonews.ru/api/v1
Доступные endpoints
| Метод | Endpoint | Описание |
|---|---|---|
| GET | /monitors |
Список всех мониторов |
| POST | /monitors |
Создать новый монитор |
| GET | /monitors/{id} |
Получить информацию о мониторе |
| GET | /monitors/{id}/changes |
Получить историю изменений |
| POST | /monitors/{id}/check |
Запустить проверку вручную |
| DELETE | /monitors/{id} |
Удалить монитор |
Rate Limits (ограничения частоты запросов)
API ограничивает количество запросов для обеспечения стабильности сервиса:
- 60 запросов в минуту на один API-ключ
- При превышении лимита API возвращает ответ с HTTP-кодом
429 Too Many Requests - Заголовки ответа содержат информацию об оставшемся лимите:
X-RateLimit-RemainingиX-RateLimit-Reset
Рекомендуем реализовать экспоненциальный backoff в вашем клиенте: при получении 429 статуса подождите 1 секунду, затем 2, затем 4 и так далее.
Примеры запросов
curl: получение списка мониторов
curl -X GET https://tonews.ru/api/v1/monitors \
-H "X-Api-Key: your_api_key_here" \
-H "Content-Type: application/json"
curl: создание нового монитора
curl -X POST https://tonews.ru/api/v1/monitors \
-H "X-Api-Key: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/pricing",
"name": "Competitor Pricing Page",
"interval": "6h",
"css_selector": ".pricing-table",
"js_rendering": false,
"ai_prompt": "Track price changes. Report: plan name, old price, new price, percentage change.",
"notify_email": true,
"notify_telegram": true
}'
curl: получение истории изменений
curl -X GET https://tonews.ru/api/v1/monitors/123/changes \
-H "X-Api-Key: your_api_key_here" \
-H "Content-Type: application/json"
curl: запуск проверки вручную
curl -X POST https://tonews.ru/api/v1/monitors/123/check \
-H "X-Api-Key: your_api_key_here" \
-H "Content-Type: application/json"
curl: удаление монитора
curl -X DELETE https://tonews.ru/api/v1/monitors/123 \
-H "X-Api-Key: your_api_key_here" \
-H "Content-Type: application/json"
Пример на Python
import requests
API_KEY = "your_api_key_here"
BASE_URL = "https://tonews.ru/api/v1"
headers = {
"X-Api-Key": API_KEY,
"Content-Type": "application/json"
}
# Get all monitors
response = requests.get(f"{BASE_URL}/monitors", headers=headers)
monitors = response.json()
for monitor in monitors["data"]:
print(f"Monitor: {monitor['name']} - URL: {monitor['url']}")
# Create a new monitor
new_monitor = {
"url": "https://competitor.ru/prices",
"name": "Competitor prices",
"interval": "3h",
"css_selector": ".price-block",
"js_rendering": False,
"ai_prompt": "Report only price changes with old and new values",
"notify_email": True,
"notify_telegram": True
}
response = requests.post(
f"{BASE_URL}/monitors",
headers=headers,
json=new_monitor
)
print(f"Created monitor ID: {response.json()['data']['id']}")
# Get changes for a monitor
response = requests.get(
f"{BASE_URL}/monitors/123/changes",
headers=headers
)
changes = response.json()
for change in changes["data"]:
print(f"Date: {change['checked_at']}")
print(f"Change: {change['change_percentage']}%")
if change.get("ai_summary"):
print(f"AI Summary: {change['ai_summary']}")
print("---")
Пример на JavaScript (Node.js)
const API_KEY = "your_api_key_here";
const BASE_URL = "https://tonews.ru/api/v1";
const headers = {
"X-Api-Key": API_KEY,
"Content-Type": "application/json"
};
// Get all monitors
async function getMonitors() {
const response = await fetch(`${BASE_URL}/monitors`, { headers });
const data = await response.json();
return data.data;
}
// Create a new monitor
async function createMonitor(monitorData) {
const response = await fetch(`${BASE_URL}/monitors`, {
method: "POST",
headers,
body: JSON.stringify(monitorData)
});
return await response.json();
}
// Get changes
async function getChanges(monitorId) {
const response = await fetch(
`${BASE_URL}/monitors/${monitorId}/changes`,
{ headers }
);
return await response.json();
}
// Trigger manual check
async function triggerCheck(monitorId) {
const response = await fetch(
`${BASE_URL}/monitors/${monitorId}/check`,
{ method: "POST", headers }
);
return await response.json();
}
// Usage example
(async () => {
const monitors = await getMonitors();
console.log(`Total monitors: ${monitors.length}`);
for (const monitor of monitors) {
const changes = await getChanges(monitor.id);
console.log(`${monitor.name}: ${changes.data.length} changes detected`);
}
})();
Идеи для интеграций
Slack-бот для командных уведомлений
Используйте API для создания Slack-бота, который будет публиковать уведомления о важных изменениях в нужный канал. Это особенно удобно для команд в Москве, которые используют Slack как основной рабочий мессенджер. Бот может фильтровать изменения по проценту и отправлять в Slack только значимые обновления.
Корпоративный дашборд
Визуализируйте данные мониторинга на корпоративном дашборде: график количества изменений по дням, таблица с последними обнаруженными обновлениями, статусы мониторов. Подключите API к Grafana, Metabase или кастомному фронтенду.
CRM-интеграция
Автоматически создавайте задачи в CRM при обнаружении изменений на сайте клиента или конкурента. Например, если конкурент снизил цены — CRM создаст задачу менеджеру на звонок клиенту с контрпредложением.
Автоматизированная отчётность
Генерируйте еженедельные отчёты об изменениях на всех отслеживаемых сайтах. Скрипт на Python может собирать данные через API, формировать PDF-отчёт и отправлять руководителю. Для аналитических отделов в Екатеринбурге, Казани и других городах это экономит часы ручной работы.
Webhook-обработка
Настройте вашу систему для приёма webhook-вызовов от ToNews Radar. При обнаружении изменений сервис может отправить POST-запрос на ваш endpoint с полными данными об изменении. Это позволяет строить реактивные системы, которые мгновенно обрабатывают события.
Доступность API
REST API доступен на тарифе «Профессиональный». Этот тариф предназначен для команд и компаний, которым нужна максимальная гибкость интеграции. Если вы работаете на другом тарифе и вам нужен API, перейдите на «Профессиональный» в настройках аккаунта.
Часто задаваемые вопросы
Как получить API-ключ для мониторинга сайтов?
Перейдите в личный кабинет ToNews Radar, откройте раздел «Настройки» и нажмите «Сгенерировать API-ключ». Ключ будет показан один раз — скопируйте его и сохраните в безопасном месте (переменные окружения, секретное хранилище). API-ключ доступен только на тарифе «Профессиональный».
Какие ограничения на количество запросов к API?
Лимит составляет 60 запросов в минуту на один API-ключ. При превышении лимита API возвращает HTTP-код 429 с заголовками X-RateLimit-Remaining и X-RateLimit-Reset. Реализуйте экспоненциальный backoff в вашем клиенте для корректной обработки лимитов.
Можно ли создавать мониторы через API?
Да, endpoint POST /monitors позволяет создавать мониторы программно. Вы можете указать URL, интервал проверки, CSS-селектор, AI-промт и каналы уведомлений. Это удобно для массового создания мониторов — например, для отслеживания сотен страниц конкурентов.
В каком формате API возвращает данные?
API возвращает данные в формате JSON. Каждый ответ содержит поле data с запрошенными данными и поле meta с метаинформацией (пагинация, общее количество записей). Ошибки возвращаются с соответствующим HTTP-кодом и полем error с описанием проблемы.
Поддерживает ли API пагинацию?
Да, endpoints, возвращающие списки (мониторы, изменения), поддерживают пагинацию через параметры page и per_page. По умолчанию возвращается 20 записей на страницу. Максимальное значение per_page — 100.
Можно ли запустить проверку монитора через API?
Да, endpoint POST /monitors/{id}/check запускает внеплановую проверку указанного монитора. Проверка выполняется асинхронно — API возвращает статус 202 (Accepted), а результат будет доступен через endpoint изменений после завершения проверки. Лимит: не более 10 ручных проверок в час на один монитор.
Как интегрировать API мониторинга со Slack?
Создайте Slack App с Incoming Webhook, затем напишите скрипт (Python или Node.js), который периодически запрашивает изменения через API ToNews Radar и отправляет их в Slack через webhook. Альтернативный вариант — настройте webhook в ToNews Radar, который будет отправлять данные напрямую на ваш endpoint, а тот перенаправит их в Slack.
Попробуйте ToNews Radar бесплатно
3 монитора бесплатно. Уведомления в Telegram и Email. AI-анализ изменений.
Начать бесплатно