Upvisor
Документация Upvisor

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 APIread или write
upv_mcp_...MCP endpointread или write

Передавайте токены только через заголовок Authorization. Не кладите токены в URL, query string, публичные логи или клиентский JavaScript.

Базовые правила REST API

ПравилоЗначение
Base URLhttps://upvisor.online
ФорматJSON в запросах и ответах.
ВремяВ API хранится UTC. Для пользовательского отображения используйте часовой пояс проекта или монитора.
Пагинацияpage и per_page. Максимум для списков мониторов и статус-страниц — 200.
Лимит запросов120 запросов в минуту на ключ.

Методы REST API

Методы чтения работают с ключом read. Методы создания, обновления и изменения состояния требуют ключ write.

МетодПутьПраваНазначение
GET/api/v1/projectsreadТекущий проект, к которому привязан ключ.
GET/api/v1/monitorsreadСписок основных мониторов проекта с пагинацией.
GET/api/v1/monitors/:idreadКарточка одного монитора: настройки, регионы и config.
GET/api/v1/monitors/:id/checksreadПоследние 200 результатов проверок монитора.
GET/api/v1/incidentsreadПоследние 200 инцидентов проекта.
GET/api/v1/status-pagesreadСтатус-страницы проекта с пагинацией.
GET/api/v1/maintenancereadОкна технических работ проекта.
POST/api/v1/monitorswriteСоздать монитор HTTP/S, Ping, TCP, DNS, Keyword или Heartbeat.
PATCH/api/v1/monitors/:idwriteЧастично обновить настройки монитора.
POST/api/v1/monitors/:id/checkwriteПоставить ручную проверку в очередь.
POST/api/v1/incidents/:id/statuswriteИзменить статус инцидента.
POST/api/v1/incidents/:id/commentswriteДобавить комментарий к инциденту. Требуется Team.
POST/api/v1/maintenancewriteСоздать окно технических работ.
POST/api/v1/maintenance/:id/endwriteЗавершить активное окно работ раньше срока.

Поля монитора

Эти поля используются в POST /api/v1/monitors, PATCH /api/v1/monitors/:id и инструментах MCP monitor_create, monitor_update.

ПолеТипЗначенияОписание
namestring2–120 символовНазвание сервера в интерфейсе.
typestringhttp, ping, tcp, dns, keyword, heartbeatТип проверки. Некоторые типы зависят от тарифа.
targetstringURL, домен, IP или heartbeat-nameЦель проверки. Для HTTP/S домен без протокола будет нормализован.
portnumber1–65535Порт для TCP или нестандартного HTTP/S. Для HTTP/S обычно 80/443.
methodstringGET, HEAD, POST, PUT, PATCH, DELETE, OPTIONSHTTP-метод. Используется только для HTTP/S и Keyword.
expected_codesstring2xx, 200,201, 2xx,3xxКоды ответа, которые считаются успешными. Пользовательские коды доступны по тарифу.
interval_secondsnumberот лимита тарифаИнтервал проверки в секундах. Free не может проверять чаще 300 секунд.
timeout_msnumberот 500Максимальное время ожидания ответа в миллисекундах.
slow_threshold_msnumberнапример 2000Порог медленного ответа в миллисекундах. Уведомления о замедлении зависят от тарифа.
minimum_incident_duration_secondsnumber0 или 30-3600Задержка подтверждения сбоя. Доступна на Team; короткие сбои не откроют инцидент.
timezonestringIANA, например Europe/MoscowЧасовой пояс монитора для отображения времени и плановых работ.
regionsarray<string>msk, spb, almaty, usa, nlРегионы проверки. Доступность и количество зависят от тарифа.
follow_redirectsbooleantrue, falseСледовать за HTTP-редиректами и учитывать итоговое время ответа.
configobjectпроизвольные поддерживаемые настройкиРасширенная конфигурация монитора. Значения из верхнего уровня имеют приоритет.

Дополнительные проверки внутри HTTP/S

Проверка домена, SSL и DNS A-записи включаются внутри HTTP/S-монитора и не создают отдельный публичный монитор в списке.

ПолеТипОписание
auto_domain_checkbooleanОтслеживать срок регистрации домена. Доступно с Pro.
auto_ssl_checkbooleanОтслеживать валидность и срок действия SSL-сертификата. Доступно с Pro.
auto_dns_a_checkbooleanПроверять A-запись домена. При несоответствии создается инцидент.
auto_dns_a_expectedstringОжидаемый 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
}

Поля ответов

ПолеГде встречаетсяТипОписание
statusmonitorstringup, down, degraded, paused, unknown.
last_response_msmonitornumber|nullПоследнее время ответа в миллисекундах.
regionsmonitorarrayКоды регионов проверки.
configmonitorobjectДополнительные настройки: редиректы, companion-проверки, heartbeat grace.
http_codechecknumber|nullHTTP-код ответа, если проверка была HTTP/S.
response_time_mschecknumber|nullВремя ответа конкретной проверки.
resolved_ipcheckstring|nullIP, в который был зарезолвен домен.
detailscheckobjectДополнительные данные проверки: final_url, timings, DNS, SSL и прочее.
typeincidentstringdown, degraded, ssl, domain, dns, heartbeat.
statusincidentstringdetected, resolved, auto_closed, false_positive, timeout и служебные состояния.
started_atincidentdatetime|nullНачало инцидента в UTC.
ended_atincidentdatetime|nullЗавершение инцидента в UTC.

Ошибки REST API

Ошибки возвращаются JSON-объектом с коротким кодом в поле error. Подробный справочник есть в разделе Коды ошибок.

HTTPКодЧто означает
400invalid_type, invalid_statusНекорректное значение поля.
401invalid_api_keyКлюч отсутствует, неверный или отключен.
403insufficient_scope, feature_not_availableНедостаточно прав или функция недоступна на тарифе.
404not_foundОбъект не найден в текущем проекте.
409monitor_limit_reachedДостигнут лимит серверов тарифа.
422invalid_maintenance_periodОкончание техработ раньше начала или равно ему.
429rate_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_projectsreadнетПроект, тариф, лимиты и доступные функции.
monitor_listreadlimit, status, type, qСписок серверов с фильтрацией.
monitor_getreadmonitor_idПолная карточка сервера, companion-проверки, каналы и последние checks.
monitor_get_checksreadmonitor_id, period_hours, limitДанные для uptime и latency-графиков.
monitor_get_heartbeat_eventsreadmonitor_id, limitСобытия heartbeat-монитора.
incident_listreadmonitor_id, status, limitИнциденты проекта или конкретного сервера.
incident_getreadincident_idКарточка инцидента: диагностика, AI-сводка, комментарии, доставки.
incident_get_eventsreadincident_idХронологическая лента событий инцидента.
incident_get_serverreadincident_idСвязанный сервер одним запросом.
status_page_listreadlimitСтатус-страницы проекта.
list_maintenancereadlimitОкна технических работ.
monitor_createwriteconfirm, поля монитораСоздать сервер.
monitor_updatewriteconfirm, monitor_id, поля монитораЧастично обновить сервер.
monitor_pausewriteconfirm, monitor_id, actionПауза или возобновление. action: pause / unpause.
monitor_deletedestructiveconfirm, monitor_idУдалить сервер вместе с историей.
monitor_test_notifywriteconfirm, monitor_idОтправить тестовый алерт по каналам сервера. Доступно с Pro, есть rate-limit.
incident_generate_ai_summarywriteconfirm, incident_id, forceСоздать или вернуть AI-сводку инцидента.
status_page_publishwriteconfirm, status_page_id, statusОпубликовать или скрыть статус-страницу. status: published / unpublished.
status_page_deletedestructiveconfirm, status_page_idУдалить статус-страницу.
create_maintenancewriteconfirm, title, starts_at, ends_atСоздать окно технических работ.
end_maintenancewriteconfirm, maintenance_idЗавершить активное окно раньше срока.
add_incident_commentwriteconfirm, incident_id, body, visibilityДобавить комментарий. Team only.

Значения аргументов MCP

АргументТипЗначенияГде используется
confirmbooleantrueВсе инструменты, которые меняют или удаляют данные.
limitnumberобычно 1–200, для checks до 1000Списки и события.
statusstringДля мониторов: up, down, degraded, paused, unknown. Для status page: published, unpublished.Фильтры и публикация.
typestringhttp, ping, keyword, tcp, dns, heartbeatmonitor_list, monitor_create.
qstringдо 120 символовПоиск сервера по названию, домену или IP.
period_hoursnumber1–720monitor_get_checks.
actionstringpause, unpausemonitor_pause.
forcebooleantrue, falseПересоздать AI-сводку, даже если есть кэш.
visibilitystringinternal, publicКомментарии к инциденту.
starts_at, ends_atstringYYYY-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 на своей стороне.

Сеть и IP агентов