# Webhook-уведомления

Настройка эндпоинта, подпись запросов, структура и примеры тел запросов для всех типов уведомлений

> Индекс всей документации в markdown: https://statuser.cloud/llms.txt — там перечислены остальные статьи. Всё одним файлом: https://statuser.cloud/llms-full.txt. Документация API: https://statuser.cloud/api-reference.md

## Доступность по тарифам

Доступно в тарифе Team

| Функция | Free | Pro | Team |
| --- | --- | --- | --- |
| Уведомления по вебхукам | нет | нет | да |

Сравнение тарифов: https://statuser.cloud/pricing

## Через API и MCP

Описанное в статье можно сделать программно — запросом к публичному API или через MCP-сервер Statuser, который работает поверх того же API. Понадобится API-ключ, создать его можно на любом тарифе; ограничения тарифа в API те же, что в интерфейсе.

- Документация API: https://statuser.cloud/api-reference (машиночитаемо: https://statuser.cloud/api-reference.md)
- MCP-сервер: https://github.com/statuser-cloud/mcp

---

Вебхук в Statuser - это HTTP POST-запрос на ваш URL-эндпоинт при наступлении событий мониторинга и аккаунта.

Этот канал удобно использовать для интеграции с вашими системами: корпоративные чаты, внутренние сервис-дески, SIEM, внутренние панели и собственные автоматизации.

> На аккаунт можно добавить до **20** вебхуков. Для каждого вебхука можно
> отдельно выбрать, какие типы уведомлений отправлять.

## Как работает доставка

- Statuser отправляет `POST` c `application/json` на URL вебхука.
- Успешной доставкой считается только ответ с кодом `2xx`.
- Таймаут запроса: **7 секунд**.
- Редиректы **не поддерживаются** (`3xx` считается ошибкой доставки).
- Если у эндпоинта задан секрет, запрос подписывается заголовком `X-Statuser-Signature`.
- Для вебхука нужен публичный URL.

## Заголовки запроса

Каждый вебхук-запрос содержит следующие заголовки:

```http
Content-Type: application/json
User-Agent: Mozilla/5.0 (compatible; Statuser Webhook; https://statuser.cloud/)
X-Statuser-Event: service_unavailable
X-Statuser-Subscription-Type: service_alerts
X-Statuser-Signature: sha256=<hex>   // только если указан secret
```

Где:

- `X-Statuser-Event` - конкретный тип события (`notification_type`).
- `X-Statuser-Subscription-Type` - группа уведомлений (например, `service_alerts`, `dns_alerts`, `billing_alerts`).
- `X-Statuser-Signature` - HMAC-подпись тела запроса.

## Подпись секрета (HMAC SHA-256)

Если у вебхука заполнен секрет, Statuser:

1. Берет JSON body в строковом виде;
2. Считает HMAC SHA-256 по вашему `secret`;
3. Отправляет результат в виде `sha256=` в `X-Statuser-Signature`.

Проверка подписи на вашей стороне (Node.js):

```ts
import crypto from 'crypto';

function verifyStatuserSignature(
  rawBody: string,
  secret: string,
  header?: string
) {
  if (!header?.startsWith('sha256=')) return false;

  const received = header.slice('sha256='.length);
  const expected = crypto
    .createHmac('sha256', secret)
    .update(rawBody)
    .digest('hex');

  return crypto.timingSafeEqual(
    Buffer.from(received, 'hex'),
    Buffer.from(expected, 'hex')
  );
}
```

## Формат payload

Во всех вебхук-событиях есть базовые поля:

```json
{
  "notification_type": "service_unavailable",
  "subscription_type": "service_alerts",
  "created_at": "2026-02-16T10:21:30.000Z",
  "account_id": 42
}
```

Дополнительные поля зависят от `notification_type`.

## Контракты body по типам уведомлений

Ниже приведены примеры для каждого типа уведомлений, доступного в вебхуках.

#### Доступность сервисов

**service_unavailable**

```json
{
    "notification_type": "service_unavailable",
    "subscription_type": "service_alerts",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "server": {
      "id": 101,
      "name": "API production",
      "host": "api.example.com",
      "protocol": "https"
    },
    "incident": {
      "id": 9001,
      "started_at": "2026-02-16T10:21:30.000Z",
      "ended_at": null,
      "status": "ongoing",
      "root_error": "http_5xx_error"
    }
}
```

**service_available_now**

```json
{
    "notification_type": "service_available_now",
    "subscription_type": "service_alerts",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "server": {
      "id": 101,
      "name": "API production",
      "host": "api.example.com",
      "protocol": "https"
    },
    "incident": {
      "id": 9001,
      "started_at": "2026-02-16T10:21:30.000Z",
      "ended_at": "2026-02-16T10:35:30.000Z",
      "status": "completed",
      "root_error": "http_5xx_error"
    }
}
```

**heartbeat_unavailable**

```json
{
    "notification_type": "heartbeat_unavailable",
    "subscription_type": "service_alerts",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "server": {
      "id": 101,
      "name": "Worker heartbeat",
      "host": "worker.example.com",
      "protocol": "heartbeat"
    },
    "incident": {
      "id": 9002,
      "started_at": "2026-02-16T10:21:30.000Z",
      "ended_at": null,
      "status": "ongoing",
      "root_error": "heartbeat_timeout"
    }
}
```

**heartbeat_available_now**

```json
{
    "notification_type": "heartbeat_available_now",
    "subscription_type": "service_alerts",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "server": {
      "id": 101,
      "name": "Worker heartbeat",
      "host": "worker.example.com",
      "protocol": "heartbeat"
    },
    "incident": {
      "id": 9002,
      "started_at": "2026-02-16T10:21:30.000Z",
      "ended_at": "2026-02-16T10:29:30.000Z",
      "status": "completed",
      "root_error": "heartbeat_timeout"
    }
}
```

**service_slow_response**

```json
{
    "notification_type": "service_slow_response",
    "subscription_type": "service_alerts",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "server": {
      "id": 101,
      "name": "API production",
      "host": "api.example.com",
      "protocol": "https"
    },
    "latency": {
      "trigger_ms": 1500,
      "recovery_ms": 900,
      "observed_max_ms": 2100,
      "slow_start_at": "2026-02-16T10:20:30.000Z"
    }
}
```

**service_response_recovered**

```json
{
    "notification_type": "service_response_recovered",
    "subscription_type": "service_alerts",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "server": {
      "id": 101,
      "name": "API production",
      "host": "api.example.com",
      "protocol": "https"
    },
    "latency": {
      "trigger_ms": 1500,
      "recovery_ms": 900,
      "observed_max_ms": 2100,
      "slow_start_at": "2026-02-16T10:20:30.000Z",
      "recovery_at": "2026-02-16T10:25:00.000Z"
    }
}
```

#### Изменения DNS

**dns_records_changed**

```json
{
    "notification_type": "dns_records_changed",
    "subscription_type": "dns_alerts",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "server": {
      "id": 102,
      "name": "DNS monitor",
      "host": "example.com",
      "protocol": "dns"
    },
    "dns": {
      "id": 501,
      "domain": "example.com",
      "record_type": "A",
      "change_type": "modified",
      "added_records": [
        "203.0.113.20"
      ],
      "removed_records": [
        "203.0.113.10"
      ],
      "created_at": "2026-02-16T10:21:28.000Z"
    }
}
```

#### Статус сертификатов

**ssl_expire_soon_14**

```json
{
    "notification_type": "ssl_expire_soon_14",
    "subscription_type": "ssl_alerts",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "server": {
      "id": 103,
      "name": "Main site",
      "host": "example.com",
      "protocol": "https"
    },
    "ssl": {
      "id": 300,
      "domain": "example.com",
      "valid_from": "2025-03-01T00:00:00.000Z",
      "valid_to": "2026-02-23T00:00:00.000Z",
      "issuer": "Let's Encrypt",
      "subject": "CN=example.com",
      "san": [
        "example.com",
        "www.example.com"
      ],
      "chain_valid": true,
      "errors": []
    }
}
```

**ssl_expire_soon_7**

```json
{
    "notification_type": "ssl_expire_soon_7",
    "subscription_type": "ssl_alerts",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "server": {
      "id": 103,
      "name": "Main site",
      "host": "example.com",
      "protocol": "https"
    },
    "ssl": {
      "id": 300,
      "domain": "example.com",
      "valid_from": "2025-03-01T00:00:00.000Z",
      "valid_to": "2026-02-23T00:00:00.000Z",
      "issuer": "Let's Encrypt",
      "subject": "CN=example.com",
      "san": [
        "example.com",
        "www.example.com"
      ],
      "chain_valid": true,
      "errors": []
    }
}
```

**ssl_expire_soon_3**

```json
{
    "notification_type": "ssl_expire_soon_3",
    "subscription_type": "ssl_alerts",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "server": {
      "id": 103,
      "name": "Main site",
      "host": "example.com",
      "protocol": "https"
    },
    "ssl": {
      "id": 300,
      "domain": "example.com",
      "valid_from": "2025-03-01T00:00:00.000Z",
      "valid_to": "2026-02-23T00:00:00.000Z",
      "issuer": "Let's Encrypt",
      "subject": "CN=example.com",
      "san": [
        "example.com",
        "www.example.com"
      ],
      "chain_valid": true,
      "errors": []
    }
}
```

**ssl_expire_soon_1**

```json
{
    "notification_type": "ssl_expire_soon_1",
    "subscription_type": "ssl_alerts",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "server": {
      "id": 103,
      "name": "Main site",
      "host": "example.com",
      "protocol": "https"
    },
    "ssl": {
      "id": 300,
      "domain": "example.com",
      "valid_from": "2025-03-01T00:00:00.000Z",
      "valid_to": "2026-02-23T00:00:00.000Z",
      "issuer": "Let's Encrypt",
      "subject": "CN=example.com",
      "san": [
        "example.com",
        "www.example.com"
      ],
      "chain_valid": true,
      "errors": []
    }
}
```

**ssl_expired**

```json
{
    "notification_type": "ssl_expired",
    "subscription_type": "ssl_alerts",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "server": {
      "id": 103,
      "name": "Main site",
      "host": "example.com",
      "protocol": "https"
    },
    "ssl": {
      "id": 300,
      "domain": "example.com",
      "valid_from": "2025-03-01T00:00:00.000Z",
      "valid_to": "2026-02-23T00:00:00.000Z",
      "issuer": "Let's Encrypt",
      "subject": "CN=example.com",
      "san": [
        "example.com",
        "www.example.com"
      ],
      "chain_valid": true,
      "errors": []
    }
}
```

**ssl_renew**

```json
{
    "notification_type": "ssl_renew",
    "subscription_type": "ssl_alerts",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "server": {
      "id": 103,
      "name": "Main site",
      "host": "example.com",
      "protocol": "https"
    },
    "ssl": {
      "id": 300,
      "domain": "example.com",
      "valid_from": "2025-03-01T00:00:00.000Z",
      "valid_to": "2026-02-23T00:00:00.000Z",
      "issuer": "Let's Encrypt",
      "subject": "CN=example.com",
      "san": [
        "example.com",
        "www.example.com"
      ],
      "chain_valid": true,
      "errors": []
    }
}
```

#### Статус доменов

**domain_expire_soon_30**

```json
{
    "notification_type": "domain_expire_soon_30",
    "subscription_type": "domain_alerts",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "server": {
      "id": 104,
      "name": "Domain monitor",
      "host": "example.com",
      "protocol": "domain"
    },
    "domain": {
      "id": 610,
      "domain": "example.com",
      "register_at": "2020-02-10T00:00:00.000Z",
      "expire_at": "2026-03-18T00:00:00.000Z",
      "registrar": "REG-RU",
      "registrant_org": "Example LLC",
      "ns": [
        "ns1.example.com",
        "ns2.example.com"
      ]
    }
}
```

**domain_expire_soon_14**

```json
{
    "notification_type": "domain_expire_soon_14",
    "subscription_type": "domain_alerts",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "server": {
      "id": 104,
      "name": "Domain monitor",
      "host": "example.com",
      "protocol": "domain"
    },
    "domain": {
      "id": 610,
      "domain": "example.com",
      "register_at": "2020-02-10T00:00:00.000Z",
      "expire_at": "2026-03-18T00:00:00.000Z",
      "registrar": "REG-RU",
      "registrant_org": "Example LLC",
      "ns": [
        "ns1.example.com",
        "ns2.example.com"
      ]
    }
}
```

**domain_expire_soon_7**

```json
{
    "notification_type": "domain_expire_soon_7",
    "subscription_type": "domain_alerts",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "server": {
      "id": 104,
      "name": "Domain monitor",
      "host": "example.com",
      "protocol": "domain"
    },
    "domain": {
      "id": 610,
      "domain": "example.com",
      "register_at": "2020-02-10T00:00:00.000Z",
      "expire_at": "2026-03-18T00:00:00.000Z",
      "registrar": "REG-RU",
      "registrant_org": "Example LLC",
      "ns": [
        "ns1.example.com",
        "ns2.example.com"
      ]
    }
}
```

**domain_expire_soon_3**

```json
{
    "notification_type": "domain_expire_soon_3",
    "subscription_type": "domain_alerts",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "server": {
      "id": 104,
      "name": "Domain monitor",
      "host": "example.com",
      "protocol": "domain"
    },
    "domain": {
      "id": 610,
      "domain": "example.com",
      "register_at": "2020-02-10T00:00:00.000Z",
      "expire_at": "2026-03-18T00:00:00.000Z",
      "registrar": "REG-RU",
      "registrant_org": "Example LLC",
      "ns": [
        "ns1.example.com",
        "ns2.example.com"
      ]
    }
}
```

**domain_expire_soon_1**

```json
{
    "notification_type": "domain_expire_soon_1",
    "subscription_type": "domain_alerts",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "server": {
      "id": 104,
      "name": "Domain monitor",
      "host": "example.com",
      "protocol": "domain"
    },
    "domain": {
      "id": 610,
      "domain": "example.com",
      "register_at": "2020-02-10T00:00:00.000Z",
      "expire_at": "2026-03-18T00:00:00.000Z",
      "registrar": "REG-RU",
      "registrant_org": "Example LLC",
      "ns": [
        "ns1.example.com",
        "ns2.example.com"
      ]
    }
}
```

**domain_expired**

```json
{
    "notification_type": "domain_expired",
    "subscription_type": "domain_alerts",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "server": {
      "id": 104,
      "name": "Domain monitor",
      "host": "example.com",
      "protocol": "domain"
    },
    "domain": {
      "id": 610,
      "domain": "example.com",
      "register_at": "2020-02-10T00:00:00.000Z",
      "expire_at": "2026-03-18T00:00:00.000Z",
      "registrar": "REG-RU",
      "registrant_org": "Example LLC",
      "ns": [
        "ns1.example.com",
        "ns2.example.com"
      ]
    }
}
```

**domain_renew**

```json
{
    "notification_type": "domain_renew",
    "subscription_type": "domain_alerts",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "server": {
      "id": 104,
      "name": "Domain monitor",
      "host": "example.com",
      "protocol": "domain"
    },
    "domain": {
      "id": 610,
      "domain": "example.com",
      "register_at": "2020-02-10T00:00:00.000Z",
      "expire_at": "2026-03-18T00:00:00.000Z",
      "registrar": "REG-RU",
      "registrant_org": "Example LLC",
      "ns": [
        "ns1.example.com",
        "ns2.example.com"
      ]
    }
}
```

#### Оплата и тариф

**plan_expire_soon_7**

```json
{
    "notification_type": "plan_expire_soon_7",
    "subscription_type": "billing_alerts",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "plan_name": "Team",
    "expires_at": "2026-03-01T00:00:00.000Z",
    "expire_in_days": 7
}
```

**plan_expire_soon_3**

```json
{
    "notification_type": "plan_expire_soon_3",
    "subscription_type": "billing_alerts",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "plan_name": "Team",
    "expires_at": "2026-03-01T00:00:00.000Z",
    "expire_in_days": 3
}
```

**plan_expire_soon_1**

```json
{
    "notification_type": "plan_expire_soon_1",
    "subscription_type": "billing_alerts",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "plan_name": "Team",
    "expires_at": "2026-03-01T00:00:00.000Z",
    "expire_in_days": 1
}
```

**plan_expired**

```json
{
    "notification_type": "plan_expired",
    "subscription_type": "billing_alerts",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "plan_name": "Team",
    "expires_at": "2026-03-01T00:00:00.000Z"
}
```

**plan_autopay_reminder**

```json
{
    "notification_type": "plan_autopay_reminder",
    "subscription_type": "billing_alerts",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "plan_name": "Team",
    "card_last4": "4242",
    "amount": 2990,
    "billing_period": "month"
}
```

**plan_autopay_success**

```json
{
    "notification_type": "plan_autopay_success",
    "subscription_type": "billing_alerts",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "plan_name": "Team",
    "billing_period": "month"
}
```

**plan_autopay_retry_1**

```json
{
    "notification_type": "plan_autopay_retry_1",
    "subscription_type": "billing_alerts",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "plan_name": "Team",
    "retry_attempt": 1
}
```

**plan_autopay_retry_2**

```json
{
    "notification_type": "plan_autopay_retry_2",
    "subscription_type": "billing_alerts",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "plan_name": "Team",
    "retry_attempt": 2
}
```

**plan_autopay_retry_3**

```json
{
    "notification_type": "plan_autopay_retry_3",
    "subscription_type": "billing_alerts",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "plan_name": "Team",
    "retry_attempt": 3
}
```

**plan_downgrade_applied**

```json
{
    "notification_type": "plan_downgrade_applied",
    "subscription_type": "billing_alerts",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "old_plan_id": 3,
    "new_plan_id": 1,
    "billing_period": "month"
}
```

**invoice_paid**

```json
{
    "notification_type": "invoice_paid",
    "subscription_type": "billing_alerts",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "invoice_id": 555,
    "invoice_url": "https://example.com/invoice/555"
}
```

#### Недельные отчеты

**weekly_report**

```json
{
    "notification_type": "weekly_report",
    "subscription_type": "weekly_reports",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "servers": [
      {
        "id": 101,
        "name": "API production",
        "host": "api.example.com",
        "uptime": 99.98,
        "uptime_diff": -0.02,
        "availability": [
          {
            "date": "2026-02-10",
            "uptime": 100
          }
        ]
      }
    ],
    "incidents": [
      {
        "id": 9001,
        "started_at": "2026-02-12T10:21:30.000Z",
        "ended_at": "2026-02-12T10:33:30.000Z",
        "status": "completed",
        "server_id": 101,
        "root_error": "http_5xx_error"
      }
    ],
    "incidents_total": 3,
    "report_date_from": "2026-02-09T00:00:00.000Z",
    "report_date_to": "2026-02-15T23:59:59.999Z",
    "report_id": "d23caacf-6151-4962-9c88-328b54411890",
    "report_url": "https://statuser.cloud/reports/d23caacf-6151-4962-9c88-328b54411890"
}
```

#### Идеи и обсуждения

**idea_votes_milestone_5**

```json
{
    "notification_type": "idea_votes_milestone_5",
    "subscription_type": "ideas",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "idea_id": 120,
    "idea_title": "Webhook retries",
    "idea_votes_count": 5
}
```

**idea_votes_milestone_10**

```json
{
    "notification_type": "idea_votes_milestone_10",
    "subscription_type": "ideas",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "idea_id": 120,
    "idea_title": "Webhook retries",
    "idea_votes_count": 10
}
```

**idea_votes_milestone_25**

```json
{
    "notification_type": "idea_votes_milestone_25",
    "subscription_type": "ideas",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "idea_id": 120,
    "idea_title": "Webhook retries",
    "idea_votes_count": 25
}
```

**idea_votes_milestone_50**

```json
{
    "notification_type": "idea_votes_milestone_50",
    "subscription_type": "ideas",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "idea_id": 120,
    "idea_title": "Webhook retries",
    "idea_votes_count": 50
}
```

**idea_votes_milestone_100**

```json
{
    "notification_type": "idea_votes_milestone_100",
    "subscription_type": "ideas",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "idea_id": 120,
    "idea_title": "Webhook retries",
    "idea_votes_count": 100
}
```

**idea_votes_milestone_200**

```json
{
    "notification_type": "idea_votes_milestone_200",
    "subscription_type": "ideas",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "idea_id": 120,
    "idea_title": "Webhook retries",
    "idea_votes_count": 200
}
```

**idea_comment_created**

```json
{
    "notification_type": "idea_comment_created",
    "subscription_type": "ideas",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "idea_id": 120,
    "idea_title": "Webhook retries",
    "comment_id": 778,
    "comment_text": "Отличная идея, поддерживаю"
}
```

**idea_comment_reply**

```json
{
    "notification_type": "idea_comment_reply",
    "subscription_type": "ideas",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "idea_id": 120,
    "idea_title": "Webhook retries",
    "comment_id": 778,
    "comment_text": "Отличная идея, поддерживаю"
}
```

**idea_status_changed**

```json
{
    "notification_type": "idea_status_changed",
    "subscription_type": "ideas",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "idea_id": 120,
    "idea_title": "Webhook retries",
    "idea_status": "planned",
    "idea_planned_date": "2026-03-10",
    "idea_is_author": false
}
```

#### Режим праздников

**holiday_mode_ended**

```json
{
    "notification_type": "holiday_mode_ended",
    "subscription_type": "holiday_mode",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42
}
```

#### API ключи

**api_key_expire_soon_3**

```json
{
    "notification_type": "api_key_expire_soon_3",
    "subscription_type": "api_key_alerts",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "api_key_id": 33
}
```

**api_key_expired**

```json
{
    "notification_type": "api_key_expired",
    "subscription_type": "api_key_alerts",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "api_key_id": 33
}
```

#### Безопасность

**new_login**

```json
{
    "notification_type": "new_login",
    "subscription_type": "security_alerts",
    "created_at": "2026-02-16T10:21:30.000Z",
    "account_id": 42,
    "login_at": "2026-02-16T10:20:00.000Z",
    "login_ip": "198.51.100.24",
    "login_user_agent": "Mozilla/5.0 ...",
    "login_time_zone": "Europe/Moscow"
}
```

---

Источник: https://statuser.cloud/docs/webhook-notification
