Nenhuma secção encontrada.

Host-Tracker REST API v1

Uma API HTTP estável e autenticada por token para gerir tarefas de monitorização de websites, contactos, subscrições de alertas/relatórios, e para consultar estatísticas, indisponibilidades e incidentes.

Esta é a API v1. Não executa verificações instantâneas e utiliza um esquema de autenticação diferente da API v2 — as duas não são intermutáveis. Para verificações instantâneas automatizadas, utilize antes a API v2.

URL base

Cada caminho neste documento é relativo a um URL base. Dois pontos de entrada servem a mesma API:

Ponto de entradaURL base (BASE_URL)Notas
Direto https://api1.host-tracker.com/ Recomendado para integrações servidor-a-servidor.
Através do site principal https://www.host-tracker.com/api/web/v1/ Reencaminhado (reverse-proxy) para o mesmo serviço. Conveniente quando já comunica com www.host-tracker.com.

Ao longo desta referência, uma chamada escrita como GET tasks significa GET BASE_URL/tasks — por exemplo https://api1.host-tracker.com/tasks ou https://www.host-tracker.com/api/web/v1/tasks.

Tipo de conteúdo e métodos HTTP

Os pedidos e respostas são application/json por predefinição (ver Convenções para XML). A API utiliza os métodos HTTP padrão:

  • GET — ler entidades (tarefas, contactos, subscrições, estatísticas, indisponibilidades, incidentes, agentes).
  • POST — criar uma entidade ou iniciar uma ação.
  • PUT — atualizar entidades existentes.
  • DELETE — remover entidades.
  • PATCH — atualizações parciais (utilizado para reenviar o código de confirmação de um contacto).

Substituição de método HTTP

Se o seu cliente não conseguir enviar PUT, DELETE ou PATCH, envie um POST e adicione um cabeçalho X-HTTP-Method-Override a indicar o verbo pretendido. Por exemplo, para atualizar tarefas, faça POST para tasks com X-HTTP-Method-Override: PUT.

Convenções

Serialização JSON

O JSON utiliza nomes de propriedades em camelCase. Os campos nulos são omitidos das respostas (os arrays vazios continuam a ser devolvidos como []). A ordenação das propriedades é estável: identificador e endereço/url primeiro, depois os campos herdados, depois os campos específicos do tipo.

Data e hora

As respostas de criação/leitura de tarefas transportam as datas como strings ISO-8601 UTC (por exemplo 2024-06-21T22:26:23Z). Os endpoints de estatísticas, indisponibilidades, incidentes e resultados utilizam adicionalmente uma representação dupla: cada momento aparece tanto como um campo inteiro em segundos Unix (sufixo Unix) como uma string legível formatada de acordo com o formato de data e o fuso horário do perfil da conta. Os filtros dos pedidos aceitam segundos Unix e/ou strings formatadas, consoante o endpoint (documentado por endpoint abaixo). Todos os timestamps Unix são segundos desde 1970-01-01T00:00:00Z.

Negociação de conteúdo XML

Todos os endpoints também podem devolver XML. Envie Accept: application/xml para receber um corpo XML em vez de JSON; a resposta utiliza a representação clássica do XmlSerializer do .NET para o mesmo grafo de objetos. JSON é o formato predefinido e recomendado.

CORS

Os pedidos cross-origin são permitidos. Os pedidos simples (sem credenciais) são aceites de qualquer origem (Access-Control-Allow-Origin: *). Os pedidos que enviam cookies/credenciais só são aceites a partir de origens *.host-tracker.com. Os clientes baseados em token (utilizando o cabeçalho Authorization, conforme documentado aqui) não são afetados pela restrição de origem com credenciais.

Autenticação

Todos os endpoints, exceto POST users/token e os endpoints anónimos de listagem de agentes, requerem autenticação. São aceites dois esquemas:

  • Token bearer — obtido a partir de POST users/token, enviado como Authorization: bearer <token>. Este é o esquema principal.
  • HTTP BasicAuthorization: Basic <base64(login:password)>. As credenciais são descodificadas como ISO-8859-1. Conveniente para testes rápidos; o token bearer é preferível para automação.

POST users/token anónimo

Troca um login e uma password por um token bearer. O token é válido durante 48 horas.

Corpo do pedido

application/json
{
  "login": "your-login",
  "password": "your-password"
}
CampoTipoDescrição
loginstringLogin da conta. Obrigatório. O email da conta também é aceite.
passwordstringPassword da conta. Obrigatório.
forLoginstringOpcional. O login da super-conta em nome da qual atuar (personificação de subconta — ver abaixo).

Resposta — 200 OK

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

Em caso de falha, a resposta é 401 com o código de máquina IncorrectLoginOrPassword (ou AccessDenied se o acesso à API estiver desativado para a conta) e um cabeçalho WWW-Authenticate: Bearer.

Utilizar o token

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

Personificação de subconta (forLogin)

Se uma super-conta concedeu à sua subconta acesso aos seus dados, autentique-se como a subconta mas indique o login da super-conta em forLogin. O token devolvido permite então gerir a super-conta exatamente como se os endpoints fossem chamados para a sua própria conta, sujeito aos direitos concedidos pela super-conta. Por exemplo, se esta concedeu acesso apenas de leitura às tarefas de monitorização, as chamadas GET têm sucesso mas POST/PUT/PATCH/DELETE em tarefas são rejeitadas.

end-to-end example
# 1. Obtain an impersonation token
POST BASE_URL/users/token HTTP/1.1
Content-Type: application/json

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

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

curl

bash
# fetch a token and store it
TOKEN=$(curl -s -X POST https://api1.host-tracker.com/users/token \
  -H "Content-Type: application/json" \
  -d '{"login":"your-login","password":"your-password"}' \
  | grep -o '"ticket":"[^"]*"' | cut -d'"' -f4)

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

Erros e códigos de máquina

Os erros devolvem um código de estado HTTP normal, mais um código legível por máquina curto no qual a sua integração se pode basear. O corpo é uma descrição em texto simples em inglês (não JSON), destinada a humanos/registos.

O código de máquina é entregue de duas formas:

  • Cabeçalho de resposta X-HT-Reason — transporta o código em todas as respostas e em todas as versões de HTTP. Esta é a forma recomendada de detetar o tipo de erro.
  • Frase de motivo (reason phrase) HTTP/1.1 — a linha de estado lê-se, por exemplo, HTTP/1.1 400 SimilarExists. Mantida por compatibilidade com versões anteriores, mas note que o HTTP/2 e o HTTP/3 removeram as reason phrases do protocolo, pelo que este campo pode estar vazio quando a ligação negoceia HTTP/2+. Prefira X-HT-Reason.
example error response
HTTP/1.1 400 SimilarExists
X-HT-Reason: SimilarExists
Content-Type: text/plain; charset=utf-8

Same task allready exists
Desafios de autenticação. Um token ausente ou inválido devolve 401 com WWW-Authenticate: Bearer e um dos códigos AccessDenied, WrongTicket, TicketExpired ou IncorrectLoginOrPassword.

Referência de códigos de erro

Todos os códigos de máquina que a API pode devolver, agrupados por área, com o código de estado HTTP típico. Salvo indicação em contrário, os erros são 400 Bad Request.

Autenticação

CódigoEstadoSignificado
AccessDenied401O acesso à API está desativado para esta conta, ou o autor do pedido não tem os direitos necessários.
IncorrectLoginOrPassword401Login/password rejeitados em users/token.
WrongTicket401O token bearer está malformado / ilegível.
TicketExpired401O token bearer expirou — obtenha um novo.
RequestThrottled429Limite de taxa excedido (ver Limites de taxa). Inclui Retry-After.

Tarefas

CódigoEstadoSignificado
NotFound404A tarefa pedida não existe.
SimilarExists400Já existe uma tarefa com o mesmo tipo e chave (exceto se a conta permitir tarefas semelhantes).
EmptyTaskData400Não foram fornecidos dados da tarefa.
UncomplitedData400Os dados da tarefa estão incompletos.
NoIdInTaskData400Foi pedida uma atualização mas falta o id da tarefa.
WrongEditableTaskDataType400O tipo do payload de edição não corresponde ao tipo da tarefa alvo.
WrongTaskType400Tipo de tarefa desconhecido.
WrongTaskStatus400Valor de status não suportado (esperado Enabled/Disabled).
WrongInterval400O intervalo de monitorização não é um dos valores aceites (ver tasks/intervals).
EmptyUrl400Não foi fornecido URL/host para uma tarefa que o exige.
WrongUrl400O URL é inválido.
WrongSchema400Esquema de URL não suportado.
BadIP400O URL resolve para um endereço IP recusado ou malformado.
UrlInBlackList400O URL está numa lista de bloqueio interna.
WrongHttpMethod400Método HTTP não suportado para uma tarefa HTTP (permitidos: Get, Post, Head).
WrongKeywordMode400Modo de palavra-chave não suportado.
WrongPort400Porta inválida para uma tarefa de porta.
WrongAgentPool400Um ou mais pools de agentes pedidos não existem. A mensagem lista os pools inválidos e os disponíveis.
SelectMoreAgents400Os pools de agentes selecionados não contêm agentes suficientes (são necessários 7). A mensagem lista as contagens por pool.
ApiFullLogNotAllowed400fullLog só está disponível em pacotes avançados.
WrongExpectedSLA400expectedSLA deve estar entre 0 e 100.
WrongDate400Data de início/fim inválida num filtro.
WrongDateFormat400Uma string de data não correspondeu ao formato exigido (indicado na mensagem).
EndDateIsGreaterThanStartDate400A data de início deve ser ≤ à data de fim.
StartEndIntervalIsTooBig400Uma consulta de resultados devolveria mais de 10 000 linhas. A mensagem inclui o intervalo permitido (ver GET tasks).
WrongSubscription400Uma subscrição em linha no corpo da tarefa é inválida (o código/mensagem da subscrição interna é propagado).
EmptyFilter400Um DELETE tasks em massa foi enviado com um filtro vazio (rejeitado para evitar apagar toda a conta).

Contactos

CódigoEstadoSignificado
NotFound404O contacto pedido não existe.
SimilarExists400Já existe um contacto com o mesmo tipo, gateway, endereço e atraso de alerta.
EmptyContactData400Não foram fornecidos dados do contacto.
UncomplitedData400Os dados do contacto estão incompletos.
NoIdInContactData400Foi pedida uma atualização mas falta o id do contacto.
EmptyAddress400Não foi fornecido endereço ao criar um contacto.
WrongContactType400Tipo de contacto desconhecido (também devolvido para o percurso de criação/atualização de IM, agora retirado).
WrongEditableContactDataType400O tipo do payload de edição não corresponde ao tipo do contacto alvo.
WrongEmailFormat400Endereço de email inválido, ou formato de relatório de email não suportado.
WrongPhoneFormat400Um número de telefone deve conter apenas dígitos (é permitido um + inicial).
WrongSmsGateway400Gateway de SMS desconhecido.
WrongIMGateway400Gateway de IM desconhecido.
WrongAlertDelay400alertDelay não é um dos valores aceites (ver contacts/delays).
WrongActivePeriodInterval400Início/fim de período ativo inválido.
WrongActiveDay400Nome de dia ativo não suportado.
EmptyFilter400Um DELETE contacts em massa foi enviado com um filtro vazio (rejeitado).

Subscrições

CódigoEstadoSignificado
AlertsAndReportsAreEmpty400Uma entrada de subscrição não indica nem tipos de alerta nem tipos de relatório.
UnknownAlertType400Um tipo de alerta não é nenhum de Up, Down, RepeatedlyDown.
UnknownReportType400Um tipo de relatório não é nenhum de Day, Week, Month, Quarter, Year.

Limites de taxa

Os pedidos são limitados por cliente e por endpoint. Exceder um limite devolve 429 com o código de máquina RequestThrottled e um cabeçalho Retry-After (segundos).

ÂmbitoLimite
Endpoints gerais, por conta + endpoint6 pedidos/segundo e 120 pedidos/minuto
Endpoints de código de confirmação (contacts/{id}/code), por conta + endpoint1 pedido/segundo e 2 pedidos/minuto
Endpoints anónimosOs mesmos 6/s + 120/min, indexados por endereço IP do cliente
429 response
HTTP/1.1 429 RequestThrottled
X-HT-Reason: RequestThrottled
Retry-After: 1
Content-Type: application/json; charset=utf-8

"API calls quota exceeded! maximum admitted 6 per s."

Tarefas de monitorização

GET tasks/types

Devolve o array de nomes de tipos de tarefa que o sistema conhece:

200 OK
["API","CntCheck","Counter","DNSBL","Database","DomainExp","Http",
 "Ping","Port","RusRegBL","SSLExp","Snmp","Tran","Waterfall","WebRisk"]
As tarefas existentes de qualquer um destes tipos podem ser lidas através desta API. As tarefas podem ser criadas/atualizadas através dos endpoints tipados apenas para quatro tipos: Http Ping Port RusRegBL (criadas em tasks/http, tasks/ping, tasks/port, tasks/rusbl, respetivamente).

GET tasks/intervals

Devolve o array de intervalos de monitorização (em minutos) aceites para a sua conta, por exemplo [1,5,15,30,60]. Utilize um destes valores no campo interval ao criar uma tarefa; qualquer outro valor devolve WrongInterval.

GET tasks

Lista tarefas de monitorização. Todos os parâmetros de consulta são opcionais; sem nenhum, são devolvidas todas as tarefas da conta. Repita um parâmetro para passar um array, por exemplo ?ids=guid1&ids=guid2.

O parâmetro info

Pede dados extra incorporados em cada tarefa. Combine valores com vírgulas (?info=stats,subscriptions) ou indique o inteiro de bitmask equivalente:

ValorBitEfeito
subscriptions1Inclui as subscrições de alerta/relatório da tarefa em subscriptions.
stats2Inclui o tempo de atividade diário/mensal/anual/total em stats.
results4Inclui resultados de verificação para a janela sdtuedtu em results (o último resultado se a janela for omitida).
attachedResultsInclui os resultados mais recentes das verificações associadas (certificado, expiração de domínio, DNSBL) em attached. Requer as flags check… correspondentes ativas na tarefa.

?info=stats,subscriptions,results equivale a ?info=7.

Parâmetros de filtro

ParâmetroTipoDescrição
idsguid[]Devolve apenas estes ids de tarefa. Para um único id, prefira GET tasks/{id}.
excludeIdsboolCom ids: devolve tudo exceto esses ids.
taskType / taskTypesstring / string[]Filtra por tipo de tarefa (sensível a maiúsculas/minúsculas), por exemplo Http.
excludeTaskTypesboolInverte o filtro de tipo.
statusstringEnabled ou Disabled (desativação pelo utilizador). Ex.: ?status=Disabled.
url / urlsstring / string[]Filtra por URL. Os valores em urls devem estar codificados como URL.
urlSearchLikeboolCom url (não urls): correspondência por substring em vez de exata.
excludeUrlsboolInverte o filtro de URL.
name / namesstring / string[]Filtra por nome da tarefa. name/names combinado com id/ids é um OR; combinado com outros filtros é um AND.
nameSearchLikeboolCom name: correspondência por substring.
excludeNamesboolInverte o filtro de nome.
interval / intervalsint / int[]Filtra por intervalo de monitorização (minutos).
excludeIntervalsboolInverte o filtro de intervalo.
openStatboolTarefas públicas (estatísticas/registo de eventos públicos).
lastStatebooltrue = atualmente ativo, false = atualmente inativo.
tagsstring[]Filtra por etiqueta (tag).
overlimitedboolTarefas com (true) ou sem (false) um excedente de faturação.
activebooltrue = ativa, false = desativada pelo sistema (excedente, saldo baixo, …). Para desativação pelo utilizador use status.
sdtu / edtuint64Início/fim de uma janela em segundos Unix (UTC). Usado apenas quando info=results está definido; forneça ambos. edtu deve ser > sdtu.
Limite de linhas de resultados. Ao pedir resultados, a contagem estimada de linhas (edtu − sdtu) × (#tarefas) / (intervalo médio) não pode exceder 10 000. Caso contrário, a resposta é 400 StartEndIntervalIsTooBig, cuja mensagem inclui o maior intervalo que caberia. Este limite aplica-se apenas à leitura de resultados de tarefas.

Resposta — 200 OK

Um array de objetos de tarefa. Os campos exatos dependem do tipo de tarefa; a base comum inclui id, name, taskType, enabled, interval, lastState, creationTime, tags, agentPools e (quando pedido via info) subscriptions, stats, results e attached. Quando os resultados são incluídos, cada resultado transporta pelo menos timestamp (segundos Unix UTC) e eventNumber; os restantes campos são específicos do tipo de tarefa (ver a resposta de criação abaixo para o formato HTTP).

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

GET tasks/{id:guid}

Obtém uma única tarefa pelo id. Aceita o mesmo parâmetro info (e sdtu/edtu quando info=results). Devolve o objeto da tarefa, ou 404 NotFound se não existir.

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

Cria uma tarefa de monitorização do tipo indicado. Em caso de sucesso devolve 201 Created, um cabeçalho relativo Location: /tasks/{id}, e o objeto completo da tarefa criada.

Corpo do pedido — tarefa HTTP

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

  // fields common to every task type
  "interval": 5,                             // minutes; must be an accepted interval
  "enabled": true,
  "fullLog": false,                          // advanced packages only
  "openStat": true,
  "name": "My website",
  "tags": ["production", "web"],
  "agentPools": ["westeurope", "asia"],  // see notes below
  "subscriptions": [ /* inline subscriptions, see below */ ]
}
Modo de palavra-chaveA tarefa está OK quando…
PresentAnyqualquer palavra-chave está presente na resposta.
PresentAlltodas as palavras-chave estão presentes.
ReverseAnytodas as palavras-chave estão ausentes.
ReverseAllqualquer palavra-chave está ausente.
ReverseWithResulttodas as palavras-chave estão ausentes; a mensagem de falha inclui o resto da linha da resposta onde a primeira palavra-chave apareceu (são analisados os primeiros 100 caracteres de cada linha).
agentPools seleciona as localizações de monitorização. É opcional (caso contrário é usada a predefinição do perfil). Se especificado, os pools devem conter em conjunto pelo menos 7 agentes, ou o pedido falha com SelectMoreAgents. Ids de pool desconhecidos falham com WrongAgentPool. Os ids de pool provêm de GET agents/pools.

Subscrições em linha

O array subscriptions subscreve contactos aos alertas/relatórios desta tarefa no momento da criação. Cada entrada utiliza o formato de subscrição; não defina taskIds (é fixado à nova tarefa). Se contactIds for omitido, todos os seus contactos confirmados são subscritos. As subscrições de relatório são aplicadas apenas a contactos de Email.

Outros tipos de tarefa

  • tasks/ping — o corpo transporta host mais os campos comuns.
  • tasks/port — o corpo transporta host e port mais os campos comuns.
  • tasks/rusbl — verificação de lista de bloqueio do registo russo; o corpo transporta url, mais ignoreWarnings, doNotSendMsgOnWarnings, prefixMatch e os campos comuns.

Resposta — 201 Created (tarefa 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 tipadas

Atualiza tarefas. Duas formas:

  • Por idPUT tasks/{id} (apenas campos comuns), ou as tipadas PUT tasks/http/{id}, tasks/ping/{id}, tasks/port/{id}, tasks/rusbl/{id} (também campos específicos do tipo). O corpo tem o mesmo formato editável da criação; só os campos que enviar são alterados.
  • Por filtroPUT tasks?<filter> (apenas campos comuns) ou a tipada PUT tasks/{type}?<filter> (que fixa o filtro a esse tipo). Utiliza os mesmos parâmetros de filtro que GET tasks. Devolve a(s) tarefa(s) atualizada(s).

O PUT tasks / PUT tasks/{id} não tipado só pode alterar campos comuns a todos os tipos de tarefa — utilize um endpoint tipado para alterar definições específicas do tipo.

DELETE tasks/{id:guid} & tasks

  • DELETE tasks/{id} — apaga uma única tarefa; devolve a tarefa apagada.
  • DELETE tasks?<filter> — apaga em massa pelo filtro de tarefas (o filtro também pode ser fornecido no corpo do pedido). Devolve as tarefas apagadas.
Filtro vazio é rejeitado. Um DELETE tasks em massa sem um filtro seletivo devolve 400 EmptyFilter em vez de apagar toda a sua conta. Para apagar tudo intencionalmente, itere explicitamente.

POST tasks/$batch · task/$batch

Executa vários pedidos de tarefas num único pedido. O corpo é um array JSON de sub-pedidos; a resposta é um array JSON de sub-respostas na mesma ordem. A sub-operação é escolhida pelo último segmento de relativeUrl (por exemplo, httpPOST tasks/http). O corpo do pedido deve ser JSON (Content-Type: application/json). O mesmo mecanismo existe para contactos em contacts/$batch / contact/$batch.

Campo do pedidoTipoDescrição
methodstringMétodo HTTP do sub-pedido (POST, PUT, DELETE…).
relativeUrlstringSub-recurso; o último segmento seleciona a operação (http, ping, port, rusbl…).
contentTypestringTipo de conteúdo de content, normalmente application/json.
contentstringO corpo do sub-pedido, como string JSON.
Campo da respostaTipoDescrição
codeintCódigo de estado HTTP da sub-resposta (por exemplo, 201, 400).
statusstringTexto de motivo/estado (transporta o código de máquina em erros).
headersobjectCabeçalhos de resposta da sub-operação (por exemplo, Location).
bodystringO corpo da sub-resposta.
request · POST tasks/$batch
POST BASE_URL/tasks/$batch HTTP/1.1
Authorization: bearer <token>
Content-Type: application/json

[
  {
    "method": "POST",
    "relativeUrl": "http",
    "contentType": "application/json",
    "content": "{\"url\":\"https://a.example.com\",\"interval\":5}"
  },
  {
    "method": "POST",
    "relativeUrl": "ping",
    "contentType": "application/json",
    "content": "{\"host\":\"b.example.com\"}"
  }
]
response · 200 OK
[
  { "code": 201, "status": "Created",
    "headers": { "Location": "/tasks/ef10cd12-...-0bc2" },
    "body": "{ ...created http task... }" },
  { "code": 201, "status": "Created",
    "headers": { "Location": "/tasks/7a20de34-...-1cd3" },
    "body": "{ ...created ping task... }" }
]

Contactos

Os contactos são os destinos que recebem alertas e relatórios (endereços de email, números de telefone para SMS/chamada de voz). Os ids de contacto são utilizados ao criar subscrições.

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

Enumerações estáticas utilizadas pelos endpoints de contactos:

EndpointDevolve
contacts/types["Email","IM","SMS","VoiceCall"] — os tipos de contacto que esta API enumera. Os tipos criáveis são Email, SMS e VoiceCall (IM foi retirado — ver abaixo).
contacts/delaysOs valores de alertDelay aceites (minutos): [0,5,15,30,60,180,720,360,1440,3].
contacts/sms/gatewaysIds de gateway de SMS: ["clickatell","clickatella","infobip","skype","twiliosms"]. A predefinição é twiliosms; as restantes entradas são legadas e podem estar inativas.
contacts/im/gatewaysIds de gateway de IM: ["GTalk","SkypeChat"]. Listados apenas por compatibilidade — já não é possível criar contactos IM (ver abaixo).
Os contactos IM foram retirados. GET contacts/im/gateways continua a devolver a lista de gateways, mas POST contacts/im e PUT contacts/im devolvem agora 400 WrongContactType. Os contactos IM existentes não podem ser criados através desta API.

GET contacts & contacts/{id:guid}

Lista contactos (opcionalmente filtrados) ou obtém um pelo id. Adicione ?info=subscriptions para incorporar as subscrições de cada contacto. Sem filtro, são devolvidos todos os contactos da conta.

Parâmetro de filtroTipoDescrição
ids / excludeIdsguid[] / boolSelecionar ou excluir por id.
contactType / contactTypesstring / string[]Filtra por tipo (Email, SMS, VoiceCall…).
excludeContactTypesboolInverte o filtro de tipo.
confirmedboolContactos confirmados vs. não confirmados.
overlimitedboolContactos assinalados como acima do limite do pacote.
acceptBillingNotificationsboolContactos utilizados para notificações de faturação.
name / names / nameSearchLike / excludeNamesstring(s) / boolFiltra por nome (exato, lista, substring, ou excluído).
address / addresses / addressSearchLike / excludeAddressesstring(s) / boolFiltra por endereço.

Objeto de contacto

Campos comuns: id, confirmed, contactType, name, address, alertDelay, activePeriodStart/activePeriodEnd (HH:mm), activeDays, sendCost. Os contactos de email acrescentam reportFormat (Text/ShortText), sendNews, sendBillingNotifications; os contactos SMS/IM acrescentam gateway.

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

Cria um contacto. Devolve 201 Created, um Location: /contacts/{id} relativo, e um ContactOperationResult ({ contact, status }) cujo status reporta o resultado da confirmação.

POST contacts/email · application/json
{
  "address": "ops@@example.com",          // REQUIRED
  "name": "Ops mailbox",
  "alertDelay": 0,                        // minutes; one of contacts/delays
  "reportFormat": "Text",               // Text | ShortText (email only)
  "activePeriodStart": "00:00",        // optional quiet-hours window (HH:mm)
  "activePeriodEnd": "23:59",
  "activeDays": ["Monday", "Tuesday"],   // optional; default all days
  "subscriptions": [ /* optional inline subscriptions */ ]
}
CampoAplica-se aNotas
addresstodosEndereço de email, ou número de telefone (dígitos, + inicial opcional) para SMS/voz. Obrigatório na criação.
alertDelaytodosMinutos a aguardar antes de alertar. Deve ser um dos valores de contacts/delays.
activePeriodStart / activePeriodEndtodosHH:mm; a janela durante a qual os alertas são entregues.
activeDaystodosQualquer um de SundaySaturday; a predefinição é todos os dias.
reportFormat, sendNews, sendBillingNotificationsemailOpções de email.
gatewaysmsUm de contacts/sms/gateways; predefinição twiliosms.

Os contactos de SMS e voz utilizam por predefinição os gateways twiliosms / twiliovoice, recebem um preço por mensagem predefinido, e guardam o número com um + inicial. Alterar o endereço ou o gateway de um contacto repõe o seu estado de confirmação.

Valores de estado de confirmação

O campo status do resultado reporta o resultado do envio do código de confirmação:

EstadoSignificado
ConfirmedContacto criado já confirmado (não é necessário código).
CodeSentFoi enviado um código de confirmação; o contacto fica ativo assim que for confirmado.
CodeSentEarlierJá foi enviado um código recentemente e ainda é válido.
CodeFailContacto criado mas o envio do código falhou; tente novamente mais tarde.
LowSmsBalanceNão foi possível enviar o código porque o saldo da conta é demasiado baixo.
OverlimitedO contacto está acima do limite do pacote.

PUT contacts & variantes tipadas

  • Por idPUT contacts/{id} (campos comuns), ou as tipadas PUT contacts/email/{id}, contacts/sms/{id}, contacts/voice/{id}. Só os campos que enviar são alterados.
  • Por filtroPUT contacts?<filter> ou a tipada PUT contacts/{type}?<filter> (fixa o filtro a esse tipo), utilizando o filtro de contactos.

PUT contacts/im (ambas as formas) devolve 400 WrongContactType.

DELETE contacts/{id:guid} & contacts

Apaga um contacto pelo id, ou apaga em massa pelo filtro de contactos. Tal como nas tarefas, uma eliminação em massa com um filtro vazio é rejeitada com 400 EmptyFilter.

Códigos de confirmação

Os contactos não confirmados devem confirmar a sua propriedade com um código curto entregue no endereço do contacto.

  • PATCH contacts/{id}/code — (re)emite e envia o código de confirmação. Devolve um ContactOperationResult com um status como CodeSent.
  • POST contacts/{id}/code — confirma o contacto submetendo o código. Corpo: { "code": "12345" }. Em caso de sucesso, o contacto fica confirmado.
Estes endpoints têm um limite de taxa mais apertado: 1 pedido/segundo e 2 pedidos/minuto.

Alertas e subscrições

Uma subscrição associa uma ou mais tarefas e contactos a um conjunto de tipos de alerta e/ou relatório. Uma única entrada de subscrição faz o produto cruzado das suas tarefas e contactos, produzindo um alerta/relatório por cada combinação (tarefa, contacto, tipo).

Formato da subscrição

subscription entry
{
  "alertTypes": ["Up", "Down"],       // any of Up, Down, RepeatedlyDown
  "reportTypes": ["Day", "Month"],     // any of Day, Week, Month, Quarter, Year
  "taskIds": ["<task guid>"],
  "contactIds": ["<contact guid>"]
}
  • É necessário pelo menos um de alertTypes / reportTypes, caso contrário AlertsAndReportsAreEmpty.
  • Omitir taskIds assume por predefinição todas as suas tarefas; omitir contactIds assume por predefinição todos os seus contactos. Um array vazio explícito significa "nenhum".
  • As subscrições de relatório aplicam-se apenas a contactos de Email — os tipos de relatório em contactos que não sejam de Email são ignorados silenciosamente (as respetivas subscrições de alerta continuam a ser criadas).
  • Os ids que não lhe pertencem são ignorados.

GET subscriptions/alertTypes · subscriptions/reportTypes

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

GET subscriptions

Lista subscrições. Devolve uma entrada por cada subscrição de alerta ou relatório encontrada (nunca fundidas). Filtros opcionais:

ParâmetroTipoDescrição
taskIdguidApenas subscrições desta tarefa.
contactIdguidApenas subscrições deste contacto.
typesstring[]Apenas estes tipos de alerta/relatório. Nomes não reconhecidos são ignorados aqui (ao contrário de POST/DELETE, que os rejeitam).

POST subscriptions · DELETE subscriptions

Ambos aceitam um array JSON de entradas de subscrição no corpo. POST adiciona as subscrições descritas (só são inseridas linhas novas); DELETE remove as que existem. Ambos devolvem 200 OK com um corpo vazio. Tipos de alerta/relatório desconhecidos são rejeitados com UnknownAlertType / UnknownReportType.

POST subscriptions · body
[
  { "alertTypes": ["Up", "Down"],
    "taskIds": ["7ee87894-b8a9-e311-beb2-dc85de1f0bc2"],
    "contactIds": ["4cedf037-d1d9-e311-bebc-dc85de1f0bc2"] },
  { "reportTypes": ["Month"],
    "taskIds": ["7ee87894-b8a9-e311-beb2-dc85de1f0bc2"],
    "contactIds": ["4cedf037-d1d9-e311-bebc-dc85de1f0bc2"] }
]
curl
curl -s -X POST https://api1.host-tracker.com/subscriptions \
  -H "Authorization: bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '[{"alertTypes":["Up","Down"],"taskIds":["<task>"],"contactIds":["<contact>"]}]'

Estatísticas e resultados

GET stats

Agregados de tempo ativo/inativo por tarefa numa janela temporal. Aceita o filtro de tarefas para selecionar tarefas, mais:

ParâmetroTipoDescrição
statsStartUnix / statsEndUnixint64Início/fim da janela em segundos Unix (UTC).
statsStart / statsEndstringInício/fim da janela como string formatada de acordo com o perfil (alternativa aos campos Unix).
expectedSLAdouble0–100. Quando definido, cada resultado reporta slaExpectationSucceeded.
fullTaskboolInclui o objeto completo da tarefa em vez de apenas a sua referência.

Resposta

Um objeto Stats com a janela resolvida (campos de data duplos) e um array stats. Cada entrada transporta a referência da tarefa e: uptimeInMinutes/uptimeSpan, downtimeInMinutes/downtimeSpan, tempos de manutenção em cima/em baixo, totalTimeInMinutes, as contagens de verificações por intervalo, e uptimePercent/downtimePercent.

Percentagem de tempo ativo: uptime% = (uptime + maintenanceUptime) / (totalTime − maintenanceDowntime). Quando o tempo total é igual ao tempo de inatividade em manutenção, a percentagem é null (indefinida). slaExpectationSucceeded é uptime% ≥ expectedSLA.

GET outages

Períodos de indisponibilidade por tarefa. Aceita o filtro de tarefas mais:

ParâmetroTipoDescrição
startTimeUnix / endTimeUnixint64Janela em segundos Unix (UTC).
startTime / endTimestringJanela como strings formatadas de acordo com o perfil.
getInUtcTimeZoneintQuando definido, os tempos formatados são em UTC em vez do fuso horário do perfil.
fullTaskboolInclui o objeto completo da tarefa.

Resposta: um objeto Outages com a janela resolvida e um array taskOutages; cada elemento associa uma tarefa aos seus períodos de outages (startTime/endTime + variantes Unix, números de evento, comentário opcional).

GET incident

Lista de incidentes (eventos de falha) por tarefa. Aceita o filtro de tarefas mais os mesmos parâmetros de janela/fuso horário que outages, e:

ParâmetroTipoDescrição
startTimeUnix / endTimeUnix / startTime / endTimeint64 / stringJanela (Unix e/ou formatada).
getInUtcTimeZoneintFormata os tempos em UTC.
fullTaskboolInclui o objeto completo da tarefa.
fullLogboolInclui o registo detalhado de reverificação por agente. Requer um pacote avançado, caso contrário ApiFullLogNotAllowed.

Resposta: um objeto Incidents com um array taskIncidents. Cada incidente transporta taskId, checkId, tempos de início/fim em Unix, a location que falhou, o error, hasSnapshot, e (com fullLog) um bloco recheck a listar as localizações OK e as localizações em falha por erro.

GET incident/snapshot

Obtém o snapshot de resposta guardado para um incidente. Parâmetros:

ParâmetroTipoDescrição
taskIdguidA tarefa. Obrigatório.
checkIdint64O id da verificação/evento.
timestampUnixUtcint64O timestamp do incidente (segundos Unix UTC).

Devolve o snapshot (um timestamp mais os bytes capturados) quando existe, ou null quando não há snapshot para o incidente indicado.

GET results/http

Métricas de tempo HTTP agregadas por tarefa. Força o tipo de tarefa Http. Aceita o filtro de tarefas mais:

ParâmetroTipoDescrição
resultStartUnix / resultEndUnixint64Janela em segundos Unix (UTC).
resultStart / resultEndstringJanela como strings formatadas de acordo com o perfil.
fullTaskboolInclui o objeto completo da tarefa.

Resposta: um objeto AggregatedHttpResults; cada entrada taskResults reporta a referência da tarefa e os valores médios de responseTime, dnsTime, headTime, dataTime (milissegundos).

GET cr/httpResponseTime

Série temporal do tempo de resposta HTTP por tarefa. Aceita o filtro de tarefas mais startDate, endDate e groupBy. Devolve um array simples de objetos de série:

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

Agentes

Os agentes são as localizações de monitorização geograficamente distribuídas. Os ids de pool devolvidos aqui são os valores que se passam no campo agentPools de uma tarefa.

GET agents

Lista os agentes de monitorização. Parâmetro de consulta opcional:

ParâmetroTipoDescrição
touchedintApenas agentes que reportaram nos últimos N minutos. Valores ≤ 0 (ou ausentes) significam sem filtro; caso contrário, limitado ao intervalo 1–10.

Cada agente transporta id, upFrom, datacenter (nome/cidade/país/estado), company (nome/url), ip, version, lon/lat, e 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

Lista os pools de agentes públicos (regiões geográficas). Cada pool transporta id, desc, os seus agents, childPools, e hidden. Utilize os valores de id do pool no campo agentPools de uma tarefa.

GET agents/ips anónimo

Devolve os endereços IP atuais dos agentes de monitorização — útil para incluir o Host-Tracker numa lista branca de firewall. Este endpoint não exige autenticação. Por predefinição devolve text/plain, um IP por linha; envie Accept: application/json para receber um array JSON.

text/plain (default)
203.0.113.10
203.0.113.11
198.51.100.7
with Accept: application/json
["203.0.113.10", "203.0.113.11", "198.51.100.7"]
Host-Tracker REST API v1 — host-tracker.com. O Swagger/OpenAPI legível por máquina está disponível em BASE_URL/docs/v1, com uma sandbox interativa em BASE_URL/sandbox.