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.

Ceci est l'API v1. Elle n'exécute pas les contrôles instantanés et utilise un schéma d'authentification différent de l'API v2 — les deux ne sont pas interchangeables. Pour des contrôles instantanés automatisés, utilisez plutôt l'API v2.

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éeURL 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é comme Authorization: bearer <token>. C'est le schéma principal.
  • HTTP BasicAuthorization: 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

application/json
{
  "login": "your-login",
  "password": "your-password"
}
ChampTypeDescription
loginstringLogin du compte. Obligatoire. L'email du compte est également accepté.
passwordstringMot de passe du compte. Obligatoire.
forLoginstringOptionnel. Le login du super-compte pour lequel agir (usurpation de sous-compte — voir ci-dessous).

Réponse — 200 OK

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

HTTP
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.

exemple de bout en bout
# 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

bash
# 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érez X-HT-Reason.
exemple de réponse d'erreur
HTTP/1.1 400 SimilarExists
X-HT-Reason: SimilarExists
Content-Type: text/plain; charset=utf-8

Same task allready exists
Défis d'authentification. Un token manquant ou invalide renvoie 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

CodeStatutSignification
AccessDenied401L'accès API est désactivé pour ce compte, ou l'appelant n'a pas les droits requis.
IncorrectLoginOrPassword401Login/mot de passe rejeté sur users/token.
WrongTicket401Le token bearer est malformé / illisible.
TicketExpired401Le token bearer a expiré — obtenez-en un nouveau.
RequestThrottled429Limite de débit dépassée (voir Limites de débit). Inclut Retry-After.

Tâches

CodeStatutSignification
NotFound404La tâche demandée n'existe pas.
SimilarExists400Une tâche du même type et avec la même clé existe déjà (sauf si le compte autorise les tâches similaires).
EmptyTaskData400Aucune donnée de tâche fournie.
UncomplitedData400Les données de la tâche sont incomplètes.
NoIdInTaskData400Une mise à jour a été demandée mais l'id de la tâche est manquant.
WrongEditableTaskDataType400Le type du contenu à modifier ne correspond pas au type de la tâche cible.
WrongTaskType400Type de tâche inconnu.
WrongTaskStatus400Valeur status non prise en charge (attendu Enabled/Disabled).
WrongInterval400L'intervalle de surveillance ne fait pas partie des valeurs acceptées (voir tasks/intervals).
EmptyUrl400Aucune URL/hôte fourni pour une tâche qui en requiert un.
WrongUrl400L'URL est invalide.
WrongSchema400Schéma d'URL non pris en charge.
BadIP400L'URL résout vers une adresse IP refusée ou malformée.
UrlInBlackList400L'URL figure sur une liste de blocage interne.
WrongHttpMethod400Méthode HTTP non prise en charge pour une tâche HTTP (autorisées : Get, Post, Head).
WrongKeywordMode400Mode de mot-clé non pris en charge.
WrongPort400Port invalide pour une tâche de type port.
WrongAgentPool400Un ou plusieurs des pools d'agents demandés n'existent pas. Le message liste les pools invalides et disponibles.
SelectMoreAgents400Les pools d'agents sélectionnés ne contiennent pas assez d'agents (7 requis). Le message liste les décomptes par pool.
ApiFullLogNotAllowed400fullLog n'est disponible que sur les forfaits avancés.
WrongExpectedSLA400expectedSLA doit être compris entre 0 et 100.
WrongDate400Date de début/fin invalide dans un filtre.
WrongDateFormat400Une chaîne de date ne correspond pas au format requis (indiqué dans le message).
EndDateIsGreaterThanStartDate400La date de début doit être ≤ à la date de fin.
StartEndIntervalIsTooBig400Une requête de résultats renverrait plus de 10 000 lignes. Le message inclut l'intervalle autorisé (voir GET tasks).
WrongSubscription400Un abonnement en ligne dans le corps de la tâche est invalide (le code/message de l'abonnement interne est transmis).
EmptyFilter400Un DELETE tasks en masse a été envoyé avec un filtre vide (rejeté pour éviter de supprimer tout le compte).

Contacts

CodeStatutSignification
NotFound404Le contact demandé n'existe pas.
SimilarExists400Un 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à.
EmptyContactData400Aucune donnée de contact fournie.
UncomplitedData400Les données du contact sont incomplètes.
NoIdInContactData400Une mise à jour a été demandée mais l'id du contact est manquant.
EmptyAddress400Aucune adresse fournie lors de la création d'un contact.
WrongContactType400Type de contact inconnu (également renvoyé pour l'ancien chemin de création/mise à jour IM, retiré).
WrongEditableContactDataType400Le type du contenu à modifier ne correspond pas au type du contact cible.
WrongEmailFormat400Adresse email invalide, ou format de rapport email non pris en charge.
WrongPhoneFormat400Un numéro de téléphone ne doit contenir que des chiffres (un + initial est autorisé).
WrongSmsGateway400Gateway SMS inconnue.
WrongIMGateway400Gateway IM inconnue.
WrongAlertDelay400alertDelay ne fait pas partie des valeurs acceptées (voir contacts/delays).
WrongActivePeriodInterval400Début/fin de période active invalide.
WrongActiveDay400Nom de jour actif non pris en charge.
EmptyFilter400Un DELETE contacts en masse a été envoyé avec un filtre vide (rejeté).

Abonnements

CodeStatutSignification
AlertsAndReportsAreEmpty400Une entrée d'abonnement ne spécifie ni types d'alerte ni types de rapport.
UnknownAlertType400Un type d'alerte n'est pas l'un de Up, Down, RepeatedlyDown.
UnknownReportType400Un 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éeLimite
Endpoints généraux, par compte + endpoint6 requêtes / seconde et 120 requêtes / minute
Endpoints de code de confirmation (contacts/{id}/code), par compte + endpoint1 requête / seconde et 2 requêtes / minute
Endpoints anonymesMêmes 6/s + 120/min, indexés par adresse IP du client
réponse 429
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 :

200 OK
["API","CntCheck","Counter","DNSBL","Database","DomainExp","Http",
 "Ping","Port","RusRegBL","SSLExp","Snmp","Tran","Waterfall","WebRisk"]
Les tâches existantes de n'importe lequel de ces types peuvent être lues via cette API. Les tâches peuvent être créées/mises à jour via les endpoints typés pour quatre types seulement : Http Ping Port RusRegBL (créées respectivement sur 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 :

ValeurBitEffet
subscriptions1Inclut les abonnements aux alertes/rapports de la tâche dans subscriptions.
stats2Inclut le temps de disponibilité quotidien/mensuel/annuel/total dans stats.
results4Inclut les résultats de contrôle pour la fenêtre sdtuedtu dans results (dernier résultat si la fenêtre est omise).
attachedResultsInclut 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ètreTypeDescription
idsguid[]Renvoie uniquement ces identifiants de tâche. Pour un seul id, préférez GET tasks/{id}.
excludeIdsboolAvec ids : renvoie tout sauf ces identifiants.
taskType / taskTypesstring / string[]Filtre par type de tâche (sensible à la casse), par ex. Http.
excludeTaskTypesboolInverse le filtre de type.
statusstringEnabled ou Disabled (désactivation par l'utilisateur). Ex. ?status=Disabled.
url / urlsstring / string[]Filtre par URL. Les valeurs de urls doivent être encodées en URL.
urlSearchLikeboolAvec url (pas urls) : correspondance de sous-chaîne plutôt qu'exacte.
excludeUrlsboolInverse le filtre d'URL.
name / namesstring / 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.
nameSearchLikeboolAvec name : correspondance de sous-chaîne.
excludeNamesboolInverse le filtre de nom.
interval / intervalsint / int[]Filtre par intervalle de surveillance (minutes).
excludeIntervalsboolInverse le filtre d'intervalle.
openStatboolTâches publiques (statistiques/journal d'événements publics).
lastStatebooltrue = actuellement disponible, false = actuellement indisponible.
tagsstring[]Filtre par tag.
overlimitedboolTâches avec (true) ou sans (false) un dépassement de forfait.
activebooltrue = active, false = désactivée par le système (dépassement, solde faible, …). Pour la désactivation par l'utilisateur, utilisez status.
sdtu / edtuint64Début/fin de fenêtre en secondes Unix (UTC). Utilisé uniquement lorsque info=results est défini ; fournissez les deux. edtu doit être > sdtu.
Limite de lignes de résultats. Lors d'une demande de résultats, le nombre de lignes estimé (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).

exemple de requête
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

POST tasks/http · application/json
{
  // 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…
PresentAnyau moins un mot-clé est présent dans la réponse.
PresentAlltous les mots-clés sont présents.
ReverseAnytous les mots-clés sont absents.
ReverseAllau moins un mot-clé est absent.
ReverseWithResulttous 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 porte host plus les champs communs.
  • tasks/port — le corps porte host et port plus les champs communs.
  • tasks/rusbl — contrôle de liste de blocage du registre russe ; le corps porte url, plus ignoreWarnings, doNotSendMsgOnWarnings, prefixMatch et les champs communs.

Réponse — 201 Created (tâche HTTP)

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 & variantes typées

Mettre à jour des tâches. Deux formes :

  • Par idPUT tasks/{id} (champs communs uniquement), ou les variantes typées PUT 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 filtrePUT tasks?<filter> (champs communs uniquement) ou la forme typée PUT 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.
Un filtre vide est rejeté. Un 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. httpPOST 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êteTypeDescription
methodstringMéthode HTTP de la sous-requête (POST, PUT, DELETE…).
relativeUrlstringSous-ressource ; le dernier segment sélectionne l'opération (http, ping, port, rusbl…).
contentTypestringType de contenu de content, généralement application/json.
contentstringLe corps de la sous-requête, sous forme de chaîne JSON.
Champ de réponseTypeDescription
codeintCode de statut HTTP de la sous-réponse (par ex. 201, 400).
statusstringTexte de raison/statut (porte le code machine en cas d'erreur).
headersobjectEn-têtes de réponse de la sous-opération (par ex. Location).
bodystringLe corps de la sous-réponse.
requête · 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\"}"
  }
]
réponse · 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... }" }
]

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 :

EndpointRenvoie
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/delaysLes valeurs alertDelay acceptées (minutes) : [0,5,15,30,60,180,720,360,1440,3].
contacts/sms/gatewaysIdentifiants 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/gatewaysIdentifiants de gateway IM : ["GTalk","SkypeChat"]. Listés pour compatibilité uniquement — les contacts IM ne peuvent plus être créés (voir ci-dessous).
Les contacts IM sont retirés. 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 filtreTypeDescription
ids / excludeIdsguid[] / boolSélectionner ou exclure par id.
contactType / contactTypesstring / string[]Filtre par type (Email, SMS, VoiceCall…).
excludeContactTypesboolInverse le filtre de type.
confirmedboolContacts confirmés ou non confirmés.
overlimitedboolContacts signalés au-delà de la limite du forfait.
acceptBillingNotificationsboolContacts utilisés pour les notifications de facturation.
name / names / nameSearchLike / excludeNamesstring(s) / boolFiltre par nom (exact, liste, sous-chaîne, ou exclu).
address / addresses / addressSearchLike / excludeAddressesstring(s) / boolFiltre 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.

POST contacts/email · application/json
{
  "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 */ ]
}
ChampS'applique àRemarques
addresstousAdresse email, ou numéro de téléphone (chiffres, + initial optionnel) pour SMS/voix. Obligatoire à la création.
alertDelaytousMinutes à attendre avant d'alerter. Doit être une valeur de contacts/delays.
activePeriodStart / activePeriodEndtousHH:mm ; la fenêtre pendant laquelle les alertes sont livrées.
activeDaystousN'importe lequel parmi SundaySaturday ; tous les jours par défaut.
reportFormat, sendNews, sendBillingNotificationsemailOptions email.
gatewaysmsUne 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 :

StatutSignification
ConfirmedContact créé déjà confirmé (aucun code nécessaire).
CodeSentUn code de confirmation a été envoyé ; le contact devient actif une fois confirmé.
CodeSentEarlierUn code a déjà été envoyé récemment et est toujours valide.
CodeFailContact créé mais l'envoi du code a échoué ; réessayez plus tard.
LowSmsBalanceImpossible d'envoyer le code car le solde du compte est trop bas.
OverlimitedLe contact dépasse la limite du forfait.

PUT contacts & variantes typées

  • Par idPUT contacts/{id} (champs communs), ou les formes typées PUT contacts/email/{id}, contacts/sms/{id}, contacts/voice/{id}. Seuls les champs que vous envoyez sont modifiés.
  • Par filtrePUT contacts?<filter> ou la forme typée PUT 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 un ContactOperationResult avec un status tel que CodeSent.
  • POST contacts/{id}/code — confirme le contact en soumettant le code. Corps : { "code": "12345" }. En cas de succès, le contact devient confirmé.
Ces endpoints ont une limite de débit plus stricte : 1 requête/seconde et 2 requêtes/minute.

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

entrée d'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, sinon AlertsAndReportsAreEmpty.
  • Omettre taskIds retombe par défaut sur toutes vos tâches ; omettre contactIds retombe 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

EndpointRenvoie
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ètreTypeDescription
taskIdguidUniquement les abonnements pour cette tâche.
contactIdguidUniquement les abonnements pour ce contact.
typesstring[]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.

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

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ètreTypeDescription
statsStartUnix / statsEndUnixint64Début/fin de fenêtre en secondes Unix (UTC).
statsStart / statsEndstringDébut/fin de fenêtre sous forme de chaîne formatée selon le profil (alternative aux champs Unix).
expectedSLAdouble0–100. Lorsque défini, chaque résultat indique slaExpectationSucceeded.
fullTaskboolInclut 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.

Pourcentage de disponibilité : 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ètreTypeDescription
startTimeUnix / endTimeUnixint64Fenêtre en secondes Unix (UTC).
startTime / endTimestringFenêtre sous forme de chaînes formatées selon le profil.
getInUtcTimeZoneintLorsque défini, les heures formatées sont en UTC plutôt que dans le fuseau du profil.
fullTaskboolInclut 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ètreTypeDescription
startTimeUnix / endTimeUnix / startTime / endTimeint64 / stringFenêtre (Unix et/ou formatée).
getInUtcTimeZoneintFormater les heures en UTC.
fullTaskboolInclut l'objet tâche complet.
fullLogboolInclut 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ètreTypeDescription
taskIdguidLa tâche. Obligatoire.
checkIdint64L'id du contrôle/événement.
timestampUnixUtcint64L'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ètreTypeDescription
resultStartUnix / resultEndUnixint64Fenêtre en secondes Unix (UTC).
resultStart / resultEndstringFenêtre sous forme de chaînes formatées selon le profil.
fullTaskboolInclut 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 :

200 OK
[
  {
    "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ètreTypeDescription
touchedintUniquement 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.

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

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.

text/plain (par défaut)
203.0.113.10
203.0.113.11
198.51.100.7
avec Accept: application/json
["203.0.113.10", "203.0.113.11", "198.51.100.7"]
Host-Tracker REST API v1 — host-tracker.com. Le Swagger/OpenAPI lisible par machine est disponible sur BASE_URL/docs/v1 avec un bac à sable interactif sur BASE_URL/sandbox.