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

# Customer onboarding (Elitery internal)

> How Elitery onboards a new dedicated instance customer.

<Note>
  This guide is for Elitery engineers onboarding a new Professional or Enterprise customer. It assumes the customer has already deployed the muster backend and dashboard on their own AWS infrastructure.
</Note>

## Prerequisites

The customer's environment must have:

* muster backend running and accessible (e.g. `https://api.acmebank.com/health` returns 200)
* muster dashboard deployed and accessible
* PostgreSQL database provisioned and connected
* Direct database access for Elitery (for the onboarding script)

***

## Step 1 — Set required env vars on the backend

Confirm these are set on the customer's backend service:

| Variable                | Description                                       |
| ----------------------- | ------------------------------------------------- |
| `DATABASE_URL`          | `postgresql+asyncpg://user:pass@host:5432/muster` |
| `JWT_SECRET_KEY`        | Strong 256-bit random string                      |
| `CUSTOMER_NAME`         | Customer company name (shown in dashboard)        |
| `RESEND_API_KEY`        | From resend.com — for alert emails                |
| `EMAIL_FROM`            | e.g. `muster@acmebank.com`                        |
| `ANTHROPIC_API_KEY`     | For AI insights and weekly report narratives      |
| `INTERNAL_ADMIN_SECRET` | Strong secret for muster-central proxy            |

Scanner credentials (configure based on what the customer wants scanned):

| Variable                                      | For                          |
| --------------------------------------------- | ---------------------------- |
| `AWS_ACCESS_KEY_ID` + `AWS_SECRET_ACCESS_KEY` | Cost Explorer + DNS scanning |
| `N8N_API_KEY` + `N8N_BASE_URL`                | n8n workflow scanning        |
| `OPENAI_SCANNER_KEYS`                         | OpenAI Assistants scanning   |
| `GITHUB_TOKEN`                                | Git repo scanning            |

***

## Step 2 — Run the onboarding script

From a machine with database access to the customer's instance:

```bash theme={null}
# Clone muster repo if not already cloned
git clone https://github.com/prawirk1/muster.git && cd muster

# Run interactively
DATABASE_URL="postgresql+asyncpg://user:pass@customer-db:5432/muster" \
JWT_SECRET_KEY="their-jwt-secret" \
PYTHONPATH=backend \
    python scripts/onboard_customer.py

# Or non-interactive
DATABASE_URL="..." JWT_SECRET_KEY="..." PYTHONPATH=backend \
    python scripts/onboard_customer.py \
        --company "Acme Bank" \
        --slug "acmebank" \
        --email "admin@acmebank.com" \
        --plan professional \
        --currency USD \
        --agent-limit 100
```

The script will:

1. Create or update `instance_config` (company name, plan, agent limit)
2. Create the admin user with a temporary password (must change on first login)
3. Set up model pricing
4. Print the tenant ID and next steps

***

## Step 3 — Send the customer their credentials

Send the customer:

* Their dashboard URL
* Admin email address
* Temporary password
* Instruction to change password on first login

Suggested email template:

```
Subject: Your muster instance is ready

Hi [Name],

Your muster AI operations dashboard is ready.

Dashboard: https://[their-dashboard-url]
Email: [admin-email]
Temporary password: [password]

You'll be prompted to change your password on first login.

Next: add alert contacts in Settings so Elitery can send you
weekly reports and anomaly alerts.

— Elitery
```

***

## Step 4 — Configure alert contacts

After the customer logs in, ask them to go to **Settings → Alert contacts** and add up to 3 email addresses. These receive:

* Weekly health reports (sent by Elitery every Friday)
* Anomaly alerts (within 2 business hours of detection)

***

## Step 5 — Run baseline discovery scan

In the muster dashboard → **Discovery**, trigger a manual scan to establish a baseline of what's in their environment.

You can also trigger scans via API:

```bash theme={null}
curl -X POST https://[backend-url]/api/v1/discovery/scan \
  -H "Authorization: Bearer [admin-token]" \
  -H "Content-Type: application/json" \
  -d '{"scanner": "all"}'
```

***

## Step 6 — Configure agent integration

Share the integration guide with the customer's developers. Recommend OTel for any coded agents:

```bash theme={null}
# Customer's agent env vars (one-time setup)
OTEL_EXPORTER_OTLP_ENDPOINT=https://backend.[customer-slug].getmuster.io/api/v1/otel
OTEL_EXPORTER_OTLP_HEADERS=Authorization=Bearer <service-account-jwt>
OTEL_EXPORTER_OTLP_PROTOCOL=http/json
```

For no-code tools (n8n, Flowise, Dify), Elitery deploys platform connectors — no action needed from the customer.

For agents with specific business-rule checks, share the [manual signals guide →](/sdk/overview).

Check OTel connection status anytime:

```bash theme={null}
curl -H "Authorization: Bearer <admin-token>"   https://backend.[customer-slug].getmuster.io/api/v1/otel/status
```

***

## Step 7 — Book kickoff call

Book a 30-minute call with the customer to:

* Walk through the discovery findings
* Confirm agents in the Discovery queue
* Confirm OTel integration is sending traces (check `/api/v1/otel/status`)
* Set expectations on the weekly report cadence

***

## Checklist

* [ ] Env vars set on backend
* [ ] Onboarding script run successfully
* [ ] Customer has logged in and changed password
* [ ] Alert contacts configured in Settings
* [ ] Baseline discovery scan complete
* [ ] OTel env vars shared with customer dev team
* [ ] OTel status endpoint confirms traces arriving (`/api/v1/otel/status`)
* [ ] Platform connectors deployed for any no-code tools (n8n, Flowise, etc.)
* [ ] Kickoff call booked
* [ ] Customer added to muster-central admin portal (Trial Users tab)
