---
title: "List campaign templates"
method: GET
path: "/api/v2/access-certification/campaigns"
tags: ["Access Certification"]
---

# List campaign templates

`GET /api/v2/access-certification/campaigns`

## Request

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

Returns scheduled campaign templates — saved configurations that have not yet been activated
or are waiting for their next scheduled run. This corresponds to the **Scheduled** view in
the Admin Portal.

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

**Sorting** — Pass a field name; prefix with `-` for descending order.
Supported fields: `name`, `next_run_at`, `last_run_at`, `created_at`, `enabled`
Example: `sort=-name`

**Filtering** — Repeat `filter` for multiple clauses (combined with AND).
Format: `field:operator:value`
- `status:eq:scheduled` — Only scheduled templates are supported on this endpoint.
  To list active or completed runs, use `GET /access-certification/campaign-runs`.
- `name:eq|ne|search|in|nin:<value>` — Filter by campaign name (`search` is case-insensitive)
- `enabled:eq:true|false` — Filter by whether auto-start is enabled
- `scopeType:eq:application|group` — Filter by review scope type
- `scopeTargetId:eq|search|ne_search:<id>` — Filter by application or user group ID
- `frequency:eq:one_time|monthly|quarterly|semi_annual|annual` — Filter by schedule frequency

When no status filter is provided, only **scheduled** templates are returned.

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

**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 templates (`totalCount` + `results`)

- JumpcloudHttpAccesscertificationCampaignListResponse: Paginated list response for campaign templates (`totalCount` + `results`)
  - `totalCount` integer, required
  - `results` JumpcloudHttpAccesscertificationCampaignListItem[], required
    - `id` string, required
    - `name` string, required: Campaign display name
    - `status` 'scheduled' | 'active' | 'completed' | 'canceled', required: Lifecycle status of a campaign template. `disabled` is not a separate status — when Access Certification is turned off, campaigns may appear inactive but their status field is unchanged. Create and activate are blocked while disabled.
    - `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 campaign scope (use Directory APIs to resolve the display name)
    - `scheduleMode` 'one_time' | 'recurring', required
    - `cadence` 'monthly' | 'quarterly' | 'semi_annual' | 'annual': How often a recurring campaign runs (monthly, quarterly, semi-annual, or annual)
    - `nextRun` string, date-time: Next scheduled run for recurring templates
    - `lastRunAt` string, date-time: Start of the review window for the most recently completed run
    - `enabled` boolean, required: When `false`, a scheduled campaign will not auto-start on its start date. Note: if Access Certification is disabled (`featureEnabled` is `false` in access certification settings), create and activate are blocked regardless of this flag.
    - `reviewerType` 'administrator' | 'systemuser': Primary reviewer type from the campaign's reviewer chain
  - `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-console-api.md) - [All operations](https://skmtc.dev/jumpcloud/apis/jumpcloud-console-api/llms.txt) - [OpenAPI document](https://skmtc.dev/jumpcloud/apis/jumpcloud-console-api/revisions/f396d9271b46?raw)
