Classrooms, members and permissions
These methods belong to the classroom client. The table uses Node.js names; each language guide describes its naming conventions.
Methods and routes
| Method | HTTP |
|---|---|
users.register | POST /v1/users |
auth.issueToken | LOCAL HS256 (eduskit-edu) |
classrooms.create | POST /v1/classrooms |
classrooms.start | POST /v1/classrooms/start |
classrooms.end | POST /v1/classrooms/end |
classrooms.members.add | POST /v1/classrooms/members |
classrooms.members.list | GET /v1/classrooms/members |
classrooms.members.replaceStudents | PUT /v1/classrooms/members/students |
classrooms.permissions.get | GET /v1/classrooms/members/permissions |
classrooms.permissions.set | POST /v1/classrooms/members/permissions |
classrooms.permissions.clear | DELETE /v1/classrooms/members/permissions |
classrooms.coursewares.list | GET /v1/classrooms/coursewares |
classrooms.coursewares.bind | POST /v1/classrooms/coursewares |
classrooms.coursewares.unbind | DELETE /v1/classrooms/coursewares |
app.getUiConfig | GET /v1/app/ui-config |
app.setUiConfig | PUT /v1/app/ui-config |
The SDK places GET/DELETE identifiers in query parameters and POST/PUT identifiers in JSON bodies. DELETE can also have a JSON body: clearing a permission requires operatorEduUserId, and unbinding courseware requires coursewareIds. Proxies must preserve these bodies.
Classroom creation
| Field | Constraint |
|---|---|
name | Required classroom name |
startsAt | ISO 8601, at least 10 minutes after the current time |
durationMinutes | Integer, 5–480 minutes |
teacherEduUserId | Registered user in the same application; automatically added as teacher |
studentEduUserIds | Optional student roster, excluding the lead teacher |
joinPolicy | invite_only (default) or open_app |
maxOnStage | Concurrent stage limit, 1–16 |
videoOnly | true disables classroom whiteboard initialization |
recordMode | none, classroom or mix |
uiConfig | Merged with application defaults into a snapshot at creation |
The backend also checks application resources and plan constraints. Use returned classroomId and eduUserId values; short example names are not valid platform IDs.
Members and permissions
Continue from the Node.js initialization. Use actual registration/creation results for classroomId, studentId and teacherId:
await sdk.client.classrooms.members.add(classroomId, {
eduUserId: studentId,
role: 'student',
});
const members = await sdk.client.classrooms.members.list(classroomId);
await sdk.client.classrooms.permissions.set(classroomId, studentId, {
permission: 'whiteboard',
effect: 'grant',
operatorEduUserId: teacherId,
});
const permissions = await sdk.client.classrooms.permissions.get(classroomId, studentId);
await sdk.client.classrooms.permissions.clear(classroomId, studentId, 'whiteboard', {
operatorEduUserId: teacherId,
});
set(... effect: 'revoke') writes a deny override. clear removes the override and restores role/application rules. replaceStudents(id, { eduUserIds }) replaces the complete student roster; an empty array removes all students.
Courseware and UI configuration
coursewares.bind(id, { coursewareIds }) binds existing courseware in the application and is idempotent for repeated bindings. unbind removes the classroom association. A conversion job ID, whiteboard fileId and classroom coursewareId are distinct identifiers.
app.setUiConfig({ uiConfig }) changes application UI defaults. Existing classrooms retain the snapshot taken at creation.
Call classrooms.start(id) and classrooms.end(id) for explicit class start/end actions. A client leaving the room calls leaveClassroom() and does not end the class for others.
Application and tenant APIs
Source builds provide 50 application-authenticated HTTP routes through client, including users, classrooms, courseware libraries, live assets, and diagnostics. See application business APIs and workflow examples. The separate tenant management client uses tenant sessions for account, application, dashboard, and billing operations. The new methods require the matching server-api deployment and a source build; public 0.1.5 packages do not include them.