# GET /v1/streams

List the streams

Every stream of the server, archived ones included, oldest first.

Takes a server key (`sk_…`, or `sk_test_…` on a test server) as a bearer token. TypeScript: `sendora.streams.list()`. Python: `sendora.streams.list()`.

## Responses

### 200 Every stream of the server, archived ones included, oldest first.

- `streams` (array of object, required)
  - `streamId` (string (uuid), required): What a send names as streamId.
  - `kind` ("transactional" | "broadcast" | "inbound", required): transactional for mail the recipient expects; broadcast for mail to many; inbound for mail the server receives.
  - `name` (string (at least 1, at most 100 characters), required): The name given at creation, unique within the server.
  - `isDefault` (boolean, required): The stream a send without a streamId goes on; one per server, transactional.
  - `createdAt` (string (date-time), required)
  - `archivedAt` (string (date-time) or null, required): Set once archived; the stream then takes no new messages.
  - `pausedAt` (string (date-time) or null, required): Set while Sendora has paused the stream after complaints; it takes no messages until support has resumed it.
  - `inboundAddress` (string or null, required): The address of an inbound stream, its id on inbound.sendora.se; mail sent there is received on the stream. Null on every other kind.
  - `contentRetentionDays` (integer (1 to 30) or null, required): How many days an inbound stream keeps received content, 1 to 30; null means the default of 30. Null on every other kind.

Example:

```json
{
  "streams": [
    {
      "streamId": "3d1a2b4c-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
      "kind": "transactional",
      "name": "transactional",
      "isDefault": true,
      "createdAt": "2026-09-15T12:00:00.000Z",
      "archivedAt": null,
      "pausedAt": null,
      "inboundAddress": null,
      "contentRetentionDays": null
    },
    {
      "streamId": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
      "kind": "transactional",
      "name": "Notices",
      "isDefault": false,
      "createdAt": "2026-09-16T12:00:00.000Z",
      "archivedAt": null,
      "pausedAt": null,
      "inboundAddress": null,
      "contentRetentionDays": null
    },
    {
      "streamId": "9b2f7c41-3e5d-4a8b-9c1e-2d3f4a5b6c7d",
      "kind": "inbound",
      "name": "Support",
      "isDefault": false,
      "createdAt": "2026-09-20T12:00:00.000Z",
      "archivedAt": null,
      "pausedAt": null,
      "inboundAddress": "9b2f7c413e5d4a8b9c1e2d3f4a5b6c7d@inbound.sendora.se",
      "contentRetentionDays": 14
    }
  ]
}
```

## Errors

Every error answers `error`, the code, and `message`, a sentence for a person. A code that adds fields is shown in full below the table.

| Code | Status | Meaning |
| --- | --- | --- |
| `unauthorized` | 401 | The key is missing, malformed or revoked. |
| `wrong_token_kind` | 403 | The key is of the other kind: a server key (sk_) where an account key (ak_) is needed, or the reverse. The message names the kind the operation takes. |
