---
title: "Read Station"
method: GET
path: "/v1/teams/{team_id}/stations/{station}"
tags: ["stations"]
---

# Read Station

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

## Request

- Base URL: `https://api.stormy.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.stormy.ai/v1/teams/{team_id}/stations/{station}`
- Auth: none declared

One station: what wants you, and what was handled without you.

THE ABSORBED PILE IS THE ONE THAT GROWS. What wants a person is bounded by
what a person can actually do — if it is not, that is the story and the
count says so. What the desk handled alone grows without limit, so `handled`
is the paged list and `offset` walks it.

BODIES ARE NOT SENT WITH A LIST. Two hundred notes' worth of prose is a
payload nobody reads: the list carries what a row needs, and `path=` returns
exactly one note with its body when something is actually opened. Fetching
everything in case it is looked at is how a surface gets slow before it gets
useful.

## Path parameters

- `team_id` string, uuid, required
- `station` string, required

## Query parameters

- `limit` integer
- `offset` integer
- `path` string, nullable

## Headers

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

## Response `200`

Successful Response

- StationRead
  - `initialized` boolean, required
  - `station` StationFace: What `_meta.md` declares about the folder itself. `fields` is the whole frontmatter, verbatim — which is what lets a SURFACE be declared rather than coded. A station that says `view_kind: call_transcript` is telling the shell to render the generic scrolling view over that kind, and the agent wrote that line into a file. Adding a new browsable surface is therefore a commit, not a release.
    - `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
      - `stakes` string
      - `icon` string
      - `kind` string
    - `urgent` integer
  - `wants_you` StationItem[]
    - `path` string, required
    - `title` string, required
    - `party` string
    - `at` string
    - `needs` string, nullable
    - `rank` integer, nullable
    - `body` string
    - `body_truncated` boolean
    - `visibility` string
    - `fields` object
    - `face` string
    - `has_artifact` boolean
  - `handled` StationItem[]
    - `path` string, required
    - `title` string, required
    - `party` string
    - `at` string
    - `needs` string, nullable
    - `rank` integer, nullable
    - `body` string
    - `body_truncated` boolean
    - `visibility` string
    - `fields` object
    - `face` string
    - `has_artifact` boolean
  - `counts` StationCounts: How much is really there, independent of how much was sent. A list that has been truncated must say so with a NUMBER, not by ending. The UI reads "6 of 214 handled" from here; without it a paged list looks like a complete one and an owner concludes the desk did less than it did.
    - `wants_you` integer
    - `handled` integer
  - `next_offset` integer, nullable

## Other responses

- `422`: Validation Error

## Changes

> 70 revisions in range; 1 not diffed.

- **2026-10-03** `949d411a4466`: 2 info
  - added the optional property `station/anyOf[subschema #1: StationFace]/pins/items/icon` to the response with the `200` status
  - added the optional property `station/anyOf[subschema #1: StationFace]/pins/items/kind` to the response with the `200` status
- **2026-10-01** `1163a2ce2baa`: 1 info
  - added the optional property `station/anyOf[subschema #1: StationFace]/pins/items/stakes` to the response with the `200` status
- **2026-09-26** `faea4a09e09c`: 2 info
  - added the optional property `station/anyOf[subschema #1: StationFace]/pins/items/urgent` to the response with the `200` status
  - added the optional property `station/anyOf[subschema #1: StationFace]/urgent` to the response with the `200` status
- **2026-09-11** `79b0c0f35170`: 7 info
  - added the optional property `station/anyOf[subschema #1: StationFace]/last_read_at` to the response with the `200` status
  - added the optional property `station/anyOf[subschema #1: StationFace]/pins/items/ask` to the response with the `200` status
  - added the optional property `station/anyOf[subschema #1: StationFace]/pins/items/at_point` to the response with the `200` status
  - added the optional property `station/anyOf[subschema #1: StationFace]/pins/items/choices` to the response with the `200` status
  - …3 more
- …earlier changes not shown

[Operation history](https://skmtc.dev/stormy/apis/stormy-control-plane/changes/v1/teams/:team_id/stations/:station/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/4d811ab18158?raw)
