Internal admin access is granted by either:
profiles.is_internal_admin = truefor the verified Supabase user.- Server-only allowlist env vars for bootstrap or emergency access.
Never use user-editable metadata for admin authorization.
- User page:
/support - User API:
GET /api/support,POST /api/support - Admin page:
/admin - Admin queue API:
GET /api/admin/support - Admin ticket update API:
PATCH /api/admin/support/[ticketId]
Operators can:
- View tickets across users.
- Set status to
open,pending, orclosed. - Set priority to
standard,priority, orurgent. - Assign or unassign tickets.
Ticket updates write support.ticket.updated audit events.
Route: POST /api/admin/users/[userId]/plan-override
Required fields:
planTier:free,pro, orstudio.reason: operational or billing reason.expiresAt: optional ISO timestamp ornull.
The API creates an override row, updates profiles.plan_tier, and records admin.plan_override.created.
Escalate immediately when:
- A user reports cross-account data exposure.
- Admin access appears incorrect.
- Audit event writes fail.
- Payment state and profile plan state disagree for paid users.