Eşleşen bölüm yok.

Host-Tracker REST API v1

Web sitesi izleme görevlerini, kişileri, uyarı/rapor aboneliklerini yönetmek ve istatistikleri, kesintileri ve olayları okumak için token tabanlı, kararlı bir HTTP API'si.

Bu API v1'dir. Anlık kontrolleri (instant checks) çalıştırmaz ve API v2'den farklı bir kimlik doğrulama şeması kullanır — ikisi birbirinin yerine geçmez. Otomatik anlık kontroller için bunun yerine API v2'yi kullanın.

Temel URL

Bu belgedeki her yol, bir temel URL'ye göredir. Aynı API'ye hizmet veren iki giriş noktası vardır:

Giriş noktasıTemel URL (BASE_URL)Notlar
Doğrudan https://api1.host-tracker.com/ Sunucudan sunucuya entegrasyonlar için önerilir.
Ana site üzerinden https://www.host-tracker.com/api/web/v1/ Aynı servise ters proxy ile yönlendirilir. www.host-tracker.com ile zaten konuşuyorsanız kullanışlıdır.

Bu referans boyunca, GET tasks şeklinde yazılan bir çağrı GET BASE_URL/tasks anlamına gelir — örn. https://api1.host-tracker.com/tasks veya https://www.host-tracker.com/api/web/v1/tasks.

İçerik türü ve HTTP metotları

İstekler ve yanıtlar varsayılan olarak application/json'dır (XML için Kurallar bölümüne bakın). API standart HTTP metotlarını kullanır:

  • GET — varlıkları okur (görevler, kişiler, abonelikler, istatistikler, kesintiler, olaylar, ajanlar).
  • POST — bir varlık oluşturur veya bir eylem başlatır.
  • PUT — mevcut varlıkları günceller.
  • DELETE — varlıkları kaldırır.
  • PATCH — kısmi güncellemeler (bir kişinin onay kodunu yeniden göndermek için kullanılır).

HTTP metot geçersiz kılma (override)

İstemciniz PUT, DELETE veya PATCH gönderemiyorsa, bir POST gönderin ve amaçlanan fiili belirten bir X-HTTP-Method-Override başlığı ekleyin. Örneğin, görevleri güncellemek için, X-HTTP-Method-Override: PUT başlığıyla tasks'a POST yapın.

Kurallar

JSON serileştirme

JSON, camelCase özellik adları kullanır. Null alanlar yanıtlardan çıkarılır (boş diziler yine de [] olarak gönderilir). Özellik sıralaması sabittir: önce tanımlayıcı ve adres/url, ardından kalıtılan alanlar, ardından türe özgü alanlar.

Tarih ve saat

Görev oluşturma/okuma yanıtları, zaman damgalarını ISO-8601 UTC dizeleri olarak taşır (örn. 2024-06-21T22:26:23Z). İstatistik, kesinti, olay ve sonuç endpoint'leri ayrıca çift bir gösterim kullanır: her zaman, hem bir Unix-saniye tamsayı alanı ( Unix son eki) hem de hesabın profil tarih biçimine ve zaman dilimine göre biçimlendirilmiş, okunabilir bir dize olarak görünür. İstek filtreleri, endpoint'e bağlı olarak Unix-saniye ve/veya biçimlendirilmiş dizeleri kabul eder (aşağıda her endpoint için ayrı ayrı belgelenmiştir). Tüm Unix zaman damgaları 1970-01-01T00:00:00Z'den bu yana geçen saniyedir.

XML içerik anlaşması (content negotiation)

Tüm endpoint'ler XML de döndürebilir. JSON yerine bir XML gövdesi almak için Accept: application/xml gönderin; yanıt, aynı nesne grafiğinin klasik .NET XmlSerializer gösterimini kullanır. JSON varsayılan ve önerilen biçimdir.

CORS

Kaynaklar arası (cross-origin) isteklere izin verilir. Düz (kimlik bilgisi taşımayan) istekler herhangi bir kaynaktan kabul edilir (Access-Control-Allow-Origin: *). Çerez/kimlik bilgisi gönderen istekler yalnızca *.host-tracker.com kaynaklarından kabul edilir. Token tabanlı çağıranlar (burada belgelendiği gibi Authorization başlığını kullanan) kimlik-bilgili-kaynak kısıtlamasından etkilenmez.

Kimlik doğrulama

POST users/token ve anonim ajan-listesi endpoint'leri dışındaki her endpoint kimlik doğrulama gerektirir. İki şema kabul edilir:

  • Bearer tokenPOST users/token'dan alınır, Authorization: bearer <token> olarak gönderilir. Bu, birincil şemadır.
  • HTTP BasicAuthorization: Basic <base64(login:password)>. Kimlik bilgileri ISO-8859-1 olarak çözülür. Hızlı testler için kullanışlıdır; otomasyon için bearer token tercih edilir.

POST users/token anonim

Bir login ve şifreyi bir bearer token ile değiştirin. Token 48 saat boyunca geçerlidir.

İstek gövdesi

application/json
{
  "login": "your-login",
  "password": "your-password"
}
AlanTürAçıklama
loginstringHesap login'i. Zorunlu. Hesap e-postası da kabul edilir.
passwordstringHesap şifresi. Zorunlu.
forLoginstringİsteğe bağlı. Adına işlem yapılacak üst hesabın (super-account) login'i (alt hesap kimliğine bürünme — aşağıya bakın).

Yanıt — 200 OK

application/json
{
  "ticket": "<bearer token>",
  "expirationTime": "2024-06-23T22:26:23Z",
  "expirationUnixTime": 1719181583
}

Başarısızlık durumunda yanıt, IncorrectLoginOrPassword makine koduyla (hesap için API erişimi devre dışıysa AccessDenied ile) 401 olur ve bir WWW-Authenticate: Bearer başlığı içerir.

Token'ı kullanma

HTTP
GET BASE_URL/tasks HTTP/1.1
Host: api1.host-tracker.com
Accept: application/json
Authorization: bearer 3DD135...5EE510417

Alt hesap kimliğine bürünme (forLogin)

Bir üst hesap (super-account), alt hesabınıza kendi verilerine erişim izni verdiyse, alt hesap olarak oturum açın ancak forLogin alanında üst hesabın login bilgisini iletin. Döndürülen token, üst hesabın verdiği haklarla sınırlı olmak üzere, endpoint'ler sanki kendi hesabınız için çağrılıyormuş gibi üst hesabı yönetmenizi sağlar. Örneğin, izleme görevlerine yalnızca okuma erişimi verilmişse, GET çağrıları başarılı olur ancak görevler üzerinde POST/PUT/PATCH/DELETE reddedilir.

uçtan uca örnek
# 1. Obtain an impersonation token
POST BASE_URL/users/token HTTP/1.1
Content-Type: application/json

{
  "login": "subaccount-login",
  "password": "subaccount-password",
  "forLogin": "superaccount-login"
}

# 2. Use the returned ticket to read the SUPER-account's tasks
GET BASE_URL/tasks HTTP/1.1
Authorization: bearer <ticket from step 1>

curl

bash
# fetch a token and store it
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)

# call an authenticated endpoint
curl -s https://api1.host-tracker.com/tasks \
  -H "Authorization: bearer $TOKEN"

Hatalar ve makine kodları

Hatalar, standart bir HTTP durum kodunun yanında entegrasyonunuzun dallanma kararı verebileceği kısa, makine tarafından okunabilir bir kod döndürür. Gövde, (JSON değil) düz metin İngilizce bir açıklamadır ve insanlar/log kayıtları için tasarlanmıştır.

Makine kodu iki şekilde iletilir:

  • X-HT-Reason yanıt başlığı — kodu her yanıtta ve her HTTP sürümünde taşır. Hata türünü tespit etmenin önerilen yolu budur.
  • HTTP/1.1 reason phrase — durum satırı örn. HTTP/1.1 400 SimilarExists şeklinde okunur. Geriye dönük uyumluluk için korunmuştur, ancak HTTP/2 ve HTTP/3'ün reason phrase'leri protokolden kaldırdığını unutmayın; bu nedenle bağlantı HTTP/2+ üzerinden anlaşırsa bu alan boş olabilir. X-HT-Reason'ı tercih edin.
örnek hata yanıtı
HTTP/1.1 400 SimilarExists
X-HT-Reason: SimilarExists
Content-Type: text/plain; charset=utf-8

Same task allready exists
Kimlik doğrulama zorlukları (authentication challenges). Eksik veya geçersiz bir token, WWW-Authenticate: Bearer başlığıyla birlikte 401 döner ve AccessDenied, WrongTicket, TicketExpired veya IncorrectLoginOrPassword kodlarından birini içerir.

Hata kodu referansı

API'nin döndürebileceği her makine kodu, alana göre gruplanmış olarak, tipik HTTP durumuyla birlikte listelenmiştir. Aksi belirtilmedikçe hatalar 400 Bad Request'tir.

Kimlik doğrulama

KodDurumAnlam
AccessDenied401Bu hesap için API erişimi devre dışı veya çağıran gerekli haklara sahip değil.
IncorrectLoginOrPassword401users/token'da login/şifre reddedildi.
WrongTicket401Bearer token hatalı biçimlendirilmiş / okunamıyor.
TicketExpired401Bearer token'ın süresi dolmuş — yeni bir tane alın.
RequestThrottled429Hız sınırı aşıldı (bkz. Hız sınırları). Retry-After başlığını içerir.

Görevler

KodDurumAnlam
NotFound404İstenen görev mevcut değil.
SimilarExists400Aynı tür ve anahtara sahip bir görev zaten mevcut (hesap benzer görevlere izin vermiyorsa).
EmptyTaskData400Görev verisi sağlanmadı.
UncomplitedData400Görev verisi eksik.
NoIdInTaskData400Güncelleme istendi ancak görev id'si eksik.
WrongEditableTaskDataType400Düzenleme yükünün (payload) türü, hedef görevin türüyle eşleşmiyor.
WrongTaskType400Bilinmeyen görev türü.
WrongTaskStatus400Desteklenmeyen status değeri (Enabled/Disabled bekleniyordu).
WrongInterval400İzleme aralığı kabul edilen değerlerden biri değil (bkz. tasks/intervals).
EmptyUrl400Buna ihtiyaç duyan bir görev için URL/host sağlanmadı.
WrongUrl400URL geçersiz.
WrongSchema400Desteklenmeyen URL şeması.
BadIP400URL, reddedilen veya hatalı biçimlendirilmiş bir IP adresine çözümleniyor.
UrlInBlackList400URL, dahili bir engel listesinde.
WrongHttpMethod400Bir HTTP görevi için desteklenmeyen HTTP metodu (izin verilenler: Get, Post, Head).
WrongKeywordMode400Desteklenmeyen anahtar kelime modu.
WrongPort400Bir port görevi için geçersiz port.
WrongAgentPool400İstenen ajan havuzlarından bir veya daha fazlası mevcut değil. Mesaj, hatalı ve mevcut havuzları listeler.
SelectMoreAgents400Seçilen ajan havuzları yeterli sayıda ajan içermiyor (7 gerekli). Mesaj, havuz başına sayıları listeler.
ApiFullLogNotAllowed400fullLog yalnızca gelişmiş paketlerde kullanılabilir.
WrongExpectedSLA400expectedSLA 0 ile 100 arasında olmalıdır.
WrongDate400Bir filtrede geçersiz başlangıç/bitiş tarihi.
WrongDateFormat400Bir tarih dizesi gerekli biçimle eşleşmedi (biçim mesajda belirtilir).
EndDateIsGreaterThanStartDate400Başlangıç tarihi ≤ bitiş tarihi olmalıdır.
StartEndIntervalIsTooBig400Bir sonuç sorgusu 10 000'den fazla satır döndürecektir. Mesaj, izin verilen aralığı içerir (bkz. GET tasks).
WrongSubscription400Görev gövdesindeki satır içi (inline) bir abonelik geçersiz (iç abonelik kodu/mesajı olduğu gibi aktarılır).
EmptyFilter400Boş bir filtreyle toplu bir DELETE tasks gönderildi (tüm hesabın silinmesini önlemek için reddedildi).

Kişiler

KodDurumAnlam
NotFound404İstenen kişi mevcut değil.
SimilarExists400Aynı tür, gateway, adres ve uyarı gecikmesine sahip bir kişi zaten mevcut.
EmptyContactData400Kişi verisi sağlanmadı.
UncomplitedData400Kişi verisi eksik.
NoIdInContactData400Güncelleme istendi ancak kişi id'si eksik.
EmptyAddress400Bir kişi oluşturulurken adres sağlanmadı.
WrongContactType400Bilinmeyen kişi türü (kullanımdan kaldırılmış IM oluşturma/güncelleme yolu için de döndürülür).
WrongEditableContactDataType400Düzenleme yükünün türü, hedef kişinin türüyle eşleşmiyor.
WrongEmailFormat400Geçersiz e-posta adresi veya desteklenmeyen bir e-posta rapor biçimi.
WrongPhoneFormat400Bir telefon numarası yalnızca rakam içermelidir (başında + işaretine izin verilir).
WrongSmsGateway400Bilinmeyen SMS gateway'i.
WrongIMGateway400Bilinmeyen IM gateway'i.
WrongAlertDelay400alertDelay kabul edilen değerlerden biri değil (bkz. contacts/delays).
WrongActivePeriodInterval400Geçersiz aktif dönem başlangıç/bitiş.
WrongActiveDay400Desteklenmeyen aktif gün adı.
EmptyFilter400Boş bir filtreyle toplu bir DELETE contacts gönderildi (reddedildi).

Abonelikler

KodDurumAnlam
AlertsAndReportsAreEmpty400Bir abonelik girdisi ne uyarı türü ne de rapor türü belirtiyor.
UnknownAlertType400Bir uyarı türü Up, Down, RepeatedlyDown değerlerinden biri değil.
UnknownReportType400Bir rapor türü Day, Week, Month, Quarter, Year değerlerinden biri değil.

Hız sınırları

İstekler, istemci başına ve endpoint başına hız sınırlamasına tabidir. Bir sınırı aşmak, 429 ile birlikte RequestThrottled makine kodunu ve bir Retry-After başlığını (saniye) döndürür.

KapsamSınır
Genel endpoint'ler, hesap + endpoint başınasaniyede 6 istek ve dakikada 120 istek
Onay kodu endpoint'leri (contacts/{id}/code), hesap + endpoint başınasaniyede 1 istek ve dakikada 2 istek
Anonim endpoint'lerAynı 6/s + 120/dk, istemci IP adresi başına anahtarlanır
429 yanıtı
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."

İzleme görevleri

GET tasks/types

Sistemin bildiği görev türü adlarının dizisini döndürür:

200 OK
["API","CntCheck","Counter","DNSBL","Database","DomainExp","Http",
 "Ping","Port","RusRegBL","SSLExp","Snmp","Tran","Waterfall","WebRisk"]
Bu türlerden herhangi birine ait mevcut görevler bu API üzerinden okunabilir. Görevler yalnızca dört tür için tipli endpoint'ler aracılığıyla oluşturulabilir/güncellenebilir: Http Ping Port RusRegBL (sırasıyla tasks/http, tasks/ping, tasks/port, tasks/rusbl adreslerinde oluşturulur).

GET tasks/intervals

Hesabınız için kabul edilen izleme aralıklarının (dakika cinsinden) dizisini döndürür, örn. [1,5,15,30,60]. Bir görev oluştururken interval alanı için bu değerlerden birini kullanın; başka herhangi bir değer WrongInterval ile sonuçlanır.

GET tasks

İzleme görevlerini listeler. Tüm sorgu parametreleri isteğe bağlıdır; hiçbiri verilmezse hesabın tüm görevleri döndürülür. Bir diziyi geçmek için parametreyi tekrarlayın, örn. ?ids=guid1&ids=guid2.

Parametre olarak info

Her göreve gömülü ek veri talep eder. Değerleri virgülle birleştirin (?info=stats,subscriptions) veya eşdeğer bit maskesi tamsayısını geçirin:

DeğerBitEtki
subscriptions1Görevin uyarı/rapor aboneliklerini subscriptions içinde ekler.
stats2Günlük/aylık/yıllık/toplam çalışma süresini stats içinde ekler.
results4sdtuedtu penceresi için kontrol sonuçlarını results içinde ekler (pencere belirtilmemişse son sonuç).
attachedResultsEn son ek kontrol (attached-check) sonuçlarını (sertifika, alan adı süresi dolumu, DNSBL) attached içinde ekler. Görevde ilgili check… bayraklarını gerektirir.

?info=stats,subscriptions,results, ?info=7 ile eşdeğerdir.

Filtre parametreleri

ParametreTürAçıklama
idsguid[]Yalnızca bu görev id'lerini döndürür. Tek bir id için GET tasks/{id}'yi tercih edin.
excludeIdsboolids ile birlikte: bu id'ler dışındaki her şeyi döndürür.
taskType / taskTypesstring / string[]Görev türüne göre filtreler (büyük/küçük harfe duyarlı), örn. Http.
excludeTaskTypesboolTür filtresini tersine çevirir.
statusstringEnabled veya Disabled (kullanıcı tarafından devre dışı bırakma). Örn. ?status=Disabled.
url / urlsstring / string[]URL'ye göre filtreler. urls içindeki değerler URL kodlu olmalıdır.
urlSearchLikeboolurl ile birlikte (urls değil): tam eşleşme yerine alt dize eşleşmesi.
excludeUrlsboolURL filtresini tersine çevirir.
name / namesstring / string[]Görev adına göre filtreler. name/names, id/ids ile birleştirildiğinde VEYA (OR); diğer filtrelerle birleştirildiğinde VE (AND) olur.
nameSearchLikeboolname ile birlikte: alt dize eşleşmesi.
excludeNamesboolAd filtresini tersine çevirir.
interval / intervalsint / int[]İzleme aralığına göre filtreler (dakika).
excludeIntervalsboolAralık filtresini tersine çevirir.
openStatboolGenel görevler (herkese açık istatistik/olay kaydı).
lastStatebooltrue = şu anda çalışıyor, false = şu anda çalışmıyor.
tagsstring[]Etikete göre filtreler.
overlimitedboolFaturalandırma limitini aşan (true) veya aşmayan (false) görevler.
activebooltrue = aktif, false = sistem tarafından devre dışı (limit aşımı, düşük bakiye, …). Kullanıcı tarafından devre dışı bırakma için status kullanın.
sdtu / edtuint64Bir pencerenin Unix-saniye (UTC) başlangıç/bitişi. Yalnızca info=results ayarlandığında kullanılır; ikisini de sağlayın. edtu, sdtu'dan büyük olmalıdır.
Sonuç satırı sınırı. Sonuçlar istendiğinde, tahmini satır sayısı (edtu − sdtu) × (#tasks) / (avg interval) 10 000'i aşmamalıdır. Aksi takdirde yanıt 400 StartEndIntervalIsTooBig olur ve mesajı sığabilecek en büyük aralığı içerir. Bu sınır yalnızca görev sonucu okumaları için geçerlidir.

Yanıt — 200 OK

Görev nesnelerinden oluşan bir dizi. Kesin alanlar görev türüne bağlıdır; ortak temel id, name, taskType, enabled, interval, lastState, creationTime, tags, agentPools içerir ve ( info ile talep edildiğinde) subscriptions, stats, results ve attached içerir. Sonuçlar dahil edildiğinde, her sonuç en az timestamp (Unix-saniye UTC) ve eventNumber taşır; geri kalan alanlar göreve özgüdür (HTTP biçimi için aşağıdaki oluşturma yanıtına bakın).

örnek istek
GET BASE_URL/tasks?info=stats,subscriptions&taskType=Http HTTP/1.1
Accept: application/json
Authorization: bearer <token>

GET tasks/{id:guid}

Id'ye göre tek bir görevi getirir. Aynı info parametresini kabul eder (ve info=results olduğunda sdtu/edtu'yu). Görev nesnesini veya mevcut değilse 404 NotFound döndürür.

POST tasks/http · tasks/ping · tasks/port · tasks/rusbl

Belirtilen türde bir izleme görevi oluşturur. Başarı durumunda 201 Created, göreceli bir Location: /tasks/{id} başlığı ve oluşturulan görevin tam nesnesini döndürür.

İstek gövdesi — HTTP görevi

POST tasks/http · application/json
{
  // HTTP-specific fields
  "url": "https://www.example.com",        // REQUIRED
  "httpMethod": "Get",                       // Get | Post | Head (default Get)
  "userAgent": "MyMonitor",
  "referer": "https://www.google.com",
  "acceptHeader": "application/json",
  "followRedirect": false,
  "treat300AsError": false,                // if set, followRedirect is ignored
  "checkDnsbl": false,                       // check domain against DNS block lists
  "checkDomainExpiration": false,            // monitor domain expiry (valid domains only)
  "checkCertificateExpiration": false,       // monitor TLS cert expiry (https only)
  "checkRussianBlackLists": false,
  "checkWebRisk": false,
  "timeout": 40000,                          // ms before a check fails
  "keywords": ["error", "maintenance"],
  "keywordMode": "ReverseAny",             // see keyword modes below
  "userName": "basic-auth-user",          // credentials for the monitored resource
  "password": "basic-auth-pass",
  "postParameters": "a=1\r\nb=2",          // only with httpMethod=Post
  "ignoredStatuses": [404, 500],

  // fields common to every task type
  "interval": 5,                             // minutes; must be an accepted interval
  "enabled": true,
  "fullLog": false,                          // advanced packages only
  "openStat": true,
  "name": "My website",
  "tags": ["production", "web"],
  "agentPools": ["westeurope", "asia"],  // see notes below
  "subscriptions": [ /* inline subscriptions, see below */ ]
}
Anahtar kelime moduGörev şu durumda OK sayılır…
PresentAnyyanıtta herhangi bir anahtar kelime bulunuyorsa.
PresentAlltüm anahtar kelimeler bulunuyorsa.
ReverseAnytüm anahtar kelimeler bulunmuyorsa.
ReverseAllherhangi bir anahtar kelime bulunmuyorsa.
ReverseWithResulttüm anahtar kelimeler bulunmuyorsa; hata mesajı, ilk anahtar kelimenin göründüğü yanıt satırının geri kalanını içerir (her satırın ilk 100 karakteri analiz edilir).
agentPools izleme konumlarını seçer. İsteğe bağlıdır (aksi takdirde profil varsayılanı kullanılır). Belirtilirse, havuzların toplamda en az 7 ajan içermesi gerekir, aksi halde istek SelectMoreAgents ile başarısız olur. Bilinmeyen havuz id'leri WrongAgentPool ile başarısız olur. Havuz id'leri GET agents/pools'tan gelir.

Satır içi (inline) abonelikler

subscriptions dizisi, oluşturma sırasında kişileri bu görevin uyarılarına/raporlarına abone eder. Her girdi abonelik biçimini kullanır; taskIds ayarlamayın (yeni göreve sabittir). contactIds atlanırsa, onaylanmış tüm kişileriniz abone edilir. Rapor abonelikleri yalnızca Email kişilerine uygulanır.

Diğer görev türleri

  • tasks/ping — gövde, ortak alanlara ek olarak host taşır.
  • tasks/port — gövde, ortak alanlara ek olarak host ve port taşır.
  • tasks/rusbl — Rus siciline (Russian-registry) dayalı engel listesi kontrolü; gövde, ortak alanlara ek olarak url, ayrıca ignoreWarnings, doNotSendMsgOnWarnings, prefixMatch taşır.

Yanıt — 201 Created (HTTP görevi)

application/json
{
  "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

bash
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 & tipli varyantlar

Görevleri günceller. İki biçim vardır:

  • Id'ye görePUT tasks/{id} (yalnızca ortak alanlar), veya tipli PUT tasks/http/{id}, tasks/ping/{id}, tasks/port/{id}, tasks/rusbl/{id} (türe özgü alanlar da dahil). Gövde, oluşturma ile aynı düzenlenebilir biçimdedir; yalnızca dahil ettiğiniz alanlar değiştirilir.
  • Filtreye görePUT tasks?<filter> (yalnızca ortak alanlar) veya filtreyi o türe sabitleyen tipli PUT tasks/{type}?<filter>. GET tasks ile aynı filtre parametrelerini kullanır. Güncellenen görev(ler)i döndürür.

Tipsiz PUT tasks / PUT tasks/{id} yalnızca tüm görev türlerinde ortak olan alanlara dokunabilir — türe özgü ayarları değiştirmek için tipli bir endpoint kullanın.

DELETE tasks/{id:guid} & tasks

  • DELETE tasks/{id} — tek bir görevi siler; silinen görevi döndürür.
  • DELETE tasks?<filter>görev filtresine göre toplu silme (bir filtre istek gövdesinde de sağlanabilir). Silinen görevleri döndürür.
Boş filtre reddedilir. Seçici bir filtre olmadan toplu bir DELETE tasks, tüm hesabınızı silmek yerine 400 EmptyFilter döndürür. Her şeyi bilerek silmek için açıkça yineleyin.

POST tasks/$batch · task/$batch

Tek bir istekte birden çok görev işlemi çalıştırır. Gövde, alt isteklerden oluşan bir JSON dizisidir; yanıt, aynı sırada alt yanıtlardan oluşan bir JSON dizisidir. Alt işlem, relativeUrl'nin son segmenti ile seçilir (örn. httpPOST tasks/http). İstek gövdesi JSON olmalıdır (Content-Type: application/json). Aynı mekanizma kişiler için de contacts/$batch / contact/$batch adresinde mevcuttur.

İstek alanıTürAçıklama
methodstringAlt isteğin HTTP metodu (POST, PUT, DELETE…).
relativeUrlstringAlt kaynak; son segment işlemi seçer (http, ping, port, rusbl…).
contentTypestringcontent'in içerik türü, genellikle application/json.
contentstringAlt istek gövdesi, bir JSON dizesi olarak.
Yanıt alanıTürAçıklama
codeintAlt yanıtın HTTP durum kodu (örn. 201, 400).
statusstringSebep/durum metni (hatalarda makine kodunu taşır).
headersobjectAlt işlemin yanıt başlıkları (örn. Location).
bodystringAlt yanıt gövdesi.
istek · POST tasks/$batch
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\"}"
  }
]
yanıt · 200 OK
[
  { "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... }" }
]

Kişiler

Kişiler, uyarıları ve raporları alan hedeflerdir (e-posta adresleri, SMS/sesli arama için telefon numaraları). Kişi id'leri abonelik oluşturulurken kullanılır.

GET contacts/types · contacts/delays · contacts/sms/gateways · contacts/im/gateways

Kişi endpoint'leri tarafından kullanılan sabit numaralandırmalar (enum):

EndpointDöndürür
contacts/types["Email","IM","SMS","VoiceCall"] — bu API'nin numaralandırdığı kişi türleri. Oluşturulabilir türler Email, SMS ve VoiceCall'dır (IM kullanımdan kaldırılmıştır — aşağıya bakın).
contacts/delaysKabul edilen alertDelay değerleri (dakika): [0,5,15,30,60,180,720,360,1440,3].
contacts/sms/gatewaysSMS gateway id'leri: ["clickatell","clickatella","infobip","skype","twiliosms"]. Varsayılan twiliosms'dir; diğer girdiler eski (legacy) olup etkin olmayabilir.
contacts/im/gatewaysIM gateway id'leri: ["GTalk","SkypeChat"]. Yalnızca uyumluluk için listelenmiştir — IM kişileri artık oluşturulamaz (aşağıya bakın).
IM kişileri kullanımdan kaldırılmıştır. GET contacts/im/gateways hâlâ gateway listesini döndürür, ancak POST contacts/im ve PUT contacts/im artık 400 WrongContactType döndürür. Mevcut IM kişileri bu API üzerinden oluşturulamaz.

GET contacts & contacts/{id:guid}

Kişileri listeler (isteğe bağlı olarak filtrelenmiş) veya id'ye göre birini getirir. ?info=subscriptions ekleyerek her kişinin aboneliklerini dahil edin. Filtre olmadan, hesabın tüm kişileri döndürülür.

Filtre parametresiTürAçıklama
ids / excludeIdsguid[] / boolId'ye göre seçer veya hariç tutar.
contactType / contactTypesstring / string[]Türe göre filtreler (Email, SMS, VoiceCall…).
excludeContactTypesboolTür filtresini tersine çevirir.
confirmedboolOnaylanmış / onaylanmamış kişiler.
overlimitedboolPaket limitini aşan olarak işaretlenmiş kişiler.
acceptBillingNotificationsboolFaturalandırma bildirimleri için kullanılan kişiler.
name / names / nameSearchLike / excludeNamesstring(s) / boolAda göre filtreler (tam eşleşme, liste, alt dize veya hariç tutma).
address / addresses / addressSearchLike / excludeAddressesstring(s) / boolAdrese göre filtreler.

Kişi nesnesi

Ortak alanlar: id, confirmed, contactType, name, address, alertDelay, activePeriodStart/activePeriodEnd (HH:mm), activeDays, sendCost. Email kişileri reportFormat (Text/ShortText), sendNews, sendBillingNotifications ekler; SMS/IM kişileri gateway ekler.

POST contacts/email · contacts/sms · contacts/voice

Bir kişi oluşturur. 201 Created, göreceli bir Location: /contacts/{id} ve status alanı onay sonucunu bildiren bir ContactOperationResult ({ contact, status }) döndürür.

POST contacts/email · application/json
{
  "address": "ops@@example.com",          // REQUIRED
  "name": "Ops mailbox",
  "alertDelay": 0,                        // minutes; one of contacts/delays
  "reportFormat": "Text",               // Text | ShortText (email only)
  "activePeriodStart": "00:00",        // optional quiet-hours window (HH:mm)
  "activePeriodEnd": "23:59",
  "activeDays": ["Monday", "Tuesday"],   // optional; default all days
  "subscriptions": [ /* optional inline subscriptions */ ]
}
AlanUygulandığıNotlar
addresstümüE-posta adresi veya SMS/sesli arama için telefon numarası (rakamlar, başında isteğe bağlı +). Oluşturmada zorunlu.
alertDelaytümüUyarı vermeden önce beklenecek dakika. contacts/delays değerlerinden biri olmalıdır.
activePeriodStart / activePeriodEndtümüHH:mm; uyarıların iletildiği zaman penceresi.
activeDaystümüSundaySaturday değerlerinden herhangi biri; varsayılan her gündür.
reportFormat, sendNews, sendBillingNotificationsemailE-posta seçenekleri.
gatewaysmscontacts/sms/gateways değerlerinden biri; varsayılan twiliosms.

SMS ve sesli arama kişileri varsayılan olarak twiliosms / twiliovoice gateway'lerini kullanır, varsayılan mesaj başına bir fiyat alır ve numarayı başında + ile saklar. Bir kişinin adresini veya gateway'ini değiştirmek, onay durumunu sıfırlar.

Onay durumu değerleri

Sonucun status alanı, onay kodu gönderme sonucunu bildirir:

DurumAnlam
ConfirmedKişi zaten onaylanmış olarak oluşturuldu (kod gerekmedi).
CodeSentBir onay kodu gönderildi; kişi onaylandığında etkin hale gelir.
CodeSentEarlierYakın zamanda zaten bir kod gönderildi ve hâlâ geçerli.
CodeFailKişi oluşturuldu ancak kodun gönderilmesi başarısız oldu; daha sonra tekrar deneyin.
LowSmsBalanceHesap bakiyesi çok düşük olduğu için kod gönderilemedi.
OverlimitedKişi, paket limitinin üzerinde.

PUT contacts & tipli varyantlar

  • Id'ye görePUT contacts/{id} (ortak alanlar), veya tipli PUT contacts/email/{id}, contacts/sms/{id}, contacts/voice/{id}. Yalnızca gönderdiğiniz alanlar değiştirilir.
  • Filtreye görePUT contacts?<filter> veya filtreyi o türe sabitleyen tipli PUT contacts/{type}?<filter>, kişi filtresini kullanarak.

PUT contacts/im (her iki biçim de) 400 WrongContactType döndürür.

DELETE contacts/{id:guid} & contacts

Id'ye göre tek bir kişiyi siler veya kişi filtresine göre toplu siler. Görevlerde olduğu gibi, boş filtreyle yapılan toplu silme 400 EmptyFilter ile reddedilir.

Onay kodları

Onaylanmamış kişiler, kişi adresine iletilen kısa bir kodla sahipliği onaylamalıdır.

  • PATCH contacts/{id}/code — onay kodunu (yeniden) oluşturur ve gönderir. CodeSent gibi bir status içeren bir ContactOperationResult döndürür.
  • POST contacts/{id}/code — kodu göndererek kişiyi onaylar. Gövde: { "code": "12345" }. Başarı durumunda kişi onaylanmış olur.
Bu endpoint'lerin daha sıkı bir hız sınırı vardır: saniyede 1 istek ve dakikada 2 istek.

Uyarılar ve abonelikler

Bir abonelik, bir veya daha fazla görevi ve kişiyi bir dizi uyarı ve/veya rapor türüne bağlar. Tek bir abonelik girdisi, görevlerini ve kişilerini çapraz birleştirerek her (task, contact, type) için bir uyarı/rapor üretir.

Abonelik biçimi

abonelik girdisi
{
  "alertTypes": ["Up", "Down"],       // any of Up, Down, RepeatedlyDown
  "reportTypes": ["Day", "Month"],     // any of Day, Week, Month, Quarter, Year
  "taskIds": ["<task guid>"],
  "contactIds": ["<contact guid>"]
}
  • alertTypes / reportTypes'dan en az biri gereklidir, aksi halde AlertsAndReportsAreEmpty oluşur.
  • taskIds atlanırsa varsayılan olarak tüm görevleriniz kullanılır; contactIds atlanırsa varsayılan olarak tüm kişileriniz kullanılır. Açıkça boş bir dizi "hiçbiri" anlamına gelir.
  • Rapor abonelikleri yalnızca Email kişilerine uygulanır — Email olmayan kişilerdeki rapor türleri sessizce yok sayılır (uyarı abonelikleri yine de oluşturulur).
  • Sahibi olmadığınız id'ler yok sayılır.

GET subscriptions/alertTypes · subscriptions/reportTypes

EndpointDöndürür
subscriptions/alertTypes["Up","Down","RepeatedlyDown"]
subscriptions/reportTypes["Day","Week","Month","Quarter","Year"]

GET subscriptions

Abonelikleri listeler. Eşleşen her uyarı veya rapor aboneliği için bir girdi döndürür (asla birleştirilmez). İsteğe bağlı filtreler:

ParametreTürAçıklama
taskIdguidYalnızca bu görev için abonelikler.
contactIdguidYalnızca bu kişi için abonelikler.
typesstring[]Yalnızca bu uyarı/rapor türleri. Tanınmayan adlar burada yok sayılır (bunları reddeden POST/DELETE'in aksine).

POST subscriptions · DELETE subscriptions

İkisi de gövdede abonelik girdilerinden oluşan bir JSON dizisi alır. POST tanımlanan abonelikleri ekler (yalnızca yeni satırlar eklenir); DELETE mevcut olanları kaldırır. İkisi de boş bir gövdeyle 200 OK döndürür. Bilinmeyen uyarı/rapor türleri UnknownAlertType / UnknownReportType ile reddedilir.

POST subscriptions · gövde
[
  { "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
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>"]}]'

İstatistikler ve sonuçlar

GET stats

Bir zaman penceresi boyunca görev başına çalışma süresi/kesinti süresi toplamları. Görevleri seçmek için görev filtresini kabul eder, ayrıca:

ParametreTürAçıklama
statsStartUnix / statsEndUnixint64Pencere başlangıç/bitişi Unix-saniye (UTC) olarak.
statsStart / statsEndstringPencere başlangıç/bitişi profil biçimli bir tarih dizesi olarak (Unix alanlarına alternatif).
expectedSLAdouble0–100. Ayarlandığında, her sonuç slaExpectationSucceeded bildirir.
fullTaskboolYalnızca referansı yerine tam görev nesnesini içerir.

Yanıt

Çözümlenmiş pencereyi (çift tarih alanları) ve bir stats dizisini içeren bir Stats nesnesi. Her girdi, görev referansını ve şunları taşır: uptimeInMinutes/uptimeSpan, downtimeInMinutes/downtimeSpan, bakım (maintenance) çalışma/kesinti süreleri, totalTimeInMinutes, sepet (bucket) başına kontrol sayıları ve uptimePercent/downtimePercent.

Çalışma süresi yüzdesi: uptime% = (uptime + maintenanceUptime) / (totalTime − maintenanceDowntime). Toplam süre bakım kesinti süresine eşit olduğunda yüzde null'dur (tanımsız). slaExpectationSucceeded, uptime% ≥ expectedSLA demektir.

GET outages

Görev başına kesinti (down-time) aralıkları. Görev filtresini ve ek olarak şunları kabul eder:

ParametreTürAçıklama
startTimeUnix / endTimeUnixint64Pencere, Unix-saniye (UTC) olarak.
startTime / endTimestringPencere, profil biçimli dizeler olarak.
getInUtcTimeZoneintAyarlandığında, biçimlendirilmiş zamanlar profil zaman dilimi yerine UTC olur.
fullTaskboolTam görev nesnesini içerir.

Yanıt: çözümlenmiş pencereyi ve bir taskOutages dizisini içeren bir Outages nesnesi; her öğe bir görevi outages aralıklarıyla (startTime/endTime + Unix varyantları, olay numaraları, isteğe bağlı yorum) eşleştirir.

GET incident

Görev başına olay (hata olayı) listesi. Görev filtresini ve kesintilerle aynı pencere/zaman dilimi parametrelerini kabul eder, ayrıca:

ParametreTürAçıklama
startTimeUnix / endTimeUnix / startTime / endTimeint64 / stringPencere (Unix ve/veya biçimlendirilmiş).
getInUtcTimeZoneintZamanları UTC olarak biçimlendirir.
fullTaskboolTam görev nesnesini içerir.
fullLogboolAjan başına ayrıntılı yeniden kontrol (recheck) kaydını içerir. Gelişmiş bir paket gerektirir, aksi halde ApiFullLogNotAllowed.

Yanıt: bir taskIncidents dizisini içeren bir Incidents nesnesi. Her olay taskId, checkId, başlangıç/bitiş Unix zamanlarını, hatalı olan location'ı, error'ı, hasSnapshot'ı ve (fullLog ile) OK konumları ve hata başına hatalı konumları listeleyen bir recheck bloğunu taşır.

GET incident/snapshot

Bir olay için yakalanan saklı yanıt anlık görüntüsünü (snapshot) getirir. Parametreler:

ParametreTürAçıklama
taskIdguidGörev. Zorunlu.
checkIdint64Kontrol/olay id'si.
timestampUnixUtcint64Olay zaman damgası (Unix-saniye UTC).

Bir tane mevcutsa anlık görüntüyü (bir zaman damgası artı yakalanan baytlar) döndürür, verilen olay için anlık görüntü yoksa null döndürür.

GET results/http

Görev başına toplu HTTP zamanlama ölçümleri. Görev türünü Http olarak zorunlu kılar. Görev filtresini ve ek olarak şunları kabul eder:

ParametreTürAçıklama
resultStartUnix / resultEndUnixint64Pencere, Unix-saniye (UTC) olarak.
resultStart / resultEndstringPencere, profil biçimli dizeler olarak.
fullTaskboolTam görev nesnesini içerir.

Yanıt: bir AggregatedHttpResults nesnesi; her taskResults girdisi görev referansını ve ortalama responseTime, dnsTime, headTime, dataTime (milisaniye) değerlerini bildirir.

GET cr/httpResponseTime

Görev başına HTTP yanıt süresi serisi. Görev filtresini ve ek olarak startDate, endDate ve groupBy'ı kabul eder. Sade bir seri nesneleri dizisi döndürür:

200 OK
[
  {
    "id": "ef10cd12-93f9-e311-bec5-dc85de1f0bc2",
    "rawUrl": "https://www.example.com",
    "name": "My website",
    "results": [ [1719181583, 142], [1719177983, 138] ]   // [unixSeconds, responseTimeMs], newest first
  }
]

Ajanlar

Ajanlar, coğrafi olarak dağıtılmış izleme konumlarıdır. Burada döndürülen havuz id'leri, bir görevin agentPools alanında geçtiğiniz değerlerdir.

GET agents

İzleme ajanlarını listeler. İsteğe bağlı sorgu parametresi:

ParametreTürAçıklama
touchedintYalnızca son N dakika içinde rapor veren ajanlar. ≤ 0 (veya belirtilmemiş) değerler filtre yok anlamına gelir; aksi halde 1–10 aralığına sınırlanır.

Her ajan id, upFrom, datacenter (name/city/country/state), company (name/url), ip, version, lon/lat ve pools taşır.

200 OK
[
  {
    "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

Genel ajan havuzlarını (coğrafi bölgeler) listeler. Her havuz id, desc, kendi agents, childPools ve hidden alanlarını taşır. Bir görevin agentPools alanında havuz id değerlerini kullanın.

GET agents/ips anonim

Güncel izleme ajanı IP adreslerini döndürür — Host-Tracker'ı bir güvenlik duvarında beyaz listeye almak için kullanışlıdır. Bu endpoint kimlik doğrulama gerektirmez. Varsayılan olarak satır başına bir IP olacak şekilde text/plain döndürür; bunun yerine bir JSON dizisi almak için Accept: application/json gönderin.

text/plain (varsayılan)
203.0.113.10
203.0.113.11
198.51.100.7
Accept: application/json ile
["203.0.113.10", "203.0.113.11", "198.51.100.7"]
Host-Tracker REST API v1 — host-tracker.com. Makine tarafından okunabilir Swagger/OpenAPI, BASE_URL/docs/v1 adresinde, etkileşimli bir sandbox ise BASE_URL/sandbox adresinde kullanılabilir.