---
title: "Get campaign routes"
method: GET
path: "/api/v1/campaigns/campaign-routes/{id}"
tags: ["campaigns"]
---

# Get campaign routes

`GET /api/v1/campaigns/campaign-routes/{id}`

## Request

- Base URL: `https://point11.ai`
- URL: `https://point11.ai/api/v1/campaigns/campaign-routes/{id}`
- 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`)

Get the Discovery, Experience or Research campaign a route key names (its `campaignKey`, or its id), narrowly: its id, route key, product, name and lifecycle status, even while it is archived or still being set up. Pass settings: true to also get what its settings page decides by: its website, schedule, work counted by its entries, and setup readiness, as campaigns_summaries_get_v2 states them. A key the organization holds no campaign under is not found. Read its saved setup with its product's campaign-settings read, and its full list row with campaigns_summaries_get_v2.

## Path parameters

- `id` string, required: The campaign's id, or its route key (`campaignKey`).

## Query parameters

- `settings` boolean: true also answers the campaign's website, schedule, work and setup readiness (`settings`); omit it for the campaign alone.

## Headers

- `Point11-Organization` string, uuid

## Response `200`

Success.

- CampaignsCampaignRoutesGetResponse
  - `id` string, required
  - `campaignKey` string, nullable, required
  - `product` 'discovery' | 'research' | 'experience', required
  - `name` string, required
  - `status` 'active' | 'paused' | 'archived' | 'deleted', required
  - `settings` object, nullable, required: Its website, schedule, work and setup readiness, as campaigns.summaries.get.v2 states them: whether it takes a change and where its page opens. Null unless `settings` is true.
    - `url` string, required
    - `domain` string, 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.
      - 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
          - `id` string, required
          - `name` string, nullable, required
          - `status` 'active' | 'paused' | 'archived' | 'deleted', nullable, required
      - object
        - `mode` 'unavailable', required
        - `issue` string, required
    - `work` CampaignsWork2, 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
    - `readiness` object, required
      - `state` 'ready' | 'preparing' | 'needs_attention', required
      - `message` string, nullable, required

## 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`.

---

[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/36a84c7aca11?raw)
