Free tools API
No-key endpoints behind Uptimely's free tools — check whether a site is up from curl, a script or an AI agent.
The free tools on getuptimely.com have an API that needs no account and no key. Call it from a terminal, a script, a CI job or an AI agent. It is the same check the Is it down? pages run.
Every endpoint follows the same rules:
- No authentication. No key, no cookie, no login.
- CORS is open to every origin, so a browser page on any site can call it.
- JSON by default. Send
Accept: text/markdownto get the answer as Markdown, which reads better in an agent's context. - Errors are RFC 9457 problem
details (
application/problem+json). Branch oncode, or ontype, which is a link to the matching section below. - Rate limited per address: 30 calls a minute and 300 a day. Past either,
the answer is
429with aRetry-Afterheader. - Every answer carries
X-Tool-Docs, the address of this page.
The OpenAPI 3.1 description is at getuptimely.com/api/tools/openapi.json, and both it and the /v1 API are listed in the API catalog.
Is a site up? GET /api/tools/check
curl "https://getuptimely.com/api/tools/check?url=github.com"curl -H "Accept: text/markdown" "https://getuptimely.com/api/tools/check?url=github.com"url is a domain (example.com) or an http:// or https:// address. The
path is ignored: the check requests the site's home page. POST with the JSON
body {"url": "example.com"} does the same.
What the check does:
- Resolves the name and refuses the request if any address is not on the public internet (private, loopback, link-local and cloud metadata ranges).
- Requests the home page on port 443 (or 80 for
http://), following up to 5 redirects. Each redirect is checked the same way; one to another port or a private address is not followed. - Reads the status line, the response time and, over HTTPS, the certificate. The page body is never downloaded.
The whole check takes at most 10 seconds. A result is reused for 60 seconds, for every caller, so a site is never sent more than one check a minute from this API.
The answer
{
"tool": "is-it-down",
"target": {
"scheme": "https",
"host": "github.com",
"url": "https://github.com/"
},
"verdict": "up",
"summary": "github.com is up. It answered HTTP 200 OK in 182 ms.",
"checkedAt": "2026-10-21T18:04:11.402Z",
"http": {
"status": 200,
"statusText": "OK",
"finalUrl": "https://github.com/",
"responseTimeMs": 182,
"redirects": []
},
"failure": null,
"certificate": {
"validTo": "2027-02-05T23:59:59.000Z",
"daysLeft": 107,
"issuer": "Sectigo Limited",
"trusted": true,
"problem": null
},
"warnings": [],
"cached": false,
"ageSeconds": 0,
"cacheTtlSeconds": 60,
"vantage": "One HTTP request from Uptimely's checker, a single location. A site can be up for us and down in your region, or the reverse.",
"links": {
"page": "https://getuptimely.com/is-it-down/github.com",
"monitor": "https://app.getuptimely.com/accounts/register",
"docs": "https://getuptimely.com/docs/free-tools-api"
}
}verdict is down when the site did not answer (the reason is in
failure.reason: dns_failed, dns_unavailable, connection_refused,
connection_reset, timeout, tls_failed, connection_failed or
too_many_redirects) or when it answered with a 5xx status. A 4xx answer is
up with a warning: the server is running, and some sites refuse automated
requests this way. A site that is down is still an HTTP 200 answer from this
API — the finding is in the body.
The check runs from one location. For continuous checks from more than one, with alerts, create a monitor in Uptimely.
Errors
{
"type": "https://getuptimely.com/docs/free-tools-api#problem-invalid_url",
"title": "Invalid url",
"status": 400,
"detail": "Only the standard web ports (80 for http, 443 for https) can be checked.",
"code": "invalid_url",
"reason": "unsupported_port"
}