---
title: "Complete Setup"
method: POST
path: "/clinic/setup/complete"
tags: ["clinic"]
---

# Complete Setup

`POST /clinic/setup/complete`

## Request

- Base URL: `https://api.projectindi.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.projectindi.com/clinic/setup/complete`
- Auth: none declared

Finalise clinic owner onboarding (the work the deleted appweb
``/api/clinic/setup/complete`` proxy did server-side).

Idempotently ensures the org + clinician exist (the wizard's step 1 already
created them), persists the PMS selection, flips onboarding + sends the
clinician welcome email, invites the team and fires the ad-blocker-resistant
completion event. Consent (region-derived privacy settings) stays client-side
- the browser writes ``user_privacy_settings`` under RLS before calling this,
through the same helper as the clinician invite-accept flow.

## Request body

- SetupCompleteRequest
  - `organisation_name` string, required
  - `service_types` string[], nullable
  - `first_name` string, required
  - `last_name` string, required
  - `team_emails` string[]
  - `team_seat_types` object
  - `pms` string[], nullable
  - `pms_other` string, nullable
  - `attribution` object, nullable

## Response `200`

Successful Response

- SetupCompleteResponse
  - `organisation_id` string, required
  - `clinician_id` string, required
  - `organisation_name` string, required
  - `onboarding_complete` boolean, required
  - `invites` TeamInviteResult[]
    - `email` string, required
    - `success` boolean, required
    - `error` string, nullable

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/projectindi/apis/indi-agent-api-first-principles.md) - [All operations](https://skmtc.dev/projectindi/apis/indi-agent-api-first-principles/llms.txt) - [OpenAPI document](https://skmtc.dev/projectindi/apis/indi-agent-api-first-principles/revisions/25a7813e21fd?raw)
