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

# ApprovalAnswer

> A human's answer, and who gave it (SPEC-v0.5 §2.2, §3.4).

`ctrlrun.ApprovalAnswer` — class, defined at `src/ctrlrun/adapter.py:157`

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

```python theme={null}
class ApprovalAnswer
    def __init__(granted: bool, approver: str, approved_arguments: Mapping[str, Any] | None = None)
```

A human's answer, and who gave it (SPEC-v0.5 §2.2, §3.4).

`approver` names a **channel** wherever the framework's primitive does not identify a
person -- `"langgraph:interrupt"`, in the same register as v0.1's `"cli:local"`. It is what
`grant_approval` writes on the record, and from there what reaches `APPROVAL_CONSUMED` and
the receipt's `approver` field. Authenticating the approver is not in scope (SPEC-v0.3 §13),
so no document may describe this field as *who* approved.

`approved_arguments` are the arguments the answer was given against, as the adapter
recovered them from its framework's own record of it. Required where the interrupt declares
`carries_approved_arguments`; `None` only where it does not. **Never a copy of
`PendingApproval.arguments`**: handing back exactly what you were given makes every comparison
trivially pass, which is manufacturing the check.

## Next

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


## Related topics

- [Adapters](/adapters.md)
- [Python API](/reference/api/index.md)
- [Architecture](/ARCHITECTURE.md)
- [ApprovalProvider](/reference/api/ApprovalProvider.md)
- [Approvals in Slack via webhook](/cookbook/slack-approvals.md)
