---
title: "List the Campaign Plans"
method: GET
path: "/context/campaign-plans"
tags: ["Campaign Plans"]
---

# List the Campaign Plans

`GET /context/campaign-plans`

## Request

- Base URL: `https://api.adcrunch.dev`
- URL: `https://api.adcrunch.dev/context/campaign-plans`
- Auth: HTTP bearer

Lists the Campaign Plans of your organization, newest first. Each row gives the figures you compare plans by: the budget envelope, the allocated sum and whether that sum is comparable, the window, the number of lines, and the channels the Campaign Plan uses. This call does not give the Line Items. To read them, read one plan. Deleted plans are not in the list.

One page at a time: `limit` rows at most, 100 by default. When the answer holds `nextCursor`, more rows exist: send it back as `cursor` to get the next page.

## Query parameters

- `cursor` string: The `nextCursor` of the previous page. Omit it to get the first page. Send it with no change, and with the same filters as the request that answered it: a cursor from a different query gets a 400 `invalid_cursor`. Do not build or change a cursor.
- `limit` integer, required: The greatest number of rows on the page, from 1 to 500. The default is 100. A greater value gets a 400, with `error` of `invalid_request`.

## Response `200`

One page of the Campaign Plans of the organization, newest first, with the money of each summarized and its channels named, but without its rows. Where the rows mix totals and daily rates, `allocation.comparable` is false and `allocation.allocated` is null — there is no meaningful sum to show. This page is the last one, so it carries no `nextCursor`.

- object
  - `data` object[], required
    - `allocation` object, required: Derived on every read. Never stored.
      - `allocated` number, nullable, required: The sum of the Line Item budgets. `null` when the lines mix units, because that sum would be meaningless.
      - `comparable` boolean, required: False when the lines mix totals and daily rates. A surface must then print "not comparable" rather than a plausible-looking wrong total.
      - `unallocated` number, nullable, required: The envelope less the allocated, where both are known.
      - `unit` 'total' | 'daily', nullable, required: The shared unit, when the lines agree on one.
    - `brandId` string, nullable, required
    - `channels` string[], required: Every channel its Line Items name, deduplicated.
    - `currency` string, required
    - `description` string, required
    - `endDate` string, nullable, required: A calendar date, `YYYY-MM-DD`.
    - `lineItemCount` number, required
    - `name` string, required
    - `revision` number, required: Increments on every write. Send it back as `base_revision` to edit; a stale one answers 409.
    - `slug` string, required
    - `startDate` string, nullable, required: A calendar date, `YYYY-MM-DD`.
    - `status` 'draft' | 'approved', required
    - `totalBudget` number, nullable, required: The envelope. Whole units of `currency`.
  - `nextCursor` string: Send this value as `cursor` to get the next page. It is absent on the last page.

## Other responses

- `400`: The request does not match the schema of this operation: a field is missing or has the wrong type, or the body is not valid JSON. `error` is `invalid_request`, and `issues` names each field. Nothing was changed. Or AdCrunch cannot use the `cursor`: it cannot read it, or the cursor belongs to a different query. Then `error` is `invalid_cursor`. Send the `nextCursor` of the previous page with no change, or omit `cursor` to get the first page.
- `401`: No API key, or one that does not resolve. See the security scheme. `error` is `unauthorized`.
- `402`: The organization has no active subscription. An owner subscribes at `paywallUrl`. `error` is `organization_unentitled`.
- `403`: The caller does not hold `campaign_plan:read`. `error` is `forbidden`.

---

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