Skip to content

Authorization

Roles

RoleMeaning
adminBilling, team management, interview delete, report retry, full team roster
memberWorkspace CRUD (positions, candidates, interviews, files, reports read) with exceptions below

Users must be active. Organizations can be suspended (auth returns forbidden).

Organization scoping

After login, organizationId comes from the authenticated user record in the database—not from query or body parameters. Handlers pass that id into services and repositories so lists and updates cannot cross tenants. Candidate access is different: possession of join token, password, and session grants access to one interview, not org membership.

Permission matrix (effective access)

Resource / actionMemberAdmin
Positions, candidates, interviews (create/list/edit/cancel)
Delete interview
Files (resume upload/parse)
Read reports
Retry report generation
Credits, checkout, ledger
Team invite, roles, deactivate
Team list (full roster)
Team listself onlyfull roster
Notes on candidates
Notes on interviewsown interviews onlyall
Edit/delete others’ notesown notes onlyany note

Other surfaces

SurfaceAuth
Public health / helloNone
Join peek / verifyJoin token in URL
Candidate interview APIsCandidate session
Bot control APIsInternal token
Stripe webhookSignature only

Limits

  • No MongoDB row-level security—correct organizationId filters in app code are required.
  • Members can perform destructive actions allowed by routes (e.g. cancel interview) unless a service blocks it.
  • Public join peek may show position title, candidate first name, and branding before password.

Sophia AI Interview Platform — Internal Documentation