---
title: "Get campaign(s) (e.g. 'gtm-engineers-apr26'). No campaign_id: list all (user/workspace-scoped; account_id does not filte"
method: GET
path: "/api/v1/campaigns/{campaign_id}/state"
tags: ["campaigns"]
---

# Get campaign(s) (e.g. 'gtm-engineers-apr26'). No campaign_id: list all (user/workspace-scoped; account_id does not filte

`GET /api/v1/campaigns/{campaign_id}/state`

## Request

- Base URL: `https://crispy.sh`
- URL: `https://crispy.sh/api/v1/campaigns/{campaign_id}/state`
- Auth: HTTP bearer

## Path parameters

- `campaign_id` string, required

## Query parameters

- `refresh` boolean: Force recompute of included slices (passes through to sub-handlers).
- `include_archived` boolean: When listing all campaigns (no campaign_id), include archived campaigns (default: false).

## Response `200`

Success

## Other responses

- `401`: Missing or expired API key
- `403`: Insufficient key scope or permission denied
- `429`: Rate limit exceeded

---

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