curl --request GET \
--url https://api.checklyhq.com/v2/check-results/{checkId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.checklyhq.com/v2/check-results/{checkId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.checklyhq.com/v2/check-results/{checkId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.checklyhq.com/v2/check-results/{checkId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.checklyhq.com/v2/check-results/{checkId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.checklyhq.com/v2/check-results/{checkId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.checklyhq.com/v2/check-results/{checkId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"length": 123,
"entries": [
{
"resultType": "FINAL",
"traceId": "a1b2c3d4e5f67890abcdef0123456789",
"id": "<string>",
"name": "<string>",
"checkId": "<string>",
"hasFailures": true,
"hasErrors": true,
"isDegraded": true,
"isCancelled": true,
"overMaxResponseTime": true,
"runLocation": "<string>",
"startedAt": "2023-11-07T05:31:56Z",
"stoppedAt": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"responseTime": 123,
"apiCheckResult": {
"assertions": [
{
"source": "STATUS_CODE",
"target": 200
}
],
"request": {
"method": "GET",
"url": "https://api.checklyhq.com",
"data": "",
"headers": {},
"params": {}
},
"response": {
"status": 200,
"statusText": "OK",
"body": "<title> Checkly Public API </title>",
"bodyEncoding": "base64",
"headers": {},
"timings": {},
"timingPhases": {}
},
"requestError": null,
"jobLog": {},
"jobAssets": null,
"pcapDataUrl": "<string>"
},
"browserCheckResult": null,
"multiStepCheckResult": null,
"agenticCheckResult": {
"summary": "The homepage loaded correctly and all assertions passed.",
"prompt": "<string>",
"assertions": [
{
"condition": "The homepage returns an HTTP 200 status",
"passed": true,
"actual": "200",
"expected": "200"
}
],
"suggestions": [
{
"summary": "Monitor the checkout flow end-to-end",
"prompt": "Sign in and verify the checkout page loads",
"promptReplacement": "Sign in with {{TEST_USER_EMAIL}} and verify the checkout page loads",
"secrets": [
"TEST_USER_EMAIL",
"TEST_USER_PASSWORD"
],
"category": "credentials"
}
],
"steps": [
{
"type": "tool_call",
"name": "http_request",
"input": {},
"output": "<string>",
"timestamp": "2026-04-06T14:15:22.000Z",
"sequenceNumber": 3
}
],
"errors": [
{}
],
"artifactManifest": {}
},
"playwrightCheckResult": null,
"tracerouteCheckResult": {
"totalHops": 12,
"destinationReached": false,
"finalHopLatency": {
"avgMs": 24.1,
"bestMs": 22,
"worstMs": 31.4
},
"timingPhases": {},
"requestError": "<string>",
"request": {},
"assertions": [
{}
],
"response": {
"hostname": "api.checklyhq.com",
"resolvedIp": "104.18.7.36",
"totalHops": 12,
"destinationReached": false,
"truncationReason": "max-hops",
"finalHopLatency": {},
"hops": [
{}
],
"protocol": "TCP",
"probeProtocol": "TCP"
}
},
"grpcCheckResult": {
"grpcStatusCode": 14,
"healthStatus": 2,
"timingPhases": {
"dns": 1.2,
"connect": 16.8,
"total": 90
},
"requestError": "<string>",
"request": {},
"assertions": [
{}
],
"response": {
"grpcMode": "BEHAVIOR",
"host": "grpc.example.com",
"resolvedIp": "10.0.0.4",
"port": 443,
"grpcMethod": "grpc.health.v1.Health/Check",
"responseMessage": "<string>",
"grpcStatusCode": 14,
"grpcStatusMessage": "connection refused",
"healthStatus": 123,
"healthStatusLabel": "NOT_SERVING",
"metadata": [
{}
],
"discoveredMethods": [
"<string>"
],
"requestError": "<string>",
"timingPhases": {}
}
},
"sslCheckResult": {
"tlsVersion": "TLS 1.3",
"cipherSuite": "TLS_AES_256_GCM_SHA384",
"daysUntilExpiry": 12,
"handshakeTimeMs": 48.2,
"chainTrusted": false,
"hostnameVerified": false,
"baselineVerdict": "FAIL",
"baselineGrade": "C",
"failureCategory": "expired",
"requestError": "<string>",
"request": {},
"assertions": [
{}
],
"response": {
"resolvedIp": "104.18.7.36",
"protocol": "TLS 1.3",
"cipherSuite": "TLS_AES_256_GCM_SHA384",
"handshakeTimeMs": 48.2,
"hostnameVerified": false,
"chainTrusted": false,
"daysUntilExpiry": 12,
"ocspStapled": false,
"ocspStatus": "good",
"chainTrustReason": "missing_intermediate",
"chainTrustDetail": "the server did not send the intermediate certificate for issuer \"Acme Intermediate CA\"; add it to the chain.",
"incompleteChain": true,
"missingIntermediate": "Acme Intermediate CA",
"securityBaseline": {},
"certificate": {},
"chain": [
{}
]
}
},
"checkRunId": 123,
"attempts": 123,
"sequenceId": "2dbfa2a3-5477-45ea-ac33-ee55b8ea66ff",
"errorGroupIds": [
"883af87b-ac7c-44e3-9376-b4bece04e788"
]
}
],
"nextId": "<string>"
}{
"statusCode": 401,
"error": "Unauthorized",
"message": "Bad Token",
"attributes": {}
}{
"statusCode": 402,
"error": "Payment Required",
"message": "Payment Required",
"attributes": {}
}{
"statusCode": 403,
"error": "Forbidden",
"message": "Forbidden"
}{
"statusCode": 429,
"error": "Too Many Requests",
"message": "Too Many Requests",
"attributes": {}
}Lists all check results
Lists the full, raw check results for a specific check. We keep raw results for 30 days. After 30 days they are erased. However, we keep the rolled up results for an indefinite period.
You can filter by check type and result type to narrow down the list. Use the to and from parameters to specify a date range (UNIX timestamp in seconds). Depending on the check type, some fields might be null.
Rate-limiting is applied to this endpoint, you can send 60 requests / 60 seconds at most.
curl --request GET \
--url https://api.checklyhq.com/v2/check-results/{checkId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.checklyhq.com/v2/check-results/{checkId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.checklyhq.com/v2/check-results/{checkId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.checklyhq.com/v2/check-results/{checkId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.checklyhq.com/v2/check-results/{checkId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.checklyhq.com/v2/check-results/{checkId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.checklyhq.com/v2/check-results/{checkId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"length": 123,
"entries": [
{
"resultType": "FINAL",
"traceId": "a1b2c3d4e5f67890abcdef0123456789",
"id": "<string>",
"name": "<string>",
"checkId": "<string>",
"hasFailures": true,
"hasErrors": true,
"isDegraded": true,
"isCancelled": true,
"overMaxResponseTime": true,
"runLocation": "<string>",
"startedAt": "2023-11-07T05:31:56Z",
"stoppedAt": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"responseTime": 123,
"apiCheckResult": {
"assertions": [
{
"source": "STATUS_CODE",
"target": 200
}
],
"request": {
"method": "GET",
"url": "https://api.checklyhq.com",
"data": "",
"headers": {},
"params": {}
},
"response": {
"status": 200,
"statusText": "OK",
"body": "<title> Checkly Public API </title>",
"bodyEncoding": "base64",
"headers": {},
"timings": {},
"timingPhases": {}
},
"requestError": null,
"jobLog": {},
"jobAssets": null,
"pcapDataUrl": "<string>"
},
"browserCheckResult": null,
"multiStepCheckResult": null,
"agenticCheckResult": {
"summary": "The homepage loaded correctly and all assertions passed.",
"prompt": "<string>",
"assertions": [
{
"condition": "The homepage returns an HTTP 200 status",
"passed": true,
"actual": "200",
"expected": "200"
}
],
"suggestions": [
{
"summary": "Monitor the checkout flow end-to-end",
"prompt": "Sign in and verify the checkout page loads",
"promptReplacement": "Sign in with {{TEST_USER_EMAIL}} and verify the checkout page loads",
"secrets": [
"TEST_USER_EMAIL",
"TEST_USER_PASSWORD"
],
"category": "credentials"
}
],
"steps": [
{
"type": "tool_call",
"name": "http_request",
"input": {},
"output": "<string>",
"timestamp": "2026-04-06T14:15:22.000Z",
"sequenceNumber": 3
}
],
"errors": [
{}
],
"artifactManifest": {}
},
"playwrightCheckResult": null,
"tracerouteCheckResult": {
"totalHops": 12,
"destinationReached": false,
"finalHopLatency": {
"avgMs": 24.1,
"bestMs": 22,
"worstMs": 31.4
},
"timingPhases": {},
"requestError": "<string>",
"request": {},
"assertions": [
{}
],
"response": {
"hostname": "api.checklyhq.com",
"resolvedIp": "104.18.7.36",
"totalHops": 12,
"destinationReached": false,
"truncationReason": "max-hops",
"finalHopLatency": {},
"hops": [
{}
],
"protocol": "TCP",
"probeProtocol": "TCP"
}
},
"grpcCheckResult": {
"grpcStatusCode": 14,
"healthStatus": 2,
"timingPhases": {
"dns": 1.2,
"connect": 16.8,
"total": 90
},
"requestError": "<string>",
"request": {},
"assertions": [
{}
],
"response": {
"grpcMode": "BEHAVIOR",
"host": "grpc.example.com",
"resolvedIp": "10.0.0.4",
"port": 443,
"grpcMethod": "grpc.health.v1.Health/Check",
"responseMessage": "<string>",
"grpcStatusCode": 14,
"grpcStatusMessage": "connection refused",
"healthStatus": 123,
"healthStatusLabel": "NOT_SERVING",
"metadata": [
{}
],
"discoveredMethods": [
"<string>"
],
"requestError": "<string>",
"timingPhases": {}
}
},
"sslCheckResult": {
"tlsVersion": "TLS 1.3",
"cipherSuite": "TLS_AES_256_GCM_SHA384",
"daysUntilExpiry": 12,
"handshakeTimeMs": 48.2,
"chainTrusted": false,
"hostnameVerified": false,
"baselineVerdict": "FAIL",
"baselineGrade": "C",
"failureCategory": "expired",
"requestError": "<string>",
"request": {},
"assertions": [
{}
],
"response": {
"resolvedIp": "104.18.7.36",
"protocol": "TLS 1.3",
"cipherSuite": "TLS_AES_256_GCM_SHA384",
"handshakeTimeMs": 48.2,
"hostnameVerified": false,
"chainTrusted": false,
"daysUntilExpiry": 12,
"ocspStapled": false,
"ocspStatus": "good",
"chainTrustReason": "missing_intermediate",
"chainTrustDetail": "the server did not send the intermediate certificate for issuer \"Acme Intermediate CA\"; add it to the chain.",
"incompleteChain": true,
"missingIntermediate": "Acme Intermediate CA",
"securityBaseline": {},
"certificate": {},
"chain": [
{}
]
}
},
"checkRunId": 123,
"attempts": 123,
"sequenceId": "2dbfa2a3-5477-45ea-ac33-ee55b8ea66ff",
"errorGroupIds": [
"883af87b-ac7c-44e3-9376-b4bece04e788"
]
}
],
"nextId": "<string>"
}{
"statusCode": 401,
"error": "Unauthorized",
"message": "Bad Token",
"attributes": {}
}{
"statusCode": 402,
"error": "Payment Required",
"message": "Payment Required",
"attributes": {}
}{
"statusCode": 403,
"error": "Forbidden",
"message": "Forbidden"
}{
"statusCode": 429,
"error": "Too Many Requests",
"message": "Too Many Requests",
"attributes": {}
}Authorizations
The Checkly Public API uses API keys to authenticate requests. You can get the API Key here. Your API key is like a password: keep it secure!
Authentication to the API is performed using the Bearer auth method in the Authorization header and using the account ID.
For example, set Authorization header while using cURL: curl -H "Authorization: Bearer [apiKey]" "X-Checkly-Account: [accountId]"
Headers
Your Checkly account ID, you can find it at https://app.checklyhq.com/settings/account/general
Path Parameters
Query Parameters
Limit the number of results to fetch (default 10)
1 <= x <= 100Cursor parameter to fetch the next page of results. The "nextId" parameter is returned in the response of the previous request. If a response includes a "nextId" parameter set to "null", there are no more results to fetch.
Select records up from this UNIX timestamp (>= date).
Optional. Select records up to this UNIX timestamp (< date).
Provide a data center location, e.g. "eu-west-1" to filter by location
us-east-1, us-east-2, us-west-1, us-west-2, ca-central-1, sa-east-1, eu-west-1, eu-central-1, eu-west-2, eu-west-3, eu-north-1, eu-south-1, me-south-1, ap-southeast-1, ap-northeast-1, ap-east-1, ap-southeast-2, ap-southeast-3, ap-northeast-2, ap-northeast-3, ap-south-1, af-south-1 The type of the check
AGENTIC, API, BROWSER, HEARTBEAT, ICMP, MULTI_STEP, TCP, PLAYWRIGHT, TRACEROUTE, URL, DNS, SSL, GRPC Check result has one or more failures
The check result type (FINAL,ATTEMPT,ALL)
FINAL, ATTEMPT, ALL Comma-separated list of check result fields to include in each entry.
Was this page helpful?