---
title: "Put Help Site Live"
method: PUT
path: "/api/v1/help-site/live"
tags: ["authed"]
---

# Put Help Site Live

`PUT /api/v1/help-site/live`

## Request

- Base URL: `https://api.teaflask.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.teaflask.com/api/v1/help-site/live`
- Auth: none declared

The one switch. Off: the whole public /help surface (site, pages,
search) 404s until the site is live again — the assistant keeps
serving released docs. On: the pointer first catches up to
the latest saved revision if history left it behind, so what goes
live is always what the author last saved. Idempotent both ways.

## Request body

- PutHelpSiteLiveRequest
  - `live` boolean, required

## Response `200`

Successful Response

- HelpSiteStateResponse: The editor's working set: the newest revision (whatever its status), whatever the publish pointer names, and whether the help center is live. The two revisions only differ for a site whose history predates save=publish; both null means the org has never edited its chrome. live is the public reachability switch — the one author-facing axis.
  - `latest_revision` HelpSiteRevisionResponse, required
    - `id` string, uuid, required
    - `help_site_id` string, uuid, required
    - `parent_revision_id` string, uuid, nullable, required
    - `config` union, required
      - NavV1Config
        - `version` 'nav/v1', required
        - `theme` SiteTheme, required: docs.json `name`/`logo`/`favicon`. URLs are interpolated into markup, so their shape is validated.
          - `name` string, required
          - `description` string, nullable
          - `logo_light_url` string, nullable
          - `logo_dark_url` string, nullable
          - `favicon_url` string, nullable
          - `default_appearance` 'light' | 'dark' | 'system'
        - `landing` SiteLanding, required: The landing's title and its featured cards; cards may be empty (the sections below them derive from the nav). show_search stays in the vocabulary so stored configs parse, but nothing renders it: search lives in the site's chrome.
          - `headline` string, required
          - `show_search` boolean
          - `cards` LandingCard[], required
            - `title` string, required
            - `description` string, nullable
            - `icon` string, nullable
            - `target_slug` string, required
        - `tabs` NavTab[], required
          - `tab` string, required
          - `items` union[], required
            - union
              - …
      - SiteV1Config
        - `version` 'site/v1', required
        - `theme` SiteTheme, required: docs.json `name`/`logo`/`favicon`. URLs are interpolated into markup, so their shape is validated.
          - `name` string, required
          - `description` string, nullable
          - `logo_light_url` string, nullable
          - `logo_dark_url` string, nullable
          - `favicon_url` string, nullable
          - `default_appearance` 'light' | 'dark' | 'system'
        - `landing` SiteLanding, required: The landing's title and its featured cards; cards may be empty (the sections below them derive from the nav). show_search stays in the vocabulary so stored configs parse, but nothing renders it: search lives in the site's chrome.
          - `headline` string, required
          - `show_search` boolean
          - `cards` LandingCard[], required
            - `title` string, required
            - `description` string, nullable
            - `icon` string, nullable
            - `target_slug` string, required
    - `config_format` 'nav/v1' | 'site/v1', required: Versions of the config vocabulary; evolves additively, never in place. site/v1 is chrome only (theme + landing) — structure is folder rows and the public tree derives from them. nav/v1 is read-only legacy: nothing writes it since the nav editor died, but stored revisions keep the value (and the CHECK constraint keeps the name).
    - `status` 'draft' | 'published' | 'superseded' | 'discarded', required
    - `authored_by_user_id` string, uuid, required
    - `created_at` string, date-time, required
  - `published_revision` HelpSiteRevisionResponse, required
    - `id` string, uuid, required
    - `help_site_id` string, uuid, required
    - `parent_revision_id` string, uuid, nullable, required
    - `config` union, required
      - NavV1Config
        - `version` 'nav/v1', required
        - `theme` SiteTheme, required: docs.json `name`/`logo`/`favicon`. URLs are interpolated into markup, so their shape is validated.
          - `name` string, required
          - `description` string, nullable
          - `logo_light_url` string, nullable
          - `logo_dark_url` string, nullable
          - `favicon_url` string, nullable
          - `default_appearance` 'light' | 'dark' | 'system'
        - `landing` SiteLanding, required: The landing's title and its featured cards; cards may be empty (the sections below them derive from the nav). show_search stays in the vocabulary so stored configs parse, but nothing renders it: search lives in the site's chrome.
          - `headline` string, required
          - `show_search` boolean
          - `cards` LandingCard[], required
            - `title` string, required
            - `description` string, nullable
            - `icon` string, nullable
            - `target_slug` string, required
        - `tabs` NavTab[], required
          - `tab` string, required
          - `items` union[], required
            - union
              - …
      - SiteV1Config
        - `version` 'site/v1', required
        - `theme` SiteTheme, required: docs.json `name`/`logo`/`favicon`. URLs are interpolated into markup, so their shape is validated.
          - `name` string, required
          - `description` string, nullable
          - `logo_light_url` string, nullable
          - `logo_dark_url` string, nullable
          - `favicon_url` string, nullable
          - `default_appearance` 'light' | 'dark' | 'system'
        - `landing` SiteLanding, required: The landing's title and its featured cards; cards may be empty (the sections below them derive from the nav). show_search stays in the vocabulary so stored configs parse, but nothing renders it: search lives in the site's chrome.
          - `headline` string, required
          - `show_search` boolean
          - `cards` LandingCard[], required
            - `title` string, required
            - `description` string, nullable
            - `icon` string, nullable
            - `target_slug` string, required
    - `config_format` 'nav/v1' | 'site/v1', required: Versions of the config vocabulary; evolves additively, never in place. site/v1 is chrome only (theme + landing) — structure is folder rows and the public tree derives from them. nav/v1 is read-only legacy: nothing writes it since the nav editor died, but stored revisions keep the value (and the CHECK constraint keeps the name).
    - `status` 'draft' | 'published' | 'superseded' | 'discarded', required
    - `authored_by_user_id` string, uuid, required
    - `created_at` string, date-time, required
  - `live` boolean, required
  - `public_base_url` string, nullable, required

## Other responses

- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not found
- `405`: Method not allowed
- `422`: Validation error
- `500`: Internal server error

## Changes

- **2026-11-03** `c6ac9fd6657f`: 6 info
  - removed the `STEEP_LEARNING_DISABLED` enum value from the `error/code` response property for the response status `401`
  - removed the `STEEP_LEARNING_DISABLED` enum value from the `error/code` response property for the response status `403`
  - removed the `STEEP_LEARNING_DISABLED` enum value from the `error/code` response property for the response status `404`
  - removed the `STEEP_LEARNING_DISABLED` enum value from the `error/code` response property for the response status `405`
  - …2 more

[Operation history](https://skmtc.dev/teaflask/apis/teaflask-api/changes/api/v1/help-site/live/put.md)

---

[API](https://skmtc.dev/teaflask/apis/teaflask-api.md) - [All operations](https://skmtc.dev/teaflask/apis/teaflask-api/llms.txt) - [OpenAPI document](https://skmtc.dev/teaflask/apis/teaflask-api/revisions/c6ac9fd6657f?raw)
