First admin and the admin panel
How the first platform admin is created (there are no default credentials), the super and support roles, and what each admin screen does.
3 min readUpdated Oct 17, 2026Applies to Reception AI 1.0.0
On this page
Reception AI ships with no default credentials and no setup wizard. Nobody can sign in until someone signs up, and nobody is an administrator until you say so in the environment and they prove they own that address.
Creating the first admin
1. Name the address
Set ADMIN_EMAILS in the environment and restart. It accepts several addresses separated by commas or spaces:
ADMIN_EMAILS=you@example.com, partner@example.com2. Sign up with that address
Sign up at /login with the address, before you share the site's URL with anyone else.
3. Verify the address
Sign-ups are open and a password proves nothing about who typed the address, so a listed address only becomes an admin once it is verified. Either:
- Sign in with Google using that address (if Google sign-in is configured), or
- Open the confirmation link. It is sent when the account signs up and again whenever the unverified account visits
/admin(at most once every five minutes). The link works for one hour.
With SMTP configured, the link is emailed. Without SMTP, or if sending fails, it is printed in the server log:
[admin] you@example.com is listed in ADMIN_EMAILS but has not verified that address, so it was not made an administrator.
[admin] (Email is not configured (SMTP_HOST is not set).)
[admin] To confirm it, open this link in the browser where you are signed in:
[admin] <the confirmation link>Open it in the browser where you are signed in, then visit /admin. You are promoted to super-admin on that visit, and the promotion is written to the audit log.
Tip
Where to find the log: your terminal for npm run dev, docker logs <container> for Docker, or your platform's log viewer (railway logs on Railway).
Note
The link is signed with BETTER_AUTH_SECRET. If that variable is not set, a restart invalidates any link already issued; request a new one by visiting /admin again.
Or: promote an account from the command line
Against a real database you can skip email entirely. The account must already exist (sign up first):
npm run admin:grant -- you@example.com # super-admin (default)
npm run admin:grant -- helper@example.com supportIt needs DATABASE_URL (read from .env if present) and records the grant in the audit log with the actor cli. Inside a container, run it with the same environment as the app, for example docker exec reception-ai npm run admin:grant -- you@example.com.
Roles
| Super-admin | Support | |
|---|---|---|
| Overview, Accounts, Plans, Service health | Read and change | Read only |
| Audit log and CSV export | Yes | Yes |
| Finance | Yes | No |
| Configuration | Yes | No (masked values still reveal a few characters) |
| Change a workspace's plan, edit plans, grant or revoke admins | Yes | No |
Every admin sees every tab in the navigation; a support user who opens Finance or Configuration gets an error rather than a hidden tab. The last remaining super-admin cannot be revoked.
The admin screens
| Screen | Path | What it is for |
|---|---|---|
| Overview | /admin |
Platform totals and a list of missing essentials (OPENAI_API_KEY, APP_URL, DATABASE_URL, CREDENTIAL_ENCRYPTION_KEY). |
| Accounts | /admin/tenants |
Search workspaces and change a workspace's plan. |
| Finance | /admin/finance |
Provider cost rates, recorded costs, fixed costs and revenue you record, with margins. Super-admin only. |
| Plans | /admin/plans |
Create and edit plans, their allowances and their Stripe price IDs. See Selling it as SaaS. |
| Service health | /admin/health |
Recent success and failure of calls to each provider (OpenAI, xAI, carriers, Stripe, SMTP and others), with their latest error messages. |
| Configuration | /admin/settings |
Every admin setting. See Configuration. |
| Audit | /admin/audit |
Every admin action, CSV export, and granting or revoking admins. |
Not in this version
- No suspend, delete or impersonate for customer accounts. Accounts supports changing the plan only.
- No password reset by email. Signed-in users can change their password under Settings. An administrator cannot reset someone else's password from the panel.
- No team members or invitations. A workspace belongs to one user account.
- No outgoing email other than the admin confirmation link.
How customers get in
- Email and password sign-up is open by default. Turn
FEATURE_SIGNUPSoff to close it; existing users can still sign in. - Google sign-in appears when
VITE_GOOGLE_CLIENT_IDandGOOGLE_CLIENT_SECRETare both set. A Google sign-in links to an existing account with the same email. - New workspaces start on the Studio plan.
- Customers can export their data and delete their workspace under Settings. Deleting a workspace does not cancel a Stripe subscription, so cancel it in Stripe first.