# client.blocks.versions

> client.blocks.versions — the blocks.versions operations.

`client.blocks.versions` — the `blocks.versions` operations.

On `AsyncKindgi` every method is the same, awaited.

## `client.blocks.versions.list()`

```python signature
list(
    block_id: str | UUID,
    /,
    *,
    limit: int | None = None,
    cursor: str | None = None,
    include_tombstoned: bool | None = None,
    timeout: float | None = None,
) -> BlockCollectionPage
```

List versions of a data block. `GET /v1/blocks/{blockId}/versions`

Newest published first. `?includeTombstoned=true` includes unregistered versions, each with `unregisteredAt`.

## `client.blocks.versions.get()`

```python signature
get(block_id: str | UUID, version: str, /, *, timeout: float | None = None) -> Block
```

Fetch a specific data block version. `GET /v1/blocks/{blockId}/versions/{version}`

An unregistered version is returned too, with `unregisteredAt`.

## `client.blocks.versions.unregister()`

```python signature
unregister(
    block_id: str | UUID,
    version: str,
    /,
    *,
    idempotency_key: str | None = None,
    timeout: float | None = None,
) -> UnregisterBlockResult
```

Unregister a data block version. `POST /v1/blocks/{blockId}/versions/{version}/unregister`

Soft: no range picks it any more, but the agent versions that pin it keep running it, and GET still reads it. Needs `write` on the project.

## `client.blocks.versions.reinstate()`

```python signature
reinstate(
    block_id: str | UUID,
    version: str,
    /,
    *,
    idempotency_key: str | None = None,
    timeout: float | None = None,
) -> ReinstateBlockResult
```

Reinstate an unregistered data block version. `POST /v1/blocks/{blockId}/versions/{version}/reinstate`

Unchanged, as published. Idempotent. Needs `write` on the project.
