# PATCH /v1/layers/:layerId/optimizer/write-classes (/docs/api/reference/ads/optimizer-write-classes)



<Endpoint method="PATCH" path="/v1/layers/:layerId/optimizer/write-classes" scope="ads:write:policy" phase="1" />

Layers' optimizer evaluates many write classes (creative push/replace, targeting, schedule, structural budget tweaks, etc.). At the org level these are gated by GrowthBook flags — too coarse for partners running many projects per org.

This endpoint exposes per-layer overrides. Each flag in the body sets a Boolean on `project_layers.config.optimizer` for one specific write class.

## Body [#body]

<Parameters
  title="Body (all optional)"
  rows="[
  { name: 'enable_targeting', type: 'boolean', description: 'Allow optimizer to PATCH adset targeting.' },
  { name: 'enable_schedule', type: 'boolean', description: 'Allow optimizer to PATCH adset schedule / dayparts.' },
  { name: 'enable_structural', type: 'boolean', description: 'Allow optimizer to create/pause/delete campaigns and adsets.' },
]"
/>

The optimizer reads per-layer flags first, falling back to the org-level GrowthBook flag when a per-layer flag is unset.

## Request [#request]

```bash
curl -X PATCH https://api.layers.com/v1/layers/$LAYER_ID/optimizer/write-classes \
  -H "Authorization: Bearer $LAYERS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "enable_targeting": true,
    "enable_schedule": false,
    "enable_structural": false
  }'
```

## See also [#see-also]

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