Skip to content

Users

Manage player and admin accounts (users table, auth_method=local_password).

URL /admin/users
REST GET/POST /api/users · GET/PATCH/DELETE /api/users/{id} (admin Bearer)

Workflow

  1. Open Manage → Users.
  2. Search (email, name, or user id), filter Admins / non-admins, sort columns, and paginate — backed by GET /api/users?q=&is_admin=&sort_by=&…. Deep link from match detail Followers: /admin/users?followed_match_id=<internal_match_id> (filter chip + clear).
  3. New user — email, password, first name (required); optional username (login also works with email alone), last name, postal code, date of birth; Daily follow limit (default 3; empty = unrestricted); Match follow timezone (IANA picker for the follow-quota day window only; default / blank → UTC); Notify on issuance / Notify on resolve (push notification prefs; default on — global Admin → Push Notifications gates still apply as master switches); optional Admin.
  4. Edit — change profile, reset password (leave blank to keep), toggle admin, adjust follow limit / match follow timezone / notify prefs.
  5. Activate / Deactivate — sets is_active (preferred over hard delete when answers exist). Save does not change active state.

Migrated legacy public_users rows keep their ids/answers but have no password until an admin sets one (or a new account is created via POST /api/auth/register).

Seed a bootstrap admin locally:

uv run python scripts/db/add_admin_user.py jordan parlay