GET
/
v1
/
check-statuses
List all check statuses
curl --request GET \
  --url https://api.checklyhq.com/v1/check-statuses \
  --header 'Authorization: <api-key>'
[
  {
    "name": "API Check",
    "checkId": "1008ca04-d3ca-41fa-b477-9e99b761dbb4",
    "hasFailures": false,
    "hasErrors": false,
    "isDegraded": true,
    "longestRun": 10,
    "shortestRun": 5,
    "lastRunLocation": "us-east-1",
    "lastCheckRunId": "f10d711f-cd16-4303-91ce-741c92586b4a",
    "sslDaysRemaining": 3,
    "created_at": "2023-12-25",
    "updated_at": "2023-11-07T05:31:56Z"
  }
]

Overview

This endpoint provides real-time status information for all checks in your account. Check statuses give you an immediate overview of system health, availability, and performance trends without diving into detailed execution results.

Response Example

{
  "data": [
    {
      "checkId": "check_api_health",
      "checkName": "Production API Health Check",
      "checkType": "api",
      "status": "passing",
      "availability": {
        "percentage": 99.2,
        "period": "24h"
      },
      "performance": {
        "averageResponseTime": 245,
        "p95ResponseTime": 380,
        "trend": "stable"
      },
      "lastExecution": {
        "timestamp": "2024-01-25T14:30:00.000Z",
        "status": "success",
        "responseTime": 234,
        "location": "us-east-1"
      },
      "currentIncident": null,
      "alerts": {
        "active": 0,
        "acknowledged": 0,
        "total24h": 2
      },
      "schedule": {
        "frequency": "5m",
        "nextRun": "2024-01-25T14:35:00.000Z",
        "enabled": true
      },
      "locations": [
        {
          "id": "us-east-1",
          "name": "N. Virginia, USA",
          "status": "passing",
          "lastSuccess": "2024-01-25T14:30:00.000Z"
        },
        {
          "id": "eu-west-1", 
          "name": "Ireland, Europe",
          "status": "passing",
          "lastSuccess": "2024-01-25T14:29:45.000Z"
        }
      ],
      "tags": ["api", "production", "critical"],
      "group": {
        "id": "group_production_apis",
        "name": "Production APIs"
      }
    },
    {
      "checkId": "check_website_home",
      "checkName": "Homepage Browser Check",
      "checkType": "browser",
      "status": "failing",
      "availability": {
        "percentage": 87.3,
        "period": "24h"
      },
      "performance": {
        "averageResponseTime": 3240,
        "p95ResponseTime": 5200,
        "trend": "degrading"
      },
      "lastExecution": {
        "timestamp": "2024-01-25T14:28:00.000Z",
        "status": "failed",
        "responseTime": 8500,
        "location": "us-east-1",
        "error": "Page load timeout after 8 seconds"
      },
      "currentIncident": {
        "id": "incident_789123",
        "severity": "major",
        "startedAt": "2024-01-25T12:15:00.000Z",
        "title": "Homepage loading slowly"
      },
      "alerts": {
        "active": 2,
        "acknowledged": 1,
        "total24h": 15
      },
      "schedule": {
        "frequency": "2m",
        "nextRun": "2024-01-25T14:30:00.000Z",
        "enabled": true
      },
      "locations": [
        {
          "id": "us-east-1",
          "name": "N. Virginia, USA", 
          "status": "failing",
          "lastSuccess": "2024-01-25T12:10:00.000Z"
        },
        {
          "id": "eu-west-1",
          "name": "Ireland, Europe",
          "status": "degraded",
          "lastSuccess": "2024-01-25T14:25:00.000Z"
        }
      ],
      "tags": ["frontend", "homepage", "user-facing"],
      "group": {
        "id": "group_frontend_checks",
        "name": "Frontend Monitoring"
      }
    }
  ],
  "meta": {
    "currentPage": 1,
    "totalPages": 8,
    "totalItems": 76,
    "limit": 10,
    "summary": {
      "totalChecks": 76,
      "passing": 68,
      "failing": 6,
      "degraded": 2,
      "averageAvailability": 98.7,
      "activeIncidents": 3,
      "activeAlerts": 8
    }
  }
}

Common Use Cases

System Health Dashboard

Build real-time system health overviews and status pages
GET /v1/check-statuses?includeSummary=true

Incident Detection

Identify and respond to incidents quickly
GET /v1/check-statuses?status=failing&hasIncident=false

Performance Monitoring

Track system performance trends and degradation
GET /v1/check-statuses?trend=degrading&sortBy=responseTime

SLA Reporting

Generate SLA compliance reports and uptime metrics
GET /v1/check-statuses?availabilityMin=99&period=30d

Query Parameters

  • status (string): Filter by check status (passing, failing, degraded)
  • checkType (string): Filter by check type (api, browser, heartbeat, tcp, multistep)
  • group (string): Filter by check group ID
  • tags (array): Filter by tags (comma-separated)
  • location (string): Filter by monitoring location
  • hasIncident (boolean): Filter checks with active incidents
Example:
?status=failing&checkType=browser&tags=critical,production
  • availabilityMin (number): Minimum availability percentage (0-100)
  • availabilityMax (number): Maximum availability percentage (0-100)
  • responseTimeMin (number): Minimum average response time (ms)
  • responseTimeMax (number): Maximum average response time (ms)
  • trend (string): Performance trend (improving, stable, degrading)
Example:
?availabilityMin=95&responseTimeMax=1000&trend=degrading
  • page (integer): Page number (default: 1)
  • limit (integer): Number of items per page (default: 10, max: 100)
  • sortBy (string): Sort field (name, status, availability, responseTime, lastExecution)
  • sortOrder (string): Sort order (asc, desc, default: desc for timestamps)
  • includeSummary (boolean): Include account-wide summary statistics (default: true)
Default: Returns first 10 checks sorted by most recent execution

Status Types

Passing

Indicates:
  • Recent executions successful
  • Availability within acceptable range
  • No active alerts or incidents
  • Performance meeting SLA targets
Criteria:
  • Last 3 executions successful
  • Availability > 95% (24h)
  • No active critical alerts

Failing

Indicates:
  • Recent executions failed
  • Service unavailable or unreachable
  • Critical functionality broken
  • Active incident likely
Criteria:
  • Last 2+ executions failed
  • Multiple location failures
  • Active critical alerts

Degraded

Indicates:
  • Intermittent failures
  • Performance below targets
  • Partial functionality available
  • Requires monitoring
Criteria:
  • Mixed success/failure results
  • Availability 85-95% (24h)
  • Response times above thresholds

Unknown

Indicates:
  • Insufficient data to determine status
  • Check recently created
  • Execution suspended
  • Configuration issues
Criteria:
  • No recent execution data
  • Check disabled or paused
  • Location unavailable
Improving: Performance metrics getting better over time
  • Response times decreasing
  • Availability increasing
  • Error rates reducing
Stable: Consistent performance within normal ranges
  • Response times within ±10% of baseline
  • Availability maintained
  • No significant pattern changes
Degrading: Performance metrics getting worse over time
  • Response times increasing
  • Availability decreasing
  • Error rates rising
Calculation Period: Trends calculated over 24-hour rolling window
Response Time Evaluation:
  • Excellent: < 200ms
  • Good: 200-500ms
  • Fair: 500-1000ms
  • Poor: > 1000ms
Availability Targets:
  • Excellent: ≥ 99.9%
  • Good: 99.0-99.9%
  • Fair: 95.0-99.0%
  • Poor: < 95.0%
Thresholds can be customized per check based on SLA requirements.

Use Cases

Build real-time system health overviews:
  • Display overall system availability
  • Highlight failing or degraded services
  • Show performance trends at a glance
  • Track SLA compliance across services
// Build health dashboard
const response = await fetch('/api/v1/check-statuses?includeSummary=true');
const { data: checks, meta } = await response.json();

const dashboard = {
  overall: {
    health: meta.summary.averageAvailability,
    status: meta.summary.failing > 0 ? 'degraded' : 'healthy',
    incidents: meta.summary.activeIncidents
  },
  services: checks.map(check => ({
    name: check.checkName,
    status: check.status,
    availability: check.availability.percentage,
    trend: check.performance.trend
  }))
};
Identify and respond to incidents quickly:
  • Detect patterns indicating incidents
  • Correlate failures across related checks
  • Prioritize response based on severity
  • Track incident resolution progress
# Detect potential incidents
import requests

response = requests.get('/api/v1/check-statuses?status=failing&hasIncident=false')
failing_checks = response.json()['data']

# Look for patterns
location_failures = {}
for check in failing_checks:
    for location in check['locations']:
        if location['status'] == 'failing':
            loc_name = location['name']
            location_failures[loc_name] = location_failures.get(loc_name, 0) + 1

# Alert on widespread failures
for location, count in location_failures.items():
    if count >= 3:
        print(f"Potential infrastructure issue in {location}: {count} checks failing")
Track system performance trends:
  • Monitor response time trends
  • Identify degrading services
  • Plan capacity based on performance data
  • Set up predictive alerting
# Get degrading services for investigation
curl -X GET "/api/v1/check-statuses?trend=degrading&sortBy=responseTime&sortOrder=desc" \
  -H "Authorization: Bearer $API_KEY" \
  -H "X-Checkly-Account: $ACCOUNT_ID" | \
  jq '.data[] | {name: .checkName, responseTime: .performance.averageResponseTime, availability: .availability.percentage}'
Generate SLA compliance reports:
  • Calculate uptime percentages
  • Track SLA violations
  • Generate executive summaries
  • Export compliance data
// Generate SLA compliance report
const slaTarget = 99.9;
const checks = await getCheckStatuses();

const report = checks.map(check => {
  const compliant = check.availability.percentage >= slaTarget;
  const deficit = compliant ? 0 : slaTarget - check.availability.percentage;
  
  return {
    service: check.checkName,
    availability: check.availability.percentage,
    slaTarget: slaTarget,
    compliant: compliant,
    deficit: deficit,
    trend: check.performance.trend
  };
});

const overallCompliance = report.filter(r => r.compliant).length / report.length * 100;
console.log(`Overall SLA compliance: ${overallCompliance.toFixed(1)}%`);

Location-Specific Status

Each check execution location has its own status:Per-Location Status:
  • passing: Recent executions successful from this location
  • failing: Recent executions failed from this location
  • degraded: Mixed results or performance issues
  • unknown: No recent data or location unavailable
Use Cases:
  • Identify regional performance issues
  • Plan infrastructure improvements
  • Route traffic away from problematic regions
  • Understand global service health
# Analyze performance by region
def analyze_regional_performance(checks):
    regional_stats = {}
    
    for check in checks:
        for location in check['locations']:
            region = location['name']
            if region not in regional_stats:
                regional_stats[region] = {
                    'total_checks': 0,
                    'passing': 0,
                    'failing': 0,
                    'degraded': 0
                }
            
            regional_stats[region]['total_checks'] += 1
            regional_stats[region][location['status']] += 1
    
    # Calculate regional health scores
    for region, stats in regional_stats.items():
        health_score = stats['passing'] / stats['total_checks'] * 100
        print(f"{region}: {health_score:.1f}% healthy ({stats['passing']}/{stats['total_checks']})")

Real-Time Updates

Update Frequencies:
  • Critical systems: Poll every 30 seconds
  • Standard monitoring: Poll every 2-5 minutes
  • Executive dashboards: Poll every 5-10 minutes
Efficient polling:
// Efficient status polling with change detection
let lastUpdateHash = null;

async function pollCheckStatuses() {
  const response = await fetch('/api/v1/check-statuses', {
    headers: {
      'If-None-Match': lastUpdateHash,
      'Authorization': 'Bearer token',
      'X-Checkly-Account': 'account-id'
    }
  });
  
  if (response.status === 304) {
    // No changes since last poll
    return null;
  }
  
  lastUpdateHash = response.headers.get('ETag');
  return response.json();
}
Track specific changes in check status:
# Track status changes over time
previous_statuses = {}

def detect_status_changes(current_checks):
    changes = []
    
    for check in current_checks:
        check_id = check['checkId']
        current_status = check['status']
        
        if check_id in previous_statuses:
            previous_status = previous_statuses[check_id]
            if current_status != previous_status:
                changes.append({
                    'checkId': check_id,
                    'checkName': check['checkName'],
                    'previousStatus': previous_status,
                    'currentStatus': current_status,
                    'timestamp': check['lastExecution']['timestamp']
                })
        
        previous_statuses[check_id] = current_status
    
    return changes

Additional Examples

curl -X GET "https://api.checklyhq.com/v1/check-statuses?status=failing&limit=50" \
  -H "Authorization: Bearer cu_1234567890abcdef" \
  -H "X-Checkly-Account: 550e8400-e29b-41d4-a716-446655440000"
Check statuses provide real-time health insights perfect for building monitoring dashboards, setting up alerting systems, and maintaining situational awareness of your service health.

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

Response

Successful

name
string
required

The name of the check.

Example:

"API Check"

checkId
string

The ID of check this status belongs to.

Example:

"1008ca04-d3ca-41fa-b477-9e99b761dbb4"

hasFailures
boolean

Describes if this check is currently failing. If any of the assertions for an API checkfail this value is true. If a browser check fails for whatever reason, this is true.

Example:

false

hasErrors
boolean

Describes if due to some error outside of normal operation this check is failing. This should be extremely rare and only when there is an error in the Checkly backend.

Example:

false

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.

Example:

true

longestRun
number

The longest ever recorded response time for this check.

Example:

10

shortestRun
number

The shortest ever recorded response time for this check.

Example:

5

lastRunLocation
string

What location this check was last run at.

Example:

"us-east-1"

lastCheckRunId
string

The unique incrementing ID for each check run.

Example:

"f10d711f-cd16-4303-91ce-741c92586b4a"

sslDaysRemaining
number

How many days remain till the current SSL certificate expires.

Example:

3

created_at
string<date>
updated_at
string<date-time>