---
title: "List summaries (v2)"
method: GET
path: "/api/v1/campaigns/summaries-v2"
tags: ["campaigns"]
---

# List summaries (v2)

`GET /api/v1/campaigns/summaries-v2`

## Request

- Base URL: `https://point11.ai`
- URL: `https://point11.ai/api/v1/campaigns/summaries-v2`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://auth.point11.ai/oauth2/authorize`, token URL `https://auth.point11.ai/oauth2/token`)

List the organization's campaigns across Discovery, Experience and Research, optionally one product and one lifecycle status, sorted by a column. Each row carries its schedule, its work counted by its entries (each launch, scheduled firing or run now: a Discovery dispatch, an Experience cycle, a Research run), its customer work in flight from its product's calendar, setup readiness, and whether the account admits its new work; an Experience Mirror's customers are its source Discovery campaign's. Returns totalCount and whether the organization has any campaign at all.

## Query parameters

- `limit` integer: Number of items to return (1–1000)
- `cursor` string: Opaque cursor returned as nextCursor by the previous page
- `product` 'discovery' | 'research' | 'experience': Only this product's campaigns; omit for every product.
- `view` 'all' | 'active' | 'paused' | 'archived': Only campaigns in this lifecycle status; "all" (the default) is every one.
- `sort` 'name' | 'brandUrl' | 'type' | 'updatedAt' | 'scheduleType' | 'frequency' | 'sourceCampaign': The column to sort by. Every product sorts by name, type and updatedAt; one product also by brandUrl; Experience also by scheduleType, frequency and sourceCampaign. Any other sorts by updatedAt, newest first.
- `descending` boolean: Sort descending; ignored without sort.
- `brandIcons` boolean: false reads no brand favicons, for a caller that draws none: every row's brandIcon is then null. Omit it, or pass true, to read each row's.

## Headers

- `Point11-Organization` string, uuid

## Response `200`

Success.

- CampaignsSummariesListV2Response
  - `data` CampaignsDataItem[], required
    - union
      - object
        - `id` string, required
        - `campaignKey` string, nullable, required
        - `name` string, required
        - `brandName` string, nullable, required
        - `url` string, required
        - `domain` string, required
        - `status` 'active' | 'paused' | 'archived' | 'deleted', required
        - `schedule` union, required
          - object
            - `mode` 'calendar', required
            - `issue` string, nullable, required
            - `clockStarted` boolean, required: Whether the campaign's clock has started. An always-on Experience campaign's starts once its first run delivers a visit; until then it runs no month.
            - `nextAt` string: ISO timestamp at which the clock an always-on Experience campaign's first accepted run started next opens a cycle. It is the stored instant: a promise only while the campaign is Active, has no schedule issue, Point11 does not hold it, and the account admits its work (`execution.admissionAllowed`), and once passed, a cycle due to be planned. A visit placed ahead (`execution.activity.nextTargetAt`) comes first. Absent for a Discovery campaign, whose calendar names its next customer, and for a clock no accepted run started.
            - `placesAt` string: ISO timestamp of the daily slice at which a recurring Discovery campaign next places customers: its month's first slice while that month is not yet written, else the next UTC month's first, which writes that month's plan. Its Activity names it as Next only once no stored customer remains ahead (`execution.activity.nextTargetAt` null), and only while the campaign is Active, has no schedule issue, Point11 does not hold it, and the account admits its work. Absent for any other campaign.
          - object
            - `mode` 'once', required
            - `issue` string, nullable, required
            - `nextAt` string, nullable, required
          - object
            - `mode` 'recurring', required
            - `issue` string, nullable, required
            - `frequency` 'daily' | 'weekly' | 'monthly' | 'quarterly', required
            - `nextAt` string, nullable, required
          - object
            - `mode` 'source', required
            - `issue` string, nullable, required
            - `source` object, required
              - …
          - object
            - `mode` 'unavailable', required
            - `issue` string, required
        - `work` CampaignsWork, required: The campaign's entries, one per launch, scheduled firing or run now, whatever its product: an Experience cycle, a Discovery dispatch or a Research run.
          - `state` 'not_started' | 'in_progress' | 'settled' | 'unknown', required
          - `outcome` 'running' | 'succeeded' | 'failed' | 'cancelled' | 'partial', nullable, required
          - `total` integer, required: Entries requested.
          - `running` integer, nullable, required: Entries opened and not yet settled; null when unknown. An open entry is not work in flight: `execution.activity` says what runs now.
          - `succeeded` integer, required
          - `partial` integer, required
          - `failed` integer, required
          - `cancelled` integer, required
          - `skipped` integer, required
        - `execution` CampaignsExecution, required: The account's admission of the campaign's new work, and its execution evidence.
          - `activity` object, nullable, required: The campaign's activity from the stored facts campaigns.activities.get.v3 reads for the organization and a product: `nextTargetAt` its stored next customer, `running` the runs Billing admitted for it and has not finished (a reserved dispatch or run from its reservation, before any customer starts), and `due` 1 once that customer's time has passed while Billing admits its product's new work; `queued` is 0 and `scheduleTimeZone` null. Null when those facts could not be read.
            - `campaignId` string, required
            - `nextTargetAt` string, nullable, required
            - `running` integer, required
            - `queued` integer, required
            - `due` integer, required
            - `scheduleTimeZone` string, nullable, required
          - `admissionAllowed` boolean, required
          - `admissionUnavailable` boolean, required: The admission check could not be made; it holds nothing.
          - `reason` string, nullable, required
          - `subscriptionPaused` boolean, required
          - `code` string, nullable, required: Billing's refusal code behind `reason` when Billing refuses new work, else null.
        - `launch` object, required
          - `awaitingFunding` boolean, required
          - `refused` boolean, required
        - `readiness` object, required
          - `state` 'ready' | 'preparing' | 'needs_attention', required
          - `message` string, nullable, required
        - `subtype` string, nullable, required
        - `targetKind` 'profile' | 'physical_locations', nullable, required
        - `forecastAudience` boolean, required: Whether a Discovery campaign's customers are its forecast's alone (forecast mode, as Bootup's Forecast campaign); false for any other campaign.
        - `customerCount` integer, nullable, required: The customers the campaign shops: Discovery's customer target (it grows with the roster), Research's interview target, an Experience Burst's launch customers, and an Experience Pulse's source Discovery campaign's customer target. Null while a Pulse names no source. Who is on the roster now is `rosterCustomerCount`.
        - `createdAt` string, required: ISO timestamp.
        - `updatedAt` string, required: ISO timestamp.
        - `latestEntry` CampaignsLatestEntry, required
          - `id` string, required
          - `sequence` integer, required: The entry's ordinal among its campaign's entries, from 1.
          - `failureReason` string, nullable, required: The code the entry settled with when it failed or was cancelled (for example no_unit_delivered or no_eligible_customers); null otherwise, or when it recorded no code.
          - `progress` ResearchProgress, required: The entry's units, counted from its product's delivered evidence.
            - `unitLabel` 'visit' | 'interview' | 'conversation', required: What one unit of this entry's work is: an Experience visit, a Research interview, a Discovery conversation.
            - `admission` 'entry' | 'unit', required: `entry`: the entry's work is admitted and billed once; `unit`: each unit is.
            - `counts` object, required
              - …
            - `outcome` 'running' | 'succeeded' | 'failed' | 'cancelled' | 'partial', required: Running until the entry settles; failed or cancelled when its product settled it so (a failed final result still counts the units it delivered); otherwise counted from the units: succeeded when every admitted unit delivered, partial when some did, failed when none did. An entry its product settled succeeded whose units no longer exist (all counts 0) stays succeeded.
            - `failureReasons` object[], required: Why the failed units failed, one row per reason with how many units it ended. A unit that failed while its admission still runs has no reason until that settles.
              - …
        - `rosterCustomerCount` integer, nullable, required: Who is on a Discovery campaign's roster now, whom its runs interview, and an Experience Pulse's source Discovery campaign's: a customer removed by name leaves `customerCount`, the planned target, where it was, so the two can differ. Null until anyone has joined the roster, and for a Research campaign and an Experience Burst, which `customerCount` alone names.
        - `held` boolean, required: Point11 holds the campaign's new work: an operator stopped one of its runs and has not released it, so nothing it placed starts. Its status reads On hold while it is active.
        - `supportOwned` boolean, required: Point11 support owns the campaign's failed work: an open delivery issue is recorded for it.
        - `brandIcon` object, nullable, required: The favicon Discovery's source identity stored for the brand's website (`url`, the website the campaign runs on behalf of); null when none is stored, and the brand draws its website's initial.
          - `url` string, required: The stored favicon: a public object URL
          - `tone` 'dark' | 'light' | 'mixed' | 'unknown', required
          - `transparent` boolean, nullable, required
          - `needsLightBackplate` boolean, required
          - `needsDarkBackplate` boolean, required
        - `product` 'discovery' | 'research', required
        - `type` string, required: "Discovery" or the Research playbook's label.
      - object
        - `id` string, required
        - `campaignKey` string, nullable, required
        - `name` string, required
        - `brandName` string, nullable, required
        - `url` string, required
        - `domain` string, required
        - `status` 'active' | 'paused' | 'archived' | 'deleted', required
        - `schedule` union, required
          - object
            - `mode` 'calendar', required
            - `issue` string, nullable, required
            - `clockStarted` boolean, required: Whether the campaign's clock has started. An always-on Experience campaign's starts once its first run delivers a visit; until then it runs no month.
            - `nextAt` string: ISO timestamp at which the clock an always-on Experience campaign's first accepted run started next opens a cycle. It is the stored instant: a promise only while the campaign is Active, has no schedule issue, Point11 does not hold it, and the account admits its work (`execution.admissionAllowed`), and once passed, a cycle due to be planned. A visit placed ahead (`execution.activity.nextTargetAt`) comes first. Absent for a Discovery campaign, whose calendar names its next customer, and for a clock no accepted run started.
            - `placesAt` string: ISO timestamp of the daily slice at which a recurring Discovery campaign next places customers: its month's first slice while that month is not yet written, else the next UTC month's first, which writes that month's plan. Its Activity names it as Next only once no stored customer remains ahead (`execution.activity.nextTargetAt` null), and only while the campaign is Active, has no schedule issue, Point11 does not hold it, and the account admits its work. Absent for any other campaign.
          - object
            - `mode` 'once', required
            - `issue` string, nullable, required
            - `nextAt` string, nullable, required
          - object
            - `mode` 'recurring', required
            - `issue` string, nullable, required
            - `frequency` 'daily' | 'weekly' | 'monthly' | 'quarterly', required
            - `nextAt` string, nullable, required
          - object
            - `mode` 'source', required
            - `issue` string, nullable, required
            - `source` object, required
              - …
          - object
            - `mode` 'unavailable', required
            - `issue` string, required
        - `work` CampaignsWork, required: The campaign's entries, one per launch, scheduled firing or run now, whatever its product: an Experience cycle, a Discovery dispatch or a Research run.
          - `state` 'not_started' | 'in_progress' | 'settled' | 'unknown', required
          - `outcome` 'running' | 'succeeded' | 'failed' | 'cancelled' | 'partial', nullable, required
          - `total` integer, required: Entries requested.
          - `running` integer, nullable, required: Entries opened and not yet settled; null when unknown. An open entry is not work in flight: `execution.activity` says what runs now.
          - `succeeded` integer, required
          - `partial` integer, required
          - `failed` integer, required
          - `cancelled` integer, required
          - `skipped` integer, required
        - `execution` CampaignsExecution, required: The account's admission of the campaign's new work, and its execution evidence.
          - `activity` object, nullable, required: The campaign's activity from the stored facts campaigns.activities.get.v3 reads for the organization and a product: `nextTargetAt` its stored next customer, `running` the runs Billing admitted for it and has not finished (a reserved dispatch or run from its reservation, before any customer starts), and `due` 1 once that customer's time has passed while Billing admits its product's new work; `queued` is 0 and `scheduleTimeZone` null. Null when those facts could not be read.
            - `campaignId` string, required
            - `nextTargetAt` string, nullable, required
            - `running` integer, required
            - `queued` integer, required
            - `due` integer, required
            - `scheduleTimeZone` string, nullable, required
          - `admissionAllowed` boolean, required
          - `admissionUnavailable` boolean, required: The admission check could not be made; it holds nothing.
          - `reason` string, nullable, required
          - `subscriptionPaused` boolean, required
          - `code` string, nullable, required: Billing's refusal code behind `reason` when Billing refuses new work, else null.
        - `launch` object, required
          - `awaitingFunding` boolean, required
          - `refused` boolean, required
        - `readiness` object, required
          - `state` 'ready' | 'preparing' | 'needs_attention', required
          - `message` string, nullable, required
        - `subtype` string, nullable, required
        - `targetKind` 'profile' | 'physical_locations', nullable, required
        - `forecastAudience` boolean, required: Whether a Discovery campaign's customers are its forecast's alone (forecast mode, as Bootup's Forecast campaign); false for any other campaign.
        - `customerCount` integer, nullable, required: The customers the campaign shops: Discovery's customer target (it grows with the roster), Research's interview target, an Experience Burst's launch customers, and an Experience Pulse's source Discovery campaign's customer target. Null while a Pulse names no source. Who is on the roster now is `rosterCustomerCount`.
        - `createdAt` string, required: ISO timestamp.
        - `updatedAt` string, required: ISO timestamp.
        - `latestEntry` CampaignsLatestEntry, required
          - `id` string, required
          - `sequence` integer, required: The entry's ordinal among its campaign's entries, from 1.
          - `failureReason` string, nullable, required: The code the entry settled with when it failed or was cancelled (for example no_unit_delivered or no_eligible_customers); null otherwise, or when it recorded no code.
          - `progress` ResearchProgress, required: The entry's units, counted from its product's delivered evidence.
            - `unitLabel` 'visit' | 'interview' | 'conversation', required: What one unit of this entry's work is: an Experience visit, a Research interview, a Discovery conversation.
            - `admission` 'entry' | 'unit', required: `entry`: the entry's work is admitted and billed once; `unit`: each unit is.
            - `counts` object, required
              - …
            - `outcome` 'running' | 'succeeded' | 'failed' | 'cancelled' | 'partial', required: Running until the entry settles; failed or cancelled when its product settled it so (a failed final result still counts the units it delivered); otherwise counted from the units: succeeded when every admitted unit delivered, partial when some did, failed when none did. An entry its product settled succeeded whose units no longer exist (all counts 0) stays succeeded.
            - `failureReasons` object[], required: Why the failed units failed, one row per reason with how many units it ended. A unit that failed while its admission still runs has no reason until that settles.
              - …
        - `rosterCustomerCount` integer, nullable, required: Who is on a Discovery campaign's roster now, whom its runs interview, and an Experience Pulse's source Discovery campaign's: a customer removed by name leaves `customerCount`, the planned target, where it was, so the two can differ. Null until anyone has joined the roster, and for a Research campaign and an Experience Burst, which `customerCount` alone names.
        - `held` boolean, required: Point11 holds the campaign's new work: an operator stopped one of its runs and has not released it, so nothing it placed starts. Its status reads On hold while it is active.
        - `supportOwned` boolean, required: Point11 support owns the campaign's failed work: an open delivery issue is recorded for it.
        - `brandIcon` object, nullable, required: The favicon Discovery's source identity stored for the brand's website (`url`, the website the campaign runs on behalf of); null when none is stored, and the brand draws its website's initial.
          - `url` string, required: The stored favicon: a public object URL
          - `tone` 'dark' | 'light' | 'mixed' | 'unknown', required
          - `transparent` boolean, nullable, required
          - `needsLightBackplate` boolean, required
          - `needsDarkBackplate` boolean, required
        - `product` 'experience', required
        - `type` 'Experience', required
        - `experience` object, required
          - `mode` 'pulse' | 'burst', required
          - `targetSummary` object, required
            - `platforms` string[], required
            - `accessModes` string[], required
  - `nextCursor` string, nullable, required
  - `totalCount` integer, required: Campaigns matching the product and status filters.
  - `hasCampaigns` boolean, required: Whether the organization has any listed campaign of this product at all.

## Other responses

- `400`: The input, query, or Idempotency-Key is invalid.
- `401`: The bearer is missing, expired, or not accepted.
- `403`: The credential lacks the operation's scope or role, or the operation needs a different door.
- `404`: The resource or organization does not exist for this caller.
- `405`: This path takes another HTTP method, named in `Allow`.
- `409`: The request conflicts with current state or with prior use of its Idempotency-Key.
- `413`: The request, or the answer it asks for, is too large; narrow it.
- `429`: The credential's rate budget is spent; retry after `Retry-After` seconds.
- `500`: An unexpected server failure; retry later. Only `request_id` identifies it.
- `503`: A dependency is temporarily unavailable; retry after `Retry-After` seconds.
- `default`: Another status a product answers for its own refusal (for example `415` for an unsupported attachment); branch on `code`.

## Changes

- **2026-10-20** `5241805fe425`: 1 breaking, 1 info
  - added `subschema #1, subschema #2` to the `data/items/` response property `oneOf` list for the response status `200`
  - removed `subschema #1, subschema #2` from the `data/items/` response property `oneOf` list for the response status `200`

[Operation history](https://skmtc.dev/point11/apis/point11-api/changes/api/v1/campaigns/summaries-v2/get.md)

---

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