Concepts
Review
Approve, request changes or reject campaign ads, with a reason your team sees in the editor.
Every ad built in a campaign has a review_status. Your team sees the same status in the StaticAds.ai editor, so decisions made through the API, the editor or an assistant stay in one place. Scope: image_ads:write.
| Status | Meaning |
|---|---|
generated | Just built, not yet reviewed |
ready_for_review | Waiting for a decision |
approved | Good to launch |
needs_changes | Keep, but edit first |
rejected | Don't use |
Set the status
POST /v1/image-ads/review takes up to 50 ad ids, one status and an optional reason.
const { data } = await sal("/v1/image-ads/review", {
method: "POST",
body: {
image_ad_ids: ["ia_7e3c9a1b5d2f4068", "ia_1f5b8d3a6c9e2047"],
status: "needs_changes",
reason: "The headline covers the hoodie's logo. Move it up.",
},
});
// data.updated [{ image_ad_id, review_status }]
// data.skipped [{ image_ad_id, reason }] ads not in a campaign- It acts only on the ids you send. To approve some ads of a batch and reject the rest, send two calls.
reasonis saved as a comment on the ad, visible to your team in the editor. Use it forneeds_changesandrejected.- Every change is recorded in the ad's history. Set
ready_for_reviewto undo a decision.
Read it back
review_status is on every image ad, and campaigns count each status in ad_counts:
const { data: toFix } = await sal(`/v1/campaigns/${campaignId}/ads?review_status=needs_changes`);