Переходите с UptimeRobot? Импортируйте мониторы одним кликом по ключу API только для чтения.Начать бесплатно →
  1. Главная
  2. Решения
  3. Разработчикам
Для разработчиков

Мониторинг, которым управляют из скрипта

Всё, что панель управления делает с монитором, — это один curl, а остальное — адрес, который вы пингуете.

Начать бесплатно Цена простоя

API в трёх вкладках

Создать, проверить, прочитать обратно

Запрос, шаг CI, который им пользуется, и JSON, который возвращается.

API

curl

curl -X POST https://app.tenium.app/api/v1/monitors \
  -H "Authorization: Bearer $TENIUM_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"api-prod","type":"http",
       "url":"https://api.example.com/health",
       "intervalSec":60,"expectedStatus":["2xx"]}'

GitHub Action

name: deploy
on: { push: { branches: [main] } }
jobs:
  deploy:
    runs-on: ubuntu-latest
    env:
      B: https://app.tenium.app/api/v1
      ID: ${{ vars.TENIUM_MONITOR_ID }}
      H: "Authorization: Bearer ${{ secrets.TENIUM_KEY }}"
    steps:
      - uses: actions/checkout@v4
      - run: curl -fsS -X POST -H "$H" "$B/monitors/$ID/pause"
      - run: ./deploy.sh
      - if: always()
        run: curl -fsS -X POST -H "$H" "$B/monitors/$ID/resume"
      - name: Verify from outside
        run: |
          curl -fsS -X POST -H "$H" "$B/monitors/$ID/check"
          sleep 20
          curl -fsS -H "$H" "$B/monitors/$ID" | jq -e '.status == "up"'

Ответ

{
  "id": "a3f1c2d4-9e8b-4f6a-b7c5-1d2e3f4a5b6c",
  "name": "api-prod",
  "type": "http",
  "url": "https://api.example.com/health",
  "intervalSec": 60,
  "expectedStatus": ["2xx"],
  "status": "pending",
  "paused": false,
  "nextCheckAt": "2026-01-20T10:15:03Z",
  "createdAt": "2026-01-20T10:15:00Z"
}

Ключи с правом записи требуют Pro или Agency; ключи только для чтения работают на всех тарифах.

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

Иллюстративный макет

Что это даёт вашей роли

Три вещи, которые здесь важны

Простой REST API

JSON на входе и выходе, ключи bearer, курсоры. Ключи только для чтения — на всех тарифах, с записью — на Pro и Agency.

Подписанные webhook

События down, up, degraded, heartbeat_missed и ssl_expiry с подписью HMAC-SHA256 — с Pro. Неудачные доставки повторяются до 3 раз.

Проверки по телу ответа

Путь JSON с условием «равно», «содержит» или «больше» — с Starter. Ответ 200, в котором сказано, что очередь стоит, всё равно считается сбоем.

Оповещения приходят туда, где вы уже работаете

E-mail, Discord и Google Chat — на всех тарифах; Slack, Telegram, Teams и Mattermost — с тарифа Starter; webhook — с Pro; Zapier и PagerDuty — на Agency. SMS и голосовых звонков нет.

  • Slack
  • Telegram
  • Discord
  • PagerDuty
  • Zapier
  • Webhook
Типичный сценарий

Сервис, описанный в репозитории

Иллюстративный сценарий, а не история клиента

  1. Репозиторий инфраструктуры добавляет описание монитора рядом с сервисом.
  2. Пайплайн отправляет его в API ключом с правом записи, сохранённым как секрет CI.
  3. После релиза шаг CI вызывает проверку и валит задачу, если снаружи сервис не доступен.

Монитор существует, потому что существует код. Никому не нужно помнить, что его надо добавить.

Цена простоя

Сколько вам стоит час простоя?

Грубая честная цифра, чтобы сравнить её с ценой монитора. Считается в вашем браузере, ничего никуда не отправляется.

Ориентировочные потери$600

Для сравнения: тариф Starter стоит $7 в месяц. Выручка — это не все издержки (время поддержки, реклама, которая продолжает идти, доверие), так что считайте цифру нижней границей.

Создавайте монитор вместе с кодом сервиса

Монитор, который кто-то должен вспомнить добавить вручную, — это монитор, которого не будет в нужный день. Если инфраструктура уже лежит в репозитории, добавьте проверку туда же: один запрос с ключом с правом записи. Такие ключи доступны на Pro ($29) и Agency ($59), а ключ только для чтения, который можно отдать панели или Slack-боту, есть на всех тарифах, включая Free.

curl -X POST https://app.tenium.app/api/v1/monitors \
  -H "Authorization: Bearer $TENIUM_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"api-prod","type":"http","url":"https://api.example.com/health",
       "intervalSec":60,"expectedStatus":["2xx"]}'

Heartbeat — это просто адрес: вызовите его curl, wget или любым HTTP-клиентом методом GET или POST. Суффиксы обозначают начало, завершение и сбой, а вместе с запросом можно отправить до 10 КБ текста.

Проверки, которые читают ответ

Health-эндпоинт, возвращающий 200, когда базы уже нет, — классическая лживая проверка. С Starter можно проверять тело: путь JSON $.status равен ok, $.queue.depth меньше 100. Несколько правил объединяются через AND. Есть подписанные webhook и значки статуса для README.

Heartbeat — одна строка в конце скрипта

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

# crontab
0 3 * * * /usr/local/bin/backup.sh \
  && curl -fsS -m 10 https://ping.tenium.app/h/abc123 >/dev/null \
  || curl -fsS -m 10 https://ping.tenium.app/h/abc123/fail

Добавьте /start в начале скрипта, чтобы измерять время выполнения. Под этот шаблон подходят GitHub Actions, GitLab CI, таймеры systemd и Kubernetes CronJob, потому что все они умеют запускать curl. См. мониторинг cron-заданий и справочник по heartbeat.

Webhook и поток событий

На Pro контакт webhook получает JSON об открытии, подтверждении получения и закрытии инцидентов, а также о сроке действия SSL и домена, оповещения о времени ответа и опоздавшие heartbeat. Каждая доставка подписана. Минимальная проверка на Node — это десяток строк с createHmac и timingSafeEqual, и она есть в документации. Относитесь к приёмнику как к любому публичному адресу: проверяйте подпись и метку времени, быстро отвечайте 2xx, а долгую работу выполняйте потом. Ответы не 2xx повторяются пять раз примерно за полчаса. Форматы данных: данные webhook.

Бейджи и публичный статус

Для открытых проектов и внутренних порталов бейдж аптайма — это небольшой SVG, который можно вставить в README. Сгенерируйте его инструментом бейджей аптайма и вставьте разметку. Если нужна страница для людей, страницы статуса публикуют историю компонентов на вашем домене с тарифа Starter.

Ограничения, которые стоит знать, прежде чем строить на этом

  • Чтение: 600 запросов в минуту на ключ. Запись: 120 в минуту на ключ. В ответах есть заголовки X-RateLimit-*.
  • Пагинация курсорная, по умолчанию 50 результатов, максимум 200.
  • Каждый монитор — это один запрос; многошаговые сценарии и скрипты для браузера не поддерживаются.
  • Версия API стоит в пути (/v1); добавления без поломок версию не меняют, а несовместимые изменения действуют с перекрытием шесть месяцев.

Хотите, чтобы это сделал ассистент? Смотрите честное состояние наших планов по MCP-серверу.

Вопросы разработчиков

Какой тариф нужен для записи через API?

Читать мониторы, инциденты и проверки можно на любом тарифе. Создавать, менять и удалять — только ключом с правом записи на Pro ($29) или Agency ($59). Без него будет 403 с кодом plan_limit.

Нужен ли SDK для heartbeat?

Нет. Heartbeat — это адрес, который вы вызываете curl, wget или любым HTTP-клиентом. Суффиксы обозначают начало, завершение и сбой.

Можно ли проверять JSON-ответ?

Да, с Starter. Используйте пути с точками и скобками вроде $.data.items[0].id и условия «равно», «не равно», «содержит», «больше», «меньше» или «существует». Ответ 200, в теле которого сказано, что очередь стоит, всё равно считается сбоем.

Как аутентифицируются вызовы webhook?

Каждый запрос содержит заголовок X-Tenium-Signature с меткой времени и HMAC-SHA256 от тела по секрету контакта. Проверяйте его и отклоняйте устаревшие метки времени. Неудачные доставки повторяются с нарастающими паузами.

Есть ли SDK или MCP-сервер?

SDK нет, а MCP-сервер только запланирован. Поддерживается REST API, и простые примеры с curl в документации намеренно и есть всё, что вам нужно.

Создайте ключ только для чтения и посмотрите

Тариф Free, без карты. Настройки, затем ключи API, затем «Новый ключ».