Admin Auth
Password-protected access for PAPI pages. Per-user accounts with peppered bcrypt hashing, 8-hour session tokens, session audit log, self-service password reset, cross-project lead aggregation via project linking. There is no dashboard screen for user management — admin users are created by the AI assistant through create_user, and each user then sets their own password. How to apply it (bootstrap order, pages you must build, browser calls, token handling, pitfalls) is returned in the guidance block of this response.
Endpoints (15)
Authenticate with email + password. Body: {email, password}. Returns {success, token (wsa_, 8h TTL), refresh_token (rfa_, 30d TTL)}.
| Field | Type | Required | Description |
|---|---|---|---|
email |
string | ✓ Yes | Admin user email address |
password |
string | ✓ Yes | Admin password |
Request a password reset. Body: {email}. Requires NO session. Sends the link via the AuthMailer cascade (project custom SMTP -> project Resend -> platform mail), so no per-project mail setup is needed. Always returns success — no user enumeration possible, which also means an unknown address returns success while sending nothing. Works only for an existing, active user: this endpoint alone cannot bootstrap the first admin — call create_user first.
| Field | Type | Required | Description |
|---|---|---|---|
email |
string | ✓ Yes | Email address of the admin user |
base_url |
string | No | DEPRECATED — ignored, URL resolved server-side. Kept for backward compatibility. |
Set a new password using a valid reset token (rst_...). Body: {token, password, password_confirmation} — all three required, password min 8 characters; omitting password_confirmation returns 422. Token is single-use and valid for 1 hour. Invalidates all active sessions. The emailed link is built server-side and always points at /reset-password.html?token=...&project=... — that page must exist in the project or the link lands on a 404. It is not created automatically; the assistant builds it, together with a forgot-password.html linked from the login page.
| Field | Type | Required | Description |
|---|---|---|---|
token |
string | ✓ Yes | Reset token (rst_...) from email link |
password |
string | ✓ Yes | New password (min 8 characters) |
password_confirmation |
string | ✓ Yes | Must match password |
Verify a session token is still valid. Updates last_used_at for audit trail.
| Field | Type | Required | Description |
|---|---|---|---|
token |
string | ✓ Yes | Session token (wsa_...) |
Invalidate a session token.
| Field | Type | Required | Description |
|---|---|---|---|
token |
string | ✓ Yes | Session token to invalidate (wsa_...) |
Exchange a refresh token (rfa_) for a new session. Rotates in-place; old tokens become invalid. Returns {success, token (new wsa_), refresh_token (new rfa_)}.
| Field | Type | Required | Description |
|---|---|---|---|
refresh_token |
string | ✓ Yes | Refresh token (rfa_...) |
Prefer invite_user when the client cannot or should not send a password. Create a new admin user for this project. Password stored as peppered bcrypt hash. This is the only way to create an admin user — there is no dashboard screen for it, and being logged in as admin does not grant the right to create the next user (that needs the project token, not a wsa_ session). Recommended: pass a random throwaway password and then call request-reset, so the user sets their own password from the emailed link and the real password never passes through the assistant.
| Field | Type | Required | Description |
|---|---|---|---|
email |
string | ✓ Yes | Email address for the new admin user |
password |
string | ✓ Yes | Password for the new admin user |
Create an admin user WITHOUT a password and email them a link to set their own (#1495). Preferred way to bootstrap the first admin: no credential ever passes through the assistant. The account gets an unknown random password; the user sets theirs via the emailed link to /reset-password.html (valid 1 hour; afterwards forgot-password sends a new one). Returns 409 if the user already exists and is active. Requires login.html, forgot-password.html and reset-password.html to exist in the project.
| Field | Type | Required | Description |
|---|---|---|---|
email |
string | ✓ Yes | Email address of the admin user to invite |
List all active admin users for this project.
No input parameters required.
Deactivate an admin user and invalidate all their active sessions.
| Field | Type | Required | Description |
|---|---|---|---|
email |
string | ✓ Yes | Email address of the admin user to deactivate |
Reset the password for an existing admin user (admin-side). Invalidates all active sessions. Note there is no change-password endpoint for a logged-in user: the browser endpoints are login, verify, logout, refresh, request-reset and reset-password only. A user changing their own password goes through request-reset -> reset-password; that is the intended route, not a fallback.
| Field | Type | Required | Description |
|---|---|---|---|
email |
string | ✓ Yes | Email address of the admin user |
password |
string | ✓ Yes | New password |
List all active sessions for this project. Shows email, IP, created_at, last_used_at.
| Field | Type | Required | Description |
|---|---|---|---|
email |
string | No | Optional: filter sessions by user email |
Link a microsite project to this dashboard project. Allows wsa_ tokens to aggregate leads from linked projects.
| Field | Type | Required | Description |
|---|---|---|---|
linked_id |
integer | ✓ Yes | WebSumo project ID of the microsite to link |
Remove a microsite project link from this dashboard project.
| Field | Type | Required | Description |
|---|---|---|---|
linked_id |
integer | ✓ Yes | WebSumo project ID of the microsite to unlink |
List all microsite projects linked to this dashboard project.
No input parameters required.
MCP Tool Names
When using this integration through an AI assistant (Claude, ChatGPT, Cursor, etc.), the endpoints are available as MCP tools:
| Endpoint | MCP Tool Name |
|---|---|
| login | admin_auth_login |
| request-reset | admin_auth_request_reset |
| reset-password | admin_auth_reset_password |
| verify | admin_auth_verify |
| logout | admin_auth_logout |
| refresh | admin_auth_refresh |
| create_user | admin_auth_create_user |
| invite_user | admin_auth_invite_user |
| list_users | admin_auth_list_users |
| delete_user | admin_auth_delete_user |
| update_password | admin_auth_update_password |
| list_sessions | admin_auth_list_sessions |
| link_project | admin_auth_link_project |
| unlink_project | admin_auth_unlink_project |
| list_linked_projects | admin_auth_list_linked_projects |
Website