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

Как принять webhook Core Monitor

Core Monitor отправляет отдельное событие после подтверждённого сбоя, восстановления и повторного напоминания. Для проверки источника каждый запрос подписан вашим ключом.

Открыть кабинет14 дней бесплатно · без банковской карты
01
Запрос
POST JSON
02
Защита
HMAC-SHA256
03
Повторы
При временной ошибке

События

Три состояния подтверждённого инцидента

Поле event определяет сценарий, а постоянный идентификатор доставки помогает не обработать один запрос дважды.

01

incident.opened

Сбой подтверждён повторной проверкой

02

incident.recovered

Сайт снова прошёл проверку

03

incident.escalated

Проблема продолжается к сроку повторного напоминания

Тело запроса

JSON содержит сайт и состояние инцидента

Email аккаунта, данные оплаты и ключ подписи не передаются. Код ошибки можно сопоставить со своим сценарием уведомления или оставить для журнала.

{
  "id": "f824d3e8-9cab-4a17-883d-5b2d5d56cf10",
  "event": "incident.opened",
  "createdAt": "2026-08-24T18:30:00.000Z",
  "data": {
    "incident": {
      "id": "d70e859d-cd47-4ea0-981b-ffef0ce17f12",
      "status": "open",
      "openedAt": "2026-08-24T18:29:40.000Z",
      "resolvedAt": null,
      "errorCode": "REQUEST_TIMEOUT"
    },
    "site": {
      "id": "ea59d9c3-96b5-4fc9-9d6c-654f02e80385",
      "url": "https://example.com/"
    }
  }
}

Проверка источника

Сверяйте подпись до обработки события

Возьмите точные байты тела запроса и значение времени из заголовка. Сформируйте строку timestamp.rawBody, вычислите HMAC-SHA256 и сравните результат без утечки времени выполнения.

X-Core-Monitor-Event
Название события
X-Core-Monitor-Delivery
Идентификатор для защиты от дублей
X-Core-Monitor-Timestamp
Unix-время отправки в секундах
X-Core-Monitor-Signature
Подпись в формате v1=<hex>
import { createHmac, timingSafeEqual } from "node:crypto";

const signed = `${timestamp}.${rawBody}`;
const expected = `v1=${createHmac("sha256", secret)
  .update(signed)
  .digest("hex")}`;

const valid = received.length === expected.length &&
  timingSafeEqual(Buffer.from(received), Buffer.from(expected));

Рекомендуем отклонять запросы старше пяти минут и сохранять обработанные идентификаторы доставки. Новый ключ показывается в кабинете один раз; потерянный ключ можно заменить.

Доставка

Успешным считается любой ответ 2xx

При временной ошибке или ответе 5xx запрос повторится. Ответы 4xx считаются постоянной ошибкой. Перенаправления не выполняются, а адрес повторно проверяется перед отправкой.

  1. 01

    Только HTTPS

    Адрес без логина, параметров и нестандартного порта

  2. 02

    Короткий ответ

    Верните 2xx сразу, а долгую обработку продолжите в своей очереди

  3. 03

    Защита от дублей

    Один идентификатор доставки обрабатывайте только один раз

Начните бесплатно

Подключите события к своей системе

Укажите HTTPS-адрес в настройках уведомлений и сохраните созданный ключ подписи.

Открыть кабинет