Skip to main content
GET
/
v1
/
check-results
/
{checkId}
/
{checkResultId}
Retrieve a check result
curl --request GET \
  --url https://api.checklyhq.com/v1/check-results/{checkId}/{checkResultId} \
  --header 'Authorization: Bearer <token>'
import requests

url = "https://api.checklyhq.com/v1/check-results/{checkId}/{checkResultId}"

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/v1/check-results/{checkId}/{checkResultId}', 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/v1/check-results/{checkId}/{checkResultId}",
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/v1/check-results/{checkId}/{checkResultId}"

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/v1/check-results/{checkId}/{checkResultId}")
.header("Authorization", "Bearer <token>")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.checklyhq.com/v1/check-results/{checkId}/{checkResultId}")

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
{
  "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>",
      "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,
      "securityBaseline": {},
      "certificate": {},
      "chain": [
        {}
      ]
    }
  },
  "checkRunId": 123,
  "attempts": 123,
  "sequenceId": "2dbfa2a3-5477-45ea-ac33-ee55b8ea66ff",
  "errorGroupIds": [
    "883af87b-ac7c-44e3-9376-b4bece04e788"
  ]
}
{
"statusCode": 401,
"error": "Unauthorized",
"message": "Bad Token",
"attributes": {}
}
{
"statusCode": 403,
"error": "Forbidden",
"message": "Forbidden"
}
{
"statusCode": 404,
"error": "Not Found",
"message": "Not Found"
}
{
"statusCode": 429,
"error": "Too Many Requests",
"message": "Too Many Requests",
"attributes": {}
}

Authorizations

Authorization
string
header
required

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

x-checkly-account
string

Your Checkly account ID, you can find it at https://app.checklyhq.com/settings/account/general

Path Parameters

checkId
string
required
checkResultId
string
required

Response

Successful

resultType
enum<string>
default:FINAL
required

The type of result. FINAL means this is the final result of the check run. ATTEMPT means this is a result of a double check attempt.

Available options:
FINAL,
ATTEMPT,
ALL
Example:

"FINAL"

traceId
string | null
required

OpenTelemetry trace ID associated with this check result. null when no trace was recorded for this run (e.g. tracing not enabled in the runner).

Example:

"a1b2c3d4e5f67890abcdef0123456789"

id
string

The unique ID of this result.

name
string

The name of the check.

checkId
string

The ID of the check.

hasFailures
boolean

Describes if any failure has occurred during this check run. This should be your main focus for assessing API or browser check behaviour. Assertions that fail, timeouts or failing scripts all resolve to this value being true.

hasErrors
boolean

Describes if an internal error has occurred in Checkly's backend. This should be false in almost all cases.

isDegraded
boolean | null

A check is degraded if it is over the degradation limit set by the "degradedResponseTime" field on the check. Applies only to API checks.

isCancelled
boolean

Whether the run was cancelled before completion.

overMaxResponseTime
boolean | null

Set to true if the response time is over the limit set by the "maxResponseTime" field on the check. Applies only to API checks.

runLocation
string

What data center location this check result originated from.

startedAt
string<date-time> | null
stoppedAt
string<date-time> | null
created_at
string<date-time>
responseTime
number

Time the check spent producing its result, in milliseconds. For protocol checks this is the measured operation time (a subset of the run): request time for API and URL checks, connection time for TCP, resolution time for DNS, average latency for ICMP and TRACEROUTE, request timing for GRPC, and TLS handshake time for SSL. For browser, multi-step, Playwright and agentic checks it is the run wall-clock duration. Any setup or system time before the check starts executing is not included.

apiCheckResult
object | null

The response data for an API check.

browserCheckResult
object | null

The response data for a browser check.

Example:

null

multiStepCheckResult
object | null

The response data for a multi-step check.

Example:

null

agenticCheckResult
object | null

The response data for an agentic check.

playwrightCheckResult
object | null

The response data for a Playwright check.

Example:

null

tracerouteCheckResult
object | null

Failure-debug diagnostics for a traceroute check.

grpcCheckResult
object | null

Failure-debug diagnostics for a gRPC check.

sslCheckResult
object | null

Failure-debug diagnostics for an SSL check.

checkRunId
number

The id of the specific check run that created this check result.

attempts
number

How often this check was retried. This will be larger than 0 when double checking is enabled.

sequenceId
string | null

The sequence ID of the check run. This is used to group check runs with multiple attempts together.

Example:

"2dbfa2a3-5477-45ea-ac33-ee55b8ea66ff"

errorGroupIds
string[] | null

IDs of the error groups associated with this check result. Always an array: empty when the result has no associated error groups, single-element when there is one (typical for API/URL/TCP/ICMP checks), or multi-element for Playwright and multistep checks that can produce multiple distinct errors per run. Use these IDs to fetch the corresponding error group via the error-groups endpoint.

Example:
["883af87b-ac7c-44e3-9376-b4bece04e788"]