---
title: "Onboarding Tree Read"
method: POST
path: "/v1/teams/{team_id}/onboarding/tree"
tags: ["onboarding"]
---

# Onboarding Tree Read

`POST /v1/teams/{team_id}/onboarding/tree`

## 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}/onboarding/tree`
- Auth: none declared

EVERY FIRST SCREEN, WRITTEN AT ONCE (owner, 2026-10-11: "make it fully
gen UI on the fly … we must be really optimised on the onboarding").

## Path parameters

- `team_id` string, uuid, required

## Headers

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

## Request body

- TreeAsk
  - `teammate_apps` MenuApp[]
    - `slug` string, required
    - `name` string, required
    - `domain` string
    - `kind` string
  - `connect_apps` MenuApp[]
    - `slug` string, required
    - `name` string, required
    - `domain` string
    - `kind` string
  - `part` 'first' | 'rest' | 'next'
  - `answers` Answer[]
    - `id` string, required
    - `question` string, required
    - `picked` string[]
    - `text` string
    - `files` string[]
    - `skipped` boolean
  - `ahead` object[]
  - `again` boolean

## Response `200`

Successful Response

- TreeAnswer
  - `tree` OnboardingTree
    - `steps` TreeStep[], required
      - `id` string, required: Short lower-case slug, unique per screen.
      - `kind` 'jobs' | 'apps' | 'connect' | 'pick' | 'multi' | 'text' | 'front_desk', required
      - `question` string, required: The question, at most 60 characters.
      - `why` string, required: One short line on what the answer lets Stormy do, at most 90 characters.
      - `example` string, required: One moment of Stormy at work this answer makes possible, at most 140 characters.
      - `apps` string[], required: teammate_apps slugs, likeliest first; empty unless kind is apps.
      - `options` TreeOption[], required
        - `label` string, required: What the tile says, at most 28 characters.
        - `domain` string, required: The product's own website for its logo (slack.com), or empty.
        - `note` string, required: On the jobs screen: what Stormy does with this job today, one line. Else empty.
        - `connect` string, required: A connect_apps slug when this option is one, else empty.
        - `icon` string, required: When domain is empty: one icon name from the prompt's icon list, else empty.
        - `tone` string, required: On the jobs screen: one colour from the prompt's tone list. Else empty.
      - `skip_label` string, required
      - `nudge` string: Always empty.
  - `done` boolean
  - `kept` boolean
  - `ms` integer

## Other responses

- `422`: Validation Error

## Changes

> 68 revisions in range; 1 not diffed.

- **2026-10-12** `93655953beee`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/stormy/apis/stormy-control-plane/changes/v1/teams/:team_id/onboarding/tree/post.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/a40e83844eaa?raw)
