---
title: "Restore Flow"
method: POST
path: "/v2/onboarding/flows/{flow_key}/restore"
tags: ["onboarding"]
---

# Restore Flow

`POST /v2/onboarding/flows/{flow_key}/restore`

## Request

- Base URL: `https://api.stuut.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.stuut.ai/v2/onboarding/flows/{flow_key}/restore`
- Auth: HTTP bearer

Restores a previously dismissed flow so it surfaces to the user again.

## Path parameters

- `flow_key` string, required

## Response `200`

Successful Response

- Onboarding: The full onboarding state for the current tenant/user context.
  - `flows` OnboardingFlow[], required: All flows applicable to the current context.
    - `id` string, required: Unique identifier of this runtime flow.
    - `key` 'foundation' | 'data' | 'communications' | 'collections' | 'payment_portal', required: Stable catalog key identifying the flow (e.g. 'foundation', 'collections').
    - `scope` 'tenant' | 'product' | 'user', required
    - `availability` 'available' | 'blocked' | 'hidden', required
    - `dismissible` boolean, required: Whether this flow may be dismissed by the user.
    - `blocked_reason` 'dependency_not_satisfied' | 'not_applicable' | 'product_not_enabled' | 'missing_permission', required
    - `steps` OnboardingStep[], required: The flow's steps, in catalog order.
      - `key` string, required: Stable identifier of the step within its flow.
      - `status` 'not_started' | 'completed' | 'skipped', required
      - `availability` 'available' | 'blocked' | 'hidden', required
      - `required` boolean, required: Whether this step must be completed for its flow to be considered complete. Non-required steps may also be skipped.
      - `blocked_reason` 'dependency_not_satisfied' | 'not_applicable' | 'product_not_enabled' | 'missing_permission', required
      - `completed_at` string, date-time, nullable, required: When the step was completed; null otherwise.
      - `skipped_at` string, date-time, nullable, required: When the step was skipped; null otherwise.
      - `skip_reason` string, nullable, required: Optional reason supplied when the step was skipped.
      - `data` object, required: Arbitrary state data the user produced for this step (e.g. submitted form values).
      - `counts_toward_completion` boolean, required: Whether this step counts toward its flow's completion (false for steps hidden as not-applicable / product-not-enabled).
    - `data` object, required: Arbitrary state data stored at the flow level.
    - `dismissed_at` string, date-time, nullable, required: When the flow was dismissed; null if not dismissed.
    - `progress` OnboardingProgress, required: Counts for a single flow, over the steps that count toward its completion.
      - `total_steps` integer, required: Number of steps that count toward completion (excludes not-applicable).
      - `completed_steps` integer, required: Of the counted steps, how many are completed.
      - `skipped_steps` integer, required: Of the counted steps, how many are skipped.
      - `required_steps` integer, required: Of the counted steps, how many are required.
      - `completed_required_steps` integer, required: Of the required steps, how many are completed.
      - `percent_complete` number, required: Percentage of counted steps that are completed or skipped (0-100).
    - `status` 'not_started' | 'in_progress' | 'completed' | 'dismissed', required
  - `summary` OnboardingSummary, required: Aggregate roll-up across all of the current context's flows.
    - `total_flows` integer, required: Total number of flows for the current context.
    - `completed_flows` integer, required: How many flows are completed.
    - `in_progress_flows` integer, required: How many flows are in progress.
    - `not_started_flows` integer, required: How many flows have not been started.
    - `dismissed_flows` integer, required: How many flows have been dismissed.
    - `total_steps` integer, required: Total counted steps across all flows.
    - `completed_steps` integer, required: Total completed steps across all flows.
    - `skipped_steps` integer, required: Total skipped steps across all flows.
    - `has_incomplete_required_steps` boolean, required: True if any non-dismissed flow still has incomplete required steps.

## Other responses

- `422`: Validation Error

---

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