Docs/API

Check History

The check history endpoint lets you list past runs for any check type on a monitor. Every time Oh Dear runs a check, it creates a run record. You can list these runs, filter them by date or result, and fetch detailed results for a specific run.

Runs are kept for approximately 10 days before being automatically pruned.

You'll need a monitor ID for this endpoint.

Example request:

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

All endpoints below follow the same authentication pattern.

List runs #

GET /api/monitors/{monitorId}/checks/{checkType}/runs

Returns a paginated list of completed runs for any check type on a monitor. Only runs with a result of succeeded, warning, or failed are included.

The checkType parameter accepts any check type value: uptime, performance, certificate_health, broken_links, mixed_content, lighthouse, cron, application_health, sitemap, dns, domain, ai, ports, dns_blocklist.

Here's what the response looks like:

{
  "data": [
    {
      "id": 98765,
      "check_id": 30536,
      "check_type": "broken_links",
      "result": "succeeded",
      "started_at": "2026-03-17T00:30:00+00:00",
      "ended_at": "2026-03-17T00:53:58+00:00",
      "ohdear_url": "https://ohdear.app/monitors/1234/check/broken-links/report/98765"
    },
    {
      "id": 98710,
      "check_id": 30536,
      "check_type": "broken_links",
      "result": "failed",
      "started_at": "2026-03-16T00:30:00+00:00",
      "ended_at": "2026-03-16T00:48:12+00:00",
      "ohdear_url": "https://ohdear.app/monitors/1234/check/broken-links/report/98710"
    }
  ],
  "links": {
    "documentation_url": "https://ohdear.app/docs/features/broken-links-detection",
    "..."
  },
  "meta": { "..." }
}
  • id: unique identifier for this run
  • check_id: the ID of the check this run belongs to
  • check_type: the check type
  • result: the check result of this run
  • started_at: when the run started (ISO 8601, UTC), or null if not recorded
  • ended_at: when the run completed (ISO 8601, UTC)
  • ohdear_url: direct link to this run's report page in the Oh Dear dashboard

The response links object includes a documentation_url pointing to the documentation for this check type.

Query parameters:

  • filter[started_after] (string, optional) -- only return runs started at or after this timestamp in YmdHis format, in UTC (e.g., 20260315000000)
  • filter[started_before] (string, optional) -- only return runs started at or before this timestamp in YmdHis format, in UTC
  • filter[result] (string, optional) -- filter by result: succeeded, warning, or failed

Fetching detailed results for a run #

Once you have a run ID, you can fetch the detailed results by adding ?run_id={id} to the check type's endpoint:

Check type Endpoint Docs
broken_links GET /api/broken-links/{monitorId}?run_id=123 Broken links
mixed_content GET /api/mixed-content/{monitorId}?run_id=123 Mixed content
certificate_health GET /api/certificate-health/{monitorId}?run_id=123 Certificate health
sitemap GET /api/sitemap/{monitorId}?run_id=123 Sitemap

Without run_id, these endpoints return the latest completed run. With run_id, they return that specific run's data in the same response shape. The run_id must belong to the correct check on the specified monitor, otherwise you'll get a 422 error.

For other check types like lighthouse, AI-powered monitoring, DNS, ports, and DNS blocklist, detailed historical results are available through their own dedicated endpoints.

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!