---
title: "New App Shelf"
method: GET
path: "/v1/teams/{team_id}/apps/shelf"
tags: ["apps"]
---

# New App Shelf

`GET /v1/teams/{team_id}/apps/shelf`

What else should run itself — for THIS shop, off THIS shop's files.

The screen behind the `+` on the rail ships twelve hardcoded tiles whose
notes are numbers about an imagined business. This answers the same shape
for a real one, and answers `personalised: false` with NO rows whenever it
cannot — which is every one of:

  * the tree could not be read (`census.blind`): the one failure this
    product has already paid for once, and never a shelf;
  * the tree holds no number worth a tile;
  * this deployment has no Pi harness;
  * the turn has not finished inside `wait`, or came back unusable;
  * every row it wrote quoted a number this shop's files do not carry.

A caller that wants to poll rather than hold the connection passes
`wait=0`: the run is accepted and the answer says `building`. `refresh=1`
ignores a stored shelf and writes a new one for the same facts.

## Path parameters

- `team_id` string, uuid, required

## Query parameters

- `wait` number
- `refresh` boolean

## Headers

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

## Response `200`

Successful Response

- Shelf — What the route answers. `personalised` is the only field that gates the frontend: false means fall back to the shipped twelve, and it is ALWAYS accompanied by zero rows so a half-shelf can never be mistaken for one.
  - `personalised` boolean, required
  - `status` string, required
  - `groups` ShelfGroup[]
    - `name` string, required
    - `line` string, required
    - `apps` ShelfApp[], required
      - `ask` string, required
      - `note` string, required
      - `app` string, required
      - `power` string, required
      - `does` string[], required
      - `plugs` string[], required
      - `fact` string, required
      - `evidence` string[]
  - `read` string
  - `reason` string
  - `illustrative` boolean
  - `model` string
  - `profile` string
  - `run_id` string
  - `facts` ShelfFact[]
    - `id` string, required
    - `number` string, required
    - `says` string, required
    - `quotes` string[]
    - `refs` string[]
    - `demonstration` boolean
  - `dropped` object[]

## Other responses

- `422` — Validation Error

## Changes

> 33 revisions in range; 1 not diffed.

- **2026-09-03** `c48c4f626ab0` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/stormy/apis/stormy-control-plane/changes/v1/teams/:team_id/apps/shelf/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/52151384d62a?raw)
