---
title: "List runs for all monitors"
method: GET
path: "/monitors/runs"
tags: ["Monitors"]
---

# List runs for all monitors

`GET /monitors/runs`

## Request

- Base URL: `https://api.context.dev/v1`
- URL: `https://api.context.dev/v1/monitors/runs`
- Auth: HTTP bearer

List runs across your monitors, newest first.

## Query parameters

- `status` 'queued' | 'running' | 'completed' | 'failed' | 'skipped': Filter runs by lifecycle status.
- `limit` integer: Maximum number of items to return per page (1-100). Defaults to 25.
- `cursor` string: Opaque pagination cursor from a previous response.

## Response `200`

A paginated list of runs

- MonitorsListRunsResponse
  - `data` MonitorsRun[], required
    - `webhook_delivery_ids` string[]: Webhook delivery IDs for this run.
    - `id` string, required
    - `monitor_id` string, required
    - `status` 'queued' | 'running' | 'completed' | 'failed' | 'skipped', required: Lifecycle status of a run. `skipped` runs never executed — see `skip_reason` (insufficient credits, monitor paused, or superseded by a concurrent run).
    - `run_type` 'baseline' | 'scheduled', required: A baseline run follows creation or a target or detection change.
    - `target_type` 'page' | 'sitemap' | 'extract', required
    - `change_detection_type` 'exact' | 'semantic', required
    - `started_at` string, date-time, nullable
    - `completed_at` string, date-time, nullable
    - `change_detected` boolean, required
    - `change_id` string, nullable
    - `baseline_created` boolean, required: True when this run established the monitor's initial baseline; baseline runs perform no change detection.
    - `credits_charged` integer, required: Credits charged for this run (0 for skipped/failed runs).
    - `skip_reason` 'insufficient_credits' | 'monitor_paused' | 'superseded' | 'null', nullable: Why a skipped run never executed; null unless status is `skipped`.
    - `error` MonitorsNullableRunError
      - `code` string, required
      - `message` string, required
    - `webhook_delivery` MonitorsWebhookDelivery
      - `delivery_id` string: Delivery ID for status checks and retries, when available.
      - `event_id` string, required: Identifier sent in the X-Context-Id header.
      - `event` 'change.detected' | 'run.completed', required: The event this delivery carried. Deliveries recorded before event selection existed report change.detected.
      - `status` 'delivered' | 'rejected' | 'failed' | 'skipped_unsafe_url', required: Outcome of the delivery attempt. Any 2xx response counts as delivered.
      - `http_status` integer, nullable, required: The endpoint's final HTTP response status, or null when no response was received.
      - `attempted_at` string, date-time, required
      - `error` MonitorsNullableRunError, required
        - `code` string, required
        - `message` string, required
    - `webhook_deliveries` MonitorsWebhookDelivery[]: All webhook deliveries attempted by this run — one per subscribed event that fired. Omitted when no webhook was attempted, including runs created before event selection was added.
      - `delivery_id` string: Delivery ID for status checks and retries, when available.
      - `event_id` string, required: Identifier sent in the X-Context-Id header.
      - `event` 'change.detected' | 'run.completed', required: The event this delivery carried. Deliveries recorded before event selection existed report change.detected.
      - `status` 'delivered' | 'rejected' | 'failed' | 'skipped_unsafe_url', required: Outcome of the delivery attempt. Any 2xx response counts as delivered.
      - `http_status` integer, nullable, required: The endpoint's final HTTP response status, or null when no response was received.
      - `attempted_at` string, date-time, required
      - `error` MonitorsNullableRunError, required
        - `code` string, required
        - `message` string, required
  - `has_more` boolean, required
  - `next_cursor` string, nullable, required
  - `key_metadata` KeyMetadata: Credits this request used and your remaining balance.
    - `credits_consumed` integer, required: Credits charged for this request.
    - `credits_remaining` integer, required: Credits remaining for your organization.
  - `request_id` string, uuid, required: Unique ID of this request, also in `X-Request-Id`. Include it when contacting support.

## Other responses

- `400`: Bad request
- `401`: Unauthorized
- `403`: API key permissions or organization settings do not allow this request.
- `429`: Rate limit exceeded. Organization concurrency rejections include structured error_data and subscription settings; follow Retry-After before retrying.

## Changes

- **2026-10-21** `61627728926b`: 3 warning
  - added the new `NO_PUBLISHED_MARKDOWN` enum value to the `error_code` response property for the response status `400`
  - added the new `NO_PUBLISHED_MARKDOWN` enum value to the `error_code` response property for the response status `401`
  - added the new `NO_PUBLISHED_MARKDOWN` enum value to the `error_code` response property for the response status `403`
- **2026-10-19** `4ddcf49b9fe5`: 4 info
  - added the optional property `error_data` to the response with the `400` status
  - added the optional property `error_data` to the response with the `401` status
  - added the optional property `error_data` to the response with the `403` status
  - added the optional property `error_data` to the response with the `429` status
- **2026-10-16** `2125f3e94e52`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/context/apis/brand-api/changes/monitors/runs/get.md)

---

[API](https://skmtc.dev/context/apis/brand-api.md) · [All operations](https://skmtc.dev/context/apis/brand-api/llms.txt) · [OpenAPI document](https://skmtc.dev/context/apis/brand-api/revisions/9e2ab7841fb1?raw)
