Classrooms and diagnostics
Console client configuration · Response and shared models
Classrooms support realtime and live modes. Creation accepts the name, teacher, scheduled start, and durationMinutes; the server derives the scheduled end. update modifies configuration before class starts and requires classroomId, name, and teacherEduUserId. It does not update the start, duration, or courseware bindings.
replaceStudents replaces the student roster. bindCoursewares associates courseware with a class. addWhiteboardCourseware adds ready, bound courseware to its whiteboard using requestId as the operation identifier. Unbinding preserves the courseware asset.
listEnteredUsers returns users who entered the class. Join attempts use cursor pagination. Entry traces contain independent eventPage and sessionsPage cursors; pass cursor and sessionsCursor respectively. Use attemptId to select an entry attempt. To export diagnostics, collect both page streams and serialize the result as JSON.
Attendance returns member totals and segments. Open segments are marked open=true and excluded from totals. Live source kinds are device, file, push, and pull. Playback credentials contain status, relayVersion, and streams; streams are empty when none are ready.
Application backends use application business APIs with app credentials. This page describes the separate tenant management calls.
classrooms.list
List classrooms.
GET /v1/classrooms
Authentication: tenant Bearer token and x-app-id.
| Language | Call |
|---|---|
| Node.js | c.classrooms.list(appId, input) |
| Python | c.classrooms.list(app_id, **input) |
| Java | c.classrooms.list(appId, input) |
| Go | c.Classrooms.List(ctx, appID, input, &result) |
| PHP | $c->classrooms->list($appId, $input) |
Input: ListClassroomsQuery. Fields are sent as URL query parameters.
| Field | Required | Type | Description |
|---|---|---|---|
status | No | ClassroomStatus | undefined | Status filter or target status |
q | No | string | undefined | Search keyword |
startsAtFrom | No | string | undefined | Inclusive scheduled-start lower bound |
startsAtTo | No | string | undefined | Exclusive scheduled-start upper bound |
actualStartedAtFrom | No | string | undefined | Actual-start lower bound |
actualStartedAtTo | No | string | undefined | Actual-start upper bound |
page | No | number | undefined | Page number starting at 1 |
pageSize | No | number | undefined | Maximum items per page |
Returns: ListClassroomsResult. See shared models for nested fields.
classrooms.get
Get classroom.
GET /v1/classrooms/detail
Authentication: tenant Bearer token and x-app-id.
| Language | Call |
|---|---|
| Node.js | c.classrooms.get(appId, input) |
| Python | c.classrooms.get(app_id, **input) |
| Java | c.classrooms.get(appId, input) |
| Go | c.Classrooms.Get(ctx, appID, input, &result) |
| PHP | $c->classrooms->get($appId, $input) |
Input: ClassroomIdInput. Fields are sent as URL query parameters.
| Field | Required | Type | Description |
|---|---|---|---|
classroomId | Yes | string | Classroom ID |
Returns: ClassroomRecord. See shared models for nested fields.
classrooms.create
Create classroom.
POST /v1/classrooms
Authentication: tenant Bearer token and x-app-id.
| Language | Call |
|---|---|
| Node.js | c.classrooms.create(appId, input) |
| Python | c.classrooms.create(app_id, **input) |
| Java | c.classrooms.create(appId, input) |
| Go | c.Classrooms.Create(ctx, appID, input, &result) |
| PHP | $c->classrooms->create($appId, $input) |
Input: CreateClassroomPayload. Fields are sent in the JSON body.
| Field | Required | Type | Description |
|---|---|---|---|
name | Yes | string | Application or classroom name |
teacherEduUserId | Yes | string | Teacher user ID |
startsAt | Yes | string | Scheduled start, ISO 8601 |
durationMinutes | Yes | number | Duration in minutes; classroom creation accepts 5–480 |
resolution | No | ClassroomResolution | undefined | Classroom video resolution |
maxOnStage | No | number | undefined | Concurrent on-stage limit, 1–16 |
maxAudience | No | number | undefined | Total concurrent room limit including on-stage users, up to 100000 |
classroomType | No | ClassroomType | undefined | realtime or live classroom |
liveSourceKind | No | string | undefined | Live source kind at classroom creation |
liveVideoId | No | string | undefined | Live video asset ID |
pullStreamUrl | No | string | undefined | Source pull-stream URL |
recordMode | No | ClassroomRecordMode | undefined | Recording mode |
avSubscribeMode | No | ClassroomAvSubscribeMode | undefined | Audio/video subscription mode |
defaultOnStage | No | boolean | undefined | Default on-stage state for students and assistants |
allowTeacherControlDevice | No | boolean | undefined | Allow teacher device control |
overtimeMinutes | No | number | undefined | Allowed overtime in minutes, 0–180 |
autoStartOnSchedule | No | boolean | undefined | Automatically start on schedule |
recordBackgroundUrl | No | string | undefined | Recording background image URL |
joinPolicy | No | ClassroomJoinPolicy | undefined | Invited-only or open-application joining policy |
videoOnly | No | boolean | undefined | Video-only classroom without whiteboard |
coursewareIds | No | string[] | undefined | Courseware IDs, at most 50 per binding request |
studentEduUserIds | No | string[] | undefined | Student IDs to add on creation |
uiConfig | No | Record<string, unknown> | undefined | Classroom UI configuration |
Returns: ClassroomRecord. See shared models for nested fields.
classrooms.update
Update classroom.
PATCH /v1/classrooms/update
Authentication: tenant Bearer token and x-app-id.
| Language | Call |
|---|---|
| Node.js | c.classrooms.update(appId, input) |
| Python | c.classrooms.update(app_id, **input) |
| Java | c.classrooms.update(appId, input) |
| Go | c.Classrooms.Update(ctx, appID, input, &result) |
| PHP | $c->classrooms->update($appId, $input) |
Input: UpdateClassroomInput. Fields are sent in the JSON body.
| Field | Required | Type | Description |
|---|---|---|---|
classroomId | Yes | string | Classroom ID |
name | Yes | string | Application or classroom name |
teacherEduUserId | Yes | string | Teacher user ID |
resolution | No | ClassroomResolution | undefined | Classroom video resolution |
maxOnStage | No | number | undefined | Concurrent on-stage limit, 1–16 |
maxAudience | No | number | undefined | Total concurrent room limit including on-stage users, up to 100000 |
classroomType | No | ClassroomType | undefined | realtime or live classroom |
liveSourceKind | No | string | undefined | Live source kind at classroom creation |
liveVideoId | No | string | undefined | Live video asset ID |
pullStreamUrl | No | string | undefined | Source pull-stream URL |
recordMode | No | ClassroomRecordMode | undefined | Recording mode |
avSubscribeMode | No | ClassroomAvSubscribeMode | undefined | Audio/video subscription mode |
defaultOnStage | No | boolean | undefined | Default on-stage state for students and assistants |
allowTeacherControlDevice | No | boolean | undefined | Allow teacher device control |
overtimeMinutes | No | number | undefined | Allowed overtime in minutes, 0–180 |
autoStartOnSchedule | No | boolean | undefined | Automatically start on schedule |
recordBackgroundUrl | No | string | undefined | Recording background image URL |
joinPolicy | No | ClassroomJoinPolicy | undefined | Invited-only or open-application joining policy |
videoOnly | No | boolean | undefined | Video-only classroom without whiteboard |
uiConfig | No | Record<string, unknown> | undefined | Classroom UI configuration |
Returns: ClassroomRecord. See shared models for nested fields.
classrooms.start
Start classroom.
POST /v1/classrooms/start
Authentication: tenant Bearer token and x-app-id.
| Language | Call |
|---|---|
| Node.js | c.classrooms.start(appId, input) |
| Python | c.classrooms.start(app_id, **input) |
| Java | c.classrooms.start(appId, input) |
| Go | c.Classrooms.Start(ctx, appID, input, &result) |
| PHP | $c->classrooms->start($appId, $input) |
Input: ClassroomIdInput. Fields are sent in the JSON body.
| Field | Required | Type | Description |
|---|---|---|---|
classroomId | Yes | string | Classroom ID |
Returns: ClassroomRecord. See shared models for nested fields.
classrooms.end
End classroom.
POST /v1/classrooms/end
Authentication: tenant Bearer token and x-app-id.
| Language | Call |
|---|---|
| Node.js | c.classrooms.end(appId, input) |
| Python | c.classrooms.end(app_id, **input) |
| Java | c.classrooms.end(appId, input) |
| Go | c.Classrooms.End(ctx, appID, input, &result) |
| PHP | $c->classrooms->end($appId, $input) |
Input: ClassroomIdInput. Fields are sent in the JSON body.
| Field | Required | Type | Description |
|---|---|---|---|
classroomId | Yes | string | Classroom ID |
Returns: ClassroomRecord. See shared models for nested fields.
classrooms.listMembers
List classroom members.
GET /v1/classrooms/members
Authentication: tenant Bearer token and x-app-id.
| Language | Call |
|---|---|
| Node.js | c.classrooms.listMembers(appId, input) |
| Python | c.classrooms.list_members(app_id, **input) |
| Java | c.classrooms.listMembers(appId, input) |
| Go | c.Classrooms.ListMembers(ctx, appID, input, &result) |
| PHP | $c->classrooms->listMembers($appId, $input) |
Input: ClassroomIdInput. Fields are sent as URL query parameters.
| Field | Required | Type | Description |
|---|---|---|---|
classroomId | Yes | string | Classroom ID |
Returns: ListClassroomMembersResult. See shared models for nested fields.
classrooms.addMember
Add classroom member.
POST /v1/classrooms/members
Authentication: tenant Bearer token and x-app-id.
| Language | Call |
|---|---|
| Node.js | c.classrooms.addMember(appId, input) |
| Python | c.classrooms.add_member(app_id, **input) |
| Java | c.classrooms.addMember(appId, input) |
| Go | c.Classrooms.AddMember(ctx, appID, input, &result) |
| PHP | $c->classrooms->addMember($appId, $input) |
Input: AddMemberInput. Fields are sent in the JSON body.
| Field | Required | Type | Description |
|---|---|---|---|
eduUserId | Yes | string | Classroom user ID |
role | Yes | "teacher" | "assistant" | "student" | "inspector" | Member or entry code role |
classroomId | Yes | string | Classroom ID |
Returns: MembershipResult. See shared models for nested fields.
classrooms.replaceStudents
Replace student roster.
PUT /v1/classrooms/members/students
Authentication: tenant Bearer token and x-app-id.
| Language | Call |
|---|---|
| Node.js | c.classrooms.replaceStudents(appId, input) |
| Python | c.classrooms.replace_students(app_id, **input) |
| Java | c.classrooms.replaceStudents(appId, input) |
| Go | c.Classrooms.ReplaceStudents(ctx, appID, input, &result) |
| PHP | $c->classrooms->replaceStudents($appId, $input) |
Input: ReplaceStudentsInput. Fields are sent in the JSON body.
| Field | Required | Type | Description |
|---|---|---|---|
eduUserIds | Yes | string[] | Complete replacement student roster |
classroomId | Yes | string | Classroom ID |
Returns: SetClassroomStudentsResult. See shared models for nested fields.
classrooms.listCoursewares
List classroom courseware.
GET /v1/classrooms/coursewares
Authentication: tenant Bearer token and x-app-id.
| Language | Call |
|---|---|
| Node.js | c.classrooms.listCoursewares(appId, input) |
| Python | c.classrooms.list_coursewares(app_id, **input) |
| Java | c.classrooms.listCoursewares(appId, input) |
| Go | c.Classrooms.ListCoursewares(ctx, appID, input, &result) |
| PHP | $c->classrooms->listCoursewares($appId, $input) |
Input: ClassroomIdInput. Fields are sent as URL query parameters.
| Field | Required | Type | Description |
|---|---|---|---|
classroomId | Yes | string | Classroom ID |
Returns: ClassroomCoursewaresResult. See shared models for nested fields.
classrooms.bindCoursewares
Bind classroom courseware.
POST /v1/classrooms/coursewares
Authentication: tenant Bearer token and x-app-id.
| Language | Call |
|---|---|
| Node.js | c.classrooms.bindCoursewares(appId, input) |
| Python | c.classrooms.bind_coursewares(app_id, **input) |
| Java | c.classrooms.bindCoursewares(appId, input) |
| Go | c.Classrooms.BindCoursewares(ctx, appID, input, &result) |
| PHP | $c->classrooms->bindCoursewares($appId, $input) |
Input: BindCoursewaresInput. Fields are sent in the JSON body.
| Field | Required | Type | Description |
|---|---|---|---|
coursewareIds | Yes | string[] | Courseware IDs, at most 50 per binding request |
classroomId | Yes | string | Classroom ID |
Returns: BindCoursewaresResult. See shared models for nested fields.
classrooms.unbindCoursewares
Unbind classroom courseware.
DELETE /v1/classrooms/coursewares
Authentication: tenant Bearer token and x-app-id.
| Language | Call |
|---|---|
| Node.js | c.classrooms.unbindCoursewares(appId, input) |
| Python | c.classrooms.unbind_coursewares(app_id, **input) |
| Java | c.classrooms.unbindCoursewares(appId, input) |
| Go | c.Classrooms.UnbindCoursewares(ctx, appID, input, &result) |
| PHP | $c->classrooms->unbindCoursewares($appId, $input) |
Input: BindCoursewaresInput. classroomId is sent in the query string; other fields are sent in the JSON body.
| Field | Required | Type | Description |
|---|---|---|---|
coursewareIds | Yes | string[] | Courseware IDs, at most 50 per binding request |
classroomId | Yes | string | Classroom ID |
Returns: UnbindCoursewaresResult. See shared models for nested fields.
classrooms.listWhiteboardCoursewares
List whiteboard courseware.
GET /v1/classrooms/whiteboard/coursewares
Authentication: tenant Bearer token and x-app-id.
| Language | Call |
|---|---|
| Node.js | c.classrooms.listWhiteboardCoursewares(appId, input) |
| Python | c.classrooms.list_whiteboard_coursewares(app_id, **input) |
| Java | c.classrooms.listWhiteboardCoursewares(appId, input) |
| Go | c.Classrooms.ListWhiteboardCoursewares(ctx, appID, input, &result) |
| PHP | $c->classrooms->listWhiteboardCoursewares($appId, $input) |
Input: ClassroomIdInput. Fields are sent as URL query parameters.
| Field | Required | Type | Description |
|---|---|---|---|
classroomId | Yes | string | Classroom ID |
Returns: WhiteboardCoursewaresResult. See shared models for nested fields.
classrooms.addWhiteboardCourseware
Add courseware to whiteboard.
POST /v1/classrooms/whiteboard/coursewares
Authentication: tenant Bearer token and x-app-id.
| Language | Call |
|---|---|
| Node.js | c.classrooms.addWhiteboardCourseware(appId, input) |
| Python | c.classrooms.add_whiteboard_courseware(app_id, **input) |
| Java | c.classrooms.addWhiteboardCourseware(appId, input) |
| Go | c.Classrooms.AddWhiteboardCourseware(ctx, appID, input, &result) |
| PHP | $c->classrooms->addWhiteboardCourseware($appId, $input) |
Input: AddWhiteboardCoursewareInput. Fields are sent in the JSON body.
| Field | Required | Type | Description |
|---|---|---|---|
coursewareId | Yes | string | Courseware ID |
requestId | Yes | string | Identifier for the whiteboard courseware operation |
classroomId | Yes | string | Classroom ID |
Returns: ClassroomWhiteboardCoursewareRecord. See shared models for nested fields.
classrooms.attendance
Classroom attendance.
GET /v1/classrooms/attendance
Authentication: tenant Bearer token and x-app-id.
| Language | Call |
|---|---|
| Node.js | c.classrooms.attendance(appId, input) |
| Python | c.classrooms.attendance(app_id, **input) |
| Java | c.classrooms.attendance(appId, input) |
| Go | c.Classrooms.Attendance(ctx, appID, input, &result) |
| PHP | $c->classrooms->attendance($appId, $input) |
Input: AttendanceInput. Fields are sent as URL query parameters.
| Field | Required | Type | Description |
|---|---|---|---|
eduUserId | No | string | undefined | Classroom user ID |
classroomId | Yes | string | Classroom ID |
Returns: AttendanceResult. See shared models for nested fields.
classrooms.listEnteredUsers
List entered users.
GET /v1/classrooms/entered-users
Authentication: tenant Bearer token and x-app-id.
| Language | Call |
|---|---|
| Node.js | c.classrooms.listEnteredUsers(appId, input) |
| Python | c.classrooms.list_entered_users(app_id, **input) |
| Java | c.classrooms.listEnteredUsers(appId, input) |
| Go | c.Classrooms.ListEnteredUsers(ctx, appID, input, &result) |
| PHP | $c->classrooms->listEnteredUsers($appId, $input) |
Input: EnteredUsersInput. Fields are sent as URL query parameters.
| Field | Required | Type | Description |
|---|---|---|---|
classroomId | Yes | string | Classroom ID |
page | No | number | undefined | Page number starting at 1 |
pageSize | No | number | undefined | Maximum items per page |
Returns: ListClassroomEnteredUsersResult. See shared models for nested fields.
classrooms.listJoinAttempts
List join attempts.
GET /v1/classrooms/join-attempts
Authentication: tenant Bearer token and x-app-id.
| Language | Call |
|---|---|
| Node.js | c.classrooms.listJoinAttempts(appId, input) |
| Python | c.classrooms.list_join_attempts(app_id, **input) |
| Java | c.classrooms.listJoinAttempts(appId, input) |
| Go | c.Classrooms.ListJoinAttempts(ctx, appID, input, &result) |
| PHP | $c->classrooms->listJoinAttempts($appId, $input) |
Input: JoinAttemptsInput. Fields are sent as URL query parameters.
| Field | Required | Type | Description |
|---|---|---|---|
classroomId | Yes | string | Classroom ID |
result | No | string | undefined | Entry-result filter |
joinStatus | No | string | undefined | Join-status filter |
failureDomain | No | string | undefined | Failure-domain filter |
platform | No | string | undefined | Client platform |
sdkVersion | No | string | undefined | SDK version |
appVersion | No | string | undefined | Client application version |
networkType | No | string | undefined | Network type |
provider | No | string | undefined | Provider |
eduUserId | No | string | undefined | Classroom user ID |
startedAtFrom | No | string | undefined | Attempt-start lower bound |
startedAtTo | No | string | undefined | Attempt-start upper bound |
cursor | No | string | undefined | Cursor returned by the previous page |
pageSize | No | number | undefined | Maximum items per page |
Returns: ListClassroomJoinAttemptsResult. See shared models for nested fields.
classrooms.getEnteredUserTrace
Get user entry trace.
GET /v1/classrooms/entered-users/trace
Authentication: tenant Bearer token and x-app-id.
| Language | Call |
|---|---|
| Node.js | c.classrooms.getEnteredUserTrace(appId, input) |
| Python | c.classrooms.get_entered_user_trace(app_id, **input) |
| Java | c.classrooms.getEnteredUserTrace(appId, input) |
| Go | c.Classrooms.GetEnteredUserTrace(ctx, appID, input, &result) |
| PHP | $c->classrooms->getEnteredUserTrace($appId, $input) |
Input: EnteredUserTraceInput. Fields are sent as URL query parameters.
| Field | Required | Type | Description |
|---|---|---|---|
classroomId | Yes | string | Classroom ID |
attemptId | Yes | string | Join attempt ID |
cursor | No | string | undefined | Cursor returned by the previous page |
pageSize | No | number | undefined | Maximum items per page |
sessionsCursor | No | string | undefined | Session-page cursor |
sessionsPageSize | No | number | undefined | Session page size |
eduUserId | Yes | string | Classroom user ID |
Returns: ClassroomEnteredUserTrace. See shared models for nested fields.
classrooms.getLiveSource
Get live source.
GET /v1/classrooms/live-source
Authentication: tenant Bearer token and x-app-id.
| Language | Call |
|---|---|
| Node.js | c.classrooms.getLiveSource(appId, input) |
| Python | c.classrooms.get_live_source(app_id, **input) |
| Java | c.classrooms.getLiveSource(appId, input) |
| Go | c.Classrooms.GetLiveSource(ctx, appID, input, &result) |
| PHP | $c->classrooms->getLiveSource($appId, $input) |
Input: ClassroomIdInput. Fields are sent as URL query parameters.
| Field | Required | Type | Description |
|---|---|---|---|
classroomId | Yes | string | Classroom ID |
Returns: LiveSourceRecord. See shared models for nested fields.
classrooms.setLiveSource
Set live source.
PUT /v1/classrooms/live-source
Authentication: tenant Bearer token and x-app-id.
| Language | Call |
|---|---|
| Node.js | c.classrooms.setLiveSource(appId, input) |
| Python | c.classrooms.set_live_source(app_id, **input) |
| Java | c.classrooms.setLiveSource(appId, input) |
| Go | c.Classrooms.SetLiveSource(ctx, appID, input, &result) |
| PHP | $c->classrooms->setLiveSource($appId, $input) |
Input: SetLiveSourceInput. Fields are sent in the JSON body.
| Field | Required | Type | Description |
|---|---|---|---|
kind | Yes | "device" | "file" | "push" | "pull" | Live source kind |
liveVideoId | No | string | undefined | Live video asset ID |
pullStreamUrl | No | string | undefined | Source pull-stream URL |
classroomId | Yes | string | Classroom ID |
Returns: LiveSourceRecord. See shared models for nested fields.
classrooms.issueLivePushCredential
Issue live push credential.
POST /v1/classrooms/live-source/push-credential
Authentication: tenant Bearer token and x-app-id.
| Language | Call |
|---|---|
| Node.js | c.classrooms.issueLivePushCredential(appId, input) |
| Python | c.classrooms.issue_live_push_credential(app_id, **input) |
| Java | c.classrooms.issueLivePushCredential(appId, input) |
| Go | c.Classrooms.IssueLivePushCredential(ctx, appID, input, &result) |
| PHP | $c->classrooms->issueLivePushCredential($appId, $input) |
Input: ClassroomIdInput. Fields are sent in the JSON body.
| Field | Required | Type | Description |
|---|---|---|---|
classroomId | Yes | string | Classroom ID |
Returns: LivePushCredential. See shared models for nested fields.
classrooms.getLivePlayCredentials
Get live playback credentials.
GET /v1/classrooms/live/play-credentials
Authentication: tenant Bearer token and x-app-id.
| Language | Call |
|---|---|
| Node.js | c.classrooms.getLivePlayCredentials(appId, input) |
| Python | c.classrooms.get_live_play_credentials(app_id, **input) |
| Java | c.classrooms.getLivePlayCredentials(appId, input) |
| Go | c.Classrooms.GetLivePlayCredentials(ctx, appID, input, &result) |
| PHP | $c->classrooms->getLivePlayCredentials($appId, $input) |
Input: ClassroomIdInput. Fields are sent as URL query parameters.
| Field | Required | Type | Description |
|---|---|---|---|
classroomId | Yes | string | Classroom ID |
Returns: LivePlayCredentials. See shared models for nested fields.