# POST /v1/projects/:projectId/ads/:platform/creatives/:adsContentId/unlock (/docs/api/reference/ads/unlock-creative)



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

A creative previously flagged by Layers' safety pass (`ads.creative.flagged` webhook fires with `flagged_reason`) is locked from further push attempts. This endpoint releases the lock so the creative can re-enter rotation.

The lock exists because re-running an already-rejected creative wastes platform-side reviews and can pattern-flag the customer's ad account. Partners should inspect `flagged_reason` and remediate (re-render the creative, edit the caption) before unlocking — re-pushing an unfixed creative typically gets re-flagged by Meta / TikTok at the platform's own review.

## Body [#body]

<Parameters
  title="Body (optional)"
  rows="[
  { name: 'comment', type: 'string', description: 'Free-form note for the audit log explaining why the creative is being unlocked.' },
]"
/>

## Response [#response]

```json
{
  "adsContentId": "adc_6f5d4c3b...",
  "unlockedAt": "2026-05-08T17:32:11Z",
  "verdictId": "ver_01HZX9..."
}
```

The matching `ads.creative.unlocked` webhook fires.

## Errors [#errors]

| Code              | When                                      |
| ----------------- | ----------------------------------------- |
| `NOT_FOUND`       | Creative not flagged or already unlocked. |
| `FORBIDDEN_SCOPE` | Key lacks `ads:write:creative`.           |

## See also [#see-also]

* [Webhooks — `ads.creative.flagged` / `ads.creative.unlocked`](/docs/api/operational/webhooks)
* [Ads write model](/docs/api/concepts/ads-write-model)
