Class (fka ClassEDU) Classes API
Create, read, update and remove classes.
Create, read, update and remove classes.
openapi: 3.1.0
info:
title: Class Developer Classes 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: Classes
description: Create, read, update and remove classes.
paths:
/api/v1/classes:
post:
operationId: createClass
summary: Create a Class
description: Create a new class, optionally from a template.
tags:
- Classes
security:
- bearerAuth:
- class:write
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ClassCreate'
responses:
'201':
$ref: '#/components/responses/ClassResponse'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'500':
$ref: '#/components/responses/ServerError'
'503':
$ref: '#/components/responses/ServiceUnavailable'
get:
operationId: getClasses
summary: Get class information
description: Retrieve information for all classes, or a single class when a class_id or ext_class_id is supplied.
tags:
- Classes
security:
- bearerAuth:
- class:read
parameters:
- $ref: '#/components/parameters/ClassId'
- $ref: '#/components/parameters/ExtClassId'
- $ref: '#/components/parameters/Page'
- $ref: '#/components/parameters/Limit'
responses:
'200':
$ref: '#/components/responses/ClassListResponse'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
patch:
operationId: updateClass
summary: Update a Class
tags:
- Classes
security:
- bearerAuth:
- class:write
parameters:
- $ref: '#/components/parameters/ClassId'
- $ref: '#/components/parameters/ExtClassId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ClassUpdate'
responses:
'200':
$ref: '#/components/responses/ClassResponse'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
delete:
operationId: deleteClass
summary: Remove a Class
tags:
- Classes
security:
- bearerAuth:
- class: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:
responses:
ClassResponse:
description: A class.
content:
application/json:
schema:
$ref: '#/components/schemas/Class'
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'
ServerError:
description: Internal Server Error.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
ServiceUnavailable:
description: Service Unavailable.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
ClassListResponse:
description: A page of classes.
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Class'
pagination:
$ref: '#/components/schemas/Pagination'
Unauthorized:
description: Unauthorized - missing or invalid API key.
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.
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:
ClassSettings:
type: object
properties:
waiting_room:
type: boolean
join_before_host:
type: boolean
jbh_time:
type: integer
SessionTime:
type: object
properties:
start_time:
type: integer
description: Unix time.
end_time:
type: integer
description: Unix time.
Class:
type: object
properties:
class_id:
type: string
ext_class_id:
type: string
class_deferred_id:
type: string
class_name:
type: string
class_description:
type: string
timezone:
type: string
Error:
type: object
properties:
message:
type: string
description: Human-readable explanation of the failure.
ClassUpdate:
allOf:
- $ref: '#/components/schemas/ClassCreate'
Instructor:
type: object
properties:
email:
type: string
format: email
user_name:
type: string
ClassCreate:
type: object
required:
- class_name
properties:
email:
type: string
format: email
first_name:
type: string
last_name:
type: string
display_name:
type: string
ext_class_id:
type: string
class_name:
type: string
class_description:
type: string
template_id:
type: string
meeting_passcode:
type: string
timezone:
type: string
description: Time Zone ID.
session_times:
type: array
items:
$ref: '#/components/schemas/SessionTime'
settings:
$ref: '#/components/schemas/ClassSettings'
additional_instructors:
type: array
items:
$ref: '#/components/schemas/Instructor'
tracking_fields:
type: array
items:
$ref: '#/components/schemas/TrackingField'
TrackingField:
type: object
properties:
field:
type: string
value:
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'
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: 'Per-organization API key presented as a Bearer token in the Authorization header (Authorization: Bearer <api_key_secret>). 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.'