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

# Consumption

> One ledger row, as `consumptions()` hands it back (SPEC-v0.9 §3.3.3, §10).

`ctrlrun.state.Consumption` — class, defined at `src/ctrlrun/state.py:551`

```python theme={null}
from ctrlrun.state import Consumption
```

```python theme={null}
class Consumption
    def __init__(grant_id: str, metric: str, amount: int, effect_key: str, attempt: int, consumed_at: datetime, released_at: datetime | None = None)
```

One ledger row, as `consumptions()` hands it back (SPEC-v0.9 §3.3.3, §10).

`released_at` is `None` while the charge is held. Whether it is held **and why** is §7.2's
question, and the answer is a join through `get_effect` on `effect_key` rather than a column
here: the ledger deliberately has no state machine of its own (§4.1).

## Next

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


## Related topics

- [Approval binding](/docs/concepts/approval-binding.md)
- [Threat model](/docs/THREAT_MODEL.md)
- [Fail closed](/docs/concepts/fail-closed.md)
- [Claims](/docs/CLAIMS.md)
- [Authority YAML reference](/docs/reference/authority-yaml.md)
