---
title: "Advance Wizard"
method: POST
path: "/api/v1/onboarding/wizard/advance"
tags: ["onboarding"]
---

# Advance Wizard

`POST /api/v1/onboarding/wizard/advance`

## Request

- Base URL: `https://api.nudgelink.co` (the document declares no server; this is the origin it was published from)
- URL: `https://api.nudgelink.co/api/v1/onboarding/wizard/advance`
- Auth: HTTP bearer

Move the wizard to the requested step.

Validation:

* Step must be in the known vocabulary.
* Cannot forward-skip more than one step (e.g. business → discover
  is rejected). ``done`` is always reachable as an explicit dismiss.
* Going back is allowed (re-edit your ICP).

Returns the new state. 400 on illegal transition.

## Request body

- WizardAdvanceRequest
  - `step` string, required: Legacy: business|icp|linkedin|discover|done. Campaign-first (v2): connect_linkedin|create_campaign|done — discovery is no longer an onboarding step.
  - `first_discovery_run_id` string, uuid, nullable
  - `first_campaign_id` string, uuid, nullable
  - `dismiss` boolean

## Response `200`

Successful Response

- WizardStateOut: Response shape for the wizard endpoints. Mirrors :class:`app.services.onboarding_wizard.WizardState` but declared here so FastAPI can generate the OpenAPI schema without importing the dataclass.
  - `step` string, required
  - `completed_at` string, nullable
  - `first_discovery_run_id` string, nullable
  - `skipped` object
  - `source` string, required
  - `first_campaign_id` string, nullable
  - `all_steps` string[]

## Other responses

- `422`: Validation Error

---

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