---
title: "List Campaigns"
method: GET
path: "/v2/campaigns"
tags: ["Campaigns V2"]
---

# List Campaigns

`GET /v2/campaigns`

Returns a list of campaigns for the specified application. Requires campaigns:read scope. The `application_id` query parameter is required.

## Query parameters

- `limit` string — a string to be decoded into a number
- `starting_after` string — a string to be decoded into a number
- `ending_before` string — a string to be decoded into a number
- `application_id` string, required — Filter by application ID (required)
- `archived` 'true' | 'false' — a string to be decoded into a boolean
- `include_sort_metrics` 'true' | 'false' — a string to be decoded into a boolean
- `sort_metric` 'transactionCompletes'
- `sort_metrics_date_preset` 'last_24_hours' | 'today' | 'yesterday' | 'last_7_days' | 'last_30_days' | 'last_90_days' | 'last_180_days' | 'last_365_days' | 'year_to_date' — Preset date range for included campaign sort metrics
- `sort_metrics_environment` 'PRODUCTION' | 'SANDBOX'

## Response `200`

Success

- object
  - `object` 'list', required — Object type, always `list`
  - `url` '/v2/campaigns', required — API endpoint URL for this list
  - `has_more` boolean, required — Whether there are more results available beyond this page
  - `data` object[], required — List of results
    - `id` string, required — Unique identifier for the campaign
    - `object` 'campaign', required — Object type, always `campaign`
    - `application_id` string, required — ID of the application this campaign belongs to
    - `description` string, required — Description of the campaign
    - `notes` string, nullable, required — Internal notes about the campaign
    - `is_legacy` boolean, required — Whether this is a legacy campaign
    - `is_prioritized` boolean, required — Whether this campaign is prioritized for config preloading. At most one campaign per application may be prioritized.
    - `placements` object[], required — List of placements (triggers) in this campaign
      - `id` string, required — Unique identifier for the placement
      - `object` 'placement', required — Object type, always `placement`
      - `event_name` string, required — Event name that triggers this placement
      - `enabled` boolean, required — Whether this placement is enabled
    - `audiences` object[], required — List of audiences in this campaign
      - `id` string, required — Unique identifier for the audience
      - `object` 'audience', required — Object type, always `audience`
      - `enabled` boolean, required — Whether this audience is enabled
      - `expression` string, nullable, required — Compiled filter expression for matching users, or null for all users
      - `rule_conditions` unknown, required
      - `expression_cel` string, nullable, required — The CEL expression evaluated by modern SDKs, derived from `rule_conditions`. Null when the audience has no structured rule.
      - `expression_sql` string, nullable, required — The dashboard-side SQL compilation of `rule_conditions` (for preview/copy). Null when the audience has no structured rule.
      - `rank` string, required — Priority rank of this audience within the campaign
      - `description` string, nullable, required — Human-readable description of the audience
      - `variant_optimization` union, required — Optimization strategy for variant allocation
        - 'none' — No optimization, use fixed percentages
        - 'ucb1_bandit' — UCB1 multi-armed bandit optimization
      - `variants` object[], required — List of variants in this audience
        - `id` string, required — Unique identifier for the variant
        - `object` 'variant', required — Object type, always `variant`
        - `type` union, required — Whether this is a treatment or holdout variant
          - 'treatment' — Treatment variant that shows a paywall
          - 'holdout' — Holdout variant that does not show a paywall
        - `paywall` string, nullable, required — a string to be decoded into a number
        - `percentage` number, required — Traffic percentage allocated to this variant (0-100)
        - `created_at` string, required — ISO 8601 timestamp of when the variant was created
      - `frequency_limit` object, nullable, required — How often each user can be matched into this audience
        - `occurrences` integer, required — an integer
        - `interval` union, required — Time window for a frequency limit
          - object
            - `type` 'infinity', required
          - object
            - `type` 'minutes', required
            - `minutes` integer, required — an integer
    - `created_at` string, required — ISO 8601 timestamp of when the campaign was created
    - `updated_at` string, required — ISO 8601 timestamp of when the campaign was last updated
    - `archived` boolean, required — Whether the campaign is archived
  - `sort_metrics` object — Optional lightweight metrics used by clients to sort the campaigns list
    - `status` 'ready' | 'unavailable', required — Whether campaign sort metrics were loaded successfully
    - `metric` 'transactionCompletes', required — Metric included for list ordering
    - `data` object, required — Transaction conversion count keyed by campaign ID

## Other responses

- `400` — The request did not match the expected schema
- `401` — No API key was provided in the request
- `403` — The API key does not have permission to perform this action
- `404` — The requested resource was not found
- `429` — Too many requests have been made in a short period
- `500` — An unexpected error occurred on the server

---

[API](https://skmtc.dev/superwall/apis/superwall-api-v2.md) · [All operations](https://skmtc.dev/superwall/apis/superwall-api-v2/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/superwall/superwall-api-v2/revisions/44900ad77d2c/schema)
