Members
A member is a person with an active scheme_membership record for a given scheme. Membership carries a role, a verification status, a financial status, and optional voting suspension — all of which control what a member can see and do.
Roles
| Role | Who holds it | Key permissions |
|---|---|---|
committee_chair | Elected chair | Full committee rights. Unique per scheme. |
committee_secretary | Elected secretary | Full committee rights. Unique per scheme. Typically issues meeting notices. |
committee_treasurer | Elected treasurer | Full committee rights. Unique per scheme. |
committee_member | Other committee members | Full committee rights. Multiple allowed. |
owner | Non-committee lot owners | Can raise matters, comment, view documents at owner access level. Cannot update matter status. |
tenant | Tenants | Read-only access at all access level. Cannot raise matters by default. |
strata_manager | External strata managing agent | Elevated document access (strata_manager level). No committee voting rights. |
The chair, secretary, and treasurer roles are unique — only one person per scheme can hold each at a time. The invite and role-change endpoints reject assignments that would create a duplicate. The taken_roles array in the members list response lists which unique roles are already assigned (including pending invitations).
Verification status
Verification tracks how confidently the system knows a member is who they claim to be:
| Status | Meaning |
|---|---|
pending | Member has joined but has not yet self-declared or been verified. |
self_declared | Member has self-declared ownership. Treated as active for notices and voting. |
pending_approval | Member registered via the open join link and is awaiting committee approval. |
approved | Committee approved a pending_approval member. Equivalent to self_declared for access purposes. |
verified | Identity verified against external records (e.g., title search). Highest trust. |
Meeting notices are sent to members with status verified or self_declared(and approved). Pending members receive no notices.
Financial status
is_financial tracks whether a member is up-to-date with levy payments. A non-financial member may have their voting rights suspended by the committee.
is_financial— bool. Default true. Updated manually by committee or via levy integration.financial_status_source—manualorintegration. Records how the status was last set.financial_status_updated_at— timestamp of the last update.
Financial status is informational — it does not automatically restrict access in the current release.
Voting suspension
A committee member can suspend a member's voting rights independently of financial status (e.g., pending tribunal proceedings). Suspension requires a reason.
voting_suspended— bool. Default false.voting_suspended_reason— free-text reason. Required when suspending.
Voting suspension is surfaced in the member detail view and member list with a red badge. It is the committee's responsibility to enforce this when counting votes.
Invitation workflow
The primary way to add members is via email invitation:
- A committee member sends an invitation (
POST /api/schemes/:id/invitations) with the invitee's email, name, and intended role. - StrataSphera sends an invitation email with a sign-up link containing a token.
- The invitee registers or logs in; the token is redeemed and their membership record is created with
verification_status: self_declared. - The invitation record transitions to
accepted.
Invitations expire after 7 days. Expired invitations can be resent.
Open join link: Schemes can optionally publish a self-registration link. Members who join via this link get verification_status: pending_approval and must be approved by the committee before they can access the scheme.
Members are unlimited on every plan. Invitations are blocked only when a scheme is past its trial without payment (status expired), in which case writes return HTTP 402 until billing is set up.
Lots and unit entitlement
An owner member may own one or more lots in the scheme. Lot ownership is tracked in thelot_ownerships table with owned_from and owned_to dates, enabling historical tracking when lots change hands.
Each lot has a unit_entitlement (UE) — the fraction of the scheme the lot represents. UE determines the weight of a lot owner's vote in polls and special resolutions.
The member detail response includes a lots array with lot number, type, UE, ownership percentage, and building name.
Onboarding progress
The members list response includes an onboarding_progress object:
lots_onboarded— number of lots with an active ownership recordtotal_lots— total lot count from the scheme'stotal_lotsfield
This is used to drive the onboarding checklist on the dashboard.
Audit log
All membership changes are recorded in audit_logs: financial status updates, role changes, billing admin grants/revocations, voting suspension, member approval/rejection. Each entry records the actor, old values, new values, and timestamp.