> ## Documentation Index
> Fetch the complete documentation index at: https://docs.datalyr.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Access levels and approvals

> The four ads access levels, who can hold each, and who approves a request an agent can't make on its own.

Each agent connection has one ads level. The level decides what a yes in chat does. When
the connection can't act on its own, the yes becomes an approval link instead.

## The four levels

| Level | Scope | What it allows |
| - | - | - |
| Read-only | `datalyr:read` | Read ad accounts, campaigns, ad sets, files, settings and activity. Nothing else. |
| Propose | `datalyr:propose:ads` | Preview anything. Every create or change becomes an approval link. |
| Create paused | `datalyr:write:ads` | Upload files. Create paused campaigns, ad sets and ads, budgets included. Pause, lower budgets, archive and give new content to what agents made. Stop agent ads. |
| Publish live | `datalyr:publish:ads` | Everything in Create paused, plus turning things on, raising budgets, deleting, and changing objects people made |

Every level creates paused. Publish live turns things on only within the rules on
[Turn ads on within spend limits](/agent-ads/live-ads-and-spend-limits).

## Who can hold a level

| Who | Rule |
| - | - |
| A member over MCP | Read-only, whatever they grant on the consent page |
| An admin over MCP | Propose or Create paused. Publish live acts as Create paused, because only the owner can start spend from chat. |
| The owner over MCP | Any level |
| An API key | Any level, granted by the owner. A key never turns ads on, raises a budget or deletes on its own: those always go to the owner for approval. |

## Set the level

| Agent | Where |
| - | - |
| Claude, ChatGPT, Claude Code, Codex | The DATALYR consent page when you connect. Keep the ads row you want and untick the others. See [Create your first agent ad](/agent-ads/get-started#pick-the-access-level). |
| An API key | **Settings → API**. Create a named key and pick the level under **Ads**. Only the owner can pick a level above Read-only. See [API keys](/account/api-keys). |

**Settings → Ad publishing → Agents** lists every key and MCP connection with its level.

## What a yes does

The first three columns assume the connection holds Create paused or Publish live.

| Request | Owner in chat | Admin in chat | API key | Propose |
| - | - | - | - | - |
| Create paused ads, ad sets or campaigns | Creates | Creates | Creates once the platform is on, else approval | Approval |
| Pause, lower a budget, archive, new content for a paused ad | Applies to agent-made objects | Applies to agent-made objects | Applies to agent-made objects | Approval |
| The same on objects people made | Applies with Publish live | Refused | Applies with Publish live | Refused |
| Turn on, raise a budget, new content for a running ad | Applies with Publish live, live ads on and within limits, else approval | Approval | Approval | Approval |
| Delete what agents made | Applies with Publish live, else approval | Approval | Approval | Approval |

When the platform is off for agents, an owner's or admin's confirmed create turns it on
for the whole workspace. The preview says so first.

## Who approves

| Request | Who can approve |
| - | - |
| Create ads, an ad set or a campaign | An owner or admin. Approving also turns that platform on for agents. |
| Pause, lower a budget, archive, new content for a paused ad | An owner or admin |
| Turn on, raise a budget, new content for a running ad | The owner only |
| Delete | The owner only |

An admin who opens an owner-only request sees: `Only the workspace owner can approve turning ads on, raising budgets or deleting.`

## Approve a request

<Steps>
  <Step title="Open the link">
    Open the `approval_url` the agent gave you. Or open **Settings → Ad publishing**. Requests wait under **Waiting for approval**.
  </Step>

  <Step title="Sign in">
    Sign in to DATALYR as an owner or admin of the workspace.
  </Step>

  <Step title="Read the request">
    Read the summary, the ads and their previews. For Meta ads, open **All placements**.
  </Step>

  <Step title="Decide">
    Select **Approve** or **Deny**.
  </Step>
</Steps>

With more than one request waiting, **Approve all** approves them one after another. It
first shows how many paused ads it creates and which platforms it turns on.

| Approval rule | Detail |
| - | - |
| Expiry | The link works for 24 hours. After that, ask the agent to preview again. |
| Waiting requests | At most 50 per workspace. The agent gets `too_many_pending` above that. |
| Exactly what was previewed | DATALYR re-reads the objects when you approve. If a status, budget or the new spend changed, nothing happens and the agent must preview again. |
| Limits and the live switch | The owner's approval applies even above a spend limit or with live ads off. It applies once and never switches live ads on. |
| Deny | Nothing is created or changed. |

The agent sees the outcome with `get_ad_status`.

## Verify

1. Open **Settings → Ad publishing**.
2. Under **Agents**, confirm each connection shows the level you expect.
3. Open the **Activity** tab.
4. Confirm each approval shows who requested it and who decided it.

## Next

* [Turn ads on within spend limits](/agent-ads/live-ads-and-spend-limits): the live ads switch and the three limits.
* [Change ads after launch](/agent-ads/change-ads): pause, budgets, new content, archive and delete.
* [Agent access](/api-reference/agents): every scope across DATALYR.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.