GET / PATCH /v1/projects/:projectId/ads/:platform/campaigns/:campaignId/authority
Read or update a campaign's bucket-mode authority block (creative / tactical / structural axes).
GET
/v1/projects/:projectId/ads/{platform}/campaigns/:campaignId/authorityPhase 1stable
- Auth
- Bearer
- Scope
- ads:read
PATCH
/v1/projects/:projectId/ads/{platform}/campaigns/:campaignId/authorityPhase 1stable
- Auth
- Bearer
- Scope
- ads:write:policy
Inspect or modify the per-campaign authority block. The block is the source of truth for whether subsequent writes against this campaign dispatch (auto), queue (draft), or are denied (off). Customer's layer-defaults block is the fallback when per-campaign authority isn't pinned.
A PATCH from a partner key flows through the gate identically to a customer-issued PATCH — partner cannot escalate past customer policy.
Path parameters
projectIdstring (uuid)requiredplatformstringrequiredOne of:meta,tiktok,applecampaignIdstringrequiredLayers campaign id (`cmp_…`).
GET response
{
"campaignId": "cmp_01HZX9...",
"platform": "meta",
"authority": {
"creative": "auto",
"tactical": "draft",
"structural": "off"
},
"source": "per_campaign",
"lastModifiedAt": "2026-05-08T14:32:11Z",
"lastModifiedBy": {
"actorType": "partner",
"actorOrganizationId": "org_2481fa5c-a404-44ed-a561-565392499abc",
"actorApiKeyId": "key_c2037bb9..."
}
}source is per_campaign (this row) or layer_defaults (inherited from the layer's defaults block).
PATCH body
Body
authorityobjectrequired`{ creative?, tactical?, structural? }`. Each axis: `off` | `draft` | `auto`.
curl -X PATCH https://api.layers.com/v1/projects/$PROJECT_ID/ads/meta/campaigns/$CAMPAIGN_ID/authority \
-H "Authorization: Bearer $LAYERS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"authority": { "creative": "auto", "tactical": "draft", "structural": "off" }
}'PATCH response
{
"campaignId": "cmp_01HZX9...",
"authority": { "creative": "auto", "tactical": "draft", "structural": "off" },
"verdictId": "ver_01HZX9..."
}Errors
| Code | When |
|---|---|
AUTHORITY_DENIED | Customer's layer-defaults policy refuses the requested axis change. |
FORBIDDEN_SCOPE | Key lacks ads:write:policy. |
NOT_FOUND | Campaign not in this org. |