Geen overeenkomende secties.

Host-Tracker REST API v1

Een stabiele, token-geauthenticeerde HTTP-API voor het beheren van website-monitoringtaken, contacten, meldings-/rapportageabonnementen en het uitlezen van statistieken, uitval en incidenten.

Dit is API v1. Deze API voert geen instant checks uit en gebruikt een ander authenticatieschema dan API v2 — de twee zijn niet uitwisselbaar. Gebruik voor geautomatiseerde instant checks in plaats daarvan de API v2.

Basis-URL

Elk pad in dit document is relatief ten opzichte van een basis-URL. Twee toegangspunten bedienen dezelfde API:

ToegangspuntBasis-URL (BASE_URL)Opmerkingen
Direct https://api1.host-tracker.com/ Aanbevolen voor server-naar-server-integraties.
Via de hoofdsite https://www.host-tracker.com/api/web/v1/ Reverse-proxied naar dezelfde service. Handig wanneer u al met www.host-tracker.com communiceert.

In deze referentie betekent een aanroep geschreven als GET tasks GET BASE_URL/tasks — bijvoorbeeld https://api1.host-tracker.com/tasks of https://www.host-tracker.com/api/web/v1/tasks.

Content type & HTTP-methoden

Requests en responses zijn standaard application/json (zie Conventies voor XML). De API gebruikt standaard HTTP-methoden:

  • GET — entiteiten lezen (taken, contacten, abonnementen, statistieken, uitval, incidenten, agents).
  • POST — een entiteit aanmaken of een actie starten.
  • PUT — bestaande entiteiten bijwerken.
  • DELETE — entiteiten verwijderen.
  • PATCH — gedeeltelijke updates (gebruikt om een bevestigingscode voor een contact opnieuw te versturen).

Override van de HTTP-methode

Als uw client geen PUT, DELETE of PATCH kan versturen, stuur dan een POST en voeg een X-HTTP-Method-Override-header toe met daarin het bedoelde werkwoord. Om bijvoorbeeld taken bij te werken, doet u een POST naar tasks met X-HTTP-Method-Override: PUT.

Conventies

JSON-serialisatie

JSON gebruikt camelCase-eigenschapsnamen. Null-velden worden weggelaten uit responses (lege arrays worden nog altijd als [] teruggegeven). De volgorde van eigenschappen is stabiel: eerst identifier en adres/url, dan geërfde velden, dan type-specifieke velden.

Datum & tijd

Responses van het aanmaken/lezen van taken bevatten tijdstempels als ISO-8601 UTC-strings (bijvoorbeeld 2024-06-21T22:26:23Z). De endpoints voor statistieken, uitval, incidenten en resultaten gebruiken daarnaast een dubbele representatie: elke tijd verschijnt zowel als een Unix-seconden-integerveld (achtervoegsel Unix) als een leesbare string, geformatteerd volgens het datumformaat en de tijdzone van het accountprofiel. Requestfilters accepteren Unix-seconden en/of geformatteerde strings, afhankelijk van het endpoint (per endpoint hieronder gedocumenteerd). Alle Unix-tijdstempels zijn seconden sinds 1970-01-01T00:00:00Z.

XML content negotiation

Alle endpoints kunnen ook XML teruggeven. Stuur Accept: application/xml om een XML-body te ontvangen in plaats van JSON; de response gebruikt de klassieke .NET-XmlSerializer-representatie van dezelfde objectgraaf. JSON is het standaard- en aanbevolen formaat.

CORS

Cross-origin requests zijn toegestaan. Gewone (niet-credentialed) requests worden van elke origin geaccepteerd (Access-Control-Allow-Origin: *). Requests die cookies/credentials meesturen worden alleen geaccepteerd van *.host-tracker.com-origins. Token-gebaseerde aanroepers (die de Authorization-header gebruiken, zoals hier gedocumenteerd) ondervinden geen hinder van de beperking op credentialed origins.

Authenticatie

Elk endpoint behalve POST users/token en de anonieme agent-lijst-endpoints vereist authenticatie. Twee schema's worden geaccepteerd:

  • Bearer-token — verkregen via POST users/token, verstuurd als Authorization: bearer <token>. Dit is het primaire schema.
  • HTTP BasicAuthorization: Basic <base64(login:password)>. Credentials worden gedecodeerd als ISO-8859-1. Handig voor snelle tests; voor automatisering heeft het bearer-token de voorkeur.

POST users/token anoniem

Wissel een login en wachtwoord in voor een bearer-token. Het token is 48 uur geldig.

Requestbody

application/json
{
  "login": "your-login",
  "password": "your-password"
}
VeldTypeBeschrijving
loginstringAccountlogin. Verplicht. Het e-mailadres van het account wordt ook geaccepteerd.
passwordstringAccountwachtwoord. Verplicht.
forLoginstringOptioneel. De login van het hoofdaccount namens wie wordt opgetreden (subaccount-impersonatie — zie hieronder).

Response — 200 OK

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

Bij een mislukte aanroep is de response 401 met machinecode IncorrectLoginOrPassword (of AccessDenied als API-toegang voor het account is uitgeschakeld) en een WWW-Authenticate: Bearer-header.

Het token gebruiken

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

Subaccount-impersonatie (forLogin)

Als een hoofdaccount uw subaccount toegang tot zijn gegevens heeft verleend, logt u in als het subaccount maar geeft u de login van het hoofdaccount door in forLogin. Het geretourneerde token laat u vervolgens het hoofdaccount beheren precies alsof de endpoints voor uw eigen account werden aangeroepen, met inachtneming van de rechten die het hoofdaccount heeft verleend. Als bijvoorbeeld alleen-lezen toegang tot monitoringtaken is verleend, slagen GET-aanroepen wel maar worden POST/PUT/PATCH/DELETE op taken geweigerd.

end-to-end voorbeeld
# 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"

Fouten & machinecodes

Fouten geven een standaard HTTP-statuscode plus een korte machineleesbare code terug waarop uw integratie kan vertakken. De body is een platte-tekst Engelse beschrijving (geen JSON), bedoeld voor mensen/logs.

De machinecode wordt op twee manieren geleverd:

  • X-HT-Reason response-header — bevat de code bij elke response en elke HTTP-versie. Dit is de aanbevolen manier om het foutentype te detecteren.
  • HTTP/1.1 reason phrase — de statusregel luidt bijvoorbeeld HTTP/1.1 400 SimilarExists. Behouden voor achterwaartse compatibiliteit, maar let op dat HTTP/2 en HTTP/3 reason phrases uit het protocol hebben verwijderd, dus dit veld kan leeg zijn wanneer de verbinding HTTP/2+ onderhandelt. Geef de voorkeur aan X-HT-Reason.
voorbeeld foutresponse
HTTP/1.1 400 SimilarExists
X-HT-Reason: SimilarExists
Content-Type: text/plain; charset=utf-8

Same task allready exists
Authenticatie-uitdagingen. Een ontbrekend of ongeldig token geeft 401 terug met WWW-Authenticate: Bearer en een van AccessDenied, WrongTicket, TicketExpired of IncorrectLoginOrPassword.

Overzicht foutcodes

Elke machinecode die de API kan teruggeven, gegroepeerd per gebied, met de gebruikelijke HTTP-status. Tenzij anders vermeld zijn fouten 400 Bad Request.

Authenticatie

CodeStatusBetekenis
AccessDenied401API-toegang is uitgeschakeld voor dit account, of de aanroeper heeft niet de vereiste rechten.
IncorrectLoginOrPassword401Login/wachtwoord geweigerd bij users/token.
WrongTicket401Het bearer-token is misvormd / onleesbaar.
TicketExpired401Het bearer-token is verlopen — vraag een nieuw token aan.
RequestThrottled429Rate limit overschreden (zie Rate limits). Bevat Retry-After.

Taken

CodeStatusBetekenis
NotFound404De opgevraagde taak bestaat niet.
SimilarExists400Er bestaat al een taak met hetzelfde type en dezelfde sleutel (tenzij het account gelijksoortige taken toestaat).
EmptyTaskData400Geen taakgegevens meegegeven.
UncomplitedData400De taakgegevens zijn onvolledig.
NoIdInTaskData400Er is een update gevraagd maar het taak-id ontbreekt.
WrongEditableTaskDataType400Het type van de bewerkings-payload komt niet overeen met het type van de doeltaak.
WrongTaskType400Onbekend taaktype.
WrongTaskStatus400Niet-ondersteunde status-waarde (verwacht wordt Enabled/Disabled).
WrongInterval400Het monitoringinterval is niet een van de geaccepteerde waarden (zie tasks/intervals).
EmptyUrl400Geen URL/host meegegeven voor een taak die er een vereist.
WrongUrl400De URL is ongeldig.
WrongSchema400Niet-ondersteund URL-schema.
BadIP400De URL verwijst naar een geweigerd of misvormd IP-adres.
UrlInBlackList400De URL staat op een interne blokkeerlijst.
WrongHttpMethod400Niet-ondersteunde HTTP-methode voor een HTTP-taak (toegestaan: Get, Post, Head).
WrongKeywordMode400Niet-ondersteunde keyword-modus.
WrongPort400Ongeldige poort voor een porttaak.
WrongAgentPool400Een of meer opgevraagde agent pools bestaan niet. Het bericht vermeldt de foutieve en beschikbare pools.
SelectMoreAgents400De geselecteerde agent pools bevatten niet genoeg agents (7 vereist). Het bericht vermeldt de aantallen per pool.
ApiFullLogNotAllowed400fullLog is alleen beschikbaar bij geavanceerde pakketten.
WrongExpectedSLA400expectedSLA moet tussen 0 en 100 liggen.
WrongDate400Ongeldige start-/einddatum in een filter.
WrongDateFormat400Een datumstring kwam niet overeen met het vereiste formaat (vermeld in het bericht).
EndDateIsGreaterThanStartDate400De startdatum moet ≤ de einddatum zijn.
StartEndIntervalIsTooBig400Een resultatenquery zou meer dan 10 000 rijen teruggeven. Het bericht bevat het toegestane interval (zie GET tasks).
WrongSubscription400Een inline abonnement op de taakbody is ongeldig (de code/het bericht van het onderliggende abonnement wordt doorgegeven).
EmptyFilter400Een bulk-DELETE tasks is verstuurd met een leeg filter (geweigerd om te voorkomen dat het hele account wordt verwijderd).

Contacten

CodeStatusBetekenis
NotFound404Het opgevraagde contact bestaat niet.
SimilarExists400Er bestaat al een contact met hetzelfde type, dezelfde gateway, hetzelfde adres en dezelfde meldingsvertraging.
EmptyContactData400Geen contactgegevens meegegeven.
UncomplitedData400De contactgegevens zijn onvolledig.
NoIdInContactData400Er is een update gevraagd maar het contact-id ontbreekt.
EmptyAddress400Geen adres meegegeven bij het aanmaken van een contact.
WrongContactType400Onbekend contacttype (ook geretourneerd voor het uitgefaseerde IM-aanmaak-/updatepad).
WrongEditableContactDataType400Het type van de bewerkings-payload komt niet overeen met het type van het doelcontact.
WrongEmailFormat400Ongeldig e-mailadres, of een niet-ondersteund e-mailrapportformaat.
WrongPhoneFormat400Een telefoonnummer mag alleen cijfers bevatten (een voorloop-+ is toegestaan).
WrongSmsGateway400Onbekende sms-gateway.
WrongIMGateway400Onbekende IM-gateway.
WrongAlertDelay400alertDelay is niet een van de geaccepteerde waarden (zie contacts/delays).
WrongActivePeriodInterval400Ongeldige start/einde van de actieve periode.
WrongActiveDay400Niet-ondersteunde naam voor een actieve dag.
EmptyFilter400Een bulk-DELETE contacts is verstuurd met een leeg filter (geweigerd).

Abonnementen

CodeStatusBetekenis
AlertsAndReportsAreEmpty400Een abonnementregel geeft noch meldingtypen noch rapportagetypen op.
UnknownAlertType400Een meldingtype is niet een van Up, Down, RepeatedlyDown.
UnknownReportType400Een rapportagetype is niet een van Day, Week, Month, Quarter, Year.

Rate limits

Requests zijn per client en per endpoint aan een rate limit gebonden. Het overschrijden van een limiet geeft 429 terug met machinecode RequestThrottled en een Retry-After-header (seconden).

BereikLimiet
Algemene endpoints, per account + endpoint6 requests/seconde en 120 requests/minuut
Bevestigingscode-endpoints (contacts/{id}/code), per account + endpoint1 request/seconde en 2 requests/minuut
Anonieme endpointsDezelfde 6/s + 120/min, gesleuteld per client-IP-adres
429-response
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."

Monitoringtaken

GET tasks/types

Geeft de array van taaktype-namen terug die het systeem kent:

200 OK
["API","CntCheck","Counter","DNSBL","Database","DomainExp","Http",
 "Ping","Port","RusRegBL","SSLExp","Snmp","Tran","Waterfall","WebRisk"]
Bestaande taken van elk van deze typen kunnen via deze API worden gelezen. Taken kunnen alleen voor vier typen worden aangemaakt/bijgewerkt via de typegebonden endpoints: Http Ping Port RusRegBL (aangemaakt via respectievelijk tasks/http, tasks/ping, tasks/port, tasks/rusbl).

GET tasks/intervals

Geeft de array van monitoringintervallen (in minuten) terug die voor uw account zijn toegestaan, bijvoorbeeld [1,5,15,30,60]. Gebruik een van deze waarden voor het veld interval bij het aanmaken van een taak; elke andere waarde levert WrongInterval op.

GET tasks

Lijst van monitoringtaken. Alle queryparameters zijn optioneel; zonder parameters worden alle taken van het account teruggegeven. Herhaal een parameter om een array door te geven, bijvoorbeeld ?ids=guid1&ids=guid2.

De parameter info

Vraagt extra gegevens op die in elke taak worden ingebed. Combineer waarden met komma's (?info=stats,subscriptions) of geef het equivalente bitmask-integer door:

WaardeBitEffect
subscriptions1Neem de meldings-/rapportageabonnementen van de taak op in subscriptions.
stats2Neem dagelijkse/maandelijkse/jaarlijkse/totale uptime op in stats.
results4Neem controleresultaten voor het venster sdtuedtu op in results (laatste resultaat als het venster wordt weggelaten).
attachedResultsNeem de laatste resultaten van gekoppelde controles (certificaat, domeinverloop, DNSBL) op in attached. Vereist de bijbehorende check…-vlaggen op de taak.

?info=stats,subscriptions,results is gelijk aan ?info=7.

Filterparameters

ParameterTypeBeschrijving
idsguid[]Geef alleen deze taak-id's terug. Gebruik voor één id bij voorkeur GET tasks/{id}.
excludeIdsboolSamen met ids: geef alles terug behalve die id's.
taskType / taskTypesstring / string[]Filteren op taaktype (hoofdlettergevoelig), bijvoorbeeld Http.
excludeTaskTypesboolKeer het typefilter om.
statusstringEnabled of Disabled (door de gebruiker uitgeschakeld). Bijvoorbeeld ?status=Disabled.
url / urlsstring / string[]Filteren op URL. Waarden in urls moeten URL-gecodeerd zijn.
urlSearchLikeboolSamen met url (niet urls): deelstring-match in plaats van exacte match.
excludeUrlsboolKeer het URL-filter om.
name / namesstring / string[]Filteren op taaknaam. name/names gecombineerd met id/ids is een OR; gecombineerd met andere filters is het een AND.
nameSearchLikeboolSamen met name: deelstring-match.
excludeNamesboolKeer het naamfilter om.
interval / intervalsint / int[]Filteren op monitoringinterval (minuten).
excludeIntervalsboolKeer het intervalfilter om.
openStatboolOpenbare taken (openbare statistieken/gebeurtenislog).
lastStatebooltrue = momenteel up, false = momenteel down.
tagsstring[]Filteren op tag.
overlimitedboolTaken met (true) of zonder (false) een billing-overlimit.
activebooltrue = actief, false = systeemmatig uitgeschakeld (overlimit, laag saldo, …). Gebruik voor door de gebruiker uitgeschakelde taken status.
sdtu / edtuint64Unix-seconden (UTC) van start/einde van een venster. Alleen gebruikt wanneer info=results is ingesteld; geef beide op. edtu moet > sdtu zijn.
Limiet op resultaatrijen. Bij het opvragen van resultaten mag het geschatte aantal rijen (edtu − sdtu) × (#taken) / (gem. interval) niet meer dan 10 000 bedragen. Anders is de response 400 StartEndIntervalIsTooBig, waarvan het bericht het grootste passende interval bevat. Deze limiet geldt alleen voor het lezen van taakresultaten.

Response — 200 OK

Een array van taakobjecten. De exacte velden hangen af van het taaktype; de gemeenschappelijke basis omvat id, name, taskType, enabled, interval, lastState, creationTime, tags, agentPools, en (indien opgevraagd via info) subscriptions, stats, results en attached. Wanneer resultaten worden opgenomen, bevat elk resultaat ten minste timestamp (Unix-seconden UTC) en eventNumber; de overige velden zijn taaktype-specifiek (zie de create-response hieronder voor de HTTP-vorm).

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

GET tasks/{id:guid}

Haal één taak op via id. Accepteert dezelfde parameter info (en sdtu/edtu wanneer info=results). Geeft het taakobject terug, of 404 NotFound als het niet bestaat.

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

Maak een monitoringtaak van het opgegeven type aan. Bij succes wordt 201 Created teruggegeven, samen met een relatieve Location: /tasks/{id}-header en het volledige aangemaakte taakobject.

Requestbody — HTTP-taak

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 */ ]
}
Keyword-modusDe taak is OK wanneer…
PresentAnyelk keyword aanwezig is in de response.
PresentAllalle keywords aanwezig zijn.
ReverseAnyalle keywords afwezig zijn.
ReverseAllenig keyword afwezig is.
ReverseWithResultalle keywords afwezig zijn; het foutbericht bevat de rest van de responseregel waarin het eerste keyword voorkwam (de eerste 100 tekens van elke geanalyseerde regel).
agentPools selecteert de monitoringlocaties. Dit veld is optioneel (anders wordt de profielstandaard gebruikt). Indien opgegeven, moeten de pools samen ten minste 7 agents bevatten, anders mislukt de request met SelectMoreAgents. Onbekende pool-id's mislukken met WrongAgentPool. Pool-id's komen uit GET agents/pools.

Inline abonnementen

De array subscriptions abonneert contacten op de meldingen/rapportages van deze taak op het moment van aanmaken. Elke regel gebruikt de abonnementsvorm; stel taskIds niet in (dit staat vast op de nieuwe taak). Als contactIds wordt weggelaten, worden al uw bevestigde contacten geabonneerd. Rapportage-abonnementen worden alleen toegepast op e-mailcontacten.

Andere taaktypen

  • tasks/ping — body bevat host plus de gemeenschappelijke velden.
  • tasks/port — body bevat host en port plus de gemeenschappelijke velden.
  • tasks/rusbl — controle op de Russische registerblokkeerlijst; body bevat url, plus ignoreWarnings, doNotSendMsgOnWarnings, prefixMatch en de gemeenschappelijke velden.

Response — 201 Created (HTTP-taak)

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 & typegebonden varianten

Taken bijwerken. Twee vormen:

  • Op idPUT tasks/{id} (alleen gemeenschappelijke velden), of de typegebonden PUT tasks/http/{id}, tasks/ping/{id}, tasks/port/{id}, tasks/rusbl/{id} (ook type-specifieke velden). De body heeft dezelfde bewerkbare vorm als bij het aanmaken; alleen de velden die u meestuurt worden gewijzigd.
  • Op filterPUT tasks?<filter> (alleen gemeenschappelijke velden) of de typegebonden PUT tasks/{type}?<filter> (die het filter aan dat type bindt). Gebruikt dezelfde filterparameters als GET tasks. Geeft de bijgewerkte taken/taak terug.

De ongetypeerde PUT tasks / PUT tasks/{id} kan alleen velden raken die alle taaktypen gemeen hebben — gebruik een typegebonden endpoint om type-specifieke instellingen te wijzigen.

DELETE tasks/{id:guid} & tasks

  • DELETE tasks/{id} — verwijder één taak; geeft de verwijderde taak terug.
  • DELETE tasks?<filter> — bulkverwijdering via het taakfilter (een filter mag ook in de requestbody worden meegegeven). Geeft de verwijderde taken terug.
Een leeg filter wordt geweigerd. Een bulk-DELETE tasks zonder selectief filter geeft 400 EmptyFilter terug in plaats van uw hele account te verwijderen. Om alles opzettelijk te verwijderen, itereert u expliciet.

POST tasks/$batch · task/$batch

Voer meerdere taakbewerkingen uit in één request. De body is een JSON-array van subrequests; de response is een JSON-array van subresponses in dezelfde volgorde. De subbewerking wordt gekozen op basis van het laatste segment van relativeUrl (bijvoorbeeld httpPOST tasks/http). De requestbody moet JSON zijn (Content-Type: application/json). Hetzelfde mechanisme bestaat voor contacten op contacts/$batch / contact/$batch.

RequestveldTypeBeschrijving
methodstringHTTP-methode van de subrequest (POST, PUT, DELETE…).
relativeUrlstringSubresource; het laatste segment selecteert de bewerking (http, ping, port, rusbl…).
contentTypestringContent type van content, meestal application/json.
contentstringDe subrequest-body, als JSON-string.
ResponseveldTypeBeschrijving
codeintHTTP-statuscode van de subresponse (bijvoorbeeld 201, 400).
statusstringReden-/statustekst (bevat de machinecode bij fouten).
headersobjectResponseheaders van de subbewerking (bijvoorbeeld Location).
bodystringDe subresponse-body.
request · 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\"}"
  }
]
response · 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... }" }
]

Contacten

Contacten zijn de bestemmingen die meldingen en rapportages ontvangen (e-mailadressen, telefoonnummers voor sms/spraak). Contact-id's worden gebruikt bij het aanmaken van abonnementen.

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

Statische opsommingen die door de contact-endpoints worden gebruikt:

EndpointGeeft terug
contacts/types["Email","IM","SMS","VoiceCall"] — de contacttypen die deze API opsomt. Aanmaakbare typen zijn Email, SMS en VoiceCall (IM is uitgefaseerd — zie hieronder).
contacts/delaysDe geaccepteerde alertDelay-waarden (minuten): [0,5,15,30,60,180,720,360,1440,3].
contacts/sms/gatewaysSms-gateway-id's: ["clickatell","clickatella","infobip","skype","twiliosms"]. De standaard is twiliosms; overige items zijn legacy en mogelijk inactief.
contacts/im/gatewaysIM-gateway-id's: ["GTalk","SkypeChat"]. Alleen vermeld voor compatibiliteit — IM-contacten kunnen niet meer worden aangemaakt (zie hieronder).
IM-contacten zijn uitgefaseerd. GET contacts/im/gateways geeft nog steeds de gateway-lijst terug, maar POST contacts/im en PUT contacts/im geven nu 400 WrongContactType terug. Bestaande IM-contacten kunnen niet via deze API worden aangemaakt.

GET contacts & contacts/{id:guid}

Lijst van contacten (optioneel gefilterd) of één contact ophalen via id. Voeg ?info=subscriptions toe om de abonnementen van elk contact in te bedden. Zonder filter worden alle contacten van het account teruggegeven.

FilterparameterTypeBeschrijving
ids / excludeIdsguid[] / boolSelecteren of uitsluiten op id.
contactType / contactTypesstring / string[]Filteren op type (Email, SMS, VoiceCall…).
excludeContactTypesboolKeer het typefilter om.
confirmedboolBevestigde versus onbevestigde contacten.
overlimitedboolContacten die de pakketlimiet overschrijden.
acceptBillingNotificationsboolContacten die worden gebruikt voor factureringsmeldingen.
name / names / nameSearchLike / excludeNamesstring(s) / boolFilteren op naam (exact, lijst, deelstring, of uitgesloten).
address / addresses / addressSearchLike / excludeAddressesstring(s) / boolFilteren op adres.

Contactobject

Gemeenschappelijke velden: id, confirmed, contactType, name, address, alertDelay, activePeriodStart/activePeriodEnd (HH:mm), activeDays, sendCost. E-mailcontacten voegen reportFormat (Text/ShortText), sendNews, sendBillingNotifications toe; sms-/IM-contacten voegen gateway toe.

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

Maak een contact aan. Geeft 201 Created terug, een relatieve Location: /contacts/{id}, en een ContactOperationResult ({ contact, status }) waarvan status de uitkomst van de bevestiging meldt.

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 */ ]
}
VeldVan toepassing opOpmerkingen
addressalleE-mailadres, of telefoonnummer (cijfers, optionele voorloop-+) voor sms/spraak. Verplicht bij aanmaken.
alertDelayalleMinuten wachten voordat wordt gealarmeerd. Moet een van contacts/delays zijn.
activePeriodStart / activePeriodEndalleHH:mm; het venster waarbinnen meldingen worden afgeleverd.
activeDaysalleElke dag van SundaySaturday; standaard is elke dag.
reportFormat, sendNews, sendBillingNotificationse-mailE-mailopties.
gatewaysmsEen van contacts/sms/gateways; standaard twiliosms.

Sms- en spraakcontacten gebruiken standaard de gateways twiliosms / twiliovoice, krijgen een standaardprijs per bericht, en slaan het nummer op met een voorloop-+. Het wijzigen van het adres of de gateway van een contact zet de bevestigde status terug.

Waarden van de bevestigingsstatus

Het veld status van het resultaat meldt de uitkomst van het versturen van de bevestigingscode:

StatusBetekenis
ConfirmedContact aangemaakt en al bevestigd (geen code nodig).
CodeSentEr is een bevestigingscode verstuurd; het contact wordt actief zodra het is bevestigd.
CodeSentEarlierEr is recent al een code verstuurd en deze is nog geldig.
CodeFailContact aangemaakt maar het versturen van de code is mislukt; probeer het later opnieuw.
LowSmsBalanceDe code kon niet worden verstuurd omdat het accountsaldo te laag is.
OverlimitedHet contact overschrijdt de pakketlimiet.

PUT contacts & typegebonden varianten

  • Op idPUT contacts/{id} (gemeenschappelijke velden), of de typegebonden PUT contacts/email/{id}, contacts/sms/{id}, contacts/voice/{id}. Alleen de velden die u meestuurt worden gewijzigd.
  • Op filterPUT contacts?<filter> of de typegebonden PUT contacts/{type}?<filter> (die het filter aan dat type bindt), met het contactfilter.

PUT contacts/im (beide vormen) geeft 400 WrongContactType terug.

DELETE contacts/{id:guid} & contacts

Verwijder één contact via id, of bulkverwijdering via het contactfilter. Net als bij taken wordt een bulkverwijdering met een leeg filter geweigerd met 400 EmptyFilter.

Bevestigingscodes

Onbevestigde contacten moeten hun eigendom bevestigen met een korte code die naar het contactadres wordt afgeleverd.

  • PATCH contacts/{id}/code — geef opnieuw een bevestigingscode uit en verstuur deze. Geeft een ContactOperationResult terug met een status zoals CodeSent.
  • POST contacts/{id}/code — bevestig het contact door de code in te dienen. Body: { "code": "12345" }. Bij succes wordt het contact bevestigd.
Deze endpoints hebben een strengere rate limit: 1 request/seconde en 2 requests/minuut.

Meldingen & abonnementen

Een abonnement koppelt een of meer taken en contacten aan een set meldings- en/of rapportagetypen. Eén abonnementregel kruist zijn taken en contacten, wat één melding/rapportage per (taak, contact, type) oplevert.

Vorm van een abonnement

abonnementregel
{
  "alertTypes": ["Up", "Down"],       // any of Up, Down, RepeatedlyDown
  "reportTypes": ["Day", "Month"],     // any of Day, Week, Month, Quarter, Year
  "taskIds": ["<task guid>"],
  "contactIds": ["<contact guid>"]
}
  • Ten minste een van alertTypes / reportTypes is verplicht, anders AlertsAndReportsAreEmpty.
  • Het weglaten van taskIds valt terug op al uw taken; het weglaten van contactIds valt terug op al uw contacten. Een expliciete lege array betekent "geen".
  • Rapportage-abonnementen zijn alleen van toepassing op e-mailcontacten — rapportagetypen op niet-e-mailcontacten worden stilzwijgend genegeerd (hun meldingsabonnementen worden nog wel aangemaakt).
  • Id's die u niet bezit worden genegeerd.

GET subscriptions/alertTypes · subscriptions/reportTypes

EndpointGeeft terug
subscriptions/alertTypes["Up","Down","RepeatedlyDown"]
subscriptions/reportTypes["Day","Week","Month","Quarter","Year"]

GET subscriptions

Lijst van abonnementen. Geeft één regel per gevonden meldings- of rapportageabonnement terug (nooit samengevoegd). Optionele filters:

ParameterTypeBeschrijving
taskIdguidAlleen abonnementen voor deze taak.
contactIdguidAlleen abonnementen voor dit contact.
typesstring[]Alleen deze meldings-/rapportagetypen. Onherkende namen worden hier genegeerd (in tegenstelling tot POST/DELETE, die ze weigeren).

POST subscriptions · DELETE subscriptions

Beide nemen een JSON-array van abonnementregels in de body. POST voegt de beschreven abonnementen toe (alleen nieuwe rijen worden ingevoegd); DELETE verwijdert de abonnementen die bestaan. Beide geven 200 OK terug met een lege body. Onbekende meldings-/rapportagetypen worden geweigerd met UnknownAlertType / UnknownReportType.

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

Statistieken & resultaten

GET stats

Uptime-/downtime-aggregaten per taak over een tijdvenster. Accepteert het taakfilter om taken te selecteren, plus:

ParameterTypeBeschrijving
statsStartUnix / statsEndUnixint64Start/einde van het venster als Unix-seconden (UTC).
statsStart / statsEndstringStart/einde van het venster als een profiel-geformatteerde datumstring (alternatief voor de Unix-velden).
expectedSLAdouble0–100. Indien ingesteld, meldt elk resultaat slaExpectationSucceeded.
fullTaskboolNeem het volledige taakobject op in plaats van alleen de referentie ernaartoe.

Response

Een Stats-object met het opgeloste venster (dubbele datumvelden) en een array stats. Elke regel bevat de taakreferentie en: uptimeInMinutes/uptimeSpan, downtimeInMinutes/downtimeSpan, onderhoudsuptime/-downtime, totalTimeInMinutes, de aantallen controles per bucket, en uptimePercent/downtimePercent.

Uptimepercentage: uptime% = (uptime + maintenanceUptime) / (totalTime − maintenanceDowntime). Als de totale tijd gelijk is aan de onderhoudsdowntime is het percentage null (ongedefinieerd). slaExpectationSucceeded is uptime% ≥ expectedSLA.

GET outages

Downtime-periodes per taak. Accepteert het taakfilter plus:

ParameterTypeBeschrijving
startTimeUnix / endTimeUnixint64Venster als Unix-seconden (UTC).
startTime / endTimestringVenster als profiel-geformatteerde strings.
getInUtcTimeZoneintIndien ingesteld, zijn geformatteerde tijden UTC in plaats van de profieltijdzone.
fullTaskboolNeem het volledige taakobject op.

Response: een Outages-object met het opgeloste venster en een array taskOutages; elk element koppelt een taak aan zijn outages-periodes (startTime/endTime + Unix-varianten, gebeurtenisnummers, optioneel commentaar).

GET incident

Lijst van incidenten (storingsgebeurtenissen) per taak. Accepteert het taakfilter plus dezelfde venster-/tijdzoneparameters als bij uitval, en:

ParameterTypeBeschrijving
startTimeUnix / endTimeUnix / startTime / endTimeint64 / stringVenster (Unix en/of geformatteerd).
getInUtcTimeZoneintFormatteer tijden in UTC.
fullTaskboolNeem het volledige taakobject op.
fullLogboolNeem het gedetailleerde per-agent hercontrole-log op. Vereist een geavanceerd pakket, anders ApiFullLogNotAllowed.

Response: een Incidents-object met een array taskIncidents. Elk incident bevat taskId, checkId, start-/eindtijd in Unix, de falende location, de error, hasSnapshot, en (met fullLog) een blok recheck met de OK-locaties en de falende locaties per fout.

GET incident/snapshot

Haal de opgeslagen response-snapshot op die voor een incident is vastgelegd. Parameters:

ParameterTypeBeschrijving
taskIdguidDe taak. Verplicht.
checkIdint64De controle-/gebeurtenis-id.
timestampUnixUtcint64Het tijdstip van het incident (Unix-seconden UTC).

Geeft de snapshot terug (een tijdstip plus de vastgelegde bytes) indien aanwezig, of null als er geen snapshot voor het opgegeven incident bestaat.

GET results/http

Geaggregeerde HTTP-timingmetingen per taak. Dwingt taaktype Http af. Accepteert het taakfilter plus:

ParameterTypeBeschrijving
resultStartUnix / resultEndUnixint64Venster als Unix-seconden (UTC).
resultStart / resultEndstringVenster als profiel-geformatteerde strings.
fullTaskboolNeem het volledige taakobject op.

Response: een AggregatedHttpResults-object; elke regel in taskResults meldt de taakreferentie en de gemiddelde responseTime, dnsTime, headTime, dataTime (milliseconden).

GET cr/httpResponseTime

Reeks HTTP-responstijden per taak. Accepteert het taakfilter plus startDate, endDate en groupBy. Geeft een kale array van reeksobjecten terug:

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
  }
]

Agents

Agents zijn de geografisch verspreide monitoringlocaties. De hier teruggegeven pool-id's zijn de waarden die u doorgeeft in de agentPools van een taak.

GET agents

Lijst van monitoringagents. Optionele queryparameter:

ParameterTypeBeschrijving
touchedintAlleen agents die zich binnen de laatste N minuten hebben gemeld. Waarden ≤ 0 (of afwezig) betekenen geen filter; anders wordt afgekapt tot het bereik 1–10.

Elke agent bevat id, upFrom, datacenter (naam/stad/land/staat), company (naam/url), ip, version, lon/lat, en pools.

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

Lijst van de openbare agent pools (geografische regio's). Elke pool bevat id, desc, zijn agents, childPools, en hidden. Gebruik de pool-id-waarden in de agentPools van een taak.

GET agents/ips anoniem

Geeft de huidige IP-adressen van de monitoringagents terug — handig om Host-Tracker op een firewall whitelisten. Dit endpoint vereist geen authenticatie. Standaard geeft het text/plain terug, één IP per regel; stuur Accept: application/json om in plaats daarvan een JSON-array te ontvangen.

text/plain (standaard)
203.0.113.10
203.0.113.11
198.51.100.7
met Accept: application/json
["203.0.113.10", "203.0.113.11", "198.51.100.7"]
Host-Tracker REST API v1 — host-tracker.com. Machineleesbare Swagger/OpenAPI is beschikbaar op BASE_URL/docs/v1 met een interactieve sandbox op BASE_URL/sandbox.