---
title: "List campaign runs"
method: GET
path: "/access-certification/campaign-runs"
tags: ["Access Certification"]
---

# List campaign runs

`GET /access-certification/campaign-runs`

## Request

- Base URL: `https://console.jumpcloud.com/api/v2`
- URL: `https://console.jumpcloud.com/api/v2/access-certification/campaign-runs`
- Auth: API key in header `x-api-key`
- TypeScript: <https://skmtc.dev/jumpcloud/apis/jumpcloud-api-2/docs/access-certification/campaign-runs/get.ts> (a function with typed inputs; its response is checked against the schema)

Returns campaign runs — individual executions of campaign templates. Each run represents
one review cycle with a defined review window, progress tracking, and remediation status.
This corresponds to the **Active** and **Closed** views in the Admin Portal.

**Pagination**
- `skip` — Number of records to skip (default `0`)
- `limit` — Page size (default `10`, maximum `100`)

**Sorting** — Prefix with `-` for descending order.
Supported fields: `campaign_name`, `review_window_start`, `review_window_end`,
`review_progress_percent`, `remediation_status`, `closed_at`, `activated_at`

**Filtering** — Repeat `filter` for multiple clauses (combined with AND).
- `status:eq:active|closed|canceled` — Filter by run status. When omitted, defaults to
  **active** runs. Repeat filters to combine (for example, `closed` and `canceled` together).
- `campaignName:eq|search:<value>` — Filter by campaign name
- `scopeType:eq:application|group` — Filter by review scope type
- `scopeTargetId:eq|search|ne_search:<id>` — Filter by application or user group ID
- `reviewProgressPercent:eq|gt|lt|ge|le:<0-100>` — Filter by review completion percentage
- `remediation:in:pending|no_action|completed|scheduled|canceled|not_started` —
  Filter by remediation rollup status

**Filter metadata** — Set `metadata=true` to receive distinct `applicationIds` and
`userGroupIds` for scope filter dropdowns. When enabled, list rows are omitted.

**Required permission:** `accesscertification` or `accesscertification.readonly`

## Query parameters

- `skip` integer: Number of results to skip
- `limit` integer: Maximum number of results to return
- `sort` string
- `filter` string[]
- `metadata` boolean

## Response `200`

Paginated list of campaign runs (`totalCount` + `results`)

- JumpcloudHttpAccesscertificationCampaignRunListResponse: Paginated list response for campaign runs (`totalCount` + `results`)
  - `totalCount` integer, required
  - `results` JumpcloudHttpAccesscertificationCampaignRunListItem[], required
    - `runId` string, required
    - `campaignId` string, required
    - `campaignName` string, required
    - `campaignDescription` string: Campaign description from the run config snapshot
    - `runNumber` integer, required
    - `status` 'active' | 'closed' | 'canceled', required: Status of a campaign run in list responses
    - `scopeType` 'application' | 'group', required: What the campaign reviews — an SSO application or a user group
    - `scopeTargetId` string, required: Application or user group object ID from the run snapshot or campaign scope
    - `scope` JumpcloudHttpAccesscertificationCampaignRunScope: Review scope for a campaign run, including the target application or user groups and optional resource counts from Directory.
      - `type` 'application' | 'group', required: What the campaign reviews — an SSO application or a user group
      - `applicationId` string: Set when type is application
      - `applicationName` string: Display name when known (activate snapshot / Directory); omit when unresolved
      - `userGroups` JumpcloudHttpAccesscertificationUserGroup[]: In-scope user groups (ID and optional name). Group-scoped campaigns currently support one user group.
        - `id` string, required: User group object id
        - `name` string: Display name when known; omit when unresolved
      - `resourceCounts` JumpcloudHttpAccesscertificationGroupResourceCounts[]: Per user-group resource counts from the Directory (each user group is counted independently).
        - `userGroupId` string, required: User group object id these counts belong to
        - `counts` object, required: Map of directory type key to count (e.g. user, application, ldap_server). Keys omitted when the graph edge is unsupported or the count call failed.
    - `reviewerType` 'administrator' | 'systemuser': Primary reviewer type from the campaign's reviewer chain
    - `reviewWindowStart` string, date-time, required
    - `reviewWindowEnd` string, date-time, required
    - `reviewProgressPercent` integer, required
    - `remediationStatus` 'not_started' | 'no_action' | 'in_progress' | 'scheduled' | 'completed' | 'failed' | 'canceled': Overall remediation status for a campaign run. Reflects the campaign's remediation policy and per-identity progress — not review completion percentage alone. - `no_action` — Remediation policy does not require automated action on revoke - `failed` — Deprecated at campaign level; per-identity failures surface on review items while process completion uses `completed`
    - `closeReason` string: Reason recorded when the run was closed or canceled
    - `activatedAt` string, date-time
    - `closedAt` string, date-time
    - `materializationStatus` 'in_progress' | 'complete' | 'failed': Cohort materialization progress while review items are created at activate
    - `reviewItemsMaterialized` integer: Review items materialized so far for this run
    - `requireJustification` boolean: Effective require-justification for this run's reviewer chain
    - `allowReassign` boolean: Effective allow-reassign for this run's reviewer chain
    - `auditReportStatus` 'generating' | 'exports_ready' | 'failed': Audit artifact status for campaign list and detail UIs (maps from audit_artifacts)
  - `metadata` JumpcloudHttpAccesscertificationCampaignScopeFilterMetadata: Distinct application and user group IDs for building scope filter options
    - `applicationIds` string[]
    - `userGroupIds` string[]

## Other responses

- `400`: Validation error with field-level details
- `401`: Missing or invalid credentials
- `403`: Forbidden — principal not assigned or lacks required role
- `default`: Unexpected error

---

[API](https://skmtc.dev/jumpcloud/apis/jumpcloud-api-2.md) - [All operations](https://skmtc.dev/jumpcloud/apis/jumpcloud-api-2/llms.txt) - [OpenAPI document](https://skmtc.dev/jumpcloud/apis/jumpcloud-api-2/revisions/3f09fe63caaa?raw)
