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

Небольшой и простой JSON API для ваших мониторов

Авторизация через bearer-токен, курсорная пагинация, предсказуемые ошибки и примеры curl для каждого запроса.

Для чего нужен API

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

Все ответы — JSON, временные метки — ISO 8601 в UTC, идентификаторы — UUID. Базовый адрес — https://app.tenium.app/api/v1, основная версия входит в путь. Новые поля и эндпоинты могут появляться без смены версии; несовместимое изменение выйдет в новой основной версии с долгим периодом, когда будут работать обе, как описано в API: аутентификация.

Аутентификация и уровни доступа

Создайте ключ в разделе Настройки → Ключи API. Ключ показывается только один раз, а у каждого ключа есть уровень доступа: чтение или запись. Передавайте его как bearer-токен:

curl -H "Authorization: Bearer $TENIUM_KEY" \
  https://app.tenium.app/api/v1/monitors?limit=20

Ключи для чтения работают на каждом тарифе, в том числе на Free. Ключам с правом записи нужен Pro или Agency; на более низком тарифе запрос возвращает 403 с кодом plan_limit, а ключ только для чтения, использованный для записи, — 403 с кодом forbidden_scope. Ключ, созданный клиентом с доступом только для просмотра, видит лишь пространство этого клиента.

Эндпоинты

Пути указаны относительно /api/v1. «Чтение» работает на каждом тарифе; «Запись» требует ключа с правом записи на тарифе Pro или Agency.

МетодПутьДоступЧто делает
GET/monitorsЧтениеСписок мониторов; фильтры по clientWorkspaceId, type, status; курсорная пагинация
POST/monitorsЗаписьСоздаёт монитор любого типа
GET/monitors/{id}ЧтениеОдин монитор с текущим состоянием
PATCH/monitors/{id}ЗаписьМеняет только те поля, которые вы отправили
DELETE/monitors/{id}ЗаписьУдаляет монитор
POST/monitors/{id}/pauseЗаписьОстанавливает проверки, например на время деплоя
POST/monitors/{id}/resumeЗаписьСнова запускает проверки
POST/monitors/{id}/checkЗаписьСтавит в очередь немедленную проверку
GET/monitors/{id}/checksЧтениеИстория проверок со временем ответа и регионом
GET/incidentsЧтениеСписок инцидентов; фильтры по монитору, состоянию и датам
GET/incidents/{id}ЧтениеОдин инцидент с подтверждениями по регионам
POST/incidents/{id}/ackЗаписьПодтверждает получение и останавливает эскалацию
POST/incidents/{id}/notesЗаписьДобавляет заметку, которая появляется в хронологии и в отчётах
POST/status-pages/{id}/incidentsЗаписьПубликует ручной инцидент на странице статуса

Описание каждого поля: мониторы, инциденты, heartbeat-мониторы, данные webhook.

Примеры

Создание HTTP-монитора с правилом для ключевого слова внутри пространства клиента:

curl -X POST https://app.tenium.app/api/v1/monitors \
  -H "Authorization: Bearer $TENIUM_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Client A shop",
    "type": "http",
    "url": "https://shop.clienta.com",
    "intervalSec": 60,
    "expectedStatus": "200-299",
    "keyword": { "mode": "contains", "value": "Add to cart" },
    "clientWorkspaceId": "9a8b7c6d-0000-4000-8000-000000000000",
    "tags": ["woocommerce", "client-a"]
  }'

Поставить монитор на паузу на время деплоя, затем возобновить его и запросить немедленную проверку:

curl -X POST -H "Authorization: Bearer $TENIUM_KEY" \
  https://app.tenium.app/api/v1/monitors/$ID/pause
# ... deploy ...
curl -X POST -H "Authorization: Bearer $TENIUM_KEY" \
  https://app.tenium.app/api/v1/monitors/$ID/resume
curl -X POST -H "Authorization: Bearer $TENIUM_KEY" \
  https://app.tenium.app/api/v1/monitors/$ID/check

Список открытых инцидентов и подтверждение получения одного из них:

curl -H "Authorization: Bearer $TENIUM_KEY" \
  "https://app.tenium.app/api/v1/incidents?status=open"
curl -X POST -H "Authorization: Bearer $TENIUM_KEY" \
  https://app.tenium.app/api/v1/incidents/$INCIDENT/ack

Пагинация, ошибки и лимиты

  • Пагинация. Эндпоинты со списками принимают limit (по умолчанию 50, максимум 200) и cursor; если результатов больше, в ответе указано, откуда продолжать.
  • Ошибки. JSON-объект с ключом error, в котором есть статус, машиночитаемый код (например, validation, plan_limit, not_found или rate_limited), сообщение и, для ошибок валидации, поле. См. ошибки и лимиты.
  • Лимиты запросов. 600 запросов на чтение и 120 запросов на запись в минуту на один ключ. Немедленную проверку можно запросить не чаще одного раза в десять секунд для каждого монитора. В ответах есть заголовки X-RateLimit-*, а в ответе 429 — Retry-After.
  • Действуют лимиты тарифа. Попытка создать монитор сверх вашего лимита количества, минимального интервала или разрешённых типов мониторов возвращает 422 с кодом plan_limit, так же как и в приложении.

Heartbeat и webhook работают без ключа API

Ещё два способа интеграции не используют ключ API. У heartbeat-монитора есть собственный ping-адрес, который вызывает cron-задание или шаг CI; секретом служит идентификатор в адресе. А контакты типа webhook получают подписанные JSON-события, когда инцидент открывается, подтверждается или закрывается. Оба способа описаны в документации, и их стоит прочитать вместе с этой страницей, если вы настраиваете конвейер: heartbeat-мониторы, webhook.

Чего API пока не умеет

Нет эндпоинтов для окон обслуживания, контактов для оповещений и отчётов; ими управляют в приложении. Нет файла OpenAPI и SDK. Многошаговых мониторов не существует, поэтому API не может описать транзакцию из нескольких запросов. А MCP-слой для ассистентов поверх API ещё не создан; на странице MCP сказано, как обстоят дела. Разработчикам, которым нужен практический обзор, стоит перейти на страницу для разработчиков.

Вопросы об API

На каких тарифах доступен API?

Чтение по ключу API доступно на каждом тарифе, в том числе на Free. Запись — создание, изменение и удаление мониторов и подтверждение получения инцидентов — требует ключа с правом записи на тарифе Pro ($29) или Agency ($59).

Что будет, если я превышу лимит запросов?

Вы получите ответ 429 с заголовком Retry-After. Каждый ответ также содержит X-RateLimit-Limit, X-RateLimit-Remaining и X-RateLimit-Reset, чтобы скрипт мог притормозить, не доходя до лимита.

Открывает ли ключ доступ ко всем моим клиентам?

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

Есть ли официальный SDK или файл OpenAPI?

Пока нет. API небольшой, это простой JSON поверх HTTPS, а в документации для каждого примера используется curl. Интеграция с ассистентами запланирована, она описана на странице MCP.

Можно ли создавать окна обслуживания через API?

Пока нет. Окна обслуживания создают в приложении. Для развёртываний со скриптами вместо этого можно ставить мониторы на паузу и возобновлять их через API.

Создайте ключ для чтения за минуту

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