Довідник API: монітори

Можливі значення полів

Локація монітора

ЗначенняОпис
US_EAST_1Пн. Вірджинія
CA_CENTRAL_1Канада (Монреаль)
EU_CENTRAL_1Франкфурт
AP_NORTHEAST_1Токіо

Типи сповіщень монітора

ЗначенняОпис
INCIDENTСповіщення-інцидент
EMAILСповіщення на email
SMSСповіщення через SMS
SLACKСповіщення у Slack
DISCORDСповіщення у Discord
MICROSOFT_TEAMSСповіщення у Microsoft Teams
PHONE_CALLТелефонний дзвінок
WEBHOOKСповіщення вебхуком
GOOGLE_CHATСповіщення у Google Chat
WHATSAPPСповіщення у WhatsApp

Статус монітора

ЗначенняОпис
UPМонітор працює нормально
DOWNМонітор упав
DEGRADEDУ монітора є проблеми
UNKNOWNСтан монітора визначити не вдалося

Отримати монітори

Через цей ендпоінт можна знайти та переглянути список усіх наявних моніторів.

Ендпоінт:

GET /:page_id/monitors

Параметри запиту

ПараметрТипЗа замовчуваннямОпис
pagenumber1Номер сторінки, яку потрібно отримати.
limitnumber100Кількість моніторів на сторінку.
searchstringnullПошуковий термін для фільтрації результатів.
statusenumnullФільтр за статусом ('UP', 'DOWN', 'UNKNOWN', 'DEGRADED').

Приклад запиту

GET /1/monitors?limit=3&page=2&status=DOWN

Приклад відповіді

{
"monitors": [{ "...": "monitor objects" }],
"total": 10,
"page": 3,
"totalPages": 5,
"limit": 2
}

Створити монітор

Ендпоінт:

POST /monitors

Приклад запиту

{
"pageId": "page123",
"url": "https://example.com",
"httpMethod": "GET",
"body": null,
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer token"
},
"queryParams": {
"search": "test",
"limit": "10"
},
"basicAuth": {
"username": "user",
"password": "password"
},
"type": "HTTP",
"assertions": [
{
"type": "STATUSCODE",
"comparison": "EQUALS",
"selector": null,
"target": "200"
}
],
"alerts": ["alert-id-1", "alert-id-2"],
"name": "Example Monitor",
"locations": "US_EAST_1",
"checksInterval": 300,
"createComponent": true,
"createMetric": true,
"onFail": {
"createIncident": true,
"createOutageDuration": true,
"publishIncident": true,
"notifySubscribers": true
},
"onRecover": {
"resolveIncident": true,
"resolveOutageDuration": true,
"publishIncident": true,
"notifySubscribers": true
}
}

Приклад відповіді

{
"monitor": {
"pageId": "page123",
"url": "https://example.com",
"httpMethod": "GET",
"body": null,
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer token"
},
"queryParams": {
"search": "test",
"limit": "10"
},
"basicAuth": {
"username": "user",
"password": "password"
},
"type": "HTTP",
"assertions": [
{
"id": "assertion1",
"type": "STATUSCODE",
"comparison": "EQUALS",
"selector": null,
"target": "200"
}
],
"alerts": ["alert1", "alert2"],
"name": "Example Monitor",
"locations": "US_EAST_1",
"checksInterval": 300,
"createComponent": true,
"createMetric": true,
"onFail": {
"createIncident": true,
"createOutageDuration": true,
"publishIncident": true,
"notifySubscribers": true
},
"onRecover": {
"resolveIncident": true,
"resolveOutageDuration": true,
"publishIncident": true,
"notifySubscribers": true
},
"createdAt": "2023-08-08T12:00:00Z",
"updatedAt": "2023-08-08T12:00:00Z"
},
"message": "Monitor created successfully"
}

Оновити монітор

Ендпоінт:

PUT /monitors/:id

Приклад запиту

{
"url": "https://updated.com",
"name": "Updated Monitor Name"
}

Приклад відповіді

{
"monitor": {
"pageId": "page123",
"url": "https://updated.com",
"httpMethod": "GET",
"body": null,
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer token"
},
"queryParams": {
"search": "test",
"limit": "10"
},
"basicAuth": {
"username": "user",
"password": "password"
},
"type": "HTTP",
"assertions": [
{
"id": "assertion1",
"type": "STATUSCODE",
"comparison": "EQUALS",
"selector": null,
"value": "200"
}
],
"alerts": ["alert1", "alert2"],
"name": "Updated Monitor Name",
"locations": "US_EAST_1",
"checksInterval": 300,
"createComponent": true,
"createMetric": true,
"onFail": {
"createIncident": true,
"createOutageDuration": true,
"publishIncident": true,
"notifySubscribers": true
},
"onRecover": {
"resolveIncident": true,
"resolveOutageDuration": true,
"publishIncident": true,
"notifySubscribers": true
},
"createdAt": "2023-08-08T12:00:00Z",
"updatedAt": "2023-08-08T12:00:00Z"
},
"message": "Monitor updated successfully"
}

Видалити монітор

Ендпоінт:

DELETE /monitors/:id

Приклад запиту

DELETE /monitors/monitor-id-1

Приклад відповіді

{
"message": "Monitor deleted successfully."
}

Отримати логи монітора

Ендпоінт:

GET /monitors/:id/logs

Параметри запиту

ПараметрТипЗа замовчуваннямОпис
limitnumber100Кількість елементів на сторінку. Не може перевищувати 1000.
pagenumber1Номер сторінки, яку потрібно отримати.
monitorIdstring-ID монітора.
locationstringnullЛокація монітора.
createdAtstring | object | numbernullДата створення. Може бути рядком, числом або обʼєктом із полями gte і lte.
isSuccessfulbooleannullЧи була перевірка успішною.
isSSLCheckbooleannullЧи є перевірка SSL-перевіркою.
httpStatusCodestringnullHTTP-код статусу відповіді.
status('UP', 'DOWN', 'UNKNOWN', 'DEGRADED')nullСтатус монітора.
dnsTimestring | number | objectnullЧас, витрачений на розвʼязання DNS.
tcpTimestring | number | objectnullЧас, витрачений на TCP-зʼєднання.
tlsTimestring | number | objectnullЧас, витрачений на TLS-рукостискання.
firstByteTimestring | number | objectnullЧас до отримання першого байта.
downloadTimestring | number | objectnullЧас, витрачений на завантаження.
responseTimestring | number | objectnullЗагальний час відгуку.
performanceTimestring | number | objectnullЧас продуктивності.
accessabilityScorestring | number | objectnullОцінка доступності.
seoScorestring | number | objectnullОцінка SEO.
bestPracticesScorestring | number | objectnullОцінка дотримання найкращих практик.
successfulAssertionsstring | number | objectnullКількість успішних перевірок умов.
sortstringхронологічноПоле, за яким сортувати.

Приклад запиту

GET /monitors/monitor-id-1/logs?limit=100&page=1

Приклад відповіді

{
"monitorLogs": [
// {monitor log object},
// {monitor log object 2}
],
"total": 478,
"page": 1,
"totalPages": 5,
"limit": 100
}

Запустити перевірку монітора за ID

Ендпоінт:

GET /monitors/:id/run

Параметри запиту

ПараметрТипЗа замовчуваннямОпис
location'US_EAST_1', 'EU_CENTRAL_1', 'AP_NORTHEAST_1', 'AP_SOUTHEAST_2', 'CA_CENTRAL_1'-Локація монітора. Має бути одним із наведених значень.
retrybooleanfalseЧи потрібно повторювати операцію. Необовʼязковий.
monitorLogIdstringnullУнікальний ідентифікатор лога монітора. Необовʼязковий.

Приклад запиту

GET /monitors/monitor-id-1/run?monitorId=abc123&location=US_EAST_1&retry=true&monitorLogId=log456

Приклад відповіді

{
"status": "success",
"message": "Monitor check run successfully."
}

Створити сповіщення монітора

Ендпоінт:

POST /monitor-alerts

Приклад запиту

{
"type": "EMAIL",
"pageId": "page123",
"recipient": "user@example.com",
"recipientWorkspace": "workspace123",
"whenFails": true,
"whenRecovers": true,
"whenDegrades": false,
"whenSslExpires": true,
"sslExpiresInDays": 30,
"monitors": ["monitor1", "monitor2"],
"metadata": "Additional information about the alert"
}

Приклад відповіді

{
"monitor": {
"id": "alert123",
"siteId": "site123",
"type": "EMAIL",
"recipient": "user@example.com",
"whenFails": true,
"whenRecovers": true,
"whenDegrades": false,
"whenSslExpires": true,
"sslExpiresInDays": 30,
"monitors": [{ "id": "monitor1" }, { "id": "monitor2" }],
"createdAt": "2023-08-08T12:00:00Z",
"updatedAt": "2023-08-08T12:00:00Z",
"metadata": "Additional information about the alert"
},
"message": "Monitor Alert created successfully"
}

Оновити сповіщення монітора

Ендпоінт:

PUT /monitor-alerts/:id

Приклад запиту

{
"type": "EMAIL",
"monitors": ["monitor-1-id", "monitor-2-id", "monitor-3-id"]
}

Приклад відповіді

{
"monitor": {
"type": "EMAIL",
"pageId": "page123",
"recipient": "user@example.com",
"recipientWorkspace": "workspace123",
"whenFails": true,
"whenRecovers": true,
"whenDegrades": false,
"whenSslExpires": true,
"sslExpiresInDays": 30,
"monitors": ["monitor-1-id", "monitor-2-id"],
"metadata": "Additional information about the alert"
},
"message": "Monitor alert updated successfully."
}

Отримати сповіщення монітора

Ендпоінт:

GET /:page_id/monitor-alerts

Параметри запиту

ПараметрТипЗа замовчуваннямОпис
limitnumber100Кількість елементів на сторінку.
pagenumber1Номер сторінки, яку потрібно отримати.

Приклад запиту

GET /1/monitor-alerts?limit=2&page=3

Приклад відповіді

{
"monitorAlerts": [
{...monitor alert objects}
],
"total": 27,
"page": 3,
"totalPages": 14,
"limit": 2
}

Видалити сповіщення монітора

Ендпоінт:

DELETE /monitor-alerts/:id

Приклад запиту

DELETE /monitor-alerts/alert-id-1

Приклад відповіді

{
"message": "Monitor alert deleted successfully."
}

Створити групу моніторів

Ендпоінт:

POST /monitors-groups

Приклад запиту

{
"pageId": "page123",
"name": "Example Name",
"childId": "child456"
}

Приклад відповіді

{
"monitor": {
"id": "group123",
"name": "Example Name",
"siteId": "site123",
"collapsed": false,
"monitors": [{ "id": "monitor1" }, { "id": "monitor2" }],
"groupId": "parentGroup123",
"children": [
{ "id": "childGroup1", "name": "Child Group 1" },
{ "id": "childGroup2", "name": "Child Group 2" }
],
"order": 1,
"createdAt": "2023-08-08T12:00:00Z",
"updatedAt": "2023-08-08T12:00:00Z",
"parents": ["parent1", "parent2"],
"componentId": "component123"
},
"message": "Monitor group created successfully."
}

Оновити групу моніторів

Ендпоінт:

PUT /monitors-groups/:id

Приклад запиту

{
"name": "Updated Monitor Group Name"
}

Приклад відповіді

{
"monitor": {
"id": "group123",
"name": "Updated Monitor Group Name",
"siteId": "site123",
"collapsed": true,
"monitors": [{ "id": "monitor1" }, { "id": "monitor2" }],
"groupId": "parentGroup123",
"children": [
{ "id": "childGroup1", "name": "Child Group 1" },
{ "id": "childGroup2", "name": "Child Group 2" }
],
"order": 1,
"createdAt": "2023-08-08T12:00:00Z",
"updatedAt": "2023-08-08T12:00:00Z",
"parents": ["parent1", "parent2"],
"componentId": "component123"
},
"message": "Monitor group updated successfully."
}

Видалити групу моніторів

Ендпоінт:

DELETE /monitors-groups/:id

Приклад запиту

DELETE /monitors-groups/group-id-1

Приклад відповіді

{
"message": "Monitor group deleted successfully."
}

Додати монітори до групи

Ендпоінт:

POST /monitors-groups/:id/monitors

Приклад запиту

{
"monitors": ["monitor1", "monitor2", "monitor3"]
}

Приклад відповіді

{
"message": "Monitors added to the group successfully."
}

Запустити перевірку групи моніторів

Ендпоінт:

GET /monitors-groups/:id/run

Параметри запиту

ПараметрТипЗа замовчуваннямОпис
location'US_EAST_1', 'EU_CENTRAL_1', 'AP_NORTHEAST_1', 'AP_SOUTHEAST_2', 'CA_CENTRAL_1'-Локація монітора. Має бути одним із наведених значень.
retrybooleanfalseЧи потрібно повторювати операцію. Необовʼязковий.
monitorLogIdstringnullУнікальний ідентифікатор лога монітора. Необовʼязковий.

Приклад запиту

GET /monitors-groups/group-id-1/run

Приклад відповіді

{
"result": "OK",
"monitorLogId": "monitor-log-id-1"
}

Cron-монітори

Cron-монітори стежать за запланованими завданнями через HTTP-пінги. Про налаштування та роботу в панелі керування читайте в статті Моніторинг cron.

Можливі значення полів

Статус cron-монітора

ЗначенняОпис
UPМонітор працює нормально
DOWNМонітор упав
DEGRADEDУ монітора є проблеми
UNKNOWNСтан монітора визначити не вдалося

Стан cron-монітора

ЗначенняОпис
ACTIVEМонітор активно перевіряється
PAUSEDПеревірки монітора призупинено
MUTEDМонітор беззвучний (без сповіщень)

Статус лога cron-монітора

ЗначенняОпис
SUCCESSЗавдання успішно завершено
FAILUREЗавдання явно повідомило про збій
MISSEDЗавдання не надіслало пінг у межах вікна
LATEПінг надійшов після періоду, але в межах запасу
STARTEDЗавдання повідомило про старт (замір часу)

Період і запас часу

І period, і grace вказуються в секундах. period — це те, як часто має виконуватися завдання; grace — додатковий час, який дається, перш ніж монітор буде позначено як недоступний.

Отримати cron-монітори

Ендпоінт:

GET /:page_id/monitors/cron

Параметри запиту

ПараметрТипЗа замовчуваннямОпис
limitnumber100Кількість cron-моніторів на сторінку. Максимум — 100.
pagenumber1Номер сторінки.
searchstringnullПошуковий термін для фільтрації результатів за назвою.
statusenumnullФільтр за статусом ('UP', 'DOWN', 'UNKNOWN', 'DEGRADED').

Приклад запиту

GET /page123/monitors/cron?limit=10&page=1&status=DOWN

Приклад відповіді

{
"cronMonitors": [
{
"id": "cron-abc123",
"name": "Daily backup",
"slug": "my-page-x7k2m9n4p1q8w3e5",
"period": 86400,
"grace": 3600,
"status": "UP",
"state": "ACTIVE",
"siteId": "page123",
"order": 1,
"groupId": null,
"componentId": "component-id-1",
"onFailCreateIncident": true,
"onFailCreateOutageDuration": false,
"onFailPublishIncident": true,
"onFailNotifySubscribers": true,
"onRecoverResolveIncident": true,
"onRecoverResolveOutageDuration": false,
"onRecoverPublishIncident": true,
"onRecoverNotifySubscribers": true,
"createTemplateId": null,
"resolveTemplateId": null,
"createdAt": "2024-01-15T08:00:00.000Z",
"updatedAt": "2024-01-15T08:00:00.000Z"
}
],
"total": 1,
"page": 1,
"totalPages": 1,
"limit": 10
}

Створити cron-монітор

Ендпоінт:

POST /monitors/cron

Приклад запиту

{
"pageId": "page123",
"name": "Daily backup",
"period": 86400,
"grace": 3600,
"alerts": ["alert-id-1", "alert-id-2"],
"createComponent": true,
"onFail": {
"createIncident": true,
"createOutageDuration": false,
"publishIncident": true,
"notifySubscribers": true
},
"onRecover": {
"resolveIncident": true,
"resolveOutageDuration": false,
"publishIncident": true,
"notifySubscribers": true
}
}

Приклад відповіді

{
"cronMonitor": {
"id": "cron-abc123",
"name": "Daily backup",
"slug": "my-page-x7k2m9n4p1q8w3e5",
"period": 86400,
"grace": 3600,
"status": "UP",
"state": "ACTIVE",
"siteId": "page123",
"order": 1,
"groupId": null,
"componentId": "component-id-1",
"onFailCreateIncident": true,
"onFailCreateOutageDuration": false,
"onFailPublishIncident": true,
"onFailNotifySubscribers": true,
"onRecoverResolveIncident": true,
"onRecoverResolveOutageDuration": false,
"onRecoverPublishIncident": true,
"onRecoverNotifySubscribers": true,
"createTemplateId": null,
"resolveTemplateId": null,
"createdAt": "2024-01-15T08:00:00.000Z",
"updatedAt": "2024-01-15T08:00:00.000Z"
},
"message": "Cron monitor created successfully."
}

У відповіді є поле slug. Використовуйте його, щоб побудувати URL пінгів для свого завдання. Перший успішний пінг ставить у чергу фонове завдання перевірки.

Оновити cron-монітор

Ендпоінт:

PUT /monitors/cron/:id

Приклад запиту

{
"name": "Daily backup (updated)",
"period": 43200,
"grace": 1800,
"state": "PAUSED",
"alerts": ["alert-id-1"],
"onFail": {
"notifySubscribers": false
}
}

Приклад відповіді

{
"cronMonitor": {
"id": "cron-abc123",
"name": "Daily backup (updated)",
"slug": "my-page-x7k2m9n4p1q8w3e5",
"period": 43200,
"grace": 1800,
"status": "UP",
"state": "PAUSED",
"siteId": "page123",
"order": 1,
"groupId": null,
"componentId": "component-id-1",
"onFailCreateIncident": true,
"onFailCreateOutageDuration": false,
"onFailPublishIncident": true,
"onFailNotifySubscribers": false,
"onRecoverResolveIncident": true,
"onRecoverResolveOutageDuration": false,
"onRecoverPublishIncident": true,
"onRecoverNotifySubscribers": true,
"createTemplateId": null,
"resolveTemplateId": null,
"alerts": [
{
"id": "alert-id-1",
"type": "EMAIL",
"recipient": "ops@example.com"
}
],
"createdAt": "2024-01-15T08:00:00.000Z",
"updatedAt": "2024-01-16T10:30:00.000Z"
},
"message": "Cron monitor updated successfully."
}

Видалити cron-монітор

Ендпоінт:

DELETE /monitors/cron/:id

Приклад запиту

DELETE /monitors/cron/cron-abc123

Приклад відповіді

{
"cronMonitor": {
"id": "cron-abc123",
"name": "Daily backup",
"slug": "my-page-x7k2m9n4p1q8w3e5",
"period": 86400,
"grace": 3600,
"status": "UP",
"state": "ACTIVE",
"siteId": "page123",
"order": 1,
"groupId": null,
"componentId": "component-id-1",
"onFailCreateIncident": true,
"onFailCreateOutageDuration": false,
"onFailPublishIncident": true,
"onFailNotifySubscribers": true,
"onRecoverResolveIncident": true,
"onRecoverResolveOutageDuration": false,
"onRecoverPublishIncident": true,
"onRecoverNotifySubscribers": true,
"createTemplateId": null,
"resolveTemplateId": null,
"createdAt": "2024-01-15T08:00:00.000Z",
"updatedAt": "2024-01-15T08:00:00.000Z"
},
"message": "Cron monitor deleted successfully."
}

Отримати логи cron-монітора

Ендпоінт:

GET /monitors/cron/:id/logs

Параметри запиту

ПараметрТипЗа замовчуваннямОпис
limitnumber100Кількість логів на сторінку. Максимум — 127.
pagenumber1Номер сторінки. Максимум — 1000.
startDatestringрік томуПочаткова дата діапазону логів у форматі ISO 8601.
endDatestringзаразКінцева дата діапазону логів у форматі ISO 8601.
importanceenumnullФільтр логів за важливістю ('all', 'important').

Приклад запиту

GET /monitors/cron/cron-abc123/logs?limit=50&page=1&importance=important

Приклад відповіді

{
"logs": [
{
"id": "log-xyz789",
"monitorId": "cron-abc123",
"status": "SUCCESS",
"requestType": "GET",
"agent": "curl/8.4.0",
"ipAddress": "203.0.113.10",
"createdAt": "2024-01-16T06:00:00.000Z",
"startedAt": "2024-01-16T05:59:58.000Z"
}
],
"page": 1
}

Отримати зведення cron-монітора

Ендпоінт:

GET /monitors/cron/:id/summary

Приклад запиту

GET /monitors/cron/cron-abc123/summary

Приклад відповіді

{
"summary": {
"totalLogs": 120,
"totalFailedLogs": 3,
"availability": 97.5,
"oneDayAvailability": 100,
"previousDayAvailability": 100,
"sevenDayAvailability": 98.2,
"previousSevenDayAvailability": 96.1,
"thirtyDayAvailability": 97.5,
"previousThirtyDayAvailability": 95.8,
"lastSuccess": "2024-01-16T06:00:00.000Z",
"lastFailure": "2024-01-10T06:00:00.000Z",
"lastStarted": null,
"upSince": "2024-01-10T07:00:00.000Z",
"downSince": null
}
}

Ендпоінти пінгів

Ці ендпоінти не потребують автентифікації. Роль секрету виконує slug монітора.

Пінгувати можна через базовий URL API або через окремий cron-хост:

  • Успіх: https://cron.instatus.com/{slug} або GET / POST / HEAD /monitors/cron/{slug}
  • Збій: https://cron.instatus.com/{slug}/fail або GET / POST / HEAD /monitors/cron/{slug}/fail
  • Старт: https://cron.instatus.com/{slug}/start або GET / POST / HEAD /monitors/cron/{slug}/start

Надсилайте пінг успіху щоразу, коли ваше завдання завершується за розкладом. Щоб зафіксувати час виконання, надсилайте пінг старту перед запуском завдання та пінг успіху або збою після його завершення.

Приклад пінга успіху

curl https://cron.instatus.com/my-page-x7k2m9n4p1q8w3e5

Приклад відповіді

{
"id": "log-xyz789",
"monitorId": "cron-abc123",
"status": "SUCCESS",
"requestType": "GET",
"agent": "curl/8.4.0",
"ipAddress": "203.0.113.10",
"createdAt": "2024-01-16T06:00:00.000Z"
}

Якщо slug некоректний, відповідь буде такою:

{
"message": "Monitor not found"
}