Pause or resume a single ad
Pauses or resumes a single ad without touching its ad set, campaign or sibling ads.
Ad-scoped pause/resume: flips ONLY this ad's own switch (Meta
configured_status, TikTok operation_status, Google ad group ad
status, LinkedIn creative, Pinterest ad, Reddit ad configured_status), never its parent ad set or
campaign, so sibling ads keep running. X is the exception: its smallest
switch is the line item. Thin wrapper over the status field of
PUT /v1/ads/{adId}, for callers that want a URL symmetric to
/v1/ads/campaigns/{campaignId}/status and /v1/ads/ad-sets/{adSetId}/status.
The ad's own switch is independent of its delivery status. An ad paused
only because its campaign or ad set is off (status: paused,
configuredStatus: ACTIVE) can still be switched off here, and
switching an ad on under a paused campaign leaves it paused until the
campaign is resumed. After the write the switch is read back from the
platform and returned as configuredStatus, together with the
resulting delivery status.
{adId} accepts the same identifier dialects as GET/PUT /v1/ads/{adId}
(Zernio hex _id, Meta numeric platformAdId, or the creative's
effective story/media IDs). platform is inferred from the ad, so it's
not required in the body. Ads in terminal statuses (rejected, completed,
cancelled) are skipped, and so is a request whose target already matches
the ad's own switch as read LIVE from the platform (a stored value is
never trusted alone, since the switch may have been changed in the
platform's own UI). A skip also returns that live read. The rolled-up
status never decides a skip.
Authorization
bearerAuth API key authentication: send your Zernio API key in the Authorization header, prefixed with Bearer.
In: header
Path Parameters
Zernio _id (hex), Meta platformAdId (numeric), or one of the creative's effective story/media IDs.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
import Zernio from '@zernio/node';const zernio = new Zernio({ apiKey: process.env.ZERNIO_API_KEY });const { data } = await zernio.adcampaigns.updateAdStatus({ path: { adId: 'ad_abc123', }, body: { status: 'active', },});console.log(data);{ "updated": 0, "skipped": 0, "status": "string", "configuredStatus": "string", "message": "string"}Cancel an ad
Deletes an ad on the platform while keeping its history, and removes empty parents only when they were created through this API. Deletes the ad on the platform and marks it as cancelled in the database. The ad is preserved for history. OpenAI Ads has no delete API; the ad is archived instead (a terminal state, the closest equivalent). Reddit Ads has no delete either: the ad is archived (`configured_status` ARCHIVED). Only the ad is deleted; a campaign or ad set is never deleted while it still holds another ad. On Meta, when the ad set and campaign were created by Zernio (by `POST /v1/ads/create` or `POST /v1/ads/boost`) and Meta lists no other ad in the ad set (archived ads count), the emptied ad set is deleted too, then the campaign once it holds no other ad set. Parents created outside Zernio, and the parents of an ad imported from the platform, are always kept. On LinkedIn the ad is a creative inside a campaign inside a campaign group: the creative is always removed, the campaign only when Zernio created it and LinkedIn lists no other creative in it that is not archived, canceled or deleted, and the campaign group only when Zernio created it and LinkedIn lists no other campaign in it that is not canceled or deleted (archived campaigns count). If the creative itself cannot be removed the request fails and no parent is touched. On X the ad is a promoted post inside a line item inside a campaign: the promoted post is always removed, the line item only when Zernio created it (by `POST /v1/ads/create` or `POST /v1/ads/boost`) and X lists no other undeleted promoted post in it, and the campaign only when Zernio created it and X lists no other undeleted line item in it. If X refuses the promoted post delete the request fails and no parent is touched. To delete a whole campaign on purpose use `DELETE /v1/ads/campaigns/{campaignId}`.
List Search keywords
Lists the keywords and negative keywords in your Google Search ad groups. Returns the Google Search keyword criteria (positive and negative) synced from connected Google Ads accounts, one row per ad-group keyword. Refreshed about once a day per Google Ads customer (the keyword sweep rides the ads discovery pass on a slower slot), so keywords added on Google can take up to a day to appear. A customer synced for the first time is populated on the next discovery pass rather than waiting for its daily slot, and connecting an account or triggering a manual sync refreshes it immediately. Campaign-level negative keywords are not included; only ad-group-level criteria are.