1. Handwrite Classroom
Handwrite Classroom
  • 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
    • Schemas
      • Error
      • Principal
      • Access
      • ContentType
      • Language
      • FileRef
      • Document
      • Tombstone
      • DocumentPage
      • OrgKind
      • OrgRole
      • Organisation
      • CreateOrganisation
      • RenameOrganisation
      • Member
      • AddMember
      • ChangeMember
      • InviteMember
      • OrgInvitation
      • ReceivedOrgInvitation
  • Handwrite Classroom
    • Start here — Classroom for developers
    • Classroom API specification notes
    • Classroom socket specification notes
    • Classroom live socket — README
    • Classroom identities, credentials and roles
    • School and student workflows
    • Classroom policy and data-use notes
    • Class setup
      • 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}
      • Class setup API — README
      • Choose a class from the returned organisations
      • Create an ordinary class
      • Read the selected class
      • Rename a class
      • Delete an ordinary class
    • Invitations
      • 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}/invitations
      • README — POST /api/v1/orgs/{id}/invitations
      • README — DELETE /api/v1/orgs/{id}/invitations/{inviteId}
      • Invitations API — README
      • Read invitations to the signed-in person
      • Accept a class invitation
      • Decline a class invitation
      • List pending class invitations
      • Invite a person by email
      • Cancel a pending invitation
    • People
      • 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
      • People API — README
      • Read the visible membership roster
      • Add an existing person to a class
      • Change a class member role
      • Remove an ordinary class membership
      • Leave an ordinary class
    • Documents
      • README — GET /api/v1/orgs/{id}/documents
      • Documents API — README
      • List class-owned documents
    • Plan 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 and usage API — README
      • Read classroom plan and seat information
      • Read classroom usage totals
      • Read the recent classroom activity window
      • Read one member usage
      • Read classroom collaboration insights
    • 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
      • Policies API — README
      • Read class-wide policy
      • Replace class-wide policy rules
      • Read one member policy
      • Replace one member policy override
      • Clear one member 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 API — README
      • List tokens issued to a member
      • Issue a managed student token
      • Revoke a managed token
    • Schemas
      • Error
      • Principal
      • Access
      • ContentType
      • Language
      • FileRef
      • Document
      • Tombstone
      • DocumentPage
      • OrgKind
      • OrgRole
      • Organisation
      • CreateOrganisation
      • RenameOrganisation
      • Member
      • AddMember
      • ChangeMember
      • InviteMember
      • OrgInvitation
      • ReceivedOrgInvitation
  1. Handwrite Classroom

Classroom policy and data-use notes

Effective policy is the authority#

The server resolves organisation defaults, stored rules, per-member overrides and forced safeguards. Rules from multiple applicable organisations can combine using the stricter result; locks are retained. Read the person's effective policy before presenting a feature and still handle server refusal when an action is submitted.
The policy API uses full replacement of a stored rules object. Preserve settings the administrator did not intend to change. Unknown keys, invalid enum values and organisation-only keys in member overrides are rejected. A feature listed in a policy schema is not an assurance every client implements it.
RuleClass default / behavior
sharingOutsideOrgOff. Sharing with the allowed organisation or its members has separate target checks; arbitrary email is not an account-discovery mechanism.
publicLinksOff. Do not invent a public-link API from this policy key.
webhooksOff for applicable member policy. Organisation-owned webhook administration is a separate privileged Developer workflow in current source.
thirdPartyAppsOff. A personal OAuth integration is not automatically allowed for a student.
apiAccessManaged: applicable members use organisation-issued managed keys; off blocks API keys/OAuth.
liveEditingOn as a default, but admission still requires document access and an eligible plan.
usageVisibilityAll, an organisation-level setting; classroom administrative usage is not the team's default document-only view.
exemptAdminsOn by default. Teacher/admin exemption is considered when resolving personal feature policy; API off and staff blocks still apply.
developerAccessAdmins by default in current source. Class students never gain access through everyone.
audioMonthlyCharactersZero means no extra monthly audio policy cap, not unlimited provider capacity or plan allowance.
dailyRequestsStored and returned, but not currently enforced by the public request counter. The wrapper uses the global daily cap, not this organisation policy value.
In minors mode, applicable member policy forces outside sharing, public links, webhooks and third-party apps off and API access to managed. A staff-provisioned school cannot turn minors mode off. Teacher/admin exemptions and organisation-owned credentials are separate paths, so do not claim a student policy setting blocks every possible administrative integration.
Stored protections can survive a plan lapse; cancelling a plan is not a way to remove safeguards. Staff suspension is enforced through the member-credential policy path. Current-source org-owned tokens use a different path that omits that common staff-block gate, so their revocation must be checked separately; see identity and roles. Expose the policy source and an appropriate support/admin action, rather than repeatedly retrying forbidden calls.

Student-facing explanation of activity#

The implemented usage dataset contains counts of requests/errors, speech characters, edits, inserted/deleted characters and live-session seconds, plus relevant organisation document IDs. It is not document text, raw keystrokes, device IDs or IP history. In classrooms, administrative usage can include all app usage under classroom collection rules; do not promise it is limited to documents owned by the class.
Responses provide collection and retention descriptions. Source defaults are 48 hours for minute usage, 90 days for day totals and 365 days for collaboration aggregates. These are dataset-specific retention rules, not a claim that all school data or all backups disappear on those schedules. Document deletion, school closure and your integration's cached copies have different handling.
Teachers/co-teachers see full collaboration insights; students see their own share. Billing can read usage but not collaboration insights. Do not present contribution share as a grade, attention score or proof of learning. Show missing data honestly and preserve role-based visibility when exporting or caching results.

Integration data handling#

Request only the scopes and documents needed for the feature. Keep managed tokens and one-time secrets in appropriate server-side storage, not browser source or screenshots. Avoid copying student names or roster exports into general support logs. Track request IDs and counts instead of content.
Explain to the school and student what your separate integration stores and sends for processing. Handwrite's application behavior is not a certification of your integration's privacy, consent or legal compliance. Follow the school-approved use and retention requirements for the actual deployment.
Source basis: org-policy-keys.ts, policies.ts, events.ts, usage-org.ts, insights.ts, schools.ts and developer.ts.
Modified at 2026-10-26 13:24:24
Previous
School and student workflows
Next
README — GET /api/v1/orgs
Built with