> ## Documentation Index
> Fetch the complete documentation index at: https://ekso.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# First run wizard

> Bootstrap a fresh Ekso install by filling in the /startup wizard — admin user, organization, public URL, license activation, and optional AI provider.

The `/startup` wizard runs the first time a fresh Ekso install boots. It collects everything Ekso needs to bootstrap the first tenant and the admin user, writes the install configuration to the database, and then closes itself permanently. Hit it from your browser; agents drive the same endpoints over JSON ([agent onboarding](/guide/agent-onboarding)).

## When the wizard runs

After `docker compose up -d` and the API has finished applying the database schema, navigate to:

```
<your-install-url>/startup
```

For local Quickstart that's `http://localhost:6050/startup`. For a customer install behind a reverse proxy it's the proxy's URL plus `/startup`.

If you see a 410 Gone or get redirected straight into the application, the wizard has already been completed — Ekso's bootstrapped and the wizard has closed itself. Sign in with the admin credentials you set during the wizard instead.

## What the wizard asks

The wizard is a single page with five sections:

| Field                  | What to enter                                                                                                                                                                          | Required    |
| ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------- |
| **Your name**          | The first user (you). Becomes the admin user.                                                                                                                                          | Yes         |
| **Your email**         | Admin user's email. Used for sign-in, password recovery, and outbound email's `Reply-To`.                                                                                              | Yes         |
| **Password**           | Admin user's password. Subject to the default password policy (8+ chars, mixed case, digit).                                                                                           | Yes         |
| **Organization**       | Tenant display name — typically your company name. Shown in the UI header and outbound email.                                                                                          | Yes         |
| **Public URL**         | The hostname users will reach Ekso at — e.g. `https://ekso.acme.com`. Used as the OAuth audience and in outbound email links.                                                          | Yes         |
| **License activation** | The JWT from your welcome email at [ekso.app/get-started](https://ekso.app/get-started). Empty leaves the install in Free-tier defaults until pasted later via **Settings → Account**. | No          |
| **AI provider**        | OpenAI, Anthropic, or none. Empty disables AI features entirely until configured in **Settings → AI**.                                                                                 | No          |
| **AI model + key**     | Required only if you picked a provider. Suggested defaults: `gpt-5.5` (OpenAI) or `claude-sonnet-4-6` (Anthropic).                                                                     | Conditional |

<Note>
  The Public URL doesn't have to resolve from outside *yet* — Ekso just records it as the canonical install identity. You can start with `http://localhost:6050` for evaluation and update the install later by editing the tenant's record.
</Note>

## What happens on submit

When you submit the form, Ekso atomically:

1. Creates the first **tenant** with the organization name you entered.
2. Creates the first **user** (admin role) with the email and password.
3. Stores the **public URL** on the tenant record.
4. Saves the **license activation JWT** if you provided one — verified later by `LicenseProvider`.
5. Writes a **`ConfigAI`** row if you picked a provider, so the next request sees AI enabled.
6. Enqueues a background **sample-data onboarding** job so the tenant comes up with example items, fields, and processes — gives you something to click through immediately.
7. Marks the install as configured. The `/startup` endpoint flips to **410 Gone** for every subsequent caller — there's no way back through the wizard.

You're then redirected to the sign-in page. Use the email and password you just entered.

## After the wizard

You land on the dashboard. From here:

* **Configure authentication** — turn on Microsoft Entra SSO or harden the password policy under [Settings → Authentication](/guide/concepts/authentication).
* **Verify AI** — if you skipped the AI step, configure providers under [Settings → AI](/guide/concepts/ai).
* **Set up the mailbox** — if you're running ticketing, connect IMAP or Microsoft 365 under [Settings → Mailbox](/guide/concepts/mailbox).
* **Invite users** — add team members under [Settings → User](/guide/concepts/access-control).

## Re-running the wizard

You can't. By design — the wizard exists to bootstrap a *fresh* install. The 410 Gone middleware refuses every subsequent call, so nobody (operator or agent) can reset the install through this surface.

To start over, drop the database (or point Ekso at a new empty one), restart, and the wizard reappears.

<Warning>
  Dropping the database wipes every tenant, user, item, and attachment on this install. There's no undo — back up first if anything matters.
</Warning>

## Driving the wizard from an agent

The `/startup` endpoints are JSON-friendly and anonymous (no auth header). An AI agent acting on behalf of an operator can drive them programmatically — same fields, same outcome, same one-shot semantics. See [agent onboarding](/guide/agent-onboarding) for the request shapes, validation rules, and example flows.
