GET
/
v1
/
check-results
/
{checkId}
Lists all check results
curl --request GET \
  --url https://api.checklyhq.com/v1/check-results/{checkId} \
  --header 'Authorization: <api-key>'
[
  {
    "id": "<string>",
    "name": "<string>",
    "checkId": "<string>",
    "hasFailures": true,
    "hasErrors": true,
    "isDegraded": 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"
    },
    "browserCheckResult": "null",
    "multiStepCheckResult": "null",
    "checkRunId": 123,
    "attempts": 123,
    "resultType": "FINAL",
    "sequenceId": "2dbfa2a3-5477-45ea-ac33-ee55b8ea66ff"
  }
]

Overview

This endpoint returns detailed execution results for a specific check. Check results contain comprehensive information about each check execution including response times, status codes, error details, and performance metrics.

Response Example

{
  "data": [
    {
      "id": "result_789123456",
      "checkId": "check_api_health",
      "checkName": "Production API Health Check",
      "checkType": "api",
      "runId": "run_456789123",
      "status": "success",
      "startedAt": "2024-01-25T14:30:00.000Z",
      "finishedAt": "2024-01-25T14:30:01.245Z",
      "duration": 1245,
      "location": {
        "id": "us-east-1",
        "name": "N. Virginia, USA",
        "region": "us-east-1"
      },
      "request": {
        "method": "GET",
        "url": "https://api.production.com/health",
        "headers": {
          "User-Agent": "Checkly/1.0",
          "Accept": "application/json"
        },
        "body": null
      },
      "response": {
        "statusCode": 200,
        "statusText": "OK",
        "headers": {
          "content-type": "application/json",
          "content-length": "156",
          "server": "nginx/1.18.0",
          "cache-control": "no-cache"
        },
        "body": "{\"status\": \"healthy\", \"database\": \"connected\", \"cache\": \"operational\"}",
        "responseTime": 245,
        "size": 156
      },
      "assertions": [
        {
          "source": "STATUS_CODE",
          "property": "",
          "comparison": "EQUALS",
          "target": "200",
          "passed": true
        },
        {
          "source": "JSON_BODY", 
          "property": "$.status",
          "comparison": "EQUALS",
          "target": "healthy",
          "passed": true
        }
      ],
      "timing": {
        "dns": 12,
        "tcp": 23,
        "tls": 45,
        "firstByte": 189,
        "download": 56,
        "total": 245
      },
      "tags": ["api", "production", "health"],
      "triggeredBy": "schedule"
    },
    {
      "id": "result_987654321",
      "checkId": "check_api_health", 
      "checkName": "Production API Health Check",
      "checkType": "api",
      "runId": "run_321654987",
      "status": "failed",
      "startedAt": "2024-01-25T14:25:00.000Z",
      "finishedAt": "2024-01-25T14:25:05.000Z",
      "duration": 5000,
      "location": {
        "id": "us-east-1",
        "name": "N. Virginia, USA",
        "region": "us-east-1"
      },
      "request": {
        "method": "GET",
        "url": "https://api.production.com/health",
        "headers": {
          "User-Agent": "Checkly/1.0",
          "Accept": "application/json"
        },
        "body": null
      },
      "response": {
        "statusCode": 500,
        "statusText": "Internal Server Error",
        "headers": {
          "content-type": "application/json",
          "server": "nginx/1.18.0"
        },
        "body": "{\"error\": \"Database connection failed\"}",
        "responseTime": 4832,
        "size": 45
      },
      "error": {
        "name": "AssertionError",
        "message": "Expected status code 200 but got 500",
        "stack": "AssertionError: Expected status code 200 but got 500\n    at checkAssertion (check.js:45:12)"
      },
      "assertions": [
        {
          "source": "STATUS_CODE",
          "property": "",
          "comparison": "EQUALS", 
          "target": "200",
          "passed": false,
          "actual": "500"
        }
      ],
      "timing": {
        "dns": 15,
        "tcp": 28,
        "tls": 52,
        "firstByte": 4720,
        "download": 17,
        "total": 4832
      },
      "tags": ["api", "production", "health"],
      "triggeredBy": "schedule"
    }
  ],
  "meta": {
    "checkId": "check_api_health",
    "checkName": "Production API Health Check",
    "currentPage": 1,
    "totalPages": 156,
    "totalItems": 1547,
    "limit": 10,
    "hasMore": true,
    "timeframe": {
      "from": "2024-01-01T00:00:00.000Z",
      "to": "2024-01-31T23:59:59.999Z"
    },
    "summary": {
      "totalRuns": 1547,
      "successfulRuns": 1523,
      "failedRuns": 24,
      "successRate": 98.45,
      "averageResponseTime": 267.8,
      "p95ResponseTime": 445.2,
      "p99ResponseTime": 823.1
    }
  }
}

Query Parameters

  • from (string): Start date for results (ISO 8601 format)
  • to (string): End date for results (ISO 8601 format)
  • period (string): Predefined time period (1h, 6h, 24h, 7d, 30d)
Example:
?from=2024-01-01T00:00:00Z&to=2024-01-31T23:59:59Z
Default: Last 24 hours if no parameters provided
  • status (string): Filter by result status (success, failed)
  • location (string): Filter by monitoring location
  • triggeredBy (string): Filter by trigger type (schedule, api, manual)
  • responseTimeMin (integer): Minimum response time in milliseconds
  • responseTimeMax (integer): Maximum response time in milliseconds
Example:
?status=failed&location=us-east-1&responseTimeMin=1000
  • page (integer): Page number (default: 1)
  • limit (integer): Number of results per page (default: 10, max: 100)
  • sortBy (string): Sort field (startedAt, duration, responseTime)
  • sortOrder (string): Sort order (asc, desc, default: desc)
  • includeSummary (boolean): Include summary statistics (default: true)
Default: Returns first 10 results sorted by most recent

Result Status Types

StatusIndicatesCharacteristicsCommon Causes
Success• All assertions passed
• HTTP status codes in success range
• No execution errors occurred
• Response received within timeout
• Status code typically 2xx
• All defined assertions evaluate to true
• Complete response received
• Execution completed normally
N/A
Failed• One or more assertions failed
• HTTP error status codes (4xx, 5xx)
• Network or timeout errors
• Script execution errors
• Status code in error range
• Assertions evaluate to false
• Incomplete or missing response
• Execution terminated abnormally
• API returning error status codes
• Assertion mismatches
• Network connectivity issues
• Timeout exceeded

Response Time Breakdown

DNS Resolution (timing.dns)
  • Time to resolve domain name to IP address
  • Typically 0-50ms for cached results
  • Higher values may indicate DNS issues
TCP Connection (timing.tcp)
  • Time to establish TCP connection
  • Includes network latency
  • Geographic distance affects this timing
TLS Handshake (timing.tls)
  • Time for SSL/TLS negotiation
  • Only present for HTTPS requests
  • Certificate validation time included
First Byte (timing.firstByte)
  • Time from request sent to first response byte
  • Server processing time
  • Most critical for API performance analysis
Download (timing.download)
  • Time to download response body
  • Affected by response size and bandwidth
  • Usually minimal for API responses
Use timing breakdown to identify bottlenecks:
// Example: Analyze where time is spent
const result = checkResults.data[0];
const timing = result.timing;

const breakdown = {
  networkSetup: timing.dns + timing.tcp + timing.tls,
  serverProcessing: timing.firstByte - timing.dns - timing.tcp - timing.tls,
  dataTransfer: timing.download,
  totalTime: timing.total
};

console.log('Time breakdown:');
console.log(`Network setup: ${breakdown.networkSetup}ms (${(breakdown.networkSetup/timing.total*100).toFixed(1)}%)`);
console.log(`Server processing: ${breakdown.serverProcessing}ms (${(breakdown.serverProcessing/timing.total*100).toFixed(1)}%)`);
console.log(`Data transfer: ${breakdown.dataTransfer}ms (${(breakdown.dataTransfer/timing.total*100).toFixed(1)}%)`);

Common Use Cases

Performance Monitoring

Track API performance trends and identify regressions
GET /v1/check-results/{checkId}?period=7d&sortBy=responseTime

Debugging Failed Checks

Investigate check failures with detailed error analysis
GET /v1/check-results/{checkId}?status=failed&limit=50

SLA Compliance Reporting

Generate uptime and compliance reports for stakeholders
GET /v1/check-results/{checkId}?period=30d&includeSummary=true

Geographic Performance Analysis

Compare performance across different monitoring locations
GET /v1/check-results/{checkId}?location=us-east-1&period=24h

Additional Use Cases

Track API performance over time:
  • Monitor response time trends
  • Identify performance regressions
  • Track timing component changes
  • Set up performance baselines
# Get results with response time filtering
curl -X GET "https://api.checklyhq.com/v1/check-results/check_api_health?responseTimeMin=500&period=7d" \
  -H "Authorization: Bearer cu_1234567890abcdef" \
  -H "X-Checkly-Account: 550e8400-e29b-41d4-a716-446655440000"
Investigate check failures in detail:
  • Examine error messages and stack traces
  • Analyze failed assertions
  • Review request/response details
  • Identify patterns in failures
# Example: Analyze failed check results
failed_results = [r for r in results if r['status'] == 'failed']
for result in failed_results:
    print(f"Failed at {result['startedAt']}")
    print(f"Status: {result['response']['statusCode']}")
    print(f"Error: {result.get('error', {}).get('message', 'No error message')}")
    print(f"Failed assertions: {[a for a in result['assertions'] if not a['passed']]}")
Generate compliance reports:
  • Calculate uptime percentages
  • Track SLA violations
  • Generate compliance dashboards
  • Export data for stakeholder reports
// Calculate SLA compliance
const totalResults = meta.summary.totalRuns;
const successfulResults = meta.summary.successfulRuns;
const uptimePercentage = (successfulResults / totalResults) * 100;

const slaTarget = 99.9; // 99.9% SLA target
const slaCompliant = uptimePercentage >= slaTarget;

console.log(`Uptime: ${uptimePercentage.toFixed(3)}%`);
console.log(`SLA Status: ${slaCompliant ? 'COMPLIANT' : 'BREACH'}`);
if (!slaCompliant) {
  console.log(`SLA deficit: ${(slaTarget - uptimePercentage).toFixed(3)}%`);
}
Compare performance across locations:
  • Identify regional performance differences
  • Optimize global infrastructure
  • Monitor CDN effectiveness
  • Plan capacity expansion
# Group results by location for analysis
from collections import defaultdict

location_stats = defaultdict(list)
for result in results:
    location = result['location']['name']
    if result['status'] == 'success':
        location_stats[location].append(result['response']['responseTime'])

for location, times in location_stats.items():
    avg_time = sum(times) / len(times)
    print(f"{location}: {avg_time:.1f}ms average ({len(times)} samples)")

Additional Examples

curl -X GET "https://api.checklyhq.com/v1/check-results/check_api_health?period=24h&limit=50&includeSummary=true" \
  -H "Authorization: Bearer cu_1234567890abcdef" \
  -H "X-Checkly-Account: 550e8400-e29b-41d4-a716-446655440000"
Check results provide detailed execution data for performance analysis, debugging, and compliance reporting. The timing breakdown helps identify bottlenecks in different components of the request lifecycle.

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

Query Parameters

limit
integer
default:10

Limit the number of results

Required range: 1 <= x <= 100
page
number
default:1

Page number

from
string<date>

Select documents up from this UNIX timestamp (>= date). Defaults to now - 6 hours.

to
string<date>

Optional. Select alerts up to this UNIX timestamp (< date). Defaults to 6 hours after "from".

location
enum<string>

Provide a data center location, e.g. "eu-west-1" to filter by location

Available options:
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
checkType
enum<string>

The type of the check

Available options:
API,
BROWSER,
HEARTBEAT,
MULTI_STEP,
TCP,
PLAYWRIGHT,
URL
hasFailures
boolean

Check result has one or more failures

resultType
enum<string>
default:FINAL

The check result type (ALL,FINAL,ATTEMPT)

Available options:
ALL,
FINAL,
ATTEMPT

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
Example:

"FINAL"

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 is should be your mainmain focus for assessing API or browser check behaviour. Assertions that fail, timeouts or failing scripts all resolve tothis value being true.

hasErrors
boolean

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

isDegraded
boolean

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

overMaxResponseTime
boolean

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>
stoppedAt
string<date-time>
created_at
string<date-time>
responseTime
number

Describes the time it took to execute relevant parts of this check. Any setup timeor system time needed to start executing this check in the Checkly backend is not part of this.

apiCheckResult
object

The response data for an API check.

browserCheckResult
object

The response data for a browser check.

Example:

null

multiStepCheckResult
object

The response data for a multi-step check.

Example:

null

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

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

Example:

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