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 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!