Skip to main content
After a buyer maps a creative to a placement and the media buy is forwarded to a publisher, the publisher may need to review it before it goes live. There are two separate gates a creative can move through, and each surfaces its own status on get_campaign.

The two approval gates

1. Storefront operator review

When a publisher has configured their storefront for manual creative review (creativeApproval: manual), each submitted creative lands in the publisher’s queue. Their operations team reviews it and records a decision. The review status is returned as storefrontReviewStatus on each creative entry: When storefrontReviewStatus is null, the publisher runs automatic creative review (creativeApproval: auto) and there is no manual gate.

2. Source system review

After a creative passes operator review (or when the storefront uses automatic review), the platform syncs it to the publisher’s ad server. The ad server may then accept or reject it independently. The result appears per-agent on sourceSyncStatus[]. An empty sourceSyncStatus[] means the creative has not yet been synced to any source.

Checking approval status

Call get_campaign and read mediaBuys[].creatives[] on the relevant media buy. Both review gates appear side by side on each creative entry:
A creative must clear both gates before it is eligible to serve: the publisher must approve it (or skip the queue via auto-review), and the ad server must accept it.

What to do if a creative is rejected

Storefront rejection (storefrontReviewStatus: "rejected")

The publisher’s operations team declined the creative. Check the reviewer note that was returned in the webhook callback or is visible in the publisher’s review queue. Fix the creative, re-upload it as a new manifest, and re-map it to the campaign.
Remapping a creative to a new placement does not re-submit it for storefront review. If a revised creative needs approval, re-upload it as a new manifest and map the new one.

Source system rejection (sourceSyncStatus[].approvalStatus indicates rejection)

The publisher’s ad server declined the creative after operator review. Read sourceSyncStatus[].rejectionReason for the reason the source returned. Fix the creative based on that feedback, re-upload, and re-map. A creative can be approved by the storefront operator but still fail at the source if the ad server applies its own rules (format constraints, brand safety filters, or trafficking restrictions). Treat a source rejection as its own distinct problem, separate from the operator review decision.