1. Guides
Handwrite Team
  • Handwrite Regular Accounts
    • Schemas
      • Error
      • Principal
      • Role
      • Access
      • ContentType
      • Language
      • FileRef
      • Document
      • Tombstone
      • DocumentPage
      • CreateDocument
      • UpdateDocument
      • FileInfo
      • CommitUpload
      • Upload
      • DownloadLink
      • Extracted
      • ExtractionFailed
      • CommittedDocument
      • ExtractedDocument
      • SearchHit
      • SearchPage
      • Export
      • Permission
      • Share
      • ChangeRole
      • Invitation
      • Permissions
      • ReceivedInvitation
      • AcceptedInvitation
      • Me
      • WebhookEventType
      • Webhook
      • CreateWebhook
      • CreatedWebhook
      • WebhookDelivery
      • AudioFormat
      • Speech
      • WordTiming
      • SpeechMarks
      • AudioLink
      • Voice
      • Quota
      • SettingEntry
      • Settings
      • SettingsPatch
      • PatchedSettings
      • OAuthToken
      • OAuthError
  • Handwrite Team
    • Teams
      • README — GET /api/v1/orgs
      • README — POST /api/v1/orgs
      • README — GET /api/v1/orgs/{id}
      • README — PATCH /api/v1/orgs/{id}
      • README — DELETE /api/v1/orgs/{id}
      • Your teams and classes
      • Create a team or class
      • One of your organisations
      • Rename a team (owner or admin)
      • Delete with its memberships, invitations, documents and shares (owner)
    • Membership
      • README — GET /api/v1/orgs/invitations
      • README — POST /api/v1/orgs/invitations/{inviteId}/accept
      • README — POST /api/v1/orgs/invitations/{inviteId}/decline
      • README — GET /api/v1/orgs/{id}/members
      • README — POST /api/v1/orgs/{id}/members
      • README — PATCH /api/v1/orgs/{id}/members/{principal}
      • README — DELETE /api/v1/orgs/{id}/members/{principal}
      • README — POST /api/v1/orgs/{id}/leave
      • README — GET /api/v1/orgs/{id}/invitations
      • README — POST /api/v1/orgs/{id}/invitations
      • README — DELETE /api/v1/orgs/{id}/invitations/{inviteId}
      • Organisation invitations to your verified email
      • Join with the invited role
      • Decline an organisation invitation
      • Members (students see teachers and themselves)
      • Add a person (managers)
      • Change a role; owner transfers a team
      • Remove a member (managers) or yourself
      • Leave (not the owner)
      • Pending email invitations (managers)
      • Invite an email (managers)
      • Withdraw an invitation (managers)
    • Documents
      • README — GET /api/v1/orgs/{id}/documents
      • Documents the organisation owns
    • Billing and usage
      • README — GET /api/v1/orgs/{id}/billing
      • README — GET /api/v1/orgs/{id}/usage
      • README — GET /api/v1/orgs/{id}/usage/live
      • README — GET /api/v1/orgs/{id}/members/{principal}/usage
      • README — GET /api/v1/orgs/{id}/insights
      • Plan, status and seats per role (billing.read)
      • Usage per day and member (admins, managers, billing)
      • The last 60 minutes per member (admins, managers, billing)
      • One member's usage (usage.read, or yourself)
      • How people collaborate on the org's documents
    • Policies
      • README — GET /api/v1/orgs/{id}/policies
      • README — PUT /api/v1/orgs/{id}/policies
      • README — GET /api/v1/orgs/{id}/members/{principal}/policy
      • README — PUT /api/v1/orgs/{id}/members/{principal}/policy
      • README — DELETE /api/v1/orgs/{id}/members/{principal}/policy
      • Org-wide policy rules (policies.read)
      • Replace the org-wide rules (admins)
      • A member's override and what applies to them
      • Replace a member's override (admins; managers for members)
      • Remove a member's override
    • Managed tokens
      • README — GET /api/v1/orgs/{id}/members/{principal}/tokens
      • README — POST /api/v1/orgs/{id}/members/{principal}/tokens
      • README — DELETE /api/v1/orgs/{id}/members/{principal}/tokens/{tokenId}
      • Managed tokens issued to a member (tokens.read)
      • Issue a managed fine-grained token (admins, billing)
      • Revoke a managed token (admins, billing)
    • Guides
      • Start here — Team app integration
      • Team API specification notes
      • Team socket specification notes
      • Team live socket — README
      • Team roles and access model
      • Team credentials and developer setup
      • Team SSO and portal workflows
      • Team policies, plans and seats
      • Team usage and collaboration insights
      • Team webhook delivery — README
    • Schemas
      • Error
      • Principal
      • Access
      • ContentType
      • Language
      • FileRef
      • Document
      • Tombstone
      • DocumentPage
      • OrgKind
      • OrgRole
      • Organisation
      • CreateOrganisation
      • RenameOrganisation
      • Member
      • AddMember
      • ChangeMember
      • InviteMember
      • OrgInvitation
      • ReceivedOrgInvitation
  • Handwrite Classroom
    • Schemas
      • Error
      • Principal
      • Access
      • ContentType
      • Language
      • FileRef
      • Document
      • Tombstone
      • DocumentPage
      • OrgKind
      • OrgRole
      • Organisation
      • CreateOrganisation
      • RenameOrganisation
      • Member
      • AddMember
      • ChangeMember
      • InviteMember
      • OrgInvitation
      • ReceivedOrgInvitation
  1. Guides

Team policies, plans and seats

Read the server's plan and policy state rather than embedding a price table or assuming that a role implies a paid feature. The public billing endpoint is a read. Purchases and seat changes happen in the Handwrite Billing tab with billing authority.

Capacity and entitlement#

Roles have separate seat allowances. Adding, inviting, accepting and changing a role perform seat checks; live pending invitations reserve seats. A team has a hard maximum of 500 members, and a person can belong to at most 100 organisations. Expect 402 seats_exhausted when a role has no capacity and 422 limit_reached at a hard limit. Do not silently move a user into a different role to bypass a capacity failure.
Policies, managed tokens, usage, insights and live editing depend on plan features. SSO is a Team Plus capability in current source. Org-owned credentials and org webhooks require the developer feature in the current implementation. The source plan catalogue is not evidence of a completed purchase or deployed portal.

Stored rules versus effective policy#

Rules use {value, locked}. Within one organisation, a stored member override replaces that organisation's rule for the same key, including its lock; forced minors safeguards apply afterward. Across applicable organisations, stricter values win and locks are combined. The smaller non-zero numeric limit is stricter; zero means no additional policy limit. A stored policy field is not proof that every request path enforces it.
The table below describes applicable member-credential policy. Org-owned tokens have a separate authentication path; see the enforcement limits in credentials.
ControlApp implication
apiAccess = onPersonal API credentials can be used subject to other checks.
apiAccess = managedUse a token managed by an applicable organisation; an unmanaged key or OAuth grant can be refused.
apiAccess = offAPI keys/OAuth are refused, including admin accounts under current source enforcement.
thirdPartyAppsGoverns third-party OAuth use separately from API-key policy.
sharingOutsideOrg / publicLinksHide unsupported sharing choices and still handle server refusals.
cloudVoices / audioMonthlyCharactersCloud speech may be disabled or capped; show quota failures clearly.
dailyRequestsStored and returned, but not currently enforced by the public request counter. The wrapper uses the global daily cap, not this organisation policy value.
liveEditingAdmission to collaborative editing may be refused even with document access.
developerAccessOrg-only control over org-token creators; not a member override.
usageVisibilityGoverns which counters other team roles can see.
Use GET /api/v1/orgs/{id}/policies for the team's stored/default/effective view, a member-policy read for that member's override, and /api/v1/me/policy for the connected person's combined effective policy. Respect returned locked settings in the app; retrying a blocked write does not unlock it.
PUT replaces a complete stored map. Show a review of the intended replacement and retain unchanged rules. Clearing a member override restores other applicable rules rather than granting unrestricted access. Current source includes staff-origin API suspension for the member-credential path: it is displayed as a staff restriction and cannot be lifted by editing team rules. The new org-owned token path omits that common gate, so staff suspension alone is not proof those tokens have stopped. This control's release was not verified in this documentation task.
Source: org-plans.ts, seats.ts, org-policy-keys.ts, policies.ts, policy-views.ts and staff-controls.ts.
Modified at 2026-10-26 13:24:10
Previous
Team SSO and portal workflows
Next
Team usage and collaboration insights
Built with