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

# StateStore

> Durable state behind a `Control` (SPEC-v0.1 §5.3): approvals, effects, evidence.

`ctrlrun.StateStore` — class, defined at `src/ctrlrun/state.py:640`

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

```python theme={null}
class StateStore(ApprovalStore, Protocol)
    def reserve_effect(effect_key: str, action_id: str, lease: timedelta = DEFAULT_LEASE, charges: tuple[Charge, ...] = ()) -> Reservation
    def consume_approval_and_reserve(approval_id: str, action_hash: str, effect_key: str, action_id: str, lease: timedelta = DEFAULT_LEASE, charges: tuple[Charge, ...] = ()) -> tuple[Approval, Reservation]
    def consumptions(*, grant_id: str | None = None, metric: str | None = None, since: datetime | None = None, effect_key: str | None = None) -> tuple[Consumption, ...]
    def begin_execution(effect_key: str, action_id: str) -> None
    def commit_effect(effect_key: str, action_id: str, result: Any) -> None
    def fail_effect(effect_key: str, action_id: str, error: str) -> None
    def mark_ambiguous(effect_key: str, action_id: str, error: str) -> None
    def resolve_effect(effect_key: str, state: EffectState, resolver: str) -> EffectRecord
    def get_effect(effect_key: str) -> EffectRecord | None
    def list_effects(state: EffectState | None = None) -> tuple[EffectRecord, ...]
    def extend_lease(effect_key: str, action_id: str, until: datetime) -> None
    def find_granted_approval(action_hash: str) -> Approval | None
    def find_denied_request(action_hash: str) -> ApprovalRequest | None
    def hold_continuation(action: Action, effect_key: str, continuation: str, until: datetime) -> int
    def take_continuation(continuation: str) -> HeldContinuation
    def continuation_rounds(effect_key: str) -> int
    def approvals_for(action_hash: str) -> tuple[ApprovalRecord, ...]
    def put_delegation(record: DelegationRecord) -> None
    def get_delegation(delegation_id: str) -> DelegationRecord | None
    def delegations_for(parent_id: str) -> tuple[DelegationRecord, ...]
    def delegations(*, include_revoked: bool = False) -> tuple[DelegationRecord, ...]
    def revoke_delegation(delegation_id: str, *, by: str | None, at: datetime) -> bool
    def append_event(event: Event) -> Event
    def put_receipt(receipt: Receipt) -> Receipt
    def chain_head() -> tuple[int, str] | None
    def put_anchor(anchor: Anchor) -> None
    def anchors() -> tuple[Anchor, ...]
    def checkpoint() -> tuple[int, str] | None
    def put_checkpoint(checkpoint: Checkpoint) -> None
    def put_hold(hold: Hold) -> None
    def holds() -> tuple[Hold, ...]
    def release_hold(hold_id: str, *, by: str, at: datetime) -> None
    def pruning() -> AbstractContextManager[None]
    def delete_prefix(through: int, effect_keys: Sequence[str]) -> tuple[int, int]
    def events() -> tuple[Event, ...]
    def receipts() -> tuple[Receipt | UnreadableReceipt, ...]
    def close() -> None
```

Durable state behind a `Control` (SPEC-v0.1 §5.3): approvals, effects, evidence.

## Next

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


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