Відповідних розділів не знайдено.
Host-Tracker REST API v1
Стабільний HTTP API з токен-автентифікацією для керування задачами моніторингу вебсайтів, контактами, підписками на сповіщення/звіти та читання статистики, простоїв та інцидентів.
Базова URL-адреса
Кожен шлях у цьому документі є відносним до базової URL-адреси. Дві точки входу обслуговують один і той самий API:
| Точка входу | Базова URL-адреса (BASE_URL) | Примітки |
|---|---|---|
| Пряма | https://api1.host-tracker.com/ | Рекомендовано для інтеграцій сервер-сервер. |
| Через головний сайт | https://www.host-tracker.com/api/web/v1/ | Проксіюється до того самого сервісу. Зручно, якщо ви вже звертаєтесь до www.host-tracker.com. |
У цьому довіднику виклик, записаний як GET tasks, означає
GET BASE_URL/tasks — тобто https://api1.host-tracker.com/tasks
або https://www.host-tracker.com/api/web/v1/tasks.
Тип вмісту та методи HTTP
За замовчуванням запити та відповіді мають тип application/json (див.
Угоди щодо XML). API використовує стандартні методи HTTP:
- GET — читання сутностей (задачі, контакти, підписки, статистика, простої, інциденти, агенти).
- POST — створення сутності або запуск дії.
- PUT — оновлення наявних сутностей.
- DELETE — видалення сутностей.
- PATCH — часткові оновлення (використовується для повторного надсилання коду підтвердження контакту).
Перевизначення HTTP-методу
Якщо ваш клієнт не може надсилати PUT, DELETE чи
PATCH, надішліть POST і додайте заголовок
X-HTTP-Method-Override із назвою потрібного методу. Наприклад, щоб оновити
задачі, надішліть POST на tasks із X-HTTP-Method-Override: PUT.
Угоди
Серіалізація JSON
JSON використовує назви властивостей у стилі camelCase. Порожні (null) поля пропускаються у відповідях
(порожні масиви все одно передаються як []). Порядок властивостей стабільний:
спочатку ідентифікатор та адреса/url, потім успадковані поля, потім поля, специфічні для типу.
Дата та час
Відповіді на створення/читання задач містять мітки часу у вигляді рядків ISO-8601 UTC (наприклад,
2024-06-21T22:26:23Z). Кінцеві точки статистики, простоїв, інцидентів та результатів
додатково використовують подвійне представлення: кожен час подається і як ціле число в секундах Unix
(суфікс Unix), і як зручний для читання рядок, відформатований відповідно до формату
дати та часового поясу профілю облікового запису. Фільтри запитів приймають секунди Unix та/або відформатовані
рядки залежно від кінцевої точки (це задокументовано для кожної кінцевої точки нижче). Усі мітки часу Unix —
це секунди від 1970-01-01T00:00:00Z.
Узгодження вмісту XML
Усі кінцеві точки також можуть повертати XML. Надішліть Accept: application/xml, щоб
отримати тіло у форматі XML замість JSON; відповідь використовує класичне представлення .NET
XmlSerializer того самого графа об'єктів. JSON — формат за замовчуванням і
рекомендований.
CORS
Крос-доменні запити дозволені. Прості (без облікових даних) запити приймаються з будь-якого джерела
(Access-Control-Allow-Origin: *). Запити, що надсилають cookie/облікові дані,
приймаються лише з джерел *.host-tracker.com. Клієнти, що використовують токен
(через заголовок Authorization, як описано тут), не підпадають під це обмеження
джерел з обліковими даними.
Автентифікація
Кожна кінцева точка, окрім POST users/token та анонімних кінцевих точок списку
агентів, вимагає автентифікації. Приймаються дві схеми:
- Bearer-токен — отримується з
POST users/token, надсилається якAuthorization: bearer <token>. Це основна схема. - HTTP Basic —
Authorization: Basic <base64(login:password)>. Облікові дані декодуються як ISO-8859-1. Зручно для швидких тестів; для автоматизації перевага надається bearer-токену.
POST users/token анонімно
Обмін логіна та пароля на bearer-токен. Токен дійсний протягом 48 годин.
Тіло запиту
{
"login": "your-login",
"password": "your-password"
}
| Поле | Тип | Опис |
|---|---|---|
login | string | Логін облікового запису. Обов'язкове. Також приймається email облікового запису. |
password | string | Пароль облікового запису. Обов'язкове. |
forLogin | string | Необов'язкове. Логін супер-облікового запису, від імені якого потрібно діяти (імперсонація субоблікового запису — див. нижче). |
Відповідь — 200 OK
{
"ticket": "<bearer token>",
"expirationTime": "2024-06-23T22:26:23Z",
"expirationUnixTime": 1719181583
}
У разі невдачі відповідь — 401 із машинним кодом
IncorrectLoginOrPassword (або AccessDenied, якщо доступ
до API вимкнено для облікового запису) та заголовком WWW-Authenticate: Bearer.
Використання токена
GET BASE_URL/tasks HTTP/1.1
Host: api1.host-tracker.com
Accept: application/json
Authorization: bearer 3DD135...5EE510417
Імперсонація субоблікового запису (forLogin)
Якщо супер-обліковий запис надав вашому субобліковому запису доступ до своїх даних, увійдіть як субобліковий
запис, але передайте логін супер-облікового запису у forLogin. Отриманий токен
тоді дозволяє керувати супер-обліковим записом так, ніби кінцеві точки викликаються для вашого власного
облікового запису, з урахуванням прав, наданих супер-обліковим записом. Наприклад, якщо надано доступ лише
для читання до задач моніторингу, GET-запити виконуються успішно, але POST/PUT/PATCH/DELETE щодо задач
відхиляються.
# 1. Отримати токен імперсонації
POST BASE_URL/users/token HTTP/1.1
Content-Type: application/json
{
"login": "subaccount-login",
"password": "subaccount-password",
"forLogin": "superaccount-login"
}
# 2. Використати отриманий ticket, щоб прочитати задачі СУПЕР-облікового запису
GET BASE_URL/tasks HTTP/1.1
Authorization: bearer <ticket from step 1>
curl
# отримати токен і зберегти його
TOKEN=$(curl -s -X POST https://api1.host-tracker.com/users/token \
-H "Content-Type: application/json" \
-d '{"login":"your-login","password":"your-password"}' \
| grep -o '"ticket":"[^"]*"' | cut -d'"' -f4)
# виклик автентифікованої кінцевої точки
curl -s https://api1.host-tracker.com/tasks \
-H "Authorization: bearer $TOKEN"
Помилки та машинні коди
Помилки повертають стандартний HTTP-код статусу плюс короткий машинно-читаний код, за яким ваша інтеграція може розгалужувати логіку. Тіло відповіді — звичайний текстовий опис англійською (не JSON), призначений для людей/логів.
Машинний код передається двома способами:
- Заголовок відповіді
X-HT-Reason— містить код у кожній відповіді та для будь-якої версії HTTP. Це рекомендований спосіб визначення типу помилки. - Фраза причини HTTP/1.1 — рядок статусу виглядає, наприклад, як
HTTP/1.1 400 SimilarExists. Збережено для зворотної сумісності, але зауважте, що HTTP/2 та HTTP/3 прибрали фрази причини з протоколу, тож це поле може бути порожнім, коли з'єднання узгоджує HTTP/2+. Надавайте перевагуX-HT-Reason.
HTTP/1.1 400 SimilarExists
X-HT-Reason: SimilarExists
Content-Type: text/plain; charset=utf-8
Same task allready exists
401 із
WWW-Authenticate: Bearer та одним з AccessDenied,
WrongTicket, TicketExpired чи
IncorrectLoginOrPassword.
Довідник кодів помилок
Кожен машинний код, який може повернути API, згрупований за областю, з типовим HTTP-статусом. Якщо не
зазначено інше, помилки мають статус 400 Bad Request.
Автентифікація
| Код | Статус | Значення |
|---|---|---|
AccessDenied | 401 | Доступ до API вимкнено для цього облікового запису, або в абонента немає потрібних прав. |
IncorrectLoginOrPassword | 401 | Логін/пароль відхилено на users/token. |
WrongTicket | 401 | Bearer-токен неправильно сформований / нечитабельний. |
TicketExpired | 401 | Термін дії bearer-токена вичерпано — отримайте новий. |
RequestThrottled | 429 | Перевищено обмеження частоти запитів (див. Обмеження частоти запитів). Містить Retry-After. |
Задачі
| Код | Статус | Значення |
|---|---|---|
NotFound | 404 | Запитуваної задачі не існує. |
SimilarExists | 400 | Задача з тим самим типом і ключем уже існує (якщо тільки для облікового запису не дозволено схожі задачі). |
EmptyTaskData | 400 | Дані задачі не надано. |
UncomplitedData | 400 | Дані задачі неповні. |
NoIdInTaskData | 400 | Запитано оновлення, але відсутній id задачі. |
WrongEditableTaskDataType | 400 | Тип корисного навантаження редагування не відповідає типу цільової задачі. |
WrongTaskType | 400 | Невідомий тип задачі. |
WrongTaskStatus | 400 | Непідтримуване значення status (очікується Enabled/Disabled). |
WrongInterval | 400 | Інтервал моніторингу не є одним з прийнятних значень (див. tasks/intervals). |
EmptyUrl | 400 | Не надано URL/хост для задачі, яка його потребує. |
WrongUrl | 400 | URL-адреса недійсна. |
WrongSchema | 400 | Непідтримувана схема URL-адреси. |
BadIP | 400 | URL-адреса резолвиться у заборонену або некоректну IP-адресу. |
UrlInBlackList | 400 | URL-адреса перебуває у внутрішньому чорному списку. |
WrongHttpMethod | 400 | Непідтримуваний метод HTTP для HTTP-задачі (дозволено: Get, Post, Head). |
WrongKeywordMode | 400 | Непідтримуваний режим ключових слів. |
WrongPort | 400 | Недійсний порт для задачі перевірки порту. |
WrongAgentPool | 400 | Одного або кількох запитаних пулів агентів не існує. Повідомлення містить перелік неправильних та доступних пулів. |
SelectMoreAgents | 400 | Вибрані пули агентів не містять достатньої кількості агентів (потрібно 7). Повідомлення містить кількість по кожному пулу. |
ApiFullLogNotAllowed | 400 | fullLog доступний лише на розширених пакетах. |
WrongExpectedSLA | 400 | expectedSLA має бути в межах від 0 до 100. |
WrongDate | 400 | Недійсна дата початку/кінця у фільтрі. |
WrongDateFormat | 400 | Рядок дати не відповідає потрібному формату (вказаному в повідомленні). |
EndDateIsGreaterThanStartDate | 400 | Дата початку має бути ≤ дати кінця. |
StartEndIntervalIsTooBig | 400 | Запит результатів повернув би понад 10 000 рядків. Повідомлення містить допустимий інтервал (див. GET tasks). |
WrongSubscription | 400 | Вбудована підписка в тілі задачі недійсна (внутрішній код/повідомлення підписки передається без змін). |
EmptyFilter | 400 | Масовий DELETE tasks надіслано з порожнім фільтром (відхилено, щоб запобігти видаленню всього облікового запису). |
Контакти
| Код | Статус | Значення |
|---|---|---|
NotFound | 404 | Запитуваного контакту не існує. |
SimilarExists | 400 | Контакт з таким самим типом, шлюзом, адресою та затримкою сповіщення вже існує. |
EmptyContactData | 400 | Дані контакту не надано. |
UncomplitedData | 400 | Дані контакту неповні. |
NoIdInContactData | 400 | Запитано оновлення, але відсутній id контакту. |
EmptyAddress | 400 | Не надано адресу під час створення контакту. |
WrongContactType | 400 | Невідомий тип контакту (також повертається для застарілого шляху створення/оновлення IM). |
WrongEditableContactDataType | 400 | Тип корисного навантаження редагування не відповідає типу цільового контакту. |
WrongEmailFormat | 400 | Недійсна email-адреса, або непідтримуваний формат email-звіту. |
WrongPhoneFormat | 400 | Номер телефону має містити лише цифри (провідний + дозволено). |
WrongSmsGateway | 400 | Невідомий SMS-шлюз. |
WrongIMGateway | 400 | Невідомий IM-шлюз. |
WrongAlertDelay | 400 | alertDelay не є одним з прийнятних значень (див. contacts/delays). |
WrongActivePeriodInterval | 400 | Недійсний початок/кінець періоду активності. |
WrongActiveDay | 400 | Непідтримувана назва дня активності. |
EmptyFilter | 400 | Масовий DELETE contacts надіслано з порожнім фільтром (відхилено). |
Підписки
| Код | Статус | Значення |
|---|---|---|
AlertsAndReportsAreEmpty | 400 | Запис підписки не містить ані типів сповіщень, ані типів звітів. |
UnknownAlertType | 400 | Тип сповіщення не є одним з Up, Down, RepeatedlyDown. |
UnknownReportType | 400 | Тип звіту не є одним з Day, Week, Month, Quarter, Year. |
Обмеження частоти запитів
Запити обмежуються за частотою для кожного клієнта окремо на кожній кінцевій точці. Перевищення ліміту
повертає 429 з машинним кодом RequestThrottled та
заголовком Retry-After (у секундах).
| Область | Ліміт |
|---|---|
| Загальні кінцеві точки, на обліковий запис + кінцеву точку | 6 запитів/секунду та 120 запитів/хвилину |
Кінцеві точки коду підтвердження (contacts/{id}/code), на обліковий запис + кінцеву точку | 1 запит/секунду та 2 запити/хвилину |
| Анонімні кінцеві точки | Ті самі 6/с + 120/хв, з ключем за IP-адресою клієнта |
HTTP/1.1 429 RequestThrottled
X-HT-Reason: RequestThrottled
Retry-After: 1
Content-Type: application/json; charset=utf-8
"API calls quota exceeded! maximum admitted 6 per s."
Задачі моніторингу
GET tasks/types
Повертає масив назв типів задач, відомих системі:
["API","CntCheck","Counter","DNSBL","Database","DomainExp","Http",
"Ping","Port","RusRegBL","SSLExp","Snmp","Tran","Waterfall","WebRisk"]
tasks/http, tasks/ping,
tasks/port, tasks/rusbl).
GET tasks/intervals
Повертає масив інтервалів моніторингу (у хвилинах), прийнятних для вашого облікового запису, наприклад
[1,5,15,30,60]. Використовуйте одне з цих значень для поля
interval під час створення задачі; будь-яке інше значення призводить до
WrongInterval.
GET tasks
Список задач моніторингу. Усі параметри запиту необов'язкові; без жодного повертаються всі задачі облікового
запису. Повторіть параметр, щоб передати масив, наприклад ?ids=guid1&ids=guid2.
Параметр info
Запитує додаткові дані, вбудовані в кожну задачу. Поєднуйте значення комами
(?info=stats,subscriptions) або передайте еквівалентне ціле число бітової маски:
| Значення | Біт | Ефект |
|---|---|---|
subscriptions | 1 | Включити підписки задачі на сповіщення/звіти у subscriptions. |
stats | 2 | Включити добову/місячну/річну/загальну доступність у stats. |
results | 4 | Включити результати перевірок для вікна sdtu…edtu у results (останній результат, якщо вікно не вказано). |
attachedResults | — | Включити останні результати прив'язаних перевірок (сертифікат, термін дії домену, DNSBL) у attached. Потребує відповідних прапорців check… у задачі. |
?info=stats,subscriptions,results еквівалентний ?info=7.
Параметри фільтра
| Параметр | Тип | Опис |
|---|---|---|
ids | guid[] | Повернути лише ці id задач. Для одного id надавайте перевагу GET tasks/{id}. |
excludeIds | bool | З ids: повернути все, крім цих id. |
taskType / taskTypes | string / string[] | Фільтрувати за типом задачі (з урахуванням регістру), наприклад Http. |
excludeTaskTypes | bool | Інвертувати фільтр за типом. |
status | string | Enabled або Disabled (вимкнення користувачем). Наприклад, ?status=Disabled. |
url / urls | string / string[] | Фільтрувати за URL-адресою. Значення в urls мають бути URL-закодовані. |
urlSearchLike | bool | З url (не urls): збіг за підрядком замість точного. |
excludeUrls | bool | Інвертувати фільтр за URL-адресою. |
name / names | string / string[] | Фільтрувати за назвою задачі. name/names у поєднанні з id/ids діє як OR; у поєднанні з іншими фільтрами — як AND. |
nameSearchLike | bool | З name: збіг за підрядком. |
excludeNames | bool | Інвертувати фільтр за назвою. |
interval / intervals | int / int[] | Фільтрувати за інтервалом моніторингу (у хвилинах). |
excludeIntervals | bool | Інвертувати фільтр за інтервалом. |
openStat | bool | Публічні задачі (публічна статистика/журнал подій). |
lastState | bool | true = наразі доступний, false = наразі недоступний. |
tags | string[] | Фільтрувати за тегом. |
overlimited | bool | Задачі з (true) або без (false) перевищення білінгового ліміту. |
active | bool | true = активна, false = вимкнена системою (перевищення ліміту, низький баланс, …). Для вимкнення користувачем використовуйте status. |
sdtu / edtu | int64 | Початок/кінець вікна в секундах Unix (UTC). Використовується лише коли встановлено info=results; надайте обидва значення. edtu має бути > sdtu. |
(edtu − sdtu) × (#задач) / (сер. інтервал)
не повинна перевищувати 10 000. Інакше відповідь — 400 StartEndIntervalIsTooBig,
повідомлення якої містить найбільший інтервал, що вписався б у ліміт. Це обмеження стосується лише читання результатів задач.
Відповідь — 200 OK
Масив об'єктів задач. Точний набір полів залежить від типу задачі; спільна база включає
id, name, taskType,
enabled, interval,
lastState, creationTime,
tags, agentPools, а також (якщо запитано через
info) subscriptions,
stats, results і
attached. Коли включено результати, кожен результат містить принаймні
timestamp (секунди Unix, UTC) та eventNumber; решта
полів специфічні для типу задачі (див. відповідь створення нижче для форми HTTP).
GET BASE_URL/tasks?info=stats,subscriptions&taskType=Http HTTP/1.1
Accept: application/json
Authorization: bearer <token>
GET tasks/{id:guid}
Отримати одну задачу за id. Приймає той самий параметр info (та
sdtu/edtu, коли info=results).
Повертає об'єкт задачі або 404 NotFound, якщо вона не існує.
POST tasks/http · tasks/ping · tasks/port · tasks/rusbl
Створити задачу моніторингу заданого типу. У разі успіху повертається 201 Created,
відносний заголовок Location: /tasks/{id} та повний об'єкт створеної задачі.
Тіло запиту — задача HTTP
{
// поля, специфічні для HTTP
"url": "https://www.example.com", // ОБОВ'ЯЗКОВЕ
"httpMethod": "Get", // Get | Post | Head (за замовчуванням Get)
"userAgent": "MyMonitor",
"referer": "https://www.google.com",
"acceptHeader": "application/json",
"followRedirect": false,
"treat300AsError": false, // якщо встановлено, followRedirect ігнорується
"checkDnsbl": false, // перевіряти домен на DNS-чорні списки
"checkDomainExpiration": false, // моніторити закінчення терміну дії домену (лише для валідних доменів)
"checkCertificateExpiration": false, // моніторити закінчення терміну дії TLS-сертифіката (лише https)
"checkRussianBlackLists": false,
"checkWebRisk": false,
"timeout": 40000, // мс до провалу перевірки
"keywords": ["error", "maintenance"],
"keywordMode": "ReverseAny", // див. режими ключових слів нижче
"userName": "basic-auth-user", // облікові дані для моніторованого ресурсу
"password": "basic-auth-pass",
"postParameters": "a=1\r\nb=2", // лише з httpMethod=Post
"ignoredStatuses": [404, 500],
// поля, спільні для кожного типу задачі
"interval": 5, // хвилини; має бути прийнятним інтервалом
"enabled": true,
"fullLog": false, // лише розширені пакети
"openStat": true,
"name": "My website",
"tags": ["production", "web"],
"agentPools": ["westeurope", "asia"], // див. примітки нижче
"subscriptions": [ /* вбудовані підписки, див. нижче */ ]
}
| Режим ключових слів | Задача OK, коли… |
|---|---|
PresentAny | у відповіді присутнє будь-яке ключове слово. |
PresentAll | присутні всі ключові слова. |
ReverseAny | відсутні всі ключові слова. |
ReverseAll | відсутнє будь-яке ключове слово. |
ReverseWithResult | відсутні всі ключові слова; повідомлення про помилку включає решту рядка відповіді, де з'явилося перше ключове слово (аналізуються перші 100 символів кожного рядка). |
agentPools вибирає місця моніторингу. Параметр необов'язковий (інакше
використовується типовий за профілем). Якщо вказано, пули разом мають містити щонайменше 7 агентів, інакше
запит завершується помилкою SelectMoreAgents. Невідомі id пулів завершуються
помилкою WrongAgentPool. Id пулів беруться з GET agents/pools.
Вбудовані підписки
Масив subscriptions підписує контакти на сповіщення/звіти цієї задачі під час
створення. Кожен запис використовує форму підписки; не встановлюйте
taskIds (він фіксований на нову задачу). Якщо contactIds
опущено, підписуються всі ваші підтверджені контакти. Підписки на звіти застосовуються лише до контактів
типу Email.
Інші типи задач
tasks/ping— тіло міститьhostплюс спільні поля.tasks/port— тіло міститьhostтаportплюс спільні поля.tasks/rusbl— перевірка чорного списку російського реєстру; тіло міститьurl, а такожignoreWarnings,doNotSendMsgOnWarnings,prefixMatchта спільні поля.
Відповідь — 201 Created (задача HTTP)
{
"id": "ef10cd12-93f9-e311-bec5-dc85de1f0bc2",
"url": "https://www.example.com",
"rawUrl": "https://www.example.com",
"name": "My website",
"creationTime": "2024-06-21T22:26:23Z",
"taskType": "Http",
"enabled": true,
"interval": 5,
"lastState": true,
"openStatEnabled": true,
"fullLogEnabled": false,
"tags": ["production", "web"],
"agentPools": ["westeurope", "asia"],
"subscriptions": [
{ "alertTypes": ["Up"], "taskIds": ["ef10cd12-...-0bc2"], "contactIds": ["4cedf037-...-0bc2"] },
{ "alertTypes": ["Down"], "taskIds": ["ef10cd12-...-0bc2"], "contactIds": ["4cedf037-...-0bc2"] },
{ "reportTypes": ["Month"], "taskIds": ["ef10cd12-...-0bc2"], "contactIds": ["4cedf037-...-0bc2"] }
],
"httpMethod": "Get",
"keywords": ["error"],
"keywordMode": "ReverseAny",
"timeout": 40000
}
curl
curl -s -X POST https://api1.host-tracker.com/tasks/http \
-H "Authorization: bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"url":"https://www.example.com","interval":5,"name":"My website"}'
PUT tasks & типізовані варіанти
Оновлення задач. Дві форми:
- За id —
PUT tasks/{id}(лише спільні поля), або типізованіPUT tasks/http/{id},tasks/ping/{id},tasks/port/{id},tasks/rusbl/{id}(також поля, специфічні для типу). Тіло має ту саму редаговану форму, що й при створенні; змінюються лише надіслані вами поля. - За фільтром —
PUT tasks?<filter>(лише спільні поля) або типізованийPUT tasks/{type}?<filter>(прив'язує фільтр до цього типу). Використовує ті самі параметри фільтра, що й GET tasks. Повертає оновлену задачу(і).
Нетипізований PUT tasks / PUT tasks/{id} може
торкатися лише полів, спільних для всіх типів задач — для зміни налаштувань, специфічних для типу,
використовуйте типізовану кінцеву точку.
DELETE tasks/{id:guid} & tasks
DELETE tasks/{id}— видалити одну задачу; повертає видалену задачу.DELETE tasks?<filter>— масове видалення за фільтром задач (фільтр також можна передати в тілі запиту). Повертає видалені задачі.
DELETE tasks без вибіркового
фільтра повертає 400 EmptyFilter замість видалення всього вашого облікового
запису. Щоб видалити все навмисно, ітеруйте явно.
POST tasks/$batch · task/$batch
Виконати кілька операцій із задачами в одному запиті. Тіло — масив JSON з підзапитами; відповідь —
масив JSON з підвідповідями в тому самому порядку. Підоперація обирається за останнім сегментом
relativeUrl (наприклад, http →
POST tasks/http). Тіло запиту має бути JSON
(Content-Type: application/json). Такий самий механізм існує для контактів на
contacts/$batch / contact/$batch.
| Поле запиту | Тип | Опис |
|---|---|---|
method | string | HTTP-метод підзапиту (POST, PUT, DELETE…). |
relativeUrl | string | Підресурс; останній сегмент обирає операцію (http, ping, port, rusbl…). |
contentType | string | Тип вмісту content, зазвичай application/json. |
content | string | Тіло підзапиту у вигляді рядка JSON. |
| Поле відповіді | Тип | Опис |
|---|---|---|
code | int | Код статусу HTTP підвідповіді (наприклад, 201, 400). |
status | string | Текст причини/статусу (несе машинний код у разі помилок). |
headers | object | Заголовки відповіді підоперації (наприклад, Location). |
body | string | Тіло підвідповіді. |
POST BASE_URL/tasks/$batch HTTP/1.1
Authorization: bearer <token>
Content-Type: application/json
[
{
"method": "POST",
"relativeUrl": "http",
"contentType": "application/json",
"content": "{\"url\":\"https://a.example.com\",\"interval\":5}"
},
{
"method": "POST",
"relativeUrl": "ping",
"contentType": "application/json",
"content": "{\"host\":\"b.example.com\"}"
}
]
[
{ "code": 201, "status": "Created",
"headers": { "Location": "/tasks/ef10cd12-...-0bc2" },
"body": "{ ...created http task... }" },
{ "code": 201, "status": "Created",
"headers": { "Location": "/tasks/7a20de34-...-1cd3" },
"body": "{ ...created ping task... }" }
]
Контакти
Контакти — це адресати, які отримують сповіщення та звіти (email-адреси, номери телефонів для SMS/дзвінків). Id контактів використовуються під час створення підписок.
GET contacts/types · contacts/delays · contacts/sms/gateways · contacts/im/gateways
Статичні перелічення, які використовуються кінцевими точками контактів:
| Кінцева точка | Повертає |
|---|---|
contacts/types | ["Email","IM","SMS","VoiceCall"] — типи контактів, які перелічує цей API. Створювані типи — Email, SMS та VoiceCall (IM припинено — див. нижче). |
contacts/delays | Прийнятні значення alertDelay (у хвилинах): [0,5,15,30,60,180,720,360,1440,3]. |
contacts/sms/gateways | Id SMS-шлюзів: ["clickatell","clickatella","infobip","skype","twiliosms"]. Типовий — twiliosms; інші записи застарілі та можуть бути неактивними. |
contacts/im/gateways | Id IM-шлюзів: ["GTalk","SkypeChat"]. Перелічені лише для сумісності — IM-контакти більше не можна створювати (див. нижче). |
GET contacts/im/gateways усе ще повертає список
шлюзів, але POST contacts/im та PUT contacts/im
тепер повертають 400 WrongContactType. Наявні IM-контакти не можна створити
через цей API.
GET contacts & contacts/{id:guid}
Список контактів (з опційним фільтром) або отримання одного за id. Додайте
?info=subscriptions, щоб вбудувати підписки кожного контакту. Без фільтра
повертаються всі контакти облікового запису.
| Параметр фільтра | Тип | Опис |
|---|---|---|
ids / excludeIds | guid[] / bool | Вибрати або виключити за id. |
contactType / contactTypes | string / string[] | Фільтрувати за типом (Email, SMS, VoiceCall…). |
excludeContactTypes | bool | Інвертувати фільтр за типом. |
confirmed | bool | Підтверджені чи непідтверджені контакти. |
overlimited | bool | Контакти, позначені як такі, що перевищують ліміт пакета. |
acceptBillingNotifications | bool | Контакти, що використовуються для білінгових сповіщень. |
name / names / nameSearchLike / excludeNames | string(s) / bool | Фільтрувати за назвою (точно, списком, підрядком або з виключенням). |
address / addresses / addressSearchLike / excludeAddresses | string(s) / bool | Фільтрувати за адресою. |
Об'єкт контакту
Спільні поля: id, confirmed,
contactType, name,
address, alertDelay,
activePeriodStart/activePeriodEnd (HH:mm),
activeDays, sendCost. Email-контакти додатково
мають reportFormat (Text/ShortText),
sendNews, sendBillingNotifications; SMS/IM-контакти
додатково мають gateway.
POST contacts/email · contacts/sms · contacts/voice
Створити контакт. Повертає 201 Created, відносний
Location: /contacts/{id} та ContactOperationResult
({ contact, status }), чий status повідомляє
результат підтвердження.
{
"address": "ops@@example.com", // ОБОВ'ЯЗКОВЕ
"name": "Ops mailbox",
"alertDelay": 0, // хвилини; одне зі значень contacts/delays
"reportFormat": "Text", // Text | ShortText (лише email)
"activePeriodStart": "00:00", // необов'язкове вікно тихих годин (HH:mm)
"activePeriodEnd": "23:59",
"activeDays": ["Monday", "Tuesday"], // необов'язкове; за замовчуванням усі дні
"subscriptions": [ /* необов'язкові вбудовані підписки */ ]
}
| Поле | Застосовується до | Примітки |
|---|---|---|
address | усіх | Email-адреса, або номер телефону (цифри, необов'язковий провідний +) для SMS/дзвінка. Обов'язкове під час створення. |
alertDelay | усіх | Хвилини очікування перед сповіщенням. Має бути одним зі значень contacts/delays. |
activePeriodStart / activePeriodEnd | усіх | HH:mm; вікно, протягом якого доставляються сповіщення. |
activeDays | усіх | Будь-які з Sunday…Saturday; за замовчуванням кожен день. |
reportFormat, sendNews, sendBillingNotifications | Параметри email. | |
gateway | sms | Одне зі значень contacts/sms/gateways; за замовчуванням twiliosms. |
SMS- та voice-контакти за замовчуванням використовують шлюзи twiliosms /
twiliovoice, отримують типову ціну за повідомлення та зберігають номер із
провідним +. Зміна адреси чи шлюзу контакту скидає його стан підтвердження.
Значення статусу підтвердження
Поле status результату повідомляє результат надсилання коду підтвердження:
| Статус | Значення |
|---|---|
Confirmed | Контакт створено вже підтвердженим (код не потрібен). |
CodeSent | Надіслано код підтвердження; контакт стає активним після підтвердження. |
CodeSentEarlier | Код уже надсилався нещодавно і все ще дійсний. |
CodeFail | Контакт створено, але надіслати код не вдалося; спробуйте пізніше. |
LowSmsBalance | Не вдалося надіслати код, оскільки баланс облікового запису замалий. |
Overlimited | Контакт перевищує ліміт пакета. |
PUT contacts & типізовані варіанти
- За id —
PUT contacts/{id}(спільні поля), або типізованіPUT contacts/email/{id},contacts/sms/{id},contacts/voice/{id}. Змінюються лише надіслані вами поля. - За фільтром —
PUT contacts?<filter>або типізованийPUT contacts/{type}?<filter>(прив'язує фільтр до цього типу), за допомогою фільтра контактів.
PUT contacts/im (обидві форми) повертає 400 WrongContactType.
DELETE contacts/{id:guid} & contacts
Видалити один контакт за id, або масово видалити за фільтром контактів. Як і
для задач, масове видалення з порожнім фільтром відхиляється з 400 EmptyFilter.
Коди підтвердження
Непідтверджені контакти мають підтвердити володіння коротким кодом, доставленим на адресу контакту.
PATCH contacts/{id}/code— (повторно) видати та надіслати код підтвердження. ПовертаєContactOperationResultзі статусом, як-отCodeSent.POST contacts/{id}/code— підтвердити контакт, надіславши код. Тіло:{ "code": "12345" }. У разі успіху контакт стає підтвердженим.
Сповіщення та підписки
Підписка пов'язує одну або кілька задач і контактів із набором типів сповіщень та/або звітів. Один запис підписки утворює декартів добуток своїх задач і контактів, породжуючи одне сповіщення/звіт на кожну пару (задача, контакт, тип).
Форма підписки
{
"alertTypes": ["Up", "Down"], // будь-які з Up, Down, RepeatedlyDown
"reportTypes": ["Day", "Month"], // будь-які з Day, Week, Month, Quarter, Year
"taskIds": ["<task guid>"],
"contactIds": ["<contact guid>"]
}
- Потрібне принаймні одне з
alertTypes/reportTypes, інакше —AlertsAndReportsAreEmpty. - Пропуск
taskIdsза замовчуванням означає усі ваші задачі; пропускcontactIdsза замовчуванням означає усі ваші контакти. Явний порожній масив означає "жодного". - Підписки на звіти застосовуються лише до Email-контактів — типи звітів на не-Email контактах мовчки ігноруються (їхні підписки на сповіщення все одно створюються).
- Id, якими ви не володієте, ігноруються.
GET subscriptions/alertTypes · subscriptions/reportTypes
| Кінцева точка | Повертає |
|---|---|
subscriptions/alertTypes | ["Up","Down","RepeatedlyDown"] |
subscriptions/reportTypes | ["Day","Week","Month","Quarter","Year"] |
GET subscriptions
Список підписок. Повертає один запис на кожну зіставлену підписку на сповіщення чи звіт (ніколи не об'єднуються). Необов'язкові фільтри:
| Параметр | Тип | Опис |
|---|---|---|
taskId | guid | Лише підписки для цієї задачі. |
contactId | guid | Лише підписки для цього контакту. |
types | string[] | Лише ці типи сповіщень/звітів. Нерозпізнані назви тут ігноруються (на відміну від POST/DELETE, які їх відхиляють). |
POST subscriptions · DELETE subscriptions
Обидва приймають масив JSON із записами підписок у тілі. POST додає описані підписки (вставляються
лише нові рядки); DELETE видаляє наявні. Обидва повертають 200 OK з
порожнім тілом. Невідомі типи сповіщень/звітів відхиляються з
UnknownAlertType / UnknownReportType.
[
{ "alertTypes": ["Up", "Down"],
"taskIds": ["7ee87894-b8a9-e311-beb2-dc85de1f0bc2"],
"contactIds": ["4cedf037-d1d9-e311-bebc-dc85de1f0bc2"] },
{ "reportTypes": ["Month"],
"taskIds": ["7ee87894-b8a9-e311-beb2-dc85de1f0bc2"],
"contactIds": ["4cedf037-d1d9-e311-bebc-dc85de1f0bc2"] }
]
curl -s -X POST https://api1.host-tracker.com/subscriptions \
-H "Authorization: bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '[{"alertTypes":["Up","Down"],"taskIds":["<task>"],"contactIds":["<contact>"]}]'
Статистика та результати
GET stats
Агрегати доступності/недоступності на задачу за часове вікно. Приймає фільтр задач для вибору задач, а також:
| Параметр | Тип | Опис |
|---|---|---|
statsStartUnix / statsEndUnix | int64 | Початок/кінець вікна в секундах Unix (UTC). |
statsStart / statsEnd | string | Початок/кінець вікна у вигляді відформатованого за профілем рядка дати (альтернатива полям Unix). |
expectedSLA | double | 0–100. Якщо встановлено, кожен результат повідомляє slaExpectationSucceeded. |
fullTask | bool | Включити повний об'єкт задачі, а не лише посилання на неї. |
Відповідь
Об'єкт Stats з узгодженим вікном (подвійні поля дати) та масивом
stats. Кожен запис містить посилання на задачу та:
uptimeInMinutes/uptimeSpan,
downtimeInMinutes/downtimeSpan, час
обслуговування (uptime/downtime), totalTimeInMinutes, кількість перевірок за
бакетами, та uptimePercent/downtimePercent.
uptime% = (uptime + maintenanceUptime) / (totalTime − maintenanceDowntime).
Коли загальний час дорівнює часу обслуговування у стані недоступності, відсоток дорівнює
null (невизначено). slaExpectationSucceeded
— це uptime% ≥ expectedSLA.
GET outages
Проміжки недоступності на задачу. Приймає фільтр задач плюс:
| Параметр | Тип | Опис |
|---|---|---|
startTimeUnix / endTimeUnix | int64 | Вікно в секундах Unix (UTC). |
startTime / endTime | string | Вікно у вигляді відформатованих за профілем рядків. |
getInUtcTimeZone | int | Якщо встановлено, відформатований час буде в UTC, а не в часовому поясі профілю. |
fullTask | bool | Включити повний об'єкт задачі. |
Відповідь: об'єкт Outages з узгодженим вікном та масивом
taskOutages; кожен елемент поєднує задачу з її проміжками
outages (startTime/endTime
+ варіанти Unix, номери подій, необов'язковий коментар).
GET incident
Список інцидентів (подій збою) на задачу. Приймає фільтр задач плюс ті самі параметри вікна/часового поясу, що й для простоїв, а також:
| Параметр | Тип | Опис |
|---|---|---|
startTimeUnix / endTimeUnix / startTime / endTime | int64 / string | Вікно (Unix та/або відформатоване). |
getInUtcTimeZone | int | Форматувати час у UTC. |
fullTask | bool | Включити повний об'єкт задачі. |
fullLog | bool | Включити детальний журнал повторних перевірок по кожному агенту. Потребує розширеного пакета, інакше — ApiFullLogNotAllowed. |
Відповідь: об'єкт Incidents з масивом taskIncidents.
Кожен інцидент містить taskId, checkId, час
початку/кінця в Unix, місце збою location, error,
hasSnapshot, і (з fullLog) блок
recheck зі списком успішних локацій та проблемних локацій за кожною помилкою.
GET incident/snapshot
Отримати збережений знімок відповіді, захоплений для інциденту. Параметри:
| Параметр | Тип | Опис |
|---|---|---|
taskId | guid | Задача. Обов'язкове. |
checkId | int64 | Id перевірки/події. |
timestampUnixUtc | int64 | Мітка часу інциденту (секунди Unix, UTC). |
Повертає знімок (мітку часу разом із захопленими байтами), якщо такий існує, або
null, якщо для заданого інциденту знімка немає.
GET results/http
Агреговані метрики часу відповіді HTTP на задачу. Примусово встановлює тип задачі
Http. Приймає фільтр задач плюс:
| Параметр | Тип | Опис |
|---|---|---|
resultStartUnix / resultEndUnix | int64 | Вікно в секундах Unix (UTC). |
resultStart / resultEnd | string | Вікно у вигляді відформатованих за профілем рядків. |
fullTask | bool | Включити повний об'єкт задачі. |
Відповідь: об'єкт AggregatedHttpResults; кожен запис
taskResults повідомляє посилання на задачу та усереднені
responseTime, dnsTime,
headTime, dataTime (у мілісекундах).
GET cr/httpResponseTime
Ряди часу відповіді HTTP на задачу. Приймає фільтр задач плюс
startDate, endDate та
groupBy. Повертає простий масив об'єктів рядів:
[
{
"id": "ef10cd12-93f9-e311-bec5-dc85de1f0bc2",
"rawUrl": "https://www.example.com",
"name": "My website",
"results": [ [1719181583, 142], [1719177983, 138] ] // [секунди Unix, час відповіді у мс], спочатку найновіші
}
]
Агенти
Агенти — це географічно розподілені місця моніторингу. Id пулів, що повертаються тут, — це
значення, які ви передаєте в поле agentPools задачі.
GET agents
Список агентів моніторингу. Необов'язковий параметр запиту:
| Параметр | Тип | Опис |
|---|---|---|
touched | int | Лише агенти, що звітували протягом останніх N хвилин. Значення ≤ 0 (або відсутнє) означають без фільтра; інакше обмежується діапазоном 1–10. |
Кожен агент містить id, upFrom,
datacenter (назва/місто/країна/область),
company (назва/url), ip,
version, lon/lat, та
pools.
[
{
"id": "a1b2c3d4-...-0001",
"upFrom": "2024-06-20T08:00:00Z",
"datacenter": { "name": "Example Hosting", "city": "Frankfurt", "country": "DE", "state": "" },
"company": { "name": "Example Hosting", "url": "https://example-hosting.com" },
"ip": "203.0.113.10",
"version": "1.4.2",
"lon": 8.68, "lat": 50.11,
"pools": []
}
]
GET agents/pools
Список публічних пулів агентів (геозон). Кожен пул містить id,
desc, свої agents,
childPools та hidden. Використовуйте значення
id пулу в полі agentPools задачі.
GET agents/ips анонімно
Повертає поточні IP-адреси агентів моніторингу — корисно для внесення Host-Tracker до білого списку
міжмережевого екрана. Ця кінцева точка не потребує автентифікації. За замовчуванням вона повертає
text/plain, по одній IP-адресі на рядок; надішліть
Accept: application/json, щоб отримати замість цього масив JSON.
203.0.113.10
203.0.113.11
198.51.100.7
["203.0.113.10", "203.0.113.11", "198.51.100.7"]