Skip to main content

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.