# epoch-status (/docs/query/epoch-status)

Bundles tempo, the last epoch run, the chain-computed next start block, and
the remaining blocks/seconds (seconds use the chain's detected block time,
so they are correct on fast-blocks chains too). `pending_epoch_at` is the
block of an owner-triggered epoch, or None when none is pending.

**Category:** Epochs & timing

## Parameters [#parameters]

| Parameter | Type    | Description      |
| --------- | ------- | ---------------- |
| `netuid`  | integer | Subnet to query. |

## CLI [#cli]

```bash
btcli query epoch-status --netuid <integer> --json
```

## Python [#python]

Namespace method (autocomplete, signature help):

```python
import bittensor as bt

sub = bt.Subtensor()
result = sub.epochs.epoch_status(netuid=1)
```

Or dispatch by name, as an agent would:

```python
result = sub.read("epoch_status", netuid=1)
```

Async is the same surface awaited: `async with bt.Subtensor() as client:`.

## On-chain implementation [#on-chain-implementation]

* Storage [`SubtensorModule.Tempo`](/code/pallets/subtensor/src/lib.rs#L1952)
* Storage [`SubtensorModule.LastEpochBlock`](/code/pallets/subtensor/src/lib.rs#L1977)
* Storage [`SubtensorModule.BlocksSinceLastStep`](/code/pallets/subtensor/src/lib.rs#L2094)
* Storage [`SubtensorModule.PendingEpochAt`](/code/pallets/subtensor/src/lib.rs#L1983)
* Storage [`SubtensorModule.SubnetEpochIndex`](/code/pallets/subtensor/src/lib.rs#L1989)
* Runtime API [`SubnetInfoRuntimeApi.get_next_epoch_start_block`](/code/pallets/subtensor/src/coinbase/run_coinbase.rs#L1183-L1197)

Every file is browsable under [/code](/code) exactly as built into the runtime.
