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

# ApprovalProvider

> How a human is asked, and how the answer comes back (SPEC-v0.1 §4.3).

`ctrlrun.ApprovalProvider` — class, defined at `src/ctrlrun/approval.py:304`

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

```python theme={null}
class ApprovalProvider(Protocol)
    def request(action: Action, ttl: timedelta) -> ApprovalRequest
    def wait(request_id: str, timeout: timedelta | None) -> Approval | None
```

How a human is asked, and how the answer comes back (SPEC-v0.1 §4.3).

`runtime_checkable` so a test can assert the shipped providers still answer to this
shape; it checks method names only, which is why the static check matters more.

## Next

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


## Related topics

- [InterruptApprovalProvider](/reference/api/InterruptApprovalProvider.md)
- [WebhookApprovalProvider](/reference/api/WebhookApprovalProvider.md)
- [Python API](/reference/api/index.md)
- [ScriptedApprovalProvider](/reference/api/ScriptedApprovalProvider.md)
- [LocalApprovalProvider](/reference/api/LocalApprovalProvider.md)
