- Главная
- 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 → Новый ключ.