API инцидентов

API инцидентов предоставляет программный доступ только на чтение к инцидентам, зарегистрированным для ваших мониторов и серверов. Используйте его, чтобы передавать текущее состояние инцидентов в дашборды, конвейеры оповещений или инструменты аудита.

Инциденты создаются и управляются тремя способами:

  • Автоматически, когда монитор переходит в «down» или детектор аномалий отмечает сервер.
  • Вручную из Dashboard → Incidents.

REST API предоставляет только операции list и get. Создание, обновление, подтверждение и разрешение инцидентов выполняются в дашборде (см. Управление инцидентами ниже).

Базовый URL и версия

Все эндпоинты находятся под префиксом /v1 на API-хосте:

https://api.statusradar.dev/v1

https://statusradar.dev/v1 является допустимым псевдонимом.

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

API инцидентов является частью User API и аутентифицируется пользовательским API-токеном, отправляемым как Bearer-токен:

Authorization: Bearer YOUR_API_TOKEN

Сгенерируйте токен в Dashboard → Settings → API. Токены ограничены ресурсами, которыми владеют ваш аккаунт и команда — вы всегда видите только инциденты для сущностей, к которым у вас есть доступ. Клиенты, которые не могут установить заголовок Authorization, могут вместо этого использовать заголовок X-API-Token: YOUR_API_TOKEN.

Полные сведения см. в разделе Аутентификация API.

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

Запросы User API ограничены 60 запросами в минуту на каждый токен. При превышении лимита API отвечает HTTP 429 и заголовком Retry-After: 60. Сделайте паузу и повторите попытку.

Эндпоинты

Метод Путь Описание
GET /v1/incidents Список инцидентов
GET /v1/incidents/{id} Получить отдельный инцидент с его обновлениями

Список инцидентов

GET /v1/incidents

Возвращает инциденты, видимые для вашего токена, новейшие первыми.

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

Параметр Тип Описание
status string Фильтр по статусу. active возвращает всё, что ещё не разрешено. Принимает одно значение статуса (см. Статус). По умолчанию: все.
severity string Фильтр по серьёзности (см. Серьёзность). По умолчанию: все.
entity_type string Фильтр по затронутой сущности: monitor или server. По умолчанию: все.
detection string Фильтр по способу обнаружения инцидента: manual или anomaly. По умолчанию: все.
search string Поиск по заголовку инцидента или имени сущности.
page integer Номер страницы, начиная с 1. По умолчанию: 1.

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

curl -H "Authorization: Bearer YOUR_API_TOKEN" \
  "https://api.statusradar.dev/v1/incidents?status=active&severity=critical"

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

{
  "success": true,
  "data": [
    {
      "id": 482,
      "entity_type": "monitor",
      "entity_id": 117,
      "entity_name": "API Gateway",
      "entity_target": "https://api.example.com/health",
      "title": "API Gateway is down",
      "description": "Health check returned 503 from all probe locations.",
      "severity": "critical",
      "status": "investigating",
      "detection_source": "monitor",
      "started_at": "2026-06-23T09:14:02Z",
      "resolved_at": null,
      "duration_minutes": 27
    }
  ],
  "page": 1,
  "total": 1,
  "total_pages": 1
}

Получение инцидента

GET /v1/incidents/{id}

Возвращает отдельный инцидент, включая его хронологические обновления. Для инцидентов мониторов ответ также включает результаты проверок, зарегистрированные в течение окна инцидента. Возвращает 404, если инцидент не существует или не виден вашему токену.

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

curl -H "Authorization: Bearer YOUR_API_TOKEN" \
  https://api.statusradar.dev/v1/incidents/482

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

{
  "success": true,
  "data": {
    "id": 482,
    "entity_type": "monitor",
    "entity_id": 117,
    "entity_name": "API Gateway",
    "entity_target": "https://api.example.com/health",
    "title": "API Gateway is down",
    "description": "Health check returned 503 from all probe locations.",
    "severity": "critical",
    "status": "monitoring",
    "detection_source": "monitor",
    "started_at": "2026-06-23T09:14:02Z",
    "resolved_at": null,
    "duration_minutes": 41,
    "updates": [
      {
        "id": 1204,
        "status": "monitoring",
        "message": "Rolled back the bad deploy; error rate is dropping.",
        "user_name": "Jane Ops",
        "created_at": "2026-06-23T09:48:00Z"
      },
      {
        "id": 1201,
        "status": "investigating",
        "message": "Confirmed 503s across all locations, investigating.",
        "user_name": "Jane Ops",
        "created_at": "2026-06-23T09:16:00Z"
      }
    ]
  }
}

Поля инцидента

Поле Тип Описание
id integer ID инцидента.
entity_type string Тип затронутой сущности: monitor или server.
entity_id integer ID затронутого монитора или сервера.
entity_name string Отображаемое имя затронутой сущности.
entity_target string URL цели монитора или имя хоста сервера.
title string Краткий заголовок инцидента.
description string Более подробное описание инцидента.
severity string Уровень воздействия (см. Серьёзность).
status string Текущий статус жизненного цикла (см. Статус).
detection_source string Как был открыт инцидент: manual (создан в дашборде) или anomaly (ML-обнаружение). События перехода монитора в «down» открываются автоматически конвейером мониторинга.
started_at datetime Когда начался инцидент.
resolved_at datetime / null Когда инцидент был разрешён, или null, пока он открыт.
duration_minutes integer Прошедшие минуты от started_at до resolved_at (или до текущего момента, если инцидент ещё открыт).
updates array Хронологические обновления статуса (новейшие первыми). Присутствует в ответе по отдельному инциденту.

Объект обновления

Поле Тип Описание
id integer ID обновления.
status string Статус инцидента, установленный этим обновлением.
message string Заметка, написанная человеком.
user_name string / null Автор обновления.
created_at datetime Когда было опубликовано обновление.

Серьёзность

Значение Значение
critical Полный сбой / серьёзное воздействие.
major Значительная деградация.
minor Ограниченное или частичное воздействие.
warning Ранний сигнал, подтверждённого сбоя нет.
info Информационный.

Инциденты, созданные вручную, принимают minor, major и critical. warning и info используются автоматическими и обнаруженными по аномалии инцидентами.

Статус

Инциденты следуют такому жизненному циклу:

Значение Значение
investigating Проблема подтверждена и расследуется.
identified Первопричина определена.
monitoring Исправление применено и наблюдается.
resolved Инцидент закрыт.

Фильтр статуса active соответствует каждому инциденту, чей статус не resolved.

Управление инцидентами

REST API доступен только на чтение. Чтобы создавать, обновлять, подтверждать или разрешать инциденты, используйте дашборд в Dashboard → Incidents (/dashboard/incidents):

  • Создать — откройте инцидент вручную для одного из ваших мониторов с заголовком, описанием, серьёзностью и начальным статусом.
  • Обновить — опубликуйте обновление статуса с сообщением; установка статуса resolved закрывает инцидент.
  • Подтвердить — отметьте активный инцидент как обрабатываемый.
  • Разрешить — закройте инцидент и верните сущность в исправное состояние.

Когда монитор восстанавливается, его открытый инцидент разрешается автоматически.

Ответы с ошибками

Ошибки возвращают статус не-2xx с телом в формате JSON:

{
  "success": false,
  "error": "Invalid token",
  "message": "The provided API token is invalid or has been revoked"
}
Статус Значение
401 Отсутствующий, недействительный или отозванный токен.
404 Инцидент не найден или не виден вашему токену.
429 Превышен лимит частоты запросов (60 запросов/минуту).
500 Ошибка сервера.

Дальнейшие шаги