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 decision belongs to the immutable creative content version, not to one media buy. The same unchanged creative can reuse that decision on later buys. Changing the reviewed content creates a new review version and requires a new decision, even if the buyer reuses the same creative identifier. 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. For an exact own-supply campaign managed by the Media Company that owns the Storefront, the authenticated operator’s upload is itself the Storefront decision. Interchange does not create a second review task for that operator, even when the Storefront’s external-buyer setting is manual. This exception does not apply to external or sponsored buyers, and it does not approve the Creative in the source system.

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 source on sourceSyncStatus[]. This source gate includes provider review such as Google Ad Manager creative approval. It is separate from the storefront operator decision. Embedded sales agents and other adapters transport the request, but they do not own or replace either approval decision. An empty sourceSyncStatus[] means the creative has not yet been synced to any source. approvalStatus: "pending" means the source has not yet returned terminal approval. A completed request, an accepted asynchronous task, or assignment to only some of the requested packages is not enough to report the creative as approved. sourceSyncStatus[].agentId is the legacy internal AdCP agent database ID, preserved for compatibility. sourceSyncStatus[].sourceId is the public AdCP agent or inventory source identifier captured for that sync route. For a legacy agent route, this is the protocol-level agent ID, never the numeric database ID. It is null only when retained history predates a captured public source identity.

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 every required source route must explicitly approve the creative with the current media-buy package assignments. Status is derived separately for each media buy, so using the same creative on another buy cannot make that new assignment appear approved.

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.