---
title: "Pause or resume a single ad set"
method: PUT
path: "/v1/ads/ad-sets/{adSetId}/status"
tags: ["Ad Campaigns"]
---

# Pause or resume a single ad set

`PUT /v1/ads/ad-sets/{adSetId}/status`

Ad-set-scoped pause/resume (doesn't touch sibling ad sets). Thin wrapper
over PUT /v1/ads/ad-sets/{adSetId} for callers that only want the
status toggle and prefer a symmetric URL to
/v1/ads/campaigns/{campaignId}/status.

On Meta and LinkedIn this writes the ad set's own on/off switch
(Meta: `configured_status`), whatever delivery status its ads report —
an ad still in review does not block resuming its ad set. The echoed
`status` is the confirmation that it landed. Where the platform has no
ad-set switch (TikTok and others) the toggle is emulated by flipping the
child ads; a call with no actionable ad then writes nothing and returns a
`message` with no `status`.

`updated` / `skipped` describe only the ads whose own stored status
CHANGED alongside the switch, so `updated: 0` is a normal successful
response. See `skippedReasons` for which of the three cases applies
(terminal, already in the target state, or switched on but not yet
delivering).

A campaign created paused needs its campaign resumed as well: pair this
with PUT /v1/ads/campaigns/{campaignId}/status.

## Path parameters

- `adSetId` string, required

## Request body

- object
  - `status` 'active' | 'paused', required
  - `platform` 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'pinterest' | 'google' | 'twitter' | 'openai', required

## Response `200`

Ad set status updated

- object
  - `status` 'active' | 'paused' — The status written to the ad set. Absent when nothing was written (see message).
  - `updated` integer — Number of ads whose own stored status changed too. 0 is normal on a resume whose ads are all awaiting the platform.
  - `skipped` integer — Number of ads whose own status was left as it was
  - `skippedReasons` string[] — Why each group of ads was skipped
  - `message` string — Present only where the platform has no ad-set switch and no child ad was actionable

## Other responses

- `400` — Invalid input
- `401` — Unauthorized
- `404` — Ad set not found

---

[API](https://skmtc.net/zernio/apis/zernio-api.md) · [All operations](https://skmtc.net/zernio/apis/zernio-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/zernio/zernio-api/revisions/3c7cf84cec44/schema)
