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

# AuthorityDenied

> The principal holds no grant that covers this action (SPEC-v0.3 §4.3).

`ctrlrun.AuthorityDenied` — class, defined at `src/ctrlrun/errors.py:40`

```python theme={null}
from ctrlrun import AuthorityDenied
```

```python theme={null}
class AuthorityDenied(ActionDenied)
    def __init__(message: str | None = None, *, reason: str, action_id: str | None = None, grant_id: str | None = None, delegation_id: str | None = None)
```

The principal holds no grant that covers this action (SPEC-v0.3 §4.3).

A subclass of `ActionDenied`, because an authority denial *is* the action being denied and
an agent loop's existing `except ActionDenied` should keep working. `reason` is one of the
closed set in §4.3 — `no_authority`, `authority_constraint`, `authority_expired`,
`authority_escalation`, `authority_revoked`, `authority_unreadable` — never a grant id: a
grant may legally be named `no_authority`, and evidence that can be spoofed by naming a
grant is not evidence. The id travels in `grant_id`.

## Next

* [Python API index](/reference/api/index).
* [Get started](/get-started/quickstart) · [Why](/why).


## Related topics

- [Errors](/reference/errors.md)
- [AuthorityEscalation](/reference/api/AuthorityEscalation.md)
- [Fail closed](/concepts/fail-closed.md)
- [The Agent Control Standard](/ACS.md)
- [Python API](/reference/api/index.md)
