---
title: "List Stations"
method: GET
path: "/v1/teams/{team_id}/stations"
tags: ["stations"]
---

# List Stations

`GET /v1/teams/{team_id}/stations`

Every station this workspace has — THE RAIL, as data.

A station is a top-level folder carrying a `_meta.md`. So adding one to the
rail is `mkdir` plus a file, and nothing in the shell has to learn its name.
That is the whole point of the design and it was, until now, the one place
still holding a hardcoded list: the tab strip named five things in
TypeScript, so a sixth was a release rather than a commit.

Order is declared by `rail:` when a folder cares, then alphabetical — never
filesystem order, which is arbitrary and changes when a directory is
rewritten.

## Path parameters

- `team_id` string, uuid, required

## Headers

- `authorization` string, nullable
- `x-darwin-token` string, nullable

## Response `200`

Successful Response

- StationList
  - `initialized` boolean, required
  - `stations` StationFace[]
    - `name` string, required
    - `title` string, required
    - `hue` string
    - `needs` string
    - `face` string
    - `fields` object
    - `tab` string
    - `answer` object, nullable
    - `values` object
    - `waiting` integer
    - `unread` integer
    - `asks` string
    - `room` string
    - `last_at` string
    - `last_read_at` string
    - `created_at` string
    - `updated_at` string
    - `pins` StationPin[]
      - `ref` string, required
      - `path` string, required
      - `title` string, required
      - `needs` string, required
      - `who` string
      - `at` string
      - `rank` integer, nullable
      - `ask` string
      - `choices` string
      - `range` string
      - `unit` string
      - `at_point` string
      - `urgent` boolean
    - `urgent` integer
  - `business` BusinessPlace — Where the business is and what it reads — the two facts the board is dressed in (`frontend/src/kit-ui/lib/words.ts`, owner 2026-09-24: "based on LOCATION!"). `timezone` is the RESOLVED clock, so a zone the agent only proposed or the owner declined picks no language either. `language` is a choice written on top of the location: a tag, or absent when the location decides.
    - `timezone` string, nullable
    - `language` string, nullable
  - `home` string, nullable

## Other responses

- `422` — Validation Error

## Changes

> 32 revisions in range; 1 not diffed.

- **2026-09-26** `faea4a09e09c` — 2 info
  - added the optional property `stations/items/pins/items/urgent` to the response with the `200` status
  - added the optional property `stations/items/urgent` to the response with the `200` status
- **2026-09-25** `f9ea0f153ae7` — 2 info
  - added the optional property `business` to the response with the `200` status
  - added the optional property `home` to the response with the `200` status
- **2026-09-11** `79b0c0f35170` — 7 info
  - added the optional property `stations/items/last_read_at` to the response with the `200` status
  - added the optional property `stations/items/pins/items/ask` to the response with the `200` status
  - added the optional property `stations/items/pins/items/at_point` to the response with the `200` status
  - added the optional property `stations/items/pins/items/choices` to the response with the `200` status
  - …3 more
- **2026-09-03** `c48c4f626ab0` — 1 info
  - added the optional property `stations/items/unread` to the response with the `200` status

[Change history](https://skmtc.dev/stormy/apis/stormy-control-plane/changes/v1/teams/:team_id/stations/get.md)

---

[API](https://skmtc.dev/stormy/apis/stormy-control-plane.md) · [All operations](https://skmtc.dev/stormy/apis/stormy-control-plane/llms.txt) · [OpenAPI document](https://skmtc.dev/stormy/apis/stormy-control-plane/revisions/b09e3c4ee2af?raw)
