No matching sections.
Instant checks
An instant check runs now, from the same distributed fleet your monitors run on, and is gone when you have read it. Use it to test a url before you monitor it, verify a fix, or run a diagnostic - without creating a permanent monitor, and without spending a monitor slot.
Start a check
POST /check, scope check:write. The only member you
really need is the address:
curl -X POST 'https://api2.host-tracker.com/check' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{ "url": "https://example.com", "type": "http" }'
{
"id": "3f0a…-…",
"dbId": 2,
"retryAfter": 5,
"estimatedDurationSec": 20,
"resultUrl": "/check/2/3f0a…-…",
"created": 1785712608
}
resultUrl; do not assemble the path yourself. The result is addressed
by two values - dbId (an integer naming which store holds it) and
id (a GUID) - and only the pair identifies the check. That is exactly the kind of
composite a client gets wrong once and then debugs for an hour.
retryAfter and estimatedDurationSec are the poll
contract, in seconds: wait retryAfter before the first poll, and expect the whole
thing to take about estimatedDurationSec. They differ per check type - a ping
concludes in a moment, a waterfall does not.
202 anyway would hand back
an id that never resolves - a poll loop that spins forever on a check nobody is running.
Poll it to a result
GET /check/{dbId}/{id}, scope check:read. Poll until
state is done:
{
"id": "3f0a…-…", "dbId": 2,
"state": "running", // running | done
"url": "https://example.com",
"type": "http",
"created": 1785712608,
"doneAt": null,
"retryAfter": 3,
"events": [ /* the locations that have reported so far */ ]
}
The response is incremental: events[] grows as locations report,
so a poll before the end is useful rather than empty. retryAfter comes back on each
non-terminal poll; when state is done,
doneAt is stamped and there is nothing left to wait for.
state (it was status) - the same word every other
resource on this surface uses - and the creation stamp is created (it was
createdAt), because an entity's own creation instant is
created surface-wide. doneAt keeps its
At: it names an event, not the resource's own stamp.
Per-location events
An instant check is not one answer - it is one answer per monitoring location, which is the whole point
of running it on the fleet rather than curling from your laptop. Each entry of
events[] is one location's result:
| Member | Meaning |
|---|---|
agentId | Which agent ran it. |
location | "Country, State, City", resolved from the fleet. |
doneAt | When this location finished, Unix seconds. |
ip | The address the agent actually resolved and dialled - the member that answers "is your DNS the same as mine?" |
error | The failure, when this location failed. Absent on success - never an empty object, so presence alone is the test. |
metrics | The per-type measurement blob: response time, status codes, records, and whatever else the type measures. |
A check where some locations succeed and others fail is the normal, interesting case - it is a routing or regional problem, and it is visible here and nowhere else.
What you can check
GET /check/type is anonymous - no token - and lists every
instant-check type with its label, description, an example address, and its own
retryAfter / estimatedDurationSec. Read it rather than
hardcoding the list.
Today's vocabulary for type:
httppingporttracednsdnsblwhoiswebRiskrusRegBLcrawlwaterfall
Omitting type means http. A row's
experimental flag marks a type that may still change, and
options carries the type's own extra members where it has any -
dnsQuery (which record types a dns check asks for) and
deviceEmulation (which device profile a waterfall
check's browser emulates) are the two on the request body itself.
Choosing locations
By default a check runs from every location your account may use. Three members narrow that, and they are the same vocabulary a monitor uses:
| Member | Meaning |
|---|---|
pools | Which location pools to run from. Absent means every location the account may use. |
locations | Where the check runs from. Each clause's own members are ANDed and its values ORed; the clauses themselves are ORed. |
excludeLocations | Where it must NOT run from, in the same clause shape. Exclusion wins where the two overlap. |
GET /agent/pool and GET /agent - both anonymous,
no token - are where the pool and location names come from. See
Monitors for the same clause shape in its permanent form.
region - a US state, a Canadian
province, a German Land. It was spelled state until 2026-08-17, which collided
head-on with the lifecycle word every other resource on this surface uses; there is no alias.
History
GET /check lists the account's past instant checks, cursor-paged, narrowed by
from/to and type. It is
ordered newest-first by design and takes no sort - see
the query surface.
Instant check or monitor?
| Instant check | Monitor | |
|---|---|---|
| Runs | Once, now | On a schedule, forever |
| Scope | check:write / check:read | monitor:write / monitor:read |
| Alerts you | No | Yes - see Alerting |
| Costs a slot | No | Yes, against the package's monitor limit |
| Keeps history | A list of past checks | Results, incidents, uptime and SLA |
check, and the paths are
/check…. Both were ic until 2026-08-17. The
ic paths now 404 and
ic, ic:read and ic:write
are refused by the mint - one resource, one url, one scope name that reads like the resource it gates.