# POST /v1/projects/:projectId/ads/:platform/campaigns/:campaignId/{pause,resume} (/docs/api/reference/ads/pause-campaign)



<Endpoint method="POST" path="/v1/projects/:projectId/ads/{platform}/campaigns/:campaignId/pause" scope="ads:write:lifecycle" phase="1" />

<Endpoint method="POST" path="/v1/projects/:projectId/ads/{platform}/campaigns/:campaignId/resume" scope="ads:write:lifecycle" phase="1" />

Verb-style lifecycle endpoints. Layers translates per-platform (Meta `ACTIVE/PAUSED`, TikTok `ENABLE/DISABLE`, Apple `ENABLED/PAUSED`) so partners don't reason about platform status enums.

Same shape applies to adsets and ads:

* `POST …/adsets/:adsetId/{pause,resume}`
* `POST …/ads/:adId/{pause,resume}`

## Request [#request]

```bash
curl -X POST https://api.layers.com/v1/projects/$PROJECT_ID/ads/meta/campaigns/$CAMPAIGN_ID/pause \
  -H "Authorization: Bearer $LAYERS_API_KEY"
```

## Response [#response]

`202 { jobId, verdictId, status, platformStatus }`. `platformStatus` is the platform-native value Layers translated to (`PAUSED` on Meta, `DISABLE` on TikTok, etc.).

## Errors [#errors]

| Code               | When                                                                           |
| ------------------ | ------------------------------------------------------------------------------ |
| `AUTHORITY_DENIED` | `structural` axis (for delete) or `tactical` axis (for pause/resume) is `off`. |
| `NOT_FOUND`        | Campaign / adset / ad not in this org or platform.                             |

## See also [#see-also]

* [Ads write model — pause/resume verb abstraction (D33)](/docs/api/concepts/ads-write-model)
* [`DELETE …/campaigns/:id`](/docs/api/reference/ads/delete-campaign)
