Skip to content

API Enterno.io

Программный доступ ко всем инструментам enterno.io: HTTP-заголовки, DNS, SSL, пинг, IP-геолокация, оценка здоровья, мониторы и страницы статуса. REST API с ответами в формате JSON.

Интерактивная документация (Swagger) → MCP-сервер (Claude Desktop) →

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

Все запросы к API v4 требуют ключ через заголовок X-API-Key. Используйте X-Idempotency-Key для безопасных повторных запросов.

Сохраняется в браузере. Используется всеми формами ниже.

Получите API-ключ, зарегистрировав аккаунт или в личном кабинете.

curl -H "X-API-Key: YOUR_KEY" \
  "https://enterno.io/api/v4/webhooks"

Каждый ответ содержит заголовок X-Request-Id для отслеживания.

Idempotency Key

Добавьте X-Idempotency-Key: unique-id к любому запросу на запись. Enterno.io вернёт кэшированный ответ при дублировании в течение 60 секунд.

curl -X POST "https://enterno.io/api/v4/webhooks" \
  -H "X-API-Key: YOUR_KEY" \
  -H "X-Idempotency-Key: create-wh-001" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://your-app.com/hook"}'

Формат ответа

API v4 использует тот же JSON-конверт, что v3, с "api_version": "4.0" в meta.

{
  "data": { ... },
  "meta": {
    "request_id": "a1b2c3d4e5f6a7b8c9d0e1f2",
    "duration_ms": 8,
    "cached": false,
    "api_version": "4.0"
  }
}

При ошибке:

{
  "error": {
    "code": "not_found",
    "message": "Ресурс не найден"
  },
  "meta": {
    "request_id": "a1b2c3d4e5f6a7b8c9d0e1f2",
    "duration_ms": 2,
    "api_version": "4.0"
  }
}

Лимиты запросов

Информация о лимитах включена в заголовки ответа:

ЗаголовокОписание
X-RateLimit-LimitМаксимум запросов в минуту
X-RateLimit-RemainingОставшиеся запросы в текущем окне
X-RateLimit-ResetUnix timestamp сброса лимита
Retry-AfterСекунды до повтора (только при 429)
Тариф Запросов/мин Дневной лимит Области
Free10100check, dns
Pro605 000check, dns, ssl, ip, ping, monitors, webhook
Business12050 000check, dns, ssl, ip, ping, monitors, webhook

Области

Каждый API-ключ имеет набор разрешённых областей. Запрос к недоступному эндпоинту вернёт ошибку 403.

Область Эндпоинт Описание
check/api/v3/check.phpПроверка HTTP-заголовков + оценка здоровья
dns/api/v3/dns.phpDNS-запрос + DNSSEC
ssl/api/v3/ssl.phpПроверка SSL/TLS + детали цепочки
ip/api/v3/ip.phpГеолокация IP
ping/api/v3/ping.phpПинг, проверка портов, трассировка
monitors/api/v3/monitors.phpCRUD мониторов + страницы статуса
webhook/api/v4/webhooks, /api/v4/eventsCRUD вебхук-подписок и лога событий

Webhooks — Управление подписками

Создавайте вебхук-подписки для получения HTTP POST уведомлений при изменении состояния мониторов, SSL-сертификатов или доменов.

Поддерживаемые типы событий

ОбластьОписание
monitor.downМонитор упал
monitor.upМонитор восстановлен
monitor.degradedСнижение скорости монитора
ssl.expiringSSL-сертификат скоро истекает
ssl.expiredSSL-сертификат истёк
domain.expiringДомен скоро истекает
testТестовое событие

Лимиты вебхуков по тарифам

Тариф Макс. вебхуков Ограничения событий
Free1monitor.down, monitor.up, test
Starter5Все события
Pro20Все события
Business50Все события

Список вебхуков

GET /api/v4/webhooks scope: webhook

Возвращает все вебхук-подписки аутентифицированного пользователя.

curl -H "X-API-Key: YOUR_KEY" \
  "https://enterno.io/api/v4/webhooks"

Создать вебхук

POST /api/v4/webhooks scope: webhook
ИмяТипОбязательныйОписание
urlstringДаURL назначения (требуется HTTPS)
namestringНетНазвание подписки (опционально)
secretstringНетHMAC-SHA256 секрет для проверки подписи (опционально)
eventsarrayНетТипы событий для подписки (по умолчанию: все)
curl -X POST "https://enterno.io/api/v4/webhooks" \
  -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://your-app.com/hooks/enterno",
    "name": "Production alerts",
    "events": ["monitor.down", "monitor.up", "ssl.expiring"]
  }'

Ответ

{
  "data": {
    "id": 12,
    "name": "Production alerts",
    "url": "https://your-app.com/hooks/enterno",
    "secret": "ent_wh_sk_***",
    "events": ["monitor.down", "monitor.up", "ssl.expiring"],
    "is_active": true,
    "created_at": "2026-03-28T06:00:00Z"
  },
  "meta": {"request_id": "...", "duration_ms": 18, "api_version": "4.0"}
}

Обновить вебхук

PUT /api/v4/webhooks?id=N scope: webhook
curl -X PUT "https://enterno.io/api/v4/webhooks?id=12" \
  -H "X-API-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"is_active": false}'

Удалить вебхук

DELETE /api/v4/webhooks?id=N scope: webhook
curl -X DELETE "https://enterno.io/api/v4/webhooks?id=12" \
  -H "X-API-Key: YOUR_KEY"

Проверка подписи webhook

Каждая доставка на ваш webhook-URL подписывается общим секретом secret. Два заголовка позволяют проверить целостность запроса и защититься от replay-атак:

Заголовок Значение Назначение
X-Enterno-Timestamp Unix-время (сек) в момент отправки Отклонить если разница с локальным временем > 300 сек
X-Enterno-Signature-V2 sha256=<hex> HMAC-SHA256(secret, timestamp + "." + body)
X-Enterno-Signature sha256=<hex> Legacy — HMAC только по телу, без защиты от replay. Оставлен для существующих интеграций. Будет удалён 2026-07-01.

Проверка на PHP (рекомендуется)

<?php
$secret  = getenv('ENTERNO_WEBHOOK_SECRET');          // your shared secret
$ts      = $_SERVER['HTTP_X_ENTERNO_TIMESTAMP'] ?? '';
$sig     = $_SERVER['HTTP_X_ENTERNO_SIGNATURE_V2'] ?? '';
$body    = file_get_contents('php://input');

// 1. Replay window — reject timestamps older than 5 minutes
if (abs(time() - (int)$ts) > 300) {
    http_response_code(400);
    exit('stale timestamp');
}

// 2. Compute expected signature
$expected = 'sha256=' . hash_hmac('sha256', $ts . '.' . $body, $secret);

// 3. Timing-safe compare
if (!hash_equals($expected, $sig)) {
    http_response_code(401);
    exit('bad signature');
}

$payload = json_decode($body, true);
// …handle the event…

Проверка на Node.js

const crypto = require('crypto');

function verify(req, secret) {
  const ts   = req.headers['x-enterno-timestamp'];
  const sig  = req.headers['x-enterno-signature-v2'];
  const body = req.rawBody;                             // use a raw-body parser

  if (Math.abs(Date.now() / 1000 - Number(ts)) > 300)
    throw new Error('stale timestamp');

  const expected =
    'sha256=' + crypto.createHmac('sha256', secret)
                      .update(ts + '.' + body)
                      .digest('hex');

  if (!crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(sig)))
    throw new Error('bad signature');
}

Окно миграции: старый X-Enterno-Signature (без timestamp) продолжает отправляться параллельно с V2 до 2026-07-01. Если используете старый формат — переключайтесь на V2 до этой даты.

Тест доставки

POST /api/v4/webhooks?action=test&id=N scope: webhook
curl -X POST "https://enterno.io/api/v4/webhooks?action=test&id=12" \
  -H "X-API-Key: YOUR_KEY"

Events — История доставки

Просматривайте историю доставки вебхуков с количеством попыток, HTTP-кодами ответов и причинами ошибок.

GET /api/v4/events scope: webhook
ИмяТипОписание
webhook_idintegerФильтр по ID вебхука (опционально)
event_typestringФильтр по типу события
statusstringФильтр: delivered, retrying, failed, dead, pending
pageintegerНомер страницы (по умолчанию 1)
per_pageintegerЭлементов на странице, макс. 100 (по умолчанию 25)
curl -H "X-API-Key: YOUR_KEY" \
  "https://enterno.io/api/v4/events?webhook_id=12&status=failed"

Ответ

{
  "data": [
    {
      "id": 501,
      "webhook_id": 12,
      "event_type": "monitor.down",
      "status": "delivered",
      "http_status_code": 200,
      "attempts": 1,
      "created_at": "2026-03-28T06:05:00Z",
      "delivered_at": "2026-03-28T06:05:01Z"
    }
  ],
  "meta": {
    "request_id": "...",
    "duration_ms": 12,
    "api_version": "4.0",
    "pagination": {"total": 1, "page": 1, "per_page": 25, "pages": 1}
  }
}

Коды ошибок

HTTP код Код ошибки Описание
400missing_parameterОтсутствуют или некорректны параметры
401auth_requiredОтсутствует API-ключ
401invalid_api_keyНеверный или неактивный API-ключ
403insufficient_scopeКлюч не имеет нужной области доступа
404not_foundРесурс не найден
405method_not_allowedHTTP-метод не разрешён
409conflictИдемпотентный запрос уже выполняется
429rate_limit_exceededПревышен лимит
429daily_limit_exceededПревышен дневной лимит запросов

Миграция с v3

Аутентификация, лимиты и формат ответа идентичны v3. Переключитесь на пути /api/v4/ и добавьте scope webhook к вашему API-ключу.

v3v4
/api/v3/check.phpИспользуйте v3 — в v4 не изменился
/api/v3/monitors.phpИспользуйте v3 — в v4 не изменился
Вебхуки (только UI)/api/v4/webhooks
Лог событий (только UI)/api/v4/events