Zernio
APIFor you
Zernio
APIFor you
API Reference

Campaigns and Ads

Overview

Get campaign treeGETGet daily account metricsGET

Campaigns

List campaignsGETCreate a standalone campaignPOSTGet live campaign detailsGETUpdate a campaignPUTDuplicate a campaignPOSTDelete a campaignDELETEPause or resume a campaignPUTPause or resume many campaignsPOSTList campaign assetsGETAttach campaign assetsPOSTUpdate campaign assetsPUTRemove campaign assetsDELETERead a Google campaign's device, location, excluded location, and language targetingGETEdit a Google campaign's device, location, excluded location, or language targetingPUTRead a campaign's ad schedule (dayparting)GETReplace a campaign's ad schedule (dayparting)PUTGet campaign conversion goalsGETUpdate campaign conversion goalsPATCH

Asset Groups

List Performance Max asset groupsGETCreate a Performance Max asset groupPOSTGet a Performance Max asset groupGETUpdate a Performance Max asset groupPATCHRemove a Performance Max asset groupDELETELink or unlink asset group assetsPOSTReplace an asset group's listing-group treePUT

Ad Sets

List ad setsGETCreate a standalone ad groupPOSTGet live ad-set detailsGETUpdate an ad setPUTDuplicate an ad setPOSTDelete an ad setDELETEPause or resume a single ad setPUTList ad-group assetsGETAttach ad-group assetsPOSTUpdate ad-group assetsPUTRemove ad-group assetsDELETE

Ads

List adsGETGet ad detailsGETCreate standalone adPOSTBoost post as adPOSTUpdate adPUTDuplicate an adPOSTCancel an adDELETEPause or resume a single adPUT

Keywords

List Search keywordsGETAdd Search ad-group keywordsPOSTPause or enable a Search keywordPATCHRemove a Search keywordDELETEList campaign-level negative keywordsGETReplace campaign-level negative keywordsPUTList campaign negative listsGETReplace campaign negative listsPUT

Bidding

Read a campaign's current biddingGETList portfolio bid strategiesGETCreate portfolio bid strategyPOSTUpdate portfolio bid strategyPATCH

Recommendations

List Google Ads recommendationsGETApply Google Ads recommendationsPOSTDismiss Google Ads recommendationsPOST

Other

Create a shared budgetPOSTRead the platform's review verdict for an adGETReview status of each creative in a TikTok Smart+ adGETList shared budgetsGET
Dashboard
OverviewPlatformsAPI ReferenceResources
Campaigns and Ads

Review status of each creative in a TikTok Smart+ ad

Shows which Spark post, video or carousel of an Upgraded Smart+ ad TikTok approved or rejected, with every rejection reason, keyed by the TikTok post id for a Spark post.

Reads TikTok's /smart_plus/ad/review_info/ live (read-only, works on a paused ad) for the Smart+ ad that holds adId, and returns the ad-level verdict plus one entry per creative. adId may be the Smart+ ad itself or any creative of it synced as its own ad: Zernio finds the Smart+ ad in the ad's ad group through /smart_plus/ad/get/, and uses the ad group's only Smart+ ad when no creative list names the ad.

materialType, tiktokItemId, videoId, name and operationStatus come from the Smart+ ad's creative_list. TikTok leaves out of that list the creatives it added on its own (creator content, authorized TikTok posts, Creative Library content) and lists each image of a carousel under its own material id, so those entries come back with the review verdict and null descriptive fields. TikTok returns no review timestamp; readAt is when Zernio read it.


PlatformsTikTok
GET
/v1/ads/{adId}/tiktok-smart-plus-review

Authorization

bearerAuth
AuthorizationBearer <token>

API key authentication: send your Zernio API key in the Authorization header, prefixed with Bearer.

In: header

Path Parameters

adId*string

Zernio ad id (24-char hex) or the TikTok ad id: the Smart+ ad id or the ad id of one of its creatives.

Response Body

application/json

application/json

application/json

application/json

import Zernio from '@zernio/node';const zernio = new Zernio({ apiKey: process.env.ZERNIO_API_KEY });const { data } = await zernio.adcampaigns.getTikTokSmartPlusAdReview({  path: {    adId: 'ad_abc123',  },});console.log(data);
{  "adId": "string",  "platform": "tiktok",  "platformAdId": "string",  "smartPlusAdId": "string",  "review": {    "reviewStatus": "approved",    "rawReviewStatus": "string",    "rejectReasons": [      "string"    ],    "passedLocations": [      "string"    ],    "appealStatus": "string",    "appealRejectReasons": [      "string"    ],    "rejections": [      {        "reasons": [          "string"        ],        "suggestion": "string",        "forbiddenPlacements": [          "string"        ],        "forbiddenAges": [          "string"        ],        "forbiddenLocations": [          "string"        ],        "content": {          "type": "string",          "text": "string",          "imageId": "string",          "videoId": "string",          "musicId": "string"        }      }    ]  },  "materials": [    {      "adMaterialId": "string",      "materialType": "spark_post",      "tiktokItemId": "string",      "videoId": "string",      "name": "string",      "operationStatus": "string",      "reviewStatus": "approved",      "rawReviewStatus": "string",      "rejectReasons": [        "string"      ],      "passedLocations": [        "string"      ],      "rejections": [        {          "reasons": [            "string"          ],          "suggestion": "string",          "forbiddenPlacements": [            "string"          ],          "forbiddenAges": [            "string"          ],          "forbiddenLocations": [            "string"          ],          "content": {            "type": "string",            "text": "string",            "imageId": "string",            "videoId": "string",            "musicId": "string"          }        }      ]    }  ],  "readAt": "2019-08-24T14:15:22Z"}
Was this page helpful?

Read the platform's review verdict for an ad

Shows whether the platform approved an ad, where it may not deliver, and every rejection reason, without re-enabling a paused ad. Reads the ad's review verdict from the platform now: whether it was approved, where it may not deliver, and every rejection reason with TikTok's suggestion and the piece of content it refers to. Read-only, so it works on a paused ad without re-enabling it. **Google**: reads `ad_group_ad.policy_summary` live. `approvalStatus` and `reviewStatus` are Google's verbatim (`approvalStatus`: APPROVED, APPROVED_LIMITED, AREA_OF_INTEREST_ONLY, DISAPPROVED, UNKNOWN; `reviewStatus`: REVIEW_IN_PROGRESS, REVIEWED, UNDER_APPEAL, ELIGIBLE_MAY_SERVE); `approved` is true for the three approved statuses, false for DISAPPROVED, null otherwise. `policyTopics` carries every policy topic entry with its `type` (PROHIBITED, LIMITED, ...) and Google's `evidences` and `constraints` verbatim; each PROHIBITED topic is also listed in `rejections` (reason = the topic). The `forbidden*` arrays are TikTok-only and always empty on Google. **Meta** (Facebook and Instagram ads): reads the Ad's `ad_review_feedback`, `effective_status` and `issues_info` live. `reviewStatus` is Meta's `effective_status` verbatim (ACTIVE, PAUSED, PENDING_REVIEW, DISAPPROVED, PREAPPROVED, WITH_ISSUES, IN_PROCESS, ...); `approved` is true for ACTIVE and PREAPPROVED, false for DISAPPROVED, null otherwise. `reviewFeedback` carries Meta's feedback verbatim: `global` (reason -> explanation) and `placementSpecific` (placement -> reason -> explanation). Each global reason is listed in `rejections`, and so is each placement-specific reason, with that placement in its `forbiddenPlacements`; the review's `forbiddenPlacements` lists every placement with feedback. When Meta returns no feedback (usually an ad in review or approved everywhere), the status comes back with empty `rejections` and empty `reviewFeedback` maps; an ACTIVE ad rejected on one placement still carries that placement's feedback. A deleted ad answers 404. `issues` is Meta's `issues_info` verbatim. `forbiddenAges`, `forbiddenLocations` and `forbiddenOperatingSystems` are always empty on Meta. TikTok uses `/ad/review_info/`. Platforms other than TikTok, Google and Meta return 501. On TikTok, use it alongside the ad's `platformStatus`: TikTok reports `AD_STATUS_AUDIT` while the ad is in review and `AD_STATUS_AD_PRE_ONLINE` once it passed and is about to deliver (both map to `status: pending_review`); `AD_STATUS_AUDIT_DENY` maps to `rejected`.

List shared budgets

Lists a Google Ads account's shared budgets and how many campaigns draw from each. Lists the Google Ads customer's shared campaign budgets (`campaign_budget.explicitly_shared` = true, not removed), with how many campaigns use each. Move a campaign onto one with `sharedBudgetId` on PUT /v1/ads/campaigns/{campaignId}. Google only; other platforms return 501.