openapi: 3.1.0 info: title: Class Developer Classes Enrollments API version: v1 x-apievangelist-provenance: generated: '2026-07-18' method: generated source: https://developer.class.com/ note: Faithful OpenAPI reconstruction of the operations, paths, HTTP methods, authentication scheme, permission scopes, pagination model and documented request fields published on developer.class.com. Request/response object schemas capture only fields named in the public documentation; no fields were invented. This is an API Evangelist generated spec, not a Class-published artifact. description: REST API for Class (fka ClassEDU), the virtual classroom platform built for Zoom and Microsoft Teams. The API lets administrators and integrators provision classes, manage enrollments, generate learner launch links, schedule class dates, manage reusable class templates, manage non-learner users, and pull attendance and engagement reporting. Authentication uses a per-organization API key presented as a Bearer token, gated by permission scopes. contact: name: Class Developer Platform url: https://developer.class.com/ termsOfService: https://www.class.com/terms-of-service/ servers: - url: https://{organization}.class.com description: Base URL is unique to each organization and is retrieved from the API Keys page in the Class Admin UI after an API key is created. variables: organization: default: your-organization description: Your organization's Class subdomain. security: - bearerAuth: [] tags: - name: Enrollments description: Enroll learners into classes and manage their enrollment records. paths: /api/v1/class/enrollments: post: operationId: createEnrollment summary: Create an Enrollment tags: - Enrollments security: - bearerAuth: - enrollment:write requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/EnrollmentCreate' responses: '201': $ref: '#/components/responses/EnrollmentResponse' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' get: operationId: getEnrollments summary: Get Enrollments tags: - Enrollments security: - bearerAuth: - enrollment:read parameters: - $ref: '#/components/parameters/ClassId' - $ref: '#/components/parameters/ExtClassId' - $ref: '#/components/parameters/Page' - $ref: '#/components/parameters/Limit' responses: '200': $ref: '#/components/responses/EnrollmentListResponse' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' put: operationId: updateEnrollment summary: Update an Enrollment tags: - Enrollments security: - bearerAuth: - enrollment:write requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/EnrollmentCreate' responses: '200': $ref: '#/components/responses/EnrollmentResponse' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' delete: operationId: deleteEnrollment summary: Remove an Enrollment tags: - Enrollments security: - bearerAuth: - enrollment:write parameters: - $ref: '#/components/parameters/ClassId' - $ref: '#/components/parameters/ExtClassId' responses: '200': $ref: '#/components/responses/Deleted' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' components: parameters: Page: name: page in: query description: Page number to retrieve (positive integer). required: false schema: type: integer minimum: 1 default: 1 ClassId: name: class_id in: query description: Class identifier assigned by Class. required: false schema: type: string Limit: name: limit in: query description: Records per page (1-1000). required: false schema: type: integer minimum: 1 maximum: 1000 default: 100 ExtClassId: name: ext_class_id in: query description: External class identifier supplied by the integrator. required: false schema: type: string schemas: Error: type: object properties: message: type: string description: Human-readable explanation of the failure. Enrollment: type: object properties: student_id: type: string ext_person_id: type: string email: type: string format: email class_id: type: string role: type: string EnrollmentCreate: type: object properties: class_id: type: string ext_class_id: type: string ext_person_id: type: string email: type: string format: email first_name: type: string last_name: type: string role: type: string display_name: type: string Pagination: type: object properties: total_records: type: integer current_page: type: integer total_pages: type: integer next_page: type: - integer - 'null' prev_page: type: - integer - 'null' responses: EnrollmentListResponse: description: A page of enrollments. content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Enrollment' pagination: $ref: '#/components/schemas/Pagination' EnrollmentResponse: description: An enrollment. content: application/json: schema: $ref: '#/components/schemas/Enrollment' Unauthorized: description: Unauthorized - missing or invalid API key. content: application/json: schema: $ref: '#/components/schemas/Error' BadRequest: description: Bad Request - validation failed. content: application/json: schema: $ref: '#/components/schemas/Error' NotFound: description: Not Found. content: application/json: schema: $ref: '#/components/schemas/Error' Forbidden: description: Forbidden - the API key lacks the required scope. content: application/json: schema: $ref: '#/components/schemas/Error' Deleted: description: The resource was removed. securitySchemes: bearerAuth: type: http scheme: bearer description: 'Per-organization API key presented as a Bearer token in the Authorization header (Authorization: Bearer ). The key secret is shown only once, at key creation, in the Admin UI. Each key is granted a set of permission scopes; selecting a write scope automatically grants the matching read scope. Documented scopes: class:read, class:write, enrollment:read, enrollment:write, attendance:read, metrics:read, schedule:read, schedule:write, template:read, template:write, user:read, user:write.'