Class (fka ClassEDU) Classes API

Create, read, update and remove classes.

OpenAPI Specification

class-fka-classedu-classes-api-openapi.yml Raw ↑
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.'