Aucune section correspondante.
Host-Tracker REST API v1
Une API HTTP stable, authentifiée par token, pour gérer les tâches de surveillance de sites web, les contacts, les abonnements aux alertes/rapports, et lire les statistiques, interruptions et incidents.
URL de base
Chaque chemin de ce document est relatif à une URL de base. Deux points d'entrée servent la même API :
| Point d'entrée | URL de base (BASE_URL) | Remarques |
|---|---|---|
| Direct | https://api1.host-tracker.com/ | Recommandé pour les intégrations serveur à serveur. |
| Via le site principal | https://www.host-tracker.com/api/web/v1/ | Reverse-proxifié vers le même service. Pratique lorsque vous communiquez déjà avec www.host-tracker.com. |
Dans toute cette référence, un appel écrit GET tasks signifie
GET BASE_URL/tasks — par ex. https://api1.host-tracker.com/tasks
ou https://www.host-tracker.com/api/web/v1/tasks.
Type de contenu & méthodes HTTP
Les requêtes et réponses sont en application/json par défaut (voir les
Conventions pour le XML). L'API utilise les méthodes HTTP standard :
- GET — lire des entités (tâches, contacts, abonnements, statistiques, interruptions, incidents, agents).
- POST — créer une entité ou déclencher une action.
- PUT — mettre à jour des entités existantes.
- DELETE — supprimer des entités.
- PATCH — mises à jour partielles (utilisé pour renvoyer un code de confirmation de contact).
Contournement de méthode HTTP
Si votre client ne peut pas envoyer PUT, DELETE ou
PATCH, envoyez un POST et ajoutez un en-tête
X-HTTP-Method-Override nommant le verbe visé. Par exemple, pour mettre à jour
des tâches, faites un POST vers tasks avec X-HTTP-Method-Override: PUT.
Conventions
Sérialisation JSON
Le JSON utilise des noms de propriété en camelCase. Les champs nuls sont omis des réponses (les
tableaux vides sont tout de même émis sous forme de []). L'ordre des propriétés
est stable : l'identifiant et l'adresse/url en premier, puis les champs hérités, puis les champs spécifiques
au type.
Date & heure
Les réponses de création/lecture de tâches transportent les horodatages sous forme de chaînes ISO-8601 UTC
(par ex. 2024-06-21T22:26:23Z). Les endpoints de statistiques, d'interruptions,
d'incidents et de résultats utilisent en plus une double représentation : chaque instant apparaît à
la fois comme un champ entier en secondes Unix (suffixe Unix) et comme une
chaîne lisible formatée selon le format de date et le fuseau horaire du profil du compte. Les filtres de
requête acceptent des secondes Unix et/ou des chaînes formatées selon l'endpoint (documenté endpoint par
endpoint ci-dessous). Tous les horodatages Unix sont des secondes depuis
1970-01-01T00:00:00Z.
Négociation de contenu XML
Tous les endpoints peuvent aussi renvoyer du XML. Envoyez Accept: application/xml
pour recevoir un corps XML au lieu de JSON ; la réponse utilise la représentation classique du graphe
d'objets par le XmlSerializer .NET. JSON est le format par défaut et
recommandé.
CORS
Les requêtes cross-origin sont autorisées. Les requêtes simples (sans identifiants) sont acceptées depuis
n'importe quelle origine (Access-Control-Allow-Origin: *). Les requêtes qui
envoient des cookies/identifiants ne sont acceptées que depuis les origines
*.host-tracker.com. Les appelants basés sur un token (utilisant l'en-tête
Authorization, comme documenté ici) ne sont pas affectés par la restriction
sur les origines avec identifiants.
Authentification
Chaque endpoint, à l'exception de POST users/token et des endpoints anonymes de
liste d'agents, nécessite une authentification. Deux schémas sont acceptés :
- Token bearer — obtenu via
POST users/token, envoyé commeAuthorization: bearer <token>. C'est le schéma principal. - HTTP Basic —
Authorization: Basic <base64(login:password)>. Les identifiants sont décodés en ISO-8859-1. Pratique pour des tests rapides ; le token bearer est préféré pour l'automatisation.
POST users/token anonyme
Échange un login et un mot de passe contre un token bearer. Le token est valide pendant 48 heures.
Corps de la requête
{
"login": "your-login",
"password": "your-password"
}
| Champ | Type | Description |
|---|---|---|
login | string | Login du compte. Obligatoire. L'email du compte est également accepté. |
password | string | Mot de passe du compte. Obligatoire. |
forLogin | string | Optionnel. Le login du super-compte pour lequel agir (usurpation de sous-compte — voir ci-dessous). |
Réponse — 200 OK
{
"ticket": "<bearer token>",
"expirationTime": "2024-06-23T22:26:23Z",
"expirationUnixTime": 1719181583
}
En cas d'échec, la réponse est 401 avec le code machine
IncorrectLoginOrPassword (ou AccessDenied si
l'accès API est désactivé pour le compte) et un en-tête WWW-Authenticate: Bearer.
Utilisation du token
GET BASE_URL/tasks HTTP/1.1
Host: api1.host-tracker.com
Accept: application/json
Authorization: bearer 3DD135...5EE510417
Usurpation de sous-compte (forLogin)
Si un super-compte a accordé à votre sous-compte l'accès à ses données, connectez-vous en tant que
sous-compte mais transmettez le login du super-compte dans forLogin. Le token
retourné vous permet alors de gérer le super-compte exactement comme si les endpoints étaient appelés pour
votre propre compte, sous réserve des droits accordés par le super-compte. Par exemple, s'il a accordé un
accès en lecture seule aux tâches de surveillance, les appels GET réussissent mais les POST/PUT/PATCH/DELETE
sur les tâches sont rejetés.
# 1. Obtenir un token d'usurpation
POST BASE_URL/users/token HTTP/1.1
Content-Type: application/json
{
"login": "subaccount-login",
"password": "subaccount-password",
"forLogin": "superaccount-login"
}
# 2. Utiliser le ticket retourné pour lire les tâches du SUPER-compte
GET BASE_URL/tasks HTTP/1.1
Authorization: bearer <ticket from step 1>
curl
# récupérer un token et le stocker
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)
# appeler un endpoint authentifié
curl -s https://api1.host-tracker.com/tasks \
-H "Authorization: bearer $TOKEN"
Erreurs & codes machine
Les erreurs renvoient un code de statut HTTP standard accompagné d'un court code lisible par une machine sur lequel votre intégration peut brancher sa logique. Le corps est une description en anglais en texte brut (pas du JSON), destinée aux humains/journaux.
Le code machine est transmis de deux façons :
- En-tête de réponse
X-HT-Reason— porte le code sur chaque réponse et pour chaque version HTTP. C'est la méthode recommandée pour détecter le type d'erreur. - Phrase de raison HTTP/1.1 — la ligne de statut se lit par ex.
HTTP/1.1 400 SimilarExists. Conservée pour la compatibilité descendante, mais notez que HTTP/2 et HTTP/3 ont supprimé les phrases de raison du protocole, donc cet emplacement peut être vide lorsque la connexion négocie HTTP/2+. PréférezX-HT-Reason.
HTTP/1.1 400 SimilarExists
X-HT-Reason: SimilarExists
Content-Type: text/plain; charset=utf-8
Same task allready exists
401 avec
WWW-Authenticate: Bearer et l'un de AccessDenied,
WrongTicket, TicketExpired ou
IncorrectLoginOrPassword.
Référence des codes d'erreur
Chaque code machine que l'API peut renvoyer, groupé par domaine, avec le statut HTTP habituel. Sauf mention
contraire, les erreurs sont 400 Bad Request.
Authentification
| Code | Statut | Signification |
|---|---|---|
AccessDenied | 401 | L'accès API est désactivé pour ce compte, ou l'appelant n'a pas les droits requis. |
IncorrectLoginOrPassword | 401 | Login/mot de passe rejeté sur users/token. |
WrongTicket | 401 | Le token bearer est malformé / illisible. |
TicketExpired | 401 | Le token bearer a expiré — obtenez-en un nouveau. |
RequestThrottled | 429 | Limite de débit dépassée (voir Limites de débit). Inclut Retry-After. |
Tâches
| Code | Statut | Signification |
|---|---|---|
NotFound | 404 | La tâche demandée n'existe pas. |
SimilarExists | 400 | Une tâche du même type et avec la même clé existe déjà (sauf si le compte autorise les tâches similaires). |
EmptyTaskData | 400 | Aucune donnée de tâche fournie. |
UncomplitedData | 400 | Les données de la tâche sont incomplètes. |
NoIdInTaskData | 400 | Une mise à jour a été demandée mais l'id de la tâche est manquant. |
WrongEditableTaskDataType | 400 | Le type du contenu à modifier ne correspond pas au type de la tâche cible. |
WrongTaskType | 400 | Type de tâche inconnu. |
WrongTaskStatus | 400 | Valeur status non prise en charge (attendu Enabled/Disabled). |
WrongInterval | 400 | L'intervalle de surveillance ne fait pas partie des valeurs acceptées (voir tasks/intervals). |
EmptyUrl | 400 | Aucune URL/hôte fourni pour une tâche qui en requiert un. |
WrongUrl | 400 | L'URL est invalide. |
WrongSchema | 400 | Schéma d'URL non pris en charge. |
BadIP | 400 | L'URL résout vers une adresse IP refusée ou malformée. |
UrlInBlackList | 400 | L'URL figure sur une liste de blocage interne. |
WrongHttpMethod | 400 | Méthode HTTP non prise en charge pour une tâche HTTP (autorisées : Get, Post, Head). |
WrongKeywordMode | 400 | Mode de mot-clé non pris en charge. |
WrongPort | 400 | Port invalide pour une tâche de type port. |
WrongAgentPool | 400 | Un ou plusieurs des pools d'agents demandés n'existent pas. Le message liste les pools invalides et disponibles. |
SelectMoreAgents | 400 | Les pools d'agents sélectionnés ne contiennent pas assez d'agents (7 requis). Le message liste les décomptes par pool. |
ApiFullLogNotAllowed | 400 | fullLog n'est disponible que sur les forfaits avancés. |
WrongExpectedSLA | 400 | expectedSLA doit être compris entre 0 et 100. |
WrongDate | 400 | Date de début/fin invalide dans un filtre. |
WrongDateFormat | 400 | Une chaîne de date ne correspond pas au format requis (indiqué dans le message). |
EndDateIsGreaterThanStartDate | 400 | La date de début doit être ≤ à la date de fin. |
StartEndIntervalIsTooBig | 400 | Une requête de résultats renverrait plus de 10 000 lignes. Le message inclut l'intervalle autorisé (voir GET tasks). |
WrongSubscription | 400 | Un abonnement en ligne dans le corps de la tâche est invalide (le code/message de l'abonnement interne est transmis). |
EmptyFilter | 400 | Un DELETE tasks en masse a été envoyé avec un filtre vide (rejeté pour éviter de supprimer tout le compte). |
Contacts
| Code | Statut | Signification |
|---|---|---|
NotFound | 404 | Le contact demandé n'existe pas. |
SimilarExists | 400 | Un contact avec le même type, la même gateway, la même adresse et le même délai d'alerte existe déjà. |
EmptyContactData | 400 | Aucune donnée de contact fournie. |
UncomplitedData | 400 | Les données du contact sont incomplètes. |
NoIdInContactData | 400 | Une mise à jour a été demandée mais l'id du contact est manquant. |
EmptyAddress | 400 | Aucune adresse fournie lors de la création d'un contact. |
WrongContactType | 400 | Type de contact inconnu (également renvoyé pour l'ancien chemin de création/mise à jour IM, retiré). |
WrongEditableContactDataType | 400 | Le type du contenu à modifier ne correspond pas au type du contact cible. |
WrongEmailFormat | 400 | Adresse email invalide, ou format de rapport email non pris en charge. |
WrongPhoneFormat | 400 | Un numéro de téléphone ne doit contenir que des chiffres (un + initial est autorisé). |
WrongSmsGateway | 400 | Gateway SMS inconnue. |
WrongIMGateway | 400 | Gateway IM inconnue. |
WrongAlertDelay | 400 | alertDelay ne fait pas partie des valeurs acceptées (voir contacts/delays). |
WrongActivePeriodInterval | 400 | Début/fin de période active invalide. |
WrongActiveDay | 400 | Nom de jour actif non pris en charge. |
EmptyFilter | 400 | Un DELETE contacts en masse a été envoyé avec un filtre vide (rejeté). |
Abonnements
| Code | Statut | Signification |
|---|---|---|
AlertsAndReportsAreEmpty | 400 | Une entrée d'abonnement ne spécifie ni types d'alerte ni types de rapport. |
UnknownAlertType | 400 | Un type d'alerte n'est pas l'un de Up, Down, RepeatedlyDown. |
UnknownReportType | 400 | Un type de rapport n'est pas l'un de Day, Week, Month, Quarter, Year. |
Limites de débit
Les requêtes sont limitées en débit par client, par endpoint. Dépasser une limite renvoie
429 avec le code machine RequestThrottled et un
en-tête Retry-After (en secondes).
| Portée | Limite |
|---|---|
| Endpoints généraux, par compte + endpoint | 6 requêtes / seconde et 120 requêtes / minute |
Endpoints de code de confirmation (contacts/{id}/code), par compte + endpoint | 1 requête / seconde et 2 requêtes / minute |
| Endpoints anonymes | Mêmes 6/s + 120/min, indexés par adresse IP du 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."
Tâches de surveillance
GET tasks/types
Renvoie le tableau des noms de types de tâches que le système connaît :
["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
Renvoie le tableau des intervalles de surveillance (en minutes) acceptés pour votre compte, par ex.
[1,5,15,30,60]. Utilisez l'une de ces valeurs pour le champ
interval lors de la création d'une tâche ; toute autre valeur produit
WrongInterval.
GET tasks
Liste les tâches de surveillance. Tous les paramètres de requête sont optionnels ; sans aucun, toutes les
tâches du compte sont renvoyées. Répétez un paramètre pour passer un tableau, par ex.
?ids=guid1&ids=guid2.
Le paramètre info
Demande des données supplémentaires intégrées dans chaque tâche. Combinez les valeurs avec des virgules
(?info=stats,subscriptions) ou passez l'entier de masque de bits équivalent :
| Valeur | Bit | Effet |
|---|---|---|
subscriptions | 1 | Inclut les abonnements aux alertes/rapports de la tâche dans subscriptions. |
stats | 2 | Inclut le temps de disponibilité quotidien/mensuel/annuel/total dans stats. |
results | 4 | Inclut les résultats de contrôle pour la fenêtre sdtu…edtu dans results (dernier résultat si la fenêtre est omise). |
attachedResults | — | Inclut les derniers résultats de contrôles associés (certificat, expiration de domaine, DNSBL) dans attached. Nécessite les indicateurs check… correspondants sur la tâche. |
?info=stats,subscriptions,results équivaut à ?info=7.
Paramètres de filtrage
| Paramètre | Type | Description |
|---|---|---|
ids | guid[] | Renvoie uniquement ces identifiants de tâche. Pour un seul id, préférez GET tasks/{id}. |
excludeIds | bool | Avec ids : renvoie tout sauf ces identifiants. |
taskType / taskTypes | string / string[] | Filtre par type de tâche (sensible à la casse), par ex. Http. |
excludeTaskTypes | bool | Inverse le filtre de type. |
status | string | Enabled ou Disabled (désactivation par l'utilisateur). Ex. ?status=Disabled. |
url / urls | string / string[] | Filtre par URL. Les valeurs de urls doivent être encodées en URL. |
urlSearchLike | bool | Avec url (pas urls) : correspondance de sous-chaîne plutôt qu'exacte. |
excludeUrls | bool | Inverse le filtre d'URL. |
name / names | string / string[] | Filtre par nom de tâche. name/names combiné avec id/ids est un OU ; combiné avec d'autres filtres c'est un ET. |
nameSearchLike | bool | Avec name : correspondance de sous-chaîne. |
excludeNames | bool | Inverse le filtre de nom. |
interval / intervals | int / int[] | Filtre par intervalle de surveillance (minutes). |
excludeIntervals | bool | Inverse le filtre d'intervalle. |
openStat | bool | Tâches publiques (statistiques/journal d'événements publics). |
lastState | bool | true = actuellement disponible, false = actuellement indisponible. |
tags | string[] | Filtre par tag. |
overlimited | bool | Tâches avec (true) ou sans (false) un dépassement de forfait. |
active | bool | true = active, false = désactivée par le système (dépassement, solde faible, …). Pour la désactivation par l'utilisateur, utilisez status. |
sdtu / edtu | int64 | Début/fin de fenêtre en secondes Unix (UTC). Utilisé uniquement lorsque info=results est défini ; fournissez les deux. edtu doit être > sdtu. |
(edtu − sdtu) × (#tasks) / (intervalle moyen)
ne doit pas dépasser 10 000. Sinon, la réponse est 400 StartEndIntervalIsTooBig,
dont le message inclut le plus grand intervalle qui conviendrait. Ce plafond s'applique uniquement aux
lectures de résultats de tâches.
Réponse — 200 OK
Un tableau d'objets tâche. Les champs exacts dépendent du type de tâche ; la base commune inclut
id, name, taskType,
enabled, interval,
lastState, creationTime,
tags, agentPools, et (si demandé via
info) subscriptions,
stats, results et
attached. Lorsque des résultats sont inclus, chaque résultat porte au moins
timestamp (secondes Unix UTC) et eventNumber ; les
champs restants sont spécifiques au type de tâche (voir la réponse de création ci-dessous pour la forme
HTTP).
GET BASE_URL/tasks?info=stats,subscriptions&taskType=Http HTTP/1.1
Accept: application/json
Authorization: bearer <token>
GET tasks/{id:guid}
Récupère une tâche par id. Accepte le même paramètre info (et
sdtu/edtu lorsque info=results).
Renvoie l'objet tâche, ou 404 NotFound s'il n'existe pas.
POST tasks/http · tasks/ping · tasks/port · tasks/rusbl
Crée une tâche de surveillance du type donné. En cas de succès, renvoie 201 Created,
un en-tête relatif Location: /tasks/{id}, et l'objet tâche complet créé.
Corps de la requête — tâche HTTP
{
// champs spécifiques HTTP
"url": "https://www.example.com", // OBLIGATOIRE
"httpMethod": "Get", // Get | Post | Head (par défaut Get)
"userAgent": "MyMonitor",
"referer": "https://www.google.com",
"acceptHeader": "application/json",
"followRedirect": false,
"treat300AsError": false, // si défini, followRedirect est ignoré
"checkDnsbl": false, // vérifie le domaine par rapport aux listes de blocage DNS
"checkDomainExpiration": false, // surveille l'expiration du domaine (domaines valides uniquement)
"checkCertificateExpiration": false, // surveille l'expiration du certificat TLS (https uniquement)
"checkRussianBlackLists": false,
"checkWebRisk": false,
"timeout": 40000, // ms avant qu'un contrôle échoue
"keywords": ["error", "maintenance"],
"keywordMode": "ReverseAny", // voir les modes de mot-clé ci-dessous
"userName": "basic-auth-user", // identifiants pour la ressource surveillée
"password": "basic-auth-pass",
"postParameters": "a=1\r\nb=2", // uniquement avec httpMethod=Post
"ignoredStatuses": [404, 500],
// champs communs à tous les types de tâche
"interval": 5, // minutes ; doit être un intervalle accepté
"enabled": true,
"fullLog": false, // forfaits avancés uniquement
"openStat": true,
"name": "My website",
"tags": ["production", "web"],
"agentPools": ["westeurope", "asia"], // voir les remarques ci-dessous
"subscriptions": [ /* abonnements en ligne, voir ci-dessous */ ]
}
| Mode de mot-clé | La tâche est OK lorsque… |
|---|---|
PresentAny | au moins un mot-clé est présent dans la réponse. |
PresentAll | tous les mots-clés sont présents. |
ReverseAny | tous les mots-clés sont absents. |
ReverseAll | au moins un mot-clé est absent. |
ReverseWithResult | tous les mots-clés sont absents ; le message d'échec inclut le reste de la ligne de réponse où le premier mot-clé est apparu (les 100 premiers caractères de chaque ligne analysée). |
agentPools sélectionne les emplacements de surveillance. C'est optionnel
(le forfait par défaut du profil est utilisé sinon). Si spécifié, les pools doivent contenir ensemble au
moins 7 agents, sinon la requête échoue avec SelectMoreAgents. Les identifiants
de pool inconnus échouent avec WrongAgentPool. Les identifiants de pool
proviennent de GET agents/pools.
Abonnements en ligne
Le tableau subscriptions abonne des contacts aux alertes/rapports de cette tâche
dès sa création. Chaque entrée utilise la forme d'abonnement ; ne définissez
pas taskIds (il est fixé à la nouvelle tâche). Si
contactIds est omis, tous vos contacts confirmés sont abonnés. Les abonnements
aux rapports sont appliqués uniquement aux contacts Email.
Autres types de tâches
tasks/ping— le corps portehostplus les champs communs.tasks/port— le corps portehostetportplus les champs communs.tasks/rusbl— contrôle de liste de blocage du registre russe ; le corps porteurl, plusignoreWarnings,doNotSendMsgOnWarnings,prefixMatchet les champs communs.
Réponse — 201 Created (tâche 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 & variantes typées
Mettre à jour des tâches. Deux formes :
- Par id —
PUT tasks/{id}(champs communs uniquement), ou les variantes typéesPUT tasks/http/{id},tasks/ping/{id},tasks/port/{id},tasks/rusbl/{id}(champs spécifiques au type également). Le corps a la même forme éditable que la création ; seuls les champs que vous incluez sont modifiés. - Par filtre —
PUT tasks?<filter>(champs communs uniquement) ou la forme typéePUT tasks/{type}?<filter>(qui fixe le filtre à ce type). Utilise les mêmes paramètres de filtre que GET tasks. Renvoie la ou les tâches mises à jour.
Le PUT tasks / PUT tasks/{id} non typé ne peut
toucher que les champs communs à tous les types de tâche — utilisez un endpoint typé pour modifier
des paramètres spécifiques au type.
DELETE tasks/{id:guid} & tasks
DELETE tasks/{id}— supprime une seule tâche ; renvoie la tâche supprimée.DELETE tasks?<filter>— suppression en masse selon le filtre de tâches (un filtre peut aussi être fourni dans le corps de la requête). Renvoie les tâches supprimées.
DELETE tasks en masse sans filtre sélectif
renvoie 400 EmptyFilter au lieu de supprimer tout votre compte. Pour tout
supprimer intentionnellement, itérez explicitement.
POST tasks/$batch · task/$batch
Exécute plusieurs opérations sur des tâches en une seule requête. Le corps est un tableau JSON de
sous-requêtes ; la réponse est un tableau JSON de sous-réponses dans le même ordre. La sous-opération est
choisie par le dernier segment de relativeUrl (par ex.
http → POST tasks/http). Le corps de la
requête doit être du JSON (Content-Type: application/json). Le même mécanisme
existe pour les contacts sur contacts/$batch / contact/$batch.
| Champ de requête | Type | Description |
|---|---|---|
method | string | Méthode HTTP de la sous-requête (POST, PUT, DELETE…). |
relativeUrl | string | Sous-ressource ; le dernier segment sélectionne l'opération (http, ping, port, rusbl…). |
contentType | string | Type de contenu de content, généralement application/json. |
content | string | Le corps de la sous-requête, sous forme de chaîne JSON. |
| Champ de réponse | Type | Description |
|---|---|---|
code | int | Code de statut HTTP de la sous-réponse (par ex. 201, 400). |
status | string | Texte de raison/statut (porte le code machine en cas d'erreur). |
headers | object | En-têtes de réponse de la sous-opération (par ex. Location). |
body | string | Le corps de la sous-réponse. |
POST BASE_URL/tasks/$batch HTTP/1.1
Authorization: bearer <token>
Content-Type: application/json
[
{
"method": "POST",
"relativeUrl": "http",
"contentType": "application/json",
"content": "{\"url\":\"https://a.example.com\",\"interval\":5}"
},
{
"method": "POST",
"relativeUrl": "ping",
"contentType": "application/json",
"content": "{\"host\":\"b.example.com\"}"
}
]
[
{ "code": 201, "status": "Created",
"headers": { "Location": "/tasks/ef10cd12-...-0bc2" },
"body": "{ ...created http task... }" },
{ "code": 201, "status": "Created",
"headers": { "Location": "/tasks/7a20de34-...-1cd3" },
"body": "{ ...created ping task... }" }
]
Contacts
Les contacts sont les destinations qui reçoivent les alertes et rapports (adresses email, numéros de téléphone pour SMS/voix). Les identifiants de contact sont utilisés lors de la création d'abonnements.
GET contacts/types · contacts/delays · contacts/sms/gateways · contacts/im/gateways
Énumérations statiques utilisées par les endpoints de contact :
| Endpoint | Renvoie |
|---|---|
contacts/types | ["Email","IM","SMS","VoiceCall"] — les types de contact que cette API énumère. Les types créables sont Email, SMS et VoiceCall (IM est retiré — voir ci-dessous). |
contacts/delays | Les valeurs alertDelay acceptées (minutes) : [0,5,15,30,60,180,720,360,1440,3]. |
contacts/sms/gateways | Identifiants de gateway SMS : ["clickatell","clickatella","infobip","skype","twiliosms"]. La valeur par défaut est twiliosms ; les autres entrées sont historiques et peuvent être inactives. |
contacts/im/gateways | Identifiants de gateway IM : ["GTalk","SkypeChat"]. Listés pour compatibilité uniquement — les contacts IM ne peuvent plus être créés (voir ci-dessous). |
GET contacts/im/gateways renvoie toujours
la liste des gateways, mais POST contacts/im et
PUT contacts/im renvoient désormais 400 WrongContactType.
Les contacts IM existants ne peuvent plus être créés via cette API.
GET contacts & contacts/{id:guid}
Liste les contacts (éventuellement filtrés) ou en récupère un par id. Ajoutez
?info=subscriptions pour intégrer les abonnements de chaque contact. Sans
filtre, tous les contacts du compte sont renvoyés.
| Paramètre de filtre | Type | Description |
|---|---|---|
ids / excludeIds | guid[] / bool | Sélectionner ou exclure par id. |
contactType / contactTypes | string / string[] | Filtre par type (Email, SMS, VoiceCall…). |
excludeContactTypes | bool | Inverse le filtre de type. |
confirmed | bool | Contacts confirmés ou non confirmés. |
overlimited | bool | Contacts signalés au-delà de la limite du forfait. |
acceptBillingNotifications | bool | Contacts utilisés pour les notifications de facturation. |
name / names / nameSearchLike / excludeNames | string(s) / bool | Filtre par nom (exact, liste, sous-chaîne, ou exclu). |
address / addresses / addressSearchLike / excludeAddresses | string(s) / bool | Filtre par adresse. |
Objet contact
Champs communs : id, confirmed,
contactType, name,
address, alertDelay,
activePeriodStart/activePeriodEnd (HH:mm),
activeDays, sendCost. Les contacts email ajoutent
reportFormat (Text/ShortText),
sendNews, sendBillingNotifications ; les contacts
SMS/IM ajoutent gateway.
POST contacts/email · contacts/sms · contacts/voice
Crée un contact. Renvoie 201 Created, un en-tête relatif
Location: /contacts/{id}, et un ContactOperationResult
({ contact, status }) dont le status indique le
résultat de la confirmation.
{
"address": "ops@@example.com", // OBLIGATOIRE
"name": "Ops mailbox",
"alertDelay": 0, // minutes ; une valeur de contacts/delays
"reportFormat": "Text", // Text | ShortText (email uniquement)
"activePeriodStart": "00:00", // fenêtre d'heures calmes optionnelle (HH:mm)
"activePeriodEnd": "23:59",
"activeDays": ["Monday", "Tuesday"], // optionnel ; tous les jours par défaut
"subscriptions": [ /* abonnements en ligne optionnels */ ]
}
| Champ | S'applique à | Remarques |
|---|---|---|
address | tous | Adresse email, ou numéro de téléphone (chiffres, + initial optionnel) pour SMS/voix. Obligatoire à la création. |
alertDelay | tous | Minutes à attendre avant d'alerter. Doit être une valeur de contacts/delays. |
activePeriodStart / activePeriodEnd | tous | HH:mm ; la fenêtre pendant laquelle les alertes sont livrées. |
activeDays | tous | N'importe lequel parmi Sunday…Saturday ; tous les jours par défaut. |
reportFormat, sendNews, sendBillingNotifications | Options email. | |
gateway | sms | Une valeur de contacts/sms/gateways ; par défaut twiliosms. |
Les contacts SMS et voix utilisent par défaut les gateways twiliosms /
twiliovoice, reçoivent un prix par message par défaut, et stockent le numéro
avec un + initial. Modifier l'adresse ou la gateway d'un contact réinitialise
son état de confirmation.
Valeurs de statut de confirmation
Le champ status du résultat indique l'issue de l'envoi du code de
confirmation :
| Statut | Signification |
|---|---|
Confirmed | Contact créé déjà confirmé (aucun code nécessaire). |
CodeSent | Un code de confirmation a été envoyé ; le contact devient actif une fois confirmé. |
CodeSentEarlier | Un code a déjà été envoyé récemment et est toujours valide. |
CodeFail | Contact créé mais l'envoi du code a échoué ; réessayez plus tard. |
LowSmsBalance | Impossible d'envoyer le code car le solde du compte est trop bas. |
Overlimited | Le contact dépasse la limite du forfait. |
PUT contacts & variantes typées
- Par id —
PUT contacts/{id}(champs communs), ou les formes typéesPUT contacts/email/{id},contacts/sms/{id},contacts/voice/{id}. Seuls les champs que vous envoyez sont modifiés. - Par filtre —
PUT contacts?<filter>ou la forme typéePUT contacts/{type}?<filter>(fixe le filtre à ce type), en utilisant le filtre de contact.
PUT contacts/im (les deux formes) renvoie 400 WrongContactType.
DELETE contacts/{id:guid} & contacts
Supprime un contact par id, ou supprime en masse selon le filtre de contact.
Comme pour les tâches, une suppression en masse avec un filtre vide est rejetée avec
400 EmptyFilter.
Codes de confirmation
Les contacts non confirmés doivent confirmer leur propriété avec un court code envoyé à l'adresse du contact.
PATCH contacts/{id}/code— (ré)émet et envoie le code de confirmation. Renvoie unContactOperationResultavec un status tel queCodeSent.POST contacts/{id}/code— confirme le contact en soumettant le code. Corps :{ "code": "12345" }. En cas de succès, le contact devient confirmé.
Alertes & abonnements
Un abonnement relie une ou plusieurs tâches et contacts à un ensemble de types d'alerte et/ou de rapport. Une seule entrée d'abonnement croise ses tâches et ses contacts, produisant une alerte/un rapport par combinaison (tâche, contact, type).
Forme d'un abonnement
{
"alertTypes": ["Up", "Down"], // n'importe lequel parmi Up, Down, RepeatedlyDown
"reportTypes": ["Day", "Month"], // n'importe lequel parmi Day, Week, Month, Quarter, Year
"taskIds": ["<task guid>"],
"contactIds": ["<contact guid>"]
}
- Au moins un des deux,
alertTypes/reportTypes, est requis, sinonAlertsAndReportsAreEmpty. - Omettre
taskIdsretombe par défaut sur toutes vos tâches ; omettrecontactIdsretombe par défaut sur tous vos contacts. Un tableau vide explicite signifie "aucun". - Les abonnements aux rapports s'appliquent uniquement aux contacts Email — les types de rapport sur des contacts non-Email sont ignorés silencieusement (leurs abonnements aux alertes sont tout de même créés).
- Les identifiants que vous ne possédez pas sont ignorés.
GET subscriptions/alertTypes · subscriptions/reportTypes
| Endpoint | Renvoie |
|---|---|
subscriptions/alertTypes | ["Up","Down","RepeatedlyDown"] |
subscriptions/reportTypes | ["Day","Week","Month","Quarter","Year"] |
GET subscriptions
Liste les abonnements. Renvoie une entrée par abonnement d'alerte ou de rapport correspondant (jamais fusionné). Filtres optionnels :
| Paramètre | Type | Description |
|---|---|---|
taskId | guid | Uniquement les abonnements pour cette tâche. |
contactId | guid | Uniquement les abonnements pour ce contact. |
types | string[] | Uniquement ces types d'alerte/rapport. Les noms non reconnus sont ignorés ici (contrairement à POST/DELETE, qui les rejettent). |
POST subscriptions · DELETE subscriptions
Les deux prennent un tableau JSON d'entrées d'abonnement dans le corps. POST ajoute les abonnements
décrits (seules les nouvelles lignes sont insérées) ; DELETE supprime ceux qui existent. Les deux
renvoient 200 OK avec un corps vide. Les types d'alerte/rapport inconnus sont
rejetés avec 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>"]}]'
Statistiques & résultats
GET stats
Agrégats de disponibilité/indisponibilité par tâche sur une fenêtre de temps. Accepte le filtre de tâches pour sélectionner les tâches, plus :
| Paramètre | Type | Description |
|---|---|---|
statsStartUnix / statsEndUnix | int64 | Début/fin de fenêtre en secondes Unix (UTC). |
statsStart / statsEnd | string | Début/fin de fenêtre sous forme de chaîne formatée selon le profil (alternative aux champs Unix). |
expectedSLA | double | 0–100. Lorsque défini, chaque résultat indique slaExpectationSucceeded. |
fullTask | bool | Inclut l'objet tâche complet plutôt que sa seule référence. |
Réponse
Un objet Stats avec la fenêtre résolue (champs de date doubles) et un tableau
stats. Chaque entrée porte la référence de la tâche et :
uptimeInMinutes/uptimeSpan,
downtimeInMinutes/downtimeSpan, les temps de
disponibilité/indisponibilité en maintenance, totalTimeInMinutes, les
comptages de contrôles par intervalle, et
uptimePercent/downtimePercent.
uptime% = (uptime + maintenanceUptime) / (totalTime − maintenanceDowntime).
Lorsque le temps total est égal au temps d'indisponibilité en maintenance, le pourcentage est
null (indéfini). slaExpectationSucceeded est
uptime% ≥ expectedSLA.
GET outages
Périodes d'indisponibilité par tâche. Accepte le filtre de tâches plus :
| Paramètre | Type | Description |
|---|---|---|
startTimeUnix / endTimeUnix | int64 | Fenêtre en secondes Unix (UTC). |
startTime / endTime | string | Fenêtre sous forme de chaînes formatées selon le profil. |
getInUtcTimeZone | int | Lorsque défini, les heures formatées sont en UTC plutôt que dans le fuseau du profil. |
fullTask | bool | Inclut l'objet tâche complet. |
Réponse : un objet Outages avec la fenêtre résolue et un tableau
taskOutages ; chaque élément associe une tâche à ses périodes
outages (startTime/endTime
+ variantes Unix, numéros d'événement, commentaire optionnel).
GET incident
Liste des incidents (événements d'échec) par tâche. Accepte le filtre de tâches plus les mêmes paramètres de fenêtre/fuseau horaire que les interruptions, et :
| Paramètre | Type | Description |
|---|---|---|
startTimeUnix / endTimeUnix / startTime / endTime | int64 / string | Fenêtre (Unix et/ou formatée). |
getInUtcTimeZone | int | Formater les heures en UTC. |
fullTask | bool | Inclut l'objet tâche complet. |
fullLog | bool | Inclut le journal détaillé de recontrôle par agent. Nécessite un forfait avancé, sinon ApiFullLogNotAllowed. |
Réponse : un objet Incidents avec un tableau
taskIncidents. Chaque incident porte taskId,
checkId, les heures Unix de début/fin, la location
en échec, l'error, hasSnapshot, et (avec
fullLog) un bloc recheck listant les
emplacements OK et les emplacements en échec par erreur.
GET incident/snapshot
Récupère l'instantané de réponse stocké capturé pour un incident. Paramètres :
| Paramètre | Type | Description |
|---|---|---|
taskId | guid | La tâche. Obligatoire. |
checkId | int64 | L'id du contrôle/événement. |
timestampUnixUtc | int64 | L'horodatage de l'incident (secondes Unix UTC). |
Renvoie l'instantané (un horodatage plus les octets capturés) s'il en existe un, ou
null lorsqu'il n'y a pas d'instantané pour l'incident donné.
GET results/http
Métriques de temps HTTP agrégées par tâche. Force le type de tâche Http.
Accepte le filtre de tâches plus :
| Paramètre | Type | Description |
|---|---|---|
resultStartUnix / resultEndUnix | int64 | Fenêtre en secondes Unix (UTC). |
resultStart / resultEnd | string | Fenêtre sous forme de chaînes formatées selon le profil. |
fullTask | bool | Inclut l'objet tâche complet. |
Réponse : un objet AggregatedHttpResults ; chaque entrée
taskResults indique la référence de la tâche et les moyennes de
responseTime, dnsTime,
headTime, dataTime (millisecondes).
GET cr/httpResponseTime
Séries de temps de réponse HTTP par tâche. Accepte le filtre de tâches plus
startDate, endDate et
groupBy. Renvoie un simple tableau d'objets de série :
[
{
"id": "ef10cd12-93f9-e311-bec5-dc85de1f0bc2",
"rawUrl": "https://www.example.com",
"name": "My website",
"results": [ [1719181583, 142], [1719177983, 138] ] // [secondesUnix, tempsRéponseMs], le plus récent en premier
}
]
Agents
Les agents sont les emplacements de surveillance géographiquement distribués. Les identifiants de pool
renvoyés ici sont les valeurs que vous passez dans le champ agentPools d'une
tâche.
GET agents
Liste les agents de surveillance. Paramètre de requête optionnel :
| Paramètre | Type | Description |
|---|---|---|
touched | int | Uniquement les agents ayant signalé dans les N dernières minutes. Les valeurs ≤ 0 (ou absentes) signifient aucun filtre ; sinon plafonnées entre 1 et 10. |
Chaque agent porte id, upFrom,
datacenter (nom/ville/pays/état),
company (nom/url), ip,
version, lon/lat, et
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
Liste les pools d'agents publics (régions géographiques). Chaque pool porte id,
desc, ses agents,
childPools, et hidden. Utilisez les valeurs
id de pool dans le champ agentPools d'une tâche.
GET agents/ips anonyme
Renvoie les adresses IP actuelles des agents de surveillance — utile pour autoriser Host-Tracker dans
un pare-feu. Cet endpoint ne nécessite aucune authentification. Par défaut, il renvoie du
text/plain, une IP par ligne ; envoyez
Accept: application/json pour recevoir un tableau JSON à la place.
203.0.113.10
203.0.113.11
198.51.100.7
["203.0.113.10", "203.0.113.11", "198.51.100.7"]