---
title: "/campaigns"
method: GET
path: "/projects/{project_id}/campaigns"
tags: ["Campaigns"]
---

# /campaigns

`GET /projects/{project_id}/campaigns`

## Request

- Base URL: `https://api.productbyte.com/v1`
- URL: `https://api.productbyte.com/v1/projects/{project_id}/campaigns`
- Auth: HTTP bearer

Lists the project’s campaigns.

Only campaigns someone made are listed. Posts created without a `campaign_id` are grouped internally so the product has somewhere to put them; those groupings are not campaigns you can act on and never appear here.

Paginate with `cursor`: pass the `next_cursor` from the previous page. It is absent on the last page.

Requires the `posts:read` scope.

## Path parameters

- `project_id` string, required: The project to list campaigns for.

## Query parameters

- `limit` integer: Page size, 1–100.
- `cursor` string: A `next_cursor` from a previous page.

## Response `200`

A page of campaigns.

- object
  - `campaigns` object[], required: Campaigns, by name.
    - `id` string, required: Pass this as `campaign_id` when creating a post.
    - `name` string, required: The campaign’s name.
    - `start_date` string, date-time: When the campaign starts, when a start day is set. Normalized to midnight UTC on that day — it is a date the product shows, not a scheduling instruction.
    - `post_count` integer, required: How many posts belong to it.
    - `created_at` string, date-time, required: When the campaign was created.
    - `updated_at` string, date-time, required: When it last changed.
  - `next_cursor` string: Pass as `cursor` to fetch the next page. Absent when there are no more.

## Other responses

- `401`: Missing, unknown, revoked, or expired key (`API_KEY_UNAUTHORIZED`).
- `403`: The key lacks `posts:read`, or the project is outside its allowlist.
- `429`: Too many requests for this key (`API_RATE_LIMITED`). Back off and retry; `Retry-After` gives the window length.

## Changes

- **2026-10-20** `e44332d6b9c6`: 1 warning
  - removed the optional property `campaigns/items/brief` from the response with the `200` status

[Operation history](https://skmtc.dev/productbyte/apis/productbyte-api/changes/projects/:project_id/campaigns/get.md)

---

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