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

# /campaigns/{campaign_id}

`DELETE /projects/{project_id}/campaigns/{campaign_id}`

## Request

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

Removes the campaign **and every post in it** from ProductByte. This is what the same action does in the app, and it cannot be undone.

**Nothing is removed from the channels.** A published post in this campaign loses its record here and stays up on the channel — retract those first if the point is to take content down.

Requires the `posts:write` scope.

## Path parameters

- `project_id` string, required: The project the campaign belongs to.
- `campaign_id` string, required: The campaign to remove.

## Response `204`

The campaign and its posts were removed.

## Other responses

- `401`: Missing, unknown, revoked, or expired key (`API_KEY_UNAUTHORIZED`).
- `403`: The key lacks `posts:write`, or the project is outside its allowlist.
- `404`: No such campaign in this project (`API_CAMPAIGN_NOT_FOUND`).
- `409`: The campaign holds a paid ad that is running or launching (`API_CAMPAIGN_HAS_RUNNING_ADS`). Pause its ads first.
- `429`: Too many requests for this key (`API_RATE_LIMITED`). Back off and retry; `Retry-After` gives the window length.

---

[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)
