---
title: "Persist the funnel answers and mark the current user onboarded."
method: POST
path: "/api/v1/onboarding"
tags: ["Onboarding"]
---

# Persist the funnel answers and mark the current user onboarded.

`POST /api/v1/onboarding`

## Request

- Base URL: `https://api.avatarfactory.io` (the document declares no server; this is the origin it was published from)
- URL: `https://api.avatarfactory.io/api/v1/onboarding`
- Auth: one of:
  - API key in cookie `session`
  - HTTP bearer

## Request body

- OnboardingSaveRequest: Body for `POST /api/v1/onboarding`. All fields are optional so a "Skip" still produces a valid request (it just carries no answers). `skipped` records that the user chose to skip rather than answer; completion happens either way.
  - `existing_avatar_url` string, nullable
  - `goal_skipped` boolean
  - `has_existing_avatar` boolean, nullable
  - `how_heard` string, nullable
  - `how_heard_detail` string, nullable
  - `landed_on` string, nullable
  - `looking_for` string, nullable
  - `looking_for_detail` string, nullable
  - `looking_for_link` string, nullable
  - `niche` string, nullable
  - `niche_detail` string, nullable
  - `skipped` boolean

## Response `200`

OK

- OnboardingStatusResponse
  - `has_existing_avatar` boolean, nullable
  - `how_heard` string, nullable
  - `how_heard_detail` string, nullable
  - `is_onboarded` boolean, required
  - `looking_for` string, nullable
  - `looking_for_detail` string, nullable
  - `looking_for_link` string, nullable
  - `niche` string, nullable
  - `niche_detail` string, nullable

## Other responses

- `422`: Unprocessable Entity

---

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