---
title: PortForwardReport
description: What a stopped port-forward did.
---

```python
@final
class PortForwardReport
```

What a stopped port-forward did.

## Constructor

`PortForwardReport` declares no `__new__` or `__init__`, so it is not constructed directly: an instance comes back from another call in this package.

## Properties

### `ended`

```python
ended: list[ConnectionEnd]
```

Each connection that didn't end clean, in the order they ended.

### `proxy_token_mints`

```python
proxy_token_mints: int
```

Proxy tokens the session minted by the time the forward stopped.

### `refused`

```python
refused: int
```

Exchanges the endpoint proxy refused, a 403 or a 502 among them.

### `served`

```python
served: int
```

Connections accepted.

### `stopped`

```python
stopped: str
```

Why it stopped: `"stopped"`, `"limit"`, or `"listener-failed: <why>"`.

### `upgrades`

```python
upgrades: int
```

Exchanges that upgraded, a WebSocket among them.

## Special methods

### `__repr__`

```python
def __repr__() -> str
```

## Provenance

This page is generated from `bindings/microvms-py/microvms.pyi` by Griffe 2.3.0, run from `site/scripts/gen-reference.mjs` on every `pnpm run sync`, so an edit made here is overwritten by the next run.

To change the page, change the doc comment in the binding's Rust source, then regenerate the declarations with `mise run stubs`. `mise run stubs:check` fails when the committed file no longer matches the source.