Ads · Ad Campaigns
Returns the review status of every TikTok Smart+ ad of an advertiser, one page at a time. Works with TikTok Ads.
https://api.pozy.ai/v1/ads/tiktok-smart-plus-reviewsGuide: TikTok Ads
Request
Send your API key as Authorization: Bearer pz_live_.... Read-only keys can call it. Keys with the ads resource group disabled get 403 resource_group_disabled. Authentication
Query parameters
| Name | Type | Notes |
|---|---|---|
accountIdrequired | string | |
adAccountIdrequired | string | |
includeDeleted | boolean | Default false |
maxAgeSeconds | integer | Default 3600600 to 86400 |
page | integer | Default 1At least 1 |
pageSize | integer | Default 5001 to 1000 |
Example
curl -X GET "https://api.pozy.ai/v1/ads/tiktok-smart-plus-reviews?accountId=696e0b682d0a31188e7a2ba9&adAccountId=666219aad7bab67ace411e4f" \
-H "Authorization: Bearer $POZY_API_KEY"const res = await fetch("https://api.pozy.ai/v1/ads/tiktok-smart-plus-reviews?accountId=696e0b682d0a31188e7a2ba9&adAccountId=666219aad7bab67ace411e4f", {
headers: { Authorization: `Bearer ${process.env.POZY_API_KEY}` },
});
const data = await res.json();
if (!res.ok) throw new Error(data?.error ?? `Request failed with status ${res.status}`);
console.log(data);import os
import requests
resp = requests.get(
"https://api.pozy.ai/v1/ads/tiktok-smart-plus-reviews",
headers={"Authorization": f"Bearer {os.environ['POZY_API_KEY']}"},
params={
"accountId": "696e0b682d0a31188e7a2ba9",
"adAccountId": "666219aad7bab67ace411e4f",
},
timeout=30,
)
resp.raise_for_status()
print(resp.json())Response
200 on success
adAccountIdstringincludeDeletedbooleanmaxAgeSecondsintegerpageintegerpageSizeintegertotalPagesintegertotalSmartPlusAdsintegerlistingobjectreadAtstring (date-time)sourcestringOne of
fresh,fallback.errorobjectCan be null.
2 child fields
tiktokCodeintegerCan be null.
messagestring
reviewErrorobjectCan be null.
tiktokCodeintegerCan be null.
messagestring
countsobjectfreshintegerstaleintegerpendingintegerfailedinteger
oldestReadAtstring (date-time)Can be null.
itemsarray of objectsmartPlusAdIdstringadGroupIdstringCan be null.
campaignIdstringCan be null.
reviewobjectCan be null.
7 child fields
reviewStatusstringOne of
approved,partially_approved,rejected,unknown.rawReviewStatusstringCan be null.
rejectReasonsarray of stringpassedLocationsarray of stringappealStatusstringCan be null.
appealRejectReasonsarray of stringrejectionsarray of object6 child fields
reasonsarray of stringsuggestionstringCan be null.
forbiddenPlacementsarray of stringforbiddenAgesarray of stringforbiddenLocationsarray of stringcontentobjectCan be null.
5 child fields
typestringCan be null.
textstringCan be null.
imageIdstringCan be null.
videoIdstringCan be null.
musicIdstringCan be null.
materialsarray of object11 child fields
adMaterialIdstringmaterialTypestringOne of
spark_post,video,carousel,catalog_carousel. Can be null.tiktokItemIdstringCan be null.
videoIdstringCan be null.
namestringCan be null.
operationStatusstringCan be null.
reviewStatusstringOne of
approved,partially_approved,rejected,unknown.rawReviewStatusstringCan be null.
rejectReasonsarray of stringpassedLocationsarray of stringrejectionsarray of object6 child fields
reasonsarray of stringsuggestionstringCan be null.
forbiddenPlacementsarray of stringforbiddenAgesarray of stringforbiddenLocationsarray of stringcontentobjectCan be null.
5 child fields
typestringCan be null.
textstringCan be null.
imageIdstringCan be null.
videoIdstringCan be null.
musicIdstringCan be null.
readAtstring (date-time)
failedSmartPlusAdsarray of objectsmartPlusAdIdstringadGroupIdstringCan be null.
campaignIdstringCan be null.
errorobject2 child fields
tiktokCodeintegerCan be null.
messagestring
refusedAtstring (date-time)Can be null.
incompletebooleanallFreshbooleanpendingSmartPlusAdIdsarray of stringretryAfterSecondsintegerCan be null.
refreshStatestringOne of
ok,paused,refused,error.
{
"adAccountId": "666219aad7bab67ace411e4f",
"includeDeleted": true,
"maxAgeSeconds": 1,
"page": 1,
"pageSize": 1,
"totalPages": 42,
"totalSmartPlusAds": 42,
"listing": {
"readAt": "2026-10-02T09:00:00.000Z",
"source": "fresh",
"error": {
"tiktokCode": 1,
"message": "Hello from Pozy"
}
},
"reviewError": {
"tiktokCode": 1,
"message": "Hello from Pozy"
},
"counts": {
"fresh": 1,
"stale": 1,
"pending": 1,
"failed": 1
},
"oldestReadAt": "2026-10-02T09:00:00.000Z",
"items": [
{
"smartPlusAdId": "6e8904b1093cf559921b85fe",
"adGroupId": "6ad180be375f36f2c328e52b",
"campaignId": "65a3737dd8b11ea61f199e6e",
"review": {
"reviewStatus": "approved",
"rawReviewStatus": "active",
"rejectReasons": [
"string"
],
"passedLocations": [
"string"
],
"appealStatus": "active",
"appealRejectReasons": [
"string"
],
"rejections": [
{
"reasons": [
"string"
],
"suggestion": "string",
"forbiddenPlacements": [
"string"
],
"forbiddenAges": [
"string"
],
"forbiddenLocations": [
"string"
],
"content": {
"type": "string",
"text": "Hello from Pozy",
"imageId": "6d4f8076f189e3caf170dc65",
"videoId": "65fd297a0da74ab358dd11e9",
"musicId": "6f984cc4c4966c468da0cfd5"
}
}
]
},
"materials": [
{
"adMaterialId": "6dbb84467421295a1ae43473",
"materialType": "spark_post",
"tiktokItemId": "6194c6395799073f3c47a197",
"videoId": "65fd297a0da74ab358dd11e9",
"name": "Acme",
"operationStatus": "active",
"reviewStatus": "approved",
"rawReviewStatus": "active",
"rejectReasons": [
"string"
],
"passedLocations": [
"string"
],
"rejections": [
{
"reasons": [
"string"
],
"suggestion": "string",
"forbiddenPlacements": [
"string"
],
"forbiddenAges": [
"string"
],
"forbiddenLocations": [
"string"
],
"content": {
"type": "string",
"text": "Hello from Pozy",
"imageId": "6d4f8076f189e3caf170dc65",
"videoId": "65fd297a0da74ab358dd11e9",
"musicId": "6f984cc4c4966c468da0cfd5"
}
}
]
}
],
"readAt": "2026-10-02T09:00:00.000Z"
}
],
"failedSmartPlusAds": [
{
"smartPlusAdId": "6e8904b1093cf559921b85fe",
"adGroupId": "6ad180be375f36f2c328e52b",
"campaignId": "65a3737dd8b11ea61f199e6e",
"error": {
"tiktokCode": 1,
"message": "Hello from Pozy"
},
"refusedAt": "2026-10-02T09:00:00.000Z"
}
],
"incomplete": true,
"allFresh": true,
"pendingSmartPlusAdIds": [
"string"
],
"retryAfterSeconds": 1,
"refreshState": "ok"
}Errors
Errors use one shape: { error, type, code, param?, details? }. The ones you are most likely to see here:
| 400 | invalid_request_error | A parameter or body field is missing or invalid. param names it. |
| 401 | authentication_error | The API key is missing, revoked or expired. |
| 403 | permission_error | The key is scoped to other profiles or has this resource group disabled. |
| 429 | rate_limit_error | Too many requests this minute. Wait for Retry-After seconds. |
Every code is listed in Errors.