POST /v1/projects/:projectId/ads/:platform/ads/:adId/creative
Push a new creative to an existing ad.
POST
/v1/projects/:projectId/ads/{platform}/ads/:adId/creativePhase 1stable
- Auth
- Bearer
- Scope
- ads:write:creative
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
adsContentIdstringrequiredThe Layers-scored creative to push. From [`GET …/ads-content`](/docs/api/reference/metrics/ads-content).captionstringoptionalOverride the default caption (Layers selects from the source content_container otherwise).
Authority: gated by the creative axis.
Companion endpoints
| Endpoint | Method | Purpose |
|---|---|---|
POST …/ads/:adId/creative | POST | Push a new creative (this page). |
PUT …/ads/:adId/creative | PUT | Replace the active creative. |
DELETE …/ads/:adId/creative | DELETE | Prune underperforming creative. |
POST …/creatives/:adsContentId/unlock | POST | Unlock a flagged creative for retry. |
Errors
| Code | When |
|---|---|
AUTHORITY_DENIED | creative axis is off. |
CREATIVE_FLAGGED | adsContentId was previously flagged by Layers' safety pass — see POST …/creatives/:id/unlock. |