# POST /v1/projects/:projectId/ads/:platform/ads/:adId/creative (/docs/api/reference/ads/push-creative)



<Endpoint method="POST" path="/v1/projects/:projectId/ads/{platform}/ads/:adId/creative" scope="ads:write:creative" phase="1" />

Adds a creative to an ad's rotation. Layers resolves the source `adsContentId` to the platform-side asset (uploaded via the platform's media library or referenced by url).

## Body [#body]

<Parameters
  title="Body"
  rows="[
  { name: 'adsContentId', type: 'string', required: true, description: 'The Layers-scored creative to push. From [`GET …/ads-content`](/docs/api/reference/metrics/ads-content).' },
  { name: 'caption', type: 'string', description: 'Override the default caption (Layers selects from the source content_container otherwise).' },
]"
/>

Authority: gated by the &#x2A;*`creative`** axis.

## Companion endpoints [#companion-endpoints]

| Endpoint                                                                           | Method | Purpose                              |
| ---------------------------------------------------------------------------------- | ------ | ------------------------------------ |
| [`POST …/ads/:adId/creative`](/docs/api/reference/ads/push-creative)               | POST   | Push a new creative (this page).     |
| [`PUT …/ads/:adId/creative`](/docs/api/reference/ads/replace-creative)             | PUT    | Replace the active creative.         |
| [`DELETE …/ads/:adId/creative`](/docs/api/reference/ads/prune-creative)            | DELETE | Prune underperforming creative.      |
| [`POST …/creatives/:adsContentId/unlock`](/docs/api/reference/ads/unlock-creative) | POST   | Unlock a flagged creative for retry. |

## Errors [#errors]

| Code               | When                                                                                                                                         |
| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------- |
| `AUTHORITY_DENIED` | `creative` axis is `off`.                                                                                                                    |
| `CREATIVE_FLAGGED` | `adsContentId` was previously flagged by Layers' safety pass — see [`POST …/creatives/:id/unlock`](/docs/api/reference/ads/unlock-creative). |

## See also [#see-also]

* [Run ads as partner](/docs/api/guides/run-ads-as-partner)
* [Ads write model](/docs/api/concepts/ads-write-model)
