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

Start here — Classroom for developers

Handwrite Classroom for outside developers#

Build an integration around a selected class and the permission of the person or organisation that connected it. Handwrite represents a class as an organisation with kind: "class" and principal class:<orgId>. A class can own documents, have teachers and students, and apply policies to their app use.
An ordinary class and a staff-provisioned school are different. POST /api/v1/orgs can create an ordinary class; it does not create school login accounts or a school code. A school applies through Handwrite support, then its authorised staff use the school workflow. See School and student workflows.

Start here#

1.
Read Identities, credentials and roles and choose the correct identity. Never use a teacher's token as a student identity.
2.
Authenticate on your backend and call GET /api/v1/me to check who the token represents.
3.
Call GET /api/v1/orgs with orgs:read, filter the response to kind: "class", and ask the person to select the class. There is no documented kind query filter.
4.
Read the selected organisation, relevant policy and documents. Only display controls that the caller may use; the API still enforces each operation.
5.
For text, files, speech and settings, use the Regular Accounts API specification with the chosen authorised identity. For collaboration, read the separate socket specification.
curl --fail-with-body https://handwrites.io/api/v1/me \
  -H "Authorization: Bearer $HANDWRITE_API_TOKEN"

curl --fail-with-body https://handwrites.io/api/v1/orgs \
  -H "Authorization: Bearer $HANDWRITE_API_TOKEN"

curl --fail-with-body https://handwrites.io/api/v1/orgs/REPLACE_ORG_ID/documents \
  -H "Authorization: Bearer $HANDWRITE_API_TOKEN"

Design the integration around explicit choices#

Connecting an account, selecting a class and selecting documents are separate decisions. Do not silently import every student document. Class-owned documents come from the organisation document list; that list is not a directory of all students' personal documents. A fine-grained key may expose only selected documents, and access can change later.
Show who is acting: the teacher, an approved managed student identity, or the organisation itself. Keep class names and student details out of diagnostics. Use Request-Id when reporting failures. Clear class-specific cached data when access ends and keep unsaved local edits until the server confirms a save.
A classroom app should explain what usage administrators can see. Counters and collaboration summaries are not learning assessments. Follow the policy and data-use notes when presenting activity, exporting CSV or requesting speech processing.

Documentation map#

HTTP API specification notes: auth, errors, pagination, retries and scope of the 30 operation reference.
Identity and role guide: teacher, student, managed token and organisation token boundaries.
School workflow guide: approval, roster, login, reset, suspension and deletion.
Policy and data-use notes: defaults, minors rules, effective policy and usage disclosure.
Socket specification and socket README: live admission, binary protocol and verification checklist.
Each HTTP reference has a separate README with application use, required standing, an example, parameters and responses. The shared organisation schema may mention team roles; valid classroom roles remain teacher, co-teacher, billing and student.

Verification boundary#

The public OpenAPI source matched the deployed full specification on 2026-10-26. The additional notes were checked against the working tree. Some developer-access controls are in-progress working-tree features, and provider checks found no Team or Classroom portal DNS/CloudFront alias at that snapshot. Source code and these docs do not prove those portals or student sign-in are deployed. No real student account, roster upload, authenticated classroom write or live room was exercised for this documentation task.
Modified at 2026-10-26 13:24:24
Previous
ReceivedOrgInvitation
Next
Classroom API specification notes
Built with