> ## Documentation Index
> Fetch the complete documentation index at: https://docs.apostra.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Creative approval

> Understand the two approval gates a creative goes through after a media buy is forwarded, and how to check status and respond to rejections

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:

| `storefrontReviewStatus` | What it means                                              |
| ------------------------ | ---------------------------------------------------------- |
| `pending`                | Creative is in the publisher's review queue                |
| `approved`               | Publisher accepted the creative                            |
| `rejected`               | Publisher declined the creative                            |
| `revoked`                | A previously-approved creative was pulled by the publisher |

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. Apostra 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:

```json theme={null}
{
  "mediaBuys": [
    {
      "mediaBuyId": "mb_abc123",
      "creatives": [
        {
          "creativeId": "cr_xyz456",
          "name": "Summer Spot 30s",
          "storefrontReviewStatus": "approved",
          "sourceSyncStatus": [
            {
              "agentId": "1662",
              "sourceId": "publisher-ad-server",
              "approvalStatus": "approved",
              "rejectionReason": null
            }
          ]
        }
      ]
    }
  ]
}
```

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.

<Note>
  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.
</Note>

### 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.

## Related

* [Bring your own creative](/v2/buyer/creatives/bring-your-own-creative) -- upload
  a finished asset and route it to a campaign
* [Creative tasks](/v2/buyer/creatives/tasks/index) -- manifest task reference
* [Creative reviews (seller)](/v2/storefront/creative-reviews/overview) -- how
  publisher operators work the review queue
