Nessuna sezione corrispondente.
Host-Tracker REST API v1
Una API HTTP stabile, autenticata tramite token, per gestire task di monitoraggio dei siti web, contatti, sottoscrizioni di avvisi/report e per leggere statistiche, interruzioni e incidenti.
URL di base
Ogni percorso in questo documento è relativo a un URL di base. Due punti di ingresso servono la stessa API:
| Punto di ingresso | URL di base (BASE_URL) | Note |
|---|---|---|
| Diretto | https://api1.host-tracker.com/ | Consigliato per integrazioni server-to-server. |
| Tramite il sito principale | https://www.host-tracker.com/api/web/v1/ | Instradato in reverse proxy verso lo stesso servizio. Comodo se comunichi già con www.host-tracker.com. |
In questo riferimento, una chiamata scritta come GET tasks indica
GET BASE_URL/tasks — ad es. https://api1.host-tracker.com/tasks
oppure https://www.host-tracker.com/api/web/v1/tasks.
Tipo di contenuto e metodi HTTP
Le richieste e le risposte sono in application/json per impostazione predefinita (vedi
Convenzioni per l'XML). L'API utilizza i metodi HTTP standard:
- GET — legge le entità (task, contatti, sottoscrizioni, statistiche, interruzioni, incidenti, agenti).
- POST — crea un'entità o avvia un'azione.
- PUT — aggiorna le entità esistenti.
- DELETE — rimuove le entità.
- PATCH — aggiornamenti parziali (usato per reinviare il codice di conferma di un contatto).
Override del metodo HTTP
Se il tuo client non può inviare PUT, DELETE o
PATCH, invia una POST aggiungendo un header
X-HTTP-Method-Override che indichi il verbo desiderato. Ad esempio, per aggiornare i
task, esegui una POST su tasks con X-HTTP-Method-Override: PUT.
Convenzioni
Serializzazione JSON
Il JSON utilizza nomi di proprietà in camelCase. I campi nulli vengono omessi dalle risposte (gli array
vuoti vengono comunque emessi come []). L'ordine delle proprietà è stabile: prima
l'identificatore e l'indirizzo/URL, poi i campi ereditati, infine i campi specifici del tipo.
Data e ora
Le risposte di creazione/lettura dei task riportano i timestamp come stringhe ISO-8601 UTC (ad es.
2024-06-21T22:26:23Z). Gli endpoint di statistiche, interruzioni, incidenti e
risultati usano inoltre una doppia rappresentazione: ogni orario compare sia come campo intero in
secondi Unix (suffisso Unix) sia come stringa leggibile formattata secondo il
formato data e il fuso orario del profilo dell'account. I filtri delle richieste accettano secondi Unix e/o
stringhe formattate a seconda dell'endpoint (documentato per ciascun endpoint più avanti). Tutti i timestamp
Unix sono espressi in secondi a partire da 1970-01-01T00:00:00Z.
Negoziazione del contenuto XML
Tutti gli endpoint possono restituire anche XML. Invia Accept: application/xml per
ricevere un corpo XML invece di JSON; la risposta utilizza la classica rappresentazione .NET
XmlSerializer dello stesso grafo di oggetti. JSON è il formato predefinito e
consigliato.
CORS
Le richieste cross-origin sono consentite. Le richieste semplici (senza credenziali) sono accettate da
qualsiasi origine (Access-Control-Allow-Origin: *). Le richieste che inviano
cookie/credenziali sono accettate solo da origini *.host-tracker.com. I
chiamanti basati su token (che usano l'header Authorization, come documentato
qui) non sono soggetti alla restrizione sulle origini con credenziali.
Autenticazione
Ogni endpoint, ad eccezione di POST users/token e degli endpoint anonimi di
elenco agenti, richiede l'autenticazione. Sono accettati due schemi:
- Bearer token — ottenuto da
POST users/token, inviato comeAuthorization: bearer <token>. Questo è lo schema principale. - HTTP Basic —
Authorization: Basic <base64(login:password)>. Le credenziali vengono decodificate come ISO-8859-1. Comodo per test rapidi; per l'automazione è preferibile il bearer token.
POST users/token anonimo
Scambia un login e una password con un bearer token. Il token è valido per 48 ore.
Corpo della richiesta
{
"login": "your-login",
"password": "your-password"
}
| Campo | Tipo | Descrizione |
|---|---|---|
login | string | Login dell'account. Obbligatorio. È accettata anche l'email dell'account. |
password | string | Password dell'account. Obbligatorio. |
forLogin | string | Facoltativo. Il login del super-account per conto del quale operare (impersonificazione di sottoaccount — vedi sotto). |
Risposta — 200 OK
{
"ticket": "<bearer token>",
"expirationTime": "2024-06-23T22:26:23Z",
"expirationUnixTime": 1719181583
}
In caso di errore la risposta è 401 con il codice macchina
IncorrectLoginOrPassword (oppure AccessDenied se
l'accesso API è disabilitato per l'account) e un header WWW-Authenticate: Bearer.
Utilizzo del token
GET BASE_URL/tasks HTTP/1.1
Host: api1.host-tracker.com
Accept: application/json
Authorization: bearer 3DD135...5EE510417
Impersonificazione di sottoaccount (forLogin)
Se un super-account ha concesso al tuo sottoaccount l'accesso ai propri dati, accedi come sottoaccount ma
passa il login del super-account in forLogin. Il token restituito ti permette
quindi di gestire il super-account esattamente come se gli endpoint fossero chiamati per il tuo stesso
account, nei limiti dei diritti concessi dal super-account. Ad esempio, se ha concesso l'accesso in sola
lettura ai task di monitoraggio, le chiamate GET riescono ma le POST/PUT/PATCH/DELETE sui task vengono
rifiutate.
# 1. Ottieni un token di impersonificazione
POST BASE_URL/users/token HTTP/1.1
Content-Type: application/json
{
"login": "subaccount-login",
"password": "subaccount-password",
"forLogin": "superaccount-login"
}
# 2. Usa il ticket restituito per leggere i task del SUPER-account
GET BASE_URL/tasks HTTP/1.1
Authorization: bearer <ticket from step 1>
curl
# recupera un token e memorizzalo
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)
# chiama un endpoint autenticato
curl -s https://api1.host-tracker.com/tasks \
-H "Authorization: bearer $TOKEN"
Errori e codici macchina
Gli errori restituiscono un codice di stato HTTP standard più un breve codice leggibile dalla macchina su cui la tua integrazione può basare la logica. Il corpo è una descrizione in testo semplice in inglese (non JSON), pensata per persone/log.
Il codice macchina viene fornito in due modi:
X-HT-Reasonheader di risposta — riporta il codice su ogni risposta e ogni versione HTTP. Questo è il modo consigliato per rilevare il tipo di errore.- Frase motivo HTTP/1.1 (reason phrase) — la status line riporta ad es.
HTTP/1.1 400 SimilarExists. Mantenuta per compatibilità con le versioni precedenti, ma nota che HTTP/2 e HTTP/3 hanno rimosso le reason phrase dal protocollo, quindi questo campo può essere vuoto quando la connessione negozia HTTP/2+. PreferisciX-HT-Reason.
HTTP/1.1 400 SimilarExists
X-HT-Reason: SimilarExists
Content-Type: text/plain; charset=utf-8
Same task allready exists
401 con
WWW-Authenticate: Bearer e uno tra AccessDenied,
WrongTicket, TicketExpired o
IncorrectLoginOrPassword.
Riferimento dei codici di errore
Tutti i codici macchina che l'API può restituire, raggruppati per area, con il tipico stato HTTP. Salvo
diversa indicazione, gli errori sono 400 Bad Request.
Autenticazione
| Codice | Stato | Significato |
|---|---|---|
AccessDenied | 401 | L'accesso API è disabilitato per questo account, oppure il chiamante non dispone dei diritti richiesti. |
IncorrectLoginOrPassword | 401 | Login/password rifiutati su users/token. |
WrongTicket | 401 | Il bearer token è malformato / illeggibile. |
TicketExpired | 401 | Il bearer token è scaduto — ottienine uno nuovo. |
RequestThrottled | 429 | Limite di frequenza superato (vedi Limiti di frequenza). Include Retry-After. |
Task
| Codice | Stato | Significato |
|---|---|---|
NotFound | 404 | Il task richiesto non esiste. |
SimilarExists | 400 | Esiste già un task con lo stesso tipo e la stessa chiave (a meno che l'account non consenta task simili). |
EmptyTaskData | 400 | Nessun dato del task fornito. |
UncomplitedData | 400 | I dati del task sono incompleti. |
NoIdInTaskData | 400 | È stato richiesto un aggiornamento ma manca l'id del task. |
WrongEditableTaskDataType | 400 | Il tipo del payload di modifica non corrisponde al tipo del task di destinazione. |
WrongTaskType | 400 | Tipo di task sconosciuto. |
WrongTaskStatus | 400 | Valore di status non supportato (atteso Enabled/Disabled). |
WrongInterval | 400 | L'intervallo di monitoraggio non è tra i valori accettati (vedi tasks/intervals). |
EmptyUrl | 400 | Nessun URL/host fornito per un task che lo richiede. |
WrongUrl | 400 | L'URL non è valido. |
WrongSchema | 400 | Schema URL non supportato. |
BadIP | 400 | L'URL viene risolto in un indirizzo IP negato o malformato. |
UrlInBlackList | 400 | L'URL è presente in una lista di blocco interna. |
WrongHttpMethod | 400 | Metodo HTTP non supportato per un task HTTP (consentiti: Get, Post, Head). |
WrongKeywordMode | 400 | Modalità parola chiave non supportata. |
WrongPort | 400 | Porta non valida per un task di tipo port. |
WrongAgentPool | 400 | Uno o più pool di agenti richiesti non esistono. Il messaggio elenca i pool errati e quelli disponibili. |
SelectMoreAgents | 400 | I pool di agenti selezionati non contengono abbastanza agenti (ne sono richiesti 7). Il messaggio elenca i conteggi per pool. |
ApiFullLogNotAllowed | 400 | fullLog è disponibile solo sui pacchetti avanzati. |
WrongExpectedSLA | 400 | expectedSLA deve essere compreso tra 0 e 100. |
WrongDate | 400 | Data di inizio/fine non valida in un filtro. |
WrongDateFormat | 400 | Una stringa di data non corrisponde al formato richiesto (indicato nel messaggio). |
EndDateIsGreaterThanStartDate | 400 | La data di inizio deve essere ≤ alla data di fine. |
StartEndIntervalIsTooBig | 400 | Una query sui risultati restituirebbe più di 10 000 righe. Il messaggio include l'intervallo consentito (vedi GET tasks). |
WrongSubscription | 400 | Una sottoscrizione inline nel corpo del task non è valida (il codice/messaggio interno della sottoscrizione viene riportato). |
EmptyFilter | 400 | Una DELETE tasks massiva è stata inviata con un filtro vuoto (rifiutata per evitare di eliminare l'intero account). |
Contatti
| Codice | Stato | Significato |
|---|---|---|
NotFound | 404 | Il contatto richiesto non esiste. |
SimilarExists | 400 | Esiste già un contatto con lo stesso tipo, gateway, indirizzo e ritardo di avviso. |
EmptyContactData | 400 | Nessun dato del contatto fornito. |
UncomplitedData | 400 | I dati del contatto sono incompleti. |
NoIdInContactData | 400 | È stato richiesto un aggiornamento ma manca l'id del contatto. |
EmptyAddress | 400 | Nessun indirizzo fornito durante la creazione di un contatto. |
WrongContactType | 400 | Tipo di contatto sconosciuto (restituito anche per il percorso di creazione/aggiornamento IM ormai dismesso). |
WrongEditableContactDataType | 400 | Il tipo del payload di modifica non corrisponde al tipo del contatto di destinazione. |
WrongEmailFormat | 400 | Indirizzo email non valido, oppure formato di report email non supportato. |
WrongPhoneFormat | 400 | Un numero di telefono deve contenere solo cifre (è consentito un + iniziale). |
WrongSmsGateway | 400 | Gateway SMS sconosciuto. |
WrongIMGateway | 400 | Gateway IM sconosciuto. |
WrongAlertDelay | 400 | alertDelay non è tra i valori accettati (vedi contacts/delays). |
WrongActivePeriodInterval | 400 | Inizio/fine del periodo attivo non validi. |
WrongActiveDay | 400 | Nome del giorno attivo non supportato. |
EmptyFilter | 400 | Una DELETE contacts massiva è stata inviata con un filtro vuoto (rifiutata). |
Sottoscrizioni
| Codice | Stato | Significato |
|---|---|---|
AlertsAndReportsAreEmpty | 400 | Una voce di sottoscrizione non specifica né tipi di avviso né tipi di report. |
UnknownAlertType | 400 | Un tipo di avviso non è tra Up, Down, RepeatedlyDown. |
UnknownReportType | 400 | Un tipo di report non è tra Day, Week, Month, Quarter, Year. |
Limiti di frequenza
Le richieste sono soggette a un limite di frequenza per client e per endpoint. Il superamento di un limite
restituisce 429 con codice macchina RequestThrottled
e un header Retry-After (in secondi).
| Ambito | Limite |
|---|---|
| Endpoint generali, per account + endpoint | 6 richieste/secondo e 120 richieste/minuto |
Endpoint dei codici di conferma (contacts/{id}/code), per account + endpoint | 1 richiesta/secondo e 2 richieste/minuto |
| Endpoint anonimi | Stessi 6/s + 120/min, calcolati per indirizzo IP del client |
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."
Task di monitoraggio
GET tasks/types
Restituisce l'array dei nomi dei tipi di task conosciuti dal sistema:
["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
Restituisce l'array degli intervalli di monitoraggio (in minuti) accettati per il tuo account, ad es.
[1,5,15,30,60]. Usa uno di questi valori per il campo
interval quando crei un task; qualsiasi altro valore genera
WrongInterval.
GET tasks
Elenca i task di monitoraggio. Tutti i parametri di query sono facoltativi; se nessuno viene specificato,
vengono restituiti tutti i task dell'account. Ripeti un parametro per passare un array, ad es.
?ids=guid1&ids=guid2.
Il parametro info
Richiede dati aggiuntivi incorporati in ciascun task. Combina i valori con virgole
(?info=stats,subscriptions) oppure passa l'intero bitmask equivalente:
| Valore | Bit | Effetto |
|---|---|---|
subscriptions | 1 | Include le sottoscrizioni di avviso/report del task in subscriptions. |
stats | 2 | Include l'uptime giornaliero/mensile/annuale/totale in stats. |
results | 4 | Include i risultati dei controlli per la finestra sdtu…edtu in results (ultimo risultato se la finestra viene omessa). |
attachedResults | — | Include gli ultimi risultati dei controlli collegati (certificato, scadenza dominio, DNSBL) in attached. Richiede i relativi flag check… sul task. |
?info=stats,subscriptions,results equivale a ?info=7.
Parametri di filtro
| Parametro | Tipo | Descrizione |
|---|---|---|
ids | guid[] | Restituisce solo questi id di task. Per un singolo id, preferisci GET tasks/{id}. |
excludeIds | bool | Con ids: restituisce tutto tranne quegli id. |
taskType / taskTypes | string / string[] | Filtra per tipo di task (sensibile a maiuscole/minuscole), ad es. Http. |
excludeTaskTypes | bool | Inverte il filtro per tipo. |
status | string | Enabled o Disabled (disabilitazione da parte dell'utente). Ad es. ?status=Disabled. |
url / urls | string / string[] | Filtra per URL. I valori in urls devono essere URL-encoded. |
urlSearchLike | bool | Con url (non urls): corrispondenza per sottostringa invece che esatta. |
excludeUrls | bool | Inverte il filtro per URL. |
name / names | string / string[] | Filtra per nome del task. name/names combinato con id/ids è un OR; combinato con altri filtri è un AND. |
nameSearchLike | bool | Con name: corrispondenza per sottostringa. |
excludeNames | bool | Inverte il filtro per nome. |
interval / intervals | int / int[] | Filtra per intervallo di monitoraggio (minuti). |
excludeIntervals | bool | Inverte il filtro per intervallo. |
openStat | bool | Task pubblici (statistiche/registro eventi pubblici). |
lastState | bool | true = attualmente up, false = attualmente down. |
tags | string[] | Filtra per tag. |
overlimited | bool | Task con (true) o senza (false) un overlimit di fatturazione. |
active | bool | true = attivo, false = disabilitato dal sistema (overlimit, saldo basso, …). Per la disabilitazione da parte dell'utente usa status. |
sdtu / edtu | int64 | Secondi Unix (UTC) di inizio/fine di una finestra. Usati solo quando è impostato info=results; forniscili entrambi. edtu deve essere > sdtu. |
(edtu − sdtu) × (#task) / (intervallo medio)
non deve superare 10 000. In caso contrario la risposta è 400 StartEndIntervalIsTooBig,
il cui messaggio include l'intervallo più grande che rientrerebbe nel limite. Questo limite si applica solo alla lettura dei risultati dei task.
Risposta — 200 OK
Un array di oggetti task. I campi esatti dipendono dal tipo di task; la base comune include
id, name, taskType,
enabled, interval,
lastState, creationTime,
tags, agentPools e (quando richiesto tramite
info) subscriptions,
stats, results e
attached. Quando i risultati sono inclusi, ciascun risultato riporta almeno
timestamp (secondi Unix UTC) ed eventNumber; i campi
restanti sono specifici per tipo di task (vedi la risposta di creazione più sotto per la forma HTTP).
GET BASE_URL/tasks?info=stats,subscriptions&taskType=Http HTTP/1.1
Accept: application/json
Authorization: bearer <token>
GET tasks/{id:guid}
Recupera un singolo task per id. Accetta lo stesso parametro info (e
sdtu/edtu quando info=results).
Restituisce l'oggetto task, oppure 404 NotFound se non esiste.
POST tasks/http · tasks/ping · tasks/port · tasks/rusbl
Crea un task di monitoraggio del tipo specificato. In caso di successo restituisce
201 Created, un header relativo Location: /tasks/{id}
e l'oggetto task creato completo.
Corpo della richiesta — task HTTP
{
// campi specifici HTTP
"url": "https://www.example.com", // OBBLIGATORIO
"httpMethod": "Get", // Get | Post | Head (predefinito Get)
"userAgent": "MyMonitor",
"referer": "https://www.google.com",
"acceptHeader": "application/json",
"followRedirect": false,
"treat300AsError": false, // se impostato, followRedirect viene ignorato
"checkDnsbl": false, // verifica il dominio rispetto alle liste di blocco DNS
"checkDomainExpiration": false, // monitora la scadenza del dominio (solo domini validi)
"checkCertificateExpiration": false, // monitora la scadenza del certificato TLS (solo https)
"checkRussianBlackLists": false,
"checkWebRisk": false,
"timeout": 40000, // ms prima che un controllo fallisca
"keywords": ["error", "maintenance"],
"keywordMode": "ReverseAny", // vedi le modalità parola chiave più sotto
"userName": "basic-auth-user", // credenziali per la risorsa monitorata
"password": "basic-auth-pass",
"postParameters": "a=1\r\nb=2", // solo con httpMethod=Post
"ignoredStatuses": [404, 500],
// campi comuni a ogni tipo di task
"interval": 5, // minuti; deve essere un intervallo accettato
"enabled": true,
"fullLog": false, // solo pacchetti avanzati
"openStat": true,
"name": "My website",
"tags": ["production", "web"],
"agentPools": ["westeurope", "asia"], // vedi le note più sotto
"subscriptions": [ /* sottoscrizioni inline, vedi sotto */ ]
}
| Modalità parola chiave | Il task è OK quando… |
|---|---|
PresentAny | una qualsiasi parola chiave è presente nella risposta. |
PresentAll | tutte le parole chiave sono presenti. |
ReverseAny | tutte le parole chiave sono assenti. |
ReverseAll | una qualsiasi parola chiave è assente. |
ReverseWithResult | tutte le parole chiave sono assenti; il messaggio di errore include il resto della riga di risposta in cui è comparsa la prima parola chiave (vengono analizzati i primi 100 caratteri di ciascuna riga). |
agentPools seleziona le posizioni di monitoraggio. È facoltativo
(altrimenti viene usato il valore predefinito del profilo). Se specificato, i pool devono contenere insieme
almeno 7 agenti, altrimenti la richiesta fallisce con SelectMoreAgents. Id di
pool sconosciuti falliscono con WrongAgentPool. Gli id dei pool provengono da
GET agents/pools.
Sottoscrizioni inline
L'array subscriptions sottoscrive dei contatti agli avvisi/report di questo task
al momento della creazione. Ogni voce utilizza la forma delle sottoscrizioni;
non impostare taskIds (è fissato al nuovo task). Se
contactIds viene omesso, vengono sottoscritti tutti i tuoi contatti confermati.
Le sottoscrizioni di report vengono applicate solo ai contatti Email.
Altri tipi di task
tasks/ping— il corpo riportahostpiù i campi comuni.tasks/port— il corpo riportahosteportpiù i campi comuni.tasks/rusbl— controllo della lista di blocco del registro russo; il corpo riportaurl, piùignoreWarnings,doNotSendMsgOnWarnings,prefixMatche i campi comuni.
Risposta — 201 Created (task 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 & varianti tipizzate
Aggiorna i task. Due modalità:
- Per id —
PUT tasks/{id}(solo campi comuni), oppure le varianti tipizzatePUT tasks/http/{id},tasks/ping/{id},tasks/port/{id},tasks/rusbl/{id}(anche campi specifici del tipo). Il corpo ha la stessa forma modificabile della creazione; vengono modificati solo i campi che includi. - Per filtro —
PUT tasks?<filter>(solo campi comuni) oppure la variante tipizzataPUT tasks/{type}?<filter>(che vincola il filtro a quel tipo). Usa gli stessi parametri di filtro di GET tasks. Restituisce il/i task aggiornato/i.
La PUT tasks / PUT tasks/{id} non tipizzata può
modificare solo i campi comuni a tutti i tipi di task — usa un endpoint tipizzato per cambiare le
impostazioni specifiche del tipo.
DELETE tasks/{id:guid} & tasks
DELETE tasks/{id}— elimina un singolo task; restituisce il task eliminato.DELETE tasks?<filter>— eliminazione massiva tramite il filtro dei task (un filtro può anche essere fornito nel corpo della richiesta). Restituisce i task eliminati.
DELETE tasks massiva senza un filtro
selettivo restituisce 400 EmptyFilter invece di eliminare l'intero account. Per
eliminare tutto intenzionalmente, itera esplicitamente.
POST tasks/$batch · task/$batch
Esegue più operazioni sui task in un'unica richiesta. Il corpo è un array JSON di sotto-richieste; la
risposta è un array JSON di sotto-risposte nello stesso ordine. La sotto-operazione viene scelta in base
all'ultimo segmento di relativeUrl (ad es. http
→ POST tasks/http). Il corpo della richiesta deve essere JSON
(Content-Type: application/json). Lo stesso meccanismo esiste per i contatti su
contacts/$batch / contact/$batch.
| Campo della richiesta | Tipo | Descrizione |
|---|---|---|
method | string | Metodo HTTP della sotto-richiesta (POST, PUT, DELETE…). |
relativeUrl | string | Sotto-risorsa; l'ultimo segmento seleziona l'operazione (http, ping, port, rusbl…). |
contentType | string | Tipo di contenuto di content, di solito application/json. |
content | string | Il corpo della sotto-richiesta, come stringa JSON. |
| Campo della risposta | Tipo | Descrizione |
|---|---|---|
code | int | Codice di stato HTTP della sotto-risposta (ad es. 201, 400). |
status | string | Testo del motivo/stato (riporta il codice macchina in caso di errori). |
headers | object | Header di risposta della sotto-operazione (ad es. Location). |
body | string | Il corpo della sotto-risposta. |
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": "{ ...task http creato... }" },
{ "code": 201, "status": "Created",
"headers": { "Location": "/tasks/7a20de34-...-1cd3" },
"body": "{ ...task ping creato... }" }
]
Contatti
I contatti sono le destinazioni che ricevono avvisi e report (indirizzi email, numeri di telefono per SMS/chiamate vocali). Gli id dei contatti vengono utilizzati durante la creazione delle sottoscrizioni.
GET contacts/types · contacts/delays · contacts/sms/gateways · contacts/im/gateways
Enumerazioni statiche utilizzate dagli endpoint dei contatti:
| Endpoint | Restituisce |
|---|---|
contacts/types | ["Email","IM","SMS","VoiceCall"] — i tipi di contatto enumerati da questa API. I tipi creabili sono Email, SMS e VoiceCall (IM è dismesso — vedi sotto). |
contacts/delays | I valori accettati per alertDelay (minuti): [0,5,15,30,60,180,720,360,1440,3]. |
contacts/sms/gateways | Id dei gateway SMS: ["clickatell","clickatella","infobip","skype","twiliosms"]. Il predefinito è twiliosms; le altre voci sono legacy e potrebbero essere inattive. |
contacts/im/gateways | Id dei gateway IM: ["GTalk","SkypeChat"]. Elencati solo per compatibilità — i contatti IM non possono più essere creati (vedi sotto). |
GET contacts/im/gateways restituisce ancora
l'elenco dei gateway, ma POST contacts/im e
PUT contacts/im ora restituiscono 400 WrongContactType.
I contatti IM esistenti non sono creabili tramite questa API.
GET contacts & contacts/{id:guid}
Elenca i contatti (con filtro opzionale) o ne recupera uno per id. Aggiungi ?info=subscriptions
per incorporare le sottoscrizioni di ciascun contatto. Senza filtro, vengono restituiti tutti i contatti
dell'account.
| Parametro di filtro | Tipo | Descrizione |
|---|---|---|
ids / excludeIds | guid[] / bool | Seleziona o esclude per id. |
contactType / contactTypes | string / string[] | Filtra per tipo (Email, SMS, VoiceCall…). |
excludeContactTypes | bool | Inverte il filtro per tipo. |
confirmed | bool | Contatti confermati o non confermati. |
overlimited | bool | Contatti contrassegnati come oltre il limite del pacchetto. |
acceptBillingNotifications | bool | Contatti usati per le notifiche di fatturazione. |
name / names / nameSearchLike / excludeNames | string(s) / bool | Filtra per nome (esatto, elenco, sottostringa o esclusione). |
address / addresses / addressSearchLike / excludeAddresses | string(s) / bool | Filtra per indirizzo. |
Oggetto contatto
Campi comuni: id, confirmed,
contactType, name,
address, alertDelay,
activePeriodStart/activePeriodEnd (HH:mm),
activeDays, sendCost. I contatti email aggiungono
reportFormat (Text/ShortText),
sendNews, sendBillingNotifications; i contatti SMS/IM
aggiungono gateway.
POST contacts/email · contacts/sms · contacts/voice
Crea un contatto. Restituisce 201 Created, un header relativo
Location: /contacts/{id} e un ContactOperationResult
({ contact, status }) il cui status riporta l'esito
della conferma.
{
"address": "ops@@example.com", // OBBLIGATORIO
"name": "Ops mailbox",
"alertDelay": 0, // minuti; uno tra contacts/delays
"reportFormat": "Text", // Text | ShortText (solo email)
"activePeriodStart": "00:00", // finestra oraria di silenzio facoltativa (HH:mm)
"activePeriodEnd": "23:59",
"activeDays": ["Monday", "Tuesday"], // facoltativo; predefinito tutti i giorni
"subscriptions": [ /* sottoscrizioni inline facoltative */ ]
}
| Campo | Si applica a | Note |
|---|---|---|
address | tutti | Indirizzo email, oppure numero di telefono (cifre, con + iniziale facoltativo) per SMS/voce. Obbligatorio in creazione. |
alertDelay | tutti | Minuti di attesa prima di avvisare. Deve essere uno tra contacts/delays. |
activePeriodStart / activePeriodEnd | tutti | HH:mm; la finestra durante la quale vengono recapitati gli avvisi. |
activeDays | tutti | Uno o più tra Sunday…Saturday; il valore predefinito è ogni giorno. |
reportFormat, sendNews, sendBillingNotifications | Opzioni email. | |
gateway | sms | Uno tra contacts/sms/gateways; predefinito twiliosms. |
I contatti SMS e voce usano per impostazione predefinita i gateway twiliosms /
twiliovoice, ottengono un prezzo predefinito per messaggio e memorizzano il
numero con un + iniziale. Modificare l'indirizzo o il gateway di un contatto ne
azzera lo stato di conferma.
Valori dello stato di conferma
Il campo status del risultato riporta l'esito dell'invio del codice di conferma:
| Stato | Significato |
|---|---|
Confirmed | Contatto creato già confermato (nessun codice necessario). |
CodeSent | È stato inviato un codice di conferma; il contatto diventa attivo una volta confermato. |
CodeSentEarlier | Un codice è già stato inviato di recente ed è ancora valido. |
CodeFail | Contatto creato ma l'invio del codice non è riuscito; riprova più tardi. |
LowSmsBalance | Impossibile inviare il codice perché il saldo dell'account è troppo basso. |
Overlimited | Il contatto supera il limite del pacchetto. |
PUT contacts & varianti tipizzate
- Per id —
PUT contacts/{id}(campi comuni), oppure le varianti tipizzatePUT contacts/email/{id},contacts/sms/{id},contacts/voice/{id}. Vengono modificati solo i campi che invii. - Per filtro —
PUT contacts?<filter>oppure la variante tipizzataPUT contacts/{type}?<filter>(vincola il filtro a quel tipo), usando il filtro dei contatti.
PUT contacts/im (in entrambe le forme) restituisce 400 WrongContactType.
DELETE contacts/{id:guid} & contacts
Elimina un contatto per id, oppure elimina in massa tramite il filtro dei contatti.
Come per i task, un'eliminazione massiva con filtro vuoto viene rifiutata con
400 EmptyFilter.
Codici di conferma
I contatti non confermati devono confermare la proprietà con un breve codice recapitato all'indirizzo del contatto.
PATCH contacts/{id}/code— (ri)emette e invia il codice di conferma. Restituisce unContactOperationResultcon uno status comeCodeSent.POST contacts/{id}/code— conferma il contatto inviando il codice. Corpo:{ "code": "12345" }. In caso di successo il contatto diventa confermato.
Avvisi e sottoscrizioni
Una sottoscrizione collega uno o più task e contatti a un insieme di tipi di avviso e/o report. Una singola voce di sottoscrizione effettua un prodotto cartesiano tra i suoi task e contatti, producendo un avviso/report per ciascuna combinazione (task, contatto, tipo).
Forma della sottoscrizione
{
"alertTypes": ["Up", "Down"], // uno tra Up, Down, RepeatedlyDown
"reportTypes": ["Day", "Month"], // uno tra Day, Week, Month, Quarter, Year
"taskIds": ["<task guid>"],
"contactIds": ["<contact guid>"]
}
- È richiesto almeno uno tra
alertTypes/reportTypes, altrimentiAlertsAndReportsAreEmpty. - Omettere
taskIdsequivale a tutti i tuoi task; ometterecontactIdsequivale a tutti i tuoi contatti. Un array vuoto esplicito significa "nessuno". - Le sottoscrizioni di report si applicano solo ai contatti Email — i tipi di report su contatti non Email vengono ignorati silenziosamente (le loro sottoscrizioni di avviso vengono comunque create).
- Gli id che non possiedi vengono ignorati.
GET subscriptions/alertTypes · subscriptions/reportTypes
| Endpoint | Restituisce |
|---|---|
subscriptions/alertTypes | ["Up","Down","RepeatedlyDown"] |
subscriptions/reportTypes | ["Day","Week","Month","Quarter","Year"] |
GET subscriptions
Elenca le sottoscrizioni. Restituisce una voce per ogni sottoscrizione di avviso o report trovata (mai unite). Filtri facoltativi:
| Parametro | Tipo | Descrizione |
|---|---|---|
taskId | guid | Solo le sottoscrizioni per questo task. |
contactId | guid | Solo le sottoscrizioni per questo contatto. |
types | string[] | Solo questi tipi di avviso/report. I nomi non riconosciuti vengono qui ignorati (a differenza di POST/DELETE, che li rifiutano). |
POST subscriptions · DELETE subscriptions
Entrambe accettano un array JSON di voci di sottoscrizione nel corpo. POST aggiunge le sottoscrizioni
descritte (vengono inserite solo le righe nuove); DELETE rimuove quelle esistenti. Entrambe
restituiscono 200 OK con corpo vuoto. I tipi di avviso/report sconosciuti
vengono rifiutati con 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>"]}]'
Statistiche e risultati
GET stats
Aggregati di uptime/downtime per task su una finestra temporale. Accetta il filtro dei task per selezionare i task, più:
| Parametro | Tipo | Descrizione |
|---|---|---|
statsStartUnix / statsEndUnix | int64 | Inizio/fine della finestra in secondi Unix (UTC). |
statsStart / statsEnd | string | Inizio/fine della finestra come stringa di data formattata secondo il profilo (alternativa ai campi Unix). |
expectedSLA | double | 0–100. Se impostato, ciascun risultato riporta slaExpectationSucceeded. |
fullTask | bool | Include l'oggetto task completo invece del solo riferimento. |
Risposta
Un oggetto Stats con la finestra risolta (doppi campi data) e un array
stats. Ogni voce riporta il riferimento al task e:
uptimeInMinutes/uptimeSpan,
downtimeInMinutes/downtimeSpan, i tempi di
manutenzione up/down, totalTimeInMinutes, i conteggi dei controlli per bucket, e
uptimePercent/downtimePercent.
uptime% = (uptime + maintenanceUptime) / (totalTime − maintenanceDowntime).
Quando il tempo totale equivale al downtime di manutenzione, la percentuale è null (indefinita).
slaExpectationSucceeded è uptime% ≥ expectedSLA.
GET outages
Intervalli di downtime per task. Accetta il filtro dei task più:
| Parametro | Tipo | Descrizione |
|---|---|---|
startTimeUnix / endTimeUnix | int64 | Finestra in secondi Unix (UTC). |
startTime / endTime | string | Finestra come stringhe formattate secondo il profilo. |
getInUtcTimeZone | int | Se impostato, gli orari formattati sono in UTC anziché nel fuso orario del profilo. |
fullTask | bool | Include l'oggetto task completo. |
Risposta: un oggetto Outages con la finestra risolta e un array
taskOutages; ogni elemento abbina un task ai suoi intervalli di
outages (startTime/endTime
+ varianti Unix, numeri di evento, commento facoltativo).
GET incident
Elenco degli incidenti (eventi di guasto) per task. Accetta il filtro dei task più gli stessi parametri di finestra/fuso orario di outages, e:
| Parametro | Tipo | Descrizione |
|---|---|---|
startTimeUnix / endTimeUnix / startTime / endTime | int64 / string | Finestra (Unix e/o formattata). |
getInUtcTimeZone | int | Formatta gli orari in UTC. |
fullTask | bool | Include l'oggetto task completo. |
fullLog | bool | Include il registro dettagliato dei ricontrolli per agente. Richiede un pacchetto avanzato, altrimenti ApiFullLogNotAllowed. |
Risposta: un oggetto Incidents con un array taskIncidents.
Ogni incidente riporta taskId, checkId, gli orari
Unix di inizio/fine, la location in errore, l'error,
hasSnapshot e (con fullLog) un blocco
recheck che elenca le location OK e quelle in errore per ciascun errore.
GET incident/snapshot
Recupera lo snapshot della risposta salvato per un incidente. Parametri:
| Parametro | Tipo | Descrizione |
|---|---|---|
taskId | guid | Il task. Obbligatorio. |
checkId | int64 | L'id del controllo/evento. |
timestampUnixUtc | int64 | Il timestamp dell'incidente (secondi Unix UTC). |
Restituisce lo snapshot (un timestamp più i byte catturati) quando esiste, oppure
null quando non c'è alcuno snapshot per l'incidente indicato.
GET results/http
Metriche di timing HTTP aggregate per task. Forza il tipo di task Http. Accetta
il filtro dei task più:
| Parametro | Tipo | Descrizione |
|---|---|---|
resultStartUnix / resultEndUnix | int64 | Finestra in secondi Unix (UTC). |
resultStart / resultEnd | string | Finestra come stringhe formattate secondo il profilo. |
fullTask | bool | Include l'oggetto task completo. |
Risposta: un oggetto AggregatedHttpResults; ogni voce di
taskResults riporta il riferimento al task e i valori medi di
responseTime, dnsTime,
headTime, dataTime (millisecondi).
GET cr/httpResponseTime
Serie temporali del tempo di risposta HTTP per task. Accetta il filtro dei task più
startDate, endDate e
groupBy. Restituisce un array semplice di oggetti serie:
[
{
"id": "ef10cd12-93f9-e311-bec5-dc85de1f0bc2",
"rawUrl": "https://www.example.com",
"name": "My website",
"results": [ [1719181583, 142], [1719177983, 138] ] // [unixSeconds, responseTimeMs], più recenti per primi
}
]
Agenti
Gli agenti sono le postazioni di monitoraggio distribuite geograficamente. Gli id dei pool restituiti qui
sono i valori che passi nell'agentPools di un task.
GET agents
Elenca gli agenti di monitoraggio. Parametro di query facoltativo:
| Parametro | Tipo | Descrizione |
|---|---|---|
touched | int | Solo gli agenti che hanno segnalato nell'ultimo N minuti. I valori ≤ 0 (o assenti) significano nessun filtro; altrimenti vengono limitati all'intervallo 1–10. |
Ogni agente riporta id, upFrom,
datacenter (nome/città/paese/stato),
company (nome/url), ip,
version, lon/lat e
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
Elenca i pool di agenti pubblici (regioni geografiche). Ogni pool riporta id,
desc, i suoi agents,
childPools e hidden. Usa i valori
id del pool nell'agentPools di un task.
GET agents/ips anonimo
Restituisce gli indirizzi IP attuali degli agenti di monitoraggio — utile per inserire Host-Tracker in
whitelist in un firewall. Questo endpoint non richiede autenticazione. Per impostazione predefinita
restituisce text/plain, un IP per riga; invia
Accept: application/json per ricevere invece un array 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"]