REST API и MCP
Подробный справочник методов, параметров, прав доступа, MCP tools и примеров запросов.
Что можно автоматизировать
REST API подходит для интеграций, отчетов, внутренних панелей и CI/CD. MCP нужен для AI-агентов, которые должны читать состояние проекта, разбирать инциденты и выполнять действия только после явного подтверждения.
REST API
Классический JSON API: мониторы, проверки, инциденты, статус-страницы и плановые работы.
MCP
JSON-RPC endpoint для AI-клиентов с описанными инструментами, режимом только чтения и защитой действий, которые меняют проект. Доступен на тарифах Pro и Team.
Авторизация
API-ключи и MCP-токены создаются в личном кабинете в разделе API и MCP. Полный токен показывается один раз сразу после создания.
Authorization: Bearer upv_api_xxx Content-Type: application/json
| Токен | Где используется | Права |
|---|---|---|
upv_api_... | REST API | read или write |
upv_mcp_... | MCP endpoint | read или write |
Передавайте токены только через заголовок Authorization. Не кладите токены в URL, query string, публичные логи или клиентский JavaScript.
Базовые правила REST API
| Правило | Значение |
|---|---|
| Base URL | https://upvisor.online |
| Формат | JSON в запросах и ответах. |
| Время | В API хранится UTC. Для пользовательского отображения используйте часовой пояс проекта или монитора. |
| Пагинация | page и per_page. Максимум для списков мониторов и статус-страниц — 200. |
| Лимит запросов | 120 запросов в минуту на ключ. |
Методы REST API
Методы чтения работают с ключом read. Методы создания, обновления и изменения состояния требуют ключ write.
| Метод | Путь | Права | Назначение |
|---|---|---|---|
| GET | /api/v1/projects | read | Текущий проект, к которому привязан ключ. |
| GET | /api/v1/monitors | read | Список основных мониторов проекта с пагинацией. |
| GET | /api/v1/monitors/:id | read | Карточка одного монитора: настройки, регионы и config. |
| GET | /api/v1/monitors/:id/checks | read | Последние 200 результатов проверок монитора. |
| GET | /api/v1/incidents | read | Последние 200 инцидентов проекта. |
| GET | /api/v1/status-pages | read | Статус-страницы проекта с пагинацией. |
| GET | /api/v1/maintenance | read | Окна технических работ проекта. |
| POST | /api/v1/monitors | write | Создать монитор HTTP/S, Ping, TCP, DNS, Keyword или Heartbeat. |
| PATCH | /api/v1/monitors/:id | write | Частично обновить настройки монитора. |
| POST | /api/v1/monitors/:id/check | write | Поставить ручную проверку в очередь. |
| POST | /api/v1/incidents/:id/status | write | Изменить статус инцидента. |
| POST | /api/v1/incidents/:id/comments | write | Добавить комментарий к инциденту. Требуется Team. |
| POST | /api/v1/maintenance | write | Создать окно технических работ. |
| POST | /api/v1/maintenance/:id/end | write | Завершить активное окно работ раньше срока. |
Поля монитора
Эти поля используются в POST /api/v1/monitors, PATCH /api/v1/monitors/:id и инструментах MCP monitor_create, monitor_update.
| Поле | Тип | Значения | Описание |
|---|---|---|---|
name | string | 2–120 символов | Название сервера в интерфейсе. |
type | string | http, ping, tcp, dns, keyword, heartbeat | Тип проверки. Некоторые типы зависят от тарифа. |
target | string | URL, домен, IP или heartbeat-name | Цель проверки. Для HTTP/S домен без протокола будет нормализован. |
port | number | 1–65535 | Порт для TCP или нестандартного HTTP/S. Для HTTP/S обычно 80/443. |
method | string | GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS | HTTP-метод. Используется только для HTTP/S и Keyword. |
expected_codes | string | 2xx, 200,201, 2xx,3xx | Коды ответа, которые считаются успешными. Пользовательские коды доступны по тарифу. |
interval_seconds | number | от лимита тарифа | Интервал проверки в секундах. Free не может проверять чаще 300 секунд. |
timeout_ms | number | от 500 | Максимальное время ожидания ответа в миллисекундах. |
slow_threshold_ms | number | например 2000 | Порог медленного ответа в миллисекундах. Уведомления о замедлении зависят от тарифа. |
minimum_incident_duration_seconds | number | 0 или 30-3600 | Задержка подтверждения сбоя. Доступна на Team; короткие сбои не откроют инцидент. |
timezone | string | IANA, например Europe/Moscow | Часовой пояс монитора для отображения времени и плановых работ. |
regions | array<string> | msk, spb, almaty, usa, nl | Регионы проверки. Доступность и количество зависят от тарифа. |
follow_redirects | boolean | true, false | Следовать за HTTP-редиректами и учитывать итоговое время ответа. |
config | object | произвольные поддерживаемые настройки | Расширенная конфигурация монитора. Значения из верхнего уровня имеют приоритет. |
Дополнительные проверки внутри HTTP/S
Проверка домена, SSL и DNS A-записи включаются внутри HTTP/S-монитора и не создают отдельный публичный монитор в списке.
| Поле | Тип | Описание |
|---|---|---|
auto_domain_check | boolean | Отслеживать срок регистрации домена. Доступно с Pro. |
auto_ssl_check | boolean | Отслеживать валидность и срок действия SSL-сертификата. Доступно с Pro. |
auto_dns_a_check | boolean | Проверять A-запись домена. При несоответствии создается инцидент. |
auto_dns_a_expected | string | Ожидаемый IPv4-адрес для A-записи, например 87.228.109.126. |
Примеры REST-запросов
Получить мониторы
GET https://upvisor.online/api/v1/monitors?page=1&per_page=100
Authorization: Bearer upv_api_xxx
200 OK
{
"monitors": [
{
"id": 12,
"name": "API",
"type": "http",
"target": "https://example.com/api",
"timezone": "Europe/Moscow",
"status": "up",
"last_checked_at": "2026-07-14T09:10:00.000Z",
"last_response_ms": 184,
"created_at": "2026-07-11T12:00:00.000Z"
}
],
"pagination": {
"page": 1,
"per_page": 100,
"total": 1,
"pages": 1
}
}
Создать HTTP/S-монитор
curl -X POST https://upvisor.online/api/v1/monitors \\
-H "Authorization: Bearer upv_api_xxx" \\
-H "Content-Type: application/json" \\
-d '{
"name": "Main website",
"type": "http",
"target": "example.com",
"interval_seconds": 300,
"regions": ["msk", "spb"],
"follow_redirects": true,
"auto_ssl_check": true,
"auto_domain_check": true,
"auto_dns_a_check": true,
"auto_dns_a_expected": "87.228.109.126"
}\'
201 Created
{
"id": 42,
"heartbeat_url": null
}
Создать Heartbeat-монитор
curl -X POST https://upvisor.online/api/v1/monitors \\
-H "Authorization: Bearer upv_api_xxx" \\
-H "Content-Type: application/json" \\
-d '{
"name": "night-export",
"type": "heartbeat",
"target": "night-export",
"interval_seconds": 43200,
"config": {
"heartbeat_grace_minutes": 10
}
}\'
201 Created
{
"id": 51,
"heartbeat_url": "https://upvisor.online/heartbeat/hb_xxx"
}
Плановые работы
curl -X POST https://upvisor.online/api/v1/maintenance \\
-H "Authorization: Bearer upv_api_xxx" \\
-H "Content-Type: application/json" \\
-d '{
"title": "Обновление БД",
"description": "Обновление базы данных и миграции",
"timezone": "Europe/Moscow",
"starts_at": "2026-07-15 02:00:00",
"ends_at": "2026-07-15 04:00:00",
"monitor_ids": [42, 43],
"suppress_alerts": true,
"show_on_status_page": true
}\'
201 Created
{
"id": 7
}
Поля ответов
| Поле | Где встречается | Тип | Описание |
|---|---|---|---|
status | monitor | string | up, down, degraded, paused, unknown. |
last_response_ms | monitor | number|null | Последнее время ответа в миллисекундах. |
regions | monitor | array | Коды регионов проверки. |
config | monitor | object | Дополнительные настройки: редиректы, companion-проверки, heartbeat grace. |
http_code | check | number|null | HTTP-код ответа, если проверка была HTTP/S. |
response_time_ms | check | number|null | Время ответа конкретной проверки. |
resolved_ip | check | string|null | IP, в который был зарезолвен домен. |
details | check | object | Дополнительные данные проверки: final_url, timings, DNS, SSL и прочее. |
type | incident | string | down, degraded, ssl, domain, dns, heartbeat. |
status | incident | string | detected, resolved, auto_closed, false_positive, timeout и служебные состояния. |
started_at | incident | datetime|null | Начало инцидента в UTC. |
ended_at | incident | datetime|null | Завершение инцидента в UTC. |
Ошибки REST API
Ошибки возвращаются JSON-объектом с коротким кодом в поле error. Подробный справочник есть в разделе Коды ошибок.
| HTTP | Код | Что означает |
|---|---|---|
| 400 | invalid_type, invalid_status | Некорректное значение поля. |
| 401 | invalid_api_key | Ключ отсутствует, неверный или отключен. |
| 403 | insufficient_scope, feature_not_available | Недостаточно прав или функция недоступна на тарифе. |
| 404 | not_found | Объект не найден в текущем проекте. |
| 409 | monitor_limit_reached | Достигнут лимит серверов тарифа. |
| 422 | invalid_maintenance_period | Окончание техработ раньше начала или равно ему. |
| 429 | rate_limited | Слишком много запросов. |
MCP endpoint
MCP работает через JSON-RPC 2.0 по адресу https://upvisor.online/mcp. Доступен на тарифах Pro и Team. Авторизация такая же: Authorization: Bearer upv_mcp_xxx.
curl -X POST https://upvisor.online/mcp \\
-H "Authorization: Bearer upv_mcp_xxx" \\
-H "Content-Type: application/json" \\
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "monitor_list",
"arguments": {
"status": "down",
"limit": 20
}
}
}\'
Защита MCP от случайных изменений
Инструменты чтения работают сразу. Инструменты, которые создают, обновляют, публикуют, удаляют или отправляют уведомления, требуют MCP-токен с правом write и аргумент confirm: true.
Для доверенного MCP-клиента можно включить постоянное разрешение через переменную окружения UPVISOR_ALLOW_WRITE=1. Опасные инструменты также помечаются MCP-аннотацией destructiveHint.
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "monitor_pause",
"arguments": {
"monitor_id": 42,
"action": "pause",
"confirm": true
}
}
}
Инструменты MCP
Ниже — основные инструменты. Совместимые aliases list_monitors, get_monitor, get_monitor_checks, list_incidents, list_status_pages оставлены для старых клиентов, но новые интеграции лучше строить на именах monitor_*, incident_*, status_page_*.
| Tool | Режим | Аргументы | Назначение |
|---|---|---|---|
list_projects | read | нет | Проект, тариф, лимиты и доступные функции. |
monitor_list | read | limit, status, type, q | Список серверов с фильтрацией. |
monitor_get | read | monitor_id | Полная карточка сервера, companion-проверки, каналы и последние checks. |
monitor_get_checks | read | monitor_id, period_hours, limit | Данные для uptime и latency-графиков. |
monitor_get_heartbeat_events | read | monitor_id, limit | События heartbeat-монитора. |
incident_list | read | monitor_id, status, limit | Инциденты проекта или конкретного сервера. |
incident_get | read | incident_id | Карточка инцидента: диагностика, AI-сводка, комментарии, доставки. |
incident_get_events | read | incident_id | Хронологическая лента событий инцидента. |
incident_get_server | read | incident_id | Связанный сервер одним запросом. |
status_page_list | read | limit | Статус-страницы проекта. |
list_maintenance | read | limit | Окна технических работ. |
monitor_create | write | confirm, поля монитора | Создать сервер. |
monitor_update | write | confirm, monitor_id, поля монитора | Частично обновить сервер. |
monitor_pause | write | confirm, monitor_id, action | Пауза или возобновление. action: pause / unpause. |
monitor_delete | destructive | confirm, monitor_id | Удалить сервер вместе с историей. |
monitor_test_notify | write | confirm, monitor_id | Отправить тестовый алерт по каналам сервера. Доступно с Pro, есть rate-limit. |
incident_generate_ai_summary | write | confirm, incident_id, force | Создать или вернуть AI-сводку инцидента. |
status_page_publish | write | confirm, status_page_id, status | Опубликовать или скрыть статус-страницу. status: published / unpublished. |
status_page_delete | destructive | confirm, status_page_id | Удалить статус-страницу. |
create_maintenance | write | confirm, title, starts_at, ends_at | Создать окно технических работ. |
end_maintenance | write | confirm, maintenance_id | Завершить активное окно раньше срока. |
add_incident_comment | write | confirm, incident_id, body, visibility | Добавить комментарий. Team only. |
Значения аргументов MCP
| Аргумент | Тип | Значения | Где используется |
|---|---|---|---|
confirm | boolean | true | Все инструменты, которые меняют или удаляют данные. |
limit | number | обычно 1–200, для checks до 1000 | Списки и события. |
status | string | Для мониторов: up, down, degraded, paused, unknown. Для status page: published, unpublished. | Фильтры и публикация. |
type | string | http, ping, keyword, tcp, dns, heartbeat | monitor_list, monitor_create. |
q | string | до 120 символов | Поиск сервера по названию, домену или IP. |
period_hours | number | 1–720 | monitor_get_checks. |
action | string | pause, unpause | monitor_pause. |
force | boolean | true, false | Пересоздать AI-сводку, даже если есть кэш. |
visibility | string | internal, public | Комментарии к инциденту. |
starts_at, ends_at | string | YYYY-MM-DD HH:mm:ss или ISO | Плановые работы. Если передан timezone, время трактуется как локальное в этом часовом поясе. |
Примеры MCP-команд
Показать недоступные серверы
{
"jsonrpc": "2.0",
"id": 10,
"method": "tools/call",
"params": {
"name": "monitor_list",
"arguments": {
"status": "down",
"limit": 20
}
}
}
Создать heartbeat-сервер
{
"jsonrpc": "2.0",
"id": 11,
"method": "tools/call",
"params": {
"name": "monitor_create",
"arguments": {
"confirm": true,
"name": "night-export",
"type": "heartbeat",
"target": "night-export",
"interval_seconds": 43200,
"config": {
"heartbeat_grace_minutes": 10
}
}
}
}
Сгенерировать AI-сводку инцидента
{
"jsonrpc": "2.0",
"id": 12,
"method": "tools/call",
"params": {
"name": "incident_generate_ai_summary",
"arguments": {
"confirm": true,
"incident_id": 128,
"force": false
}
}
}
Посмотрите сеть агентов и постоянный User-Agent, если хотите настроить allowlist на своей стороне.