# POST /v1/projects/:projectId/ads/:platform/disable-underperforming (/docs/api/reference/ads/disable-underperformers)



<Endpoint method="POST" path="/v1/projects/:projectId/ads/{platform}/disable-underperforming" scope="ads:write:lifecycle" phase="1" />

Same scoring + guardrails as the content-refresh workflow's first step, but skips the new-creative push. Use when you want a "kill the bad ones" pass without immediately replacing them.

## Body [#body]

<Parameters
  title="Body"
  rows="[
  { name: 'layerId', type: 'string', required: true },
  { name: 'dryRun', type: 'boolean', default: 'false', description: 'If true, returns the list of ads that *would* be disabled but does not dispatch.' },
]"
/>

Authority: each disable goes through the &#x2A;*`creative`** axis gate.

## Guardrails (cannot be overridden) [#guardrails-cannot-be-overridden]

* Min ad age: 3 days.
* Min spend: $5.00.
* Never disables `TOP_PERFORMER` or `HEALTHY` ads.
* Never leaves an adset/adgroup empty.

## See also [#see-also]

* [`POST …/content-refresh`](/docs/api/reference/ads/content-refresh)
* [Ads write model](/docs/api/concepts/ads-write-model)
