Docs/API

Checks

Each monitor has a set of checks that run against it -- uptime, broken links, certificate health, and more. This page covers how to enable, disable, snooze, and trigger those checks through the API.

You'll need check IDs for most of these endpoints. You can find them in the checks array of any monitor response.

Example request:

$ OHDEAR_TOKEN="your API token"
$ curl https://ohdear.app/api/checks/1/enable \
    -H "Authorization: Bearer $OHDEAR_TOKEN" \
    -H 'Accept: application/json' \
    -H 'Content-Type: application/json'

All endpoints below follow the same authentication pattern.

Check response fields #

Every check endpoint returns a check object with these fields:

{
  "id": 405,
  "type": "uptime",
  "label": "Uptime",
  "enabled": true,
  "latest_run_ended_at": "2019-09-16 07:29:02",
  "latest_run_result": "succeeded",
  "summary": "Up",
  "settings": {
    "location": "paris",
    "look_for_string": "",
    "absent_string": null,
    "expected_response_headers": [],
    "failed_notification_threshold": 2,
    "http_verb": "get",
    "payload": [],
    "timeout": 5,
    "valid_status_codes": ["2*"],
    "max_redirect_count": 5,
    "expected_final_redirect_url": null,
    "http_client_headers": []
  },
  "active_snooze": null
}
  • id: unique identifier for the check
  • type: the check type -- uptime, performance, certificate_health, broken_links, mixed_content, lighthouse, cron, application_health, sitemap, dns, domain, ai, ports, dns_blocklist
  • label: human-readable label for the check
  • enabled: whether this check is currently active
  • latest_run_ended_at: timestamp (UTC) of when this check last ran
  • latest_run_result: result of the last run -- succeeded, failed, warning, pending, errored-or-timed-out
  • summary: human-readable summary of the current status
  • settings: check-specific configuration (varies by check type -- see the monitors docs for details)
  • active_snooze: snooze details if active (see below), or null
  • average_response_time_in_ms: only present on performance checks -- average response time over the past 15 minutes in milliseconds

Enable a check #

POST /api/checks/{checkId}/enable

Enables a check on a monitor. Returns the updated check object.

Note You cannot enable or disable the performance check directly. The performance check follows the uptime check state.

Disable a check #

POST /api/checks/{checkId}/disable

Disables a check on a monitor. We'll stop running it until you re-enable it. Returns the updated check object with enabled set to false.

Request a run #

POST /api/checks/{checkId}/request-run

Triggers an on-demand run of a check -- useful for immediately scanning for broken links or mixed content after a deployment.

Returns the check object.

Request body (JSON, optional):

  • httpClientHeaders (array, optional) -- custom HTTP headers for this specific run (uptime checks only, max 5 headers)

Each header object has a name and value field:

{
  "httpClientHeaders": [
    {"name": "X-Custom-Header", "value": "custom-value"}
  ]
}

Snooze a check #

POST /api/checks/{checkId}/snooze

Temporarily silences notifications for a check. We'll still perform the check, but won't send any notifications while it's snoozed. For more details on snoozing, see our snooze documentation.

If you'd rather stop monitoring entirely for a period, disable the check instead.

Request body (JSON):

  • minutes (integer, required) -- how long to snooze the check
{
  "minutes": 10
}

Returns the check object with active_snooze populated.

Unsnooze a check #

POST /api/checks/{checkId}/unsnooze

Removes the active snooze from a check and resumes notifications immediately. Returns the check object with active_snooze set to null.

Snooze a scheduled task #

POST /api/cron-checks/{cronCheckDefinitionId}/snooze

In addition to snoozing an entire check, you can snooze individual scheduled tasks. Send the minutes payload the same way as snoozing a check.

You can find the cron check definition ID by calling the cron checks endpoint or by looking at the cron check details in the Oh Dear dashboard.

Unsnooze a scheduled task #

POST /api/cron-checks/{cronCheckDefinitionId}/unsnooze

Removes the active snooze from a scheduled task.

Snooze an application health check #

POST /api/monitors/{monitorId}/application-health-checks/{healthCheckId}/snooze

You can also snooze individual application health checks. Send the minutes payload the same way as snoozing a check.

You can find the health check ID by calling the application health checks endpoint or by looking at the health check details in the Oh Dear dashboard.

Unsnooze an application health check #

POST /api/monitors/{monitorId}/application-health-checks/{healthCheckId}/unsnooze

Removes the active snooze from an application health check.

Active snooze object #

When a check is snoozed, the active_snooze field contains these details:

{
  "id": 1,
  "starts_at": "2025-04-30 11:35:20",
  "ends_at": "2025-04-30 11:40:20",
  "snoozed_by": "Sean White",
  "unsnoozed_by": null,
  "source": "API",
  "created_at": "2025-04-30 11:35:20"
}
  • id: unique identifier for the snooze
  • starts_at: when the snooze started (UTC)
  • ends_at: when the snooze will end (UTC)
  • snoozed_by: name of the user or integration that created the snooze
  • unsnoozed_by: name of the user who unsnoozed early, or null
  • source: how the snooze was created (e.g., "API", "Dashboard")
  • created_at: when the snooze record was created (UTC)
Was this page helpful?

Feel free to reach out via [email protected] or on X via @OhDearApp if you have any other questions. We'd love to help!