Reference: every action
Every action SchoolStack can do, generated from its list of actions (so it is always
complete). The name in code is what the command-line tool and AI agents use; the
parameters are the values the action takes (? = optional). People use the same actions
through the pages described in the rest of this guide.
Don't edit this page by hand: run UPDATE_GUIDE=1 cargo test -p schoolstack-web help.
Actions that change something
Accounts and settings
user.create: Create account. Parameters:{name: string, email: string, passwordHash: string, role?: "student"|"teacher", classCode?: string}user.createFromInvite: Create account from an invitation. Parameters:{tokenHash: string, name: string, passwordHash: string}user.chooseRole: Choose your role. On the pages: Classes. Parameters:{role: "student"|"teacher"}user.setPassword: Change password. On the pages: Settings ▸ Password. Parameters:{passwordHash: string}user.resetPassword: Reset password. On the pages: People. Parameters:{user: id, passwordHash: string}user.setPrefs: Settings. On the pages: Settings. Parameters:{textSize?: "normal"|"large"|"larger", highContrast?: bool, reduceMotion?: bool, timeZone?: "Area/City"|"", emailSummary?: bool}
Classes, people and grading
class.create: Create class. On the pages: Classes ▸ +. Parameters:{name: string, section?: string, subject?: string, room?: string, description?: string}class.copy: Copy class. On the pages: Class ▸ Settings. Parameters:{class: id, name?: string, section?: string, subject?: string, description?: string}class.update: Save class settings. On the pages: Class ▸ Settings. Parameters:{class: id, name?: string, section?: string, subject?: string, room?: string, description?: string, stream?: "studentsPostAndComment"|"studentsCommentOnly"|"teachersOnly", showDeleted?: bool, guardianSummaries?: bool, color?: "blue"|"green"|"purple"|"orange"|"pink"|"teal"}class.setEmails: Daily summary email. On the pages: Class ▸ Settings. Parameters:{class: id, newWork?: bool, returned?: bool, dueSoon?: bool, turnedIn?: bool}class.setMeeting: Video meeting link. On the pages: Class ▸ Settings. Parameters:{class: id, link?: string ("" removes it), visible?: bool}class.addLiveSession: Add live lesson. On the pages: Class ▸ Settings. Parameters:{class: id, title?: string, date?: "YYYY-MM-DD", days?: ["sun"|"mon"|"tue"|"wed"|"thu"|"fri"|"sat"], time: "HH:MM", minutes?: number}class.removeLiveSession: Remove live lesson. On the pages: Class ▸ Settings. Parameters:{class: id, session: id}class.resetCode: Reset class code. On the pages: Class ▸ Settings. Parameters:{class: id}class.setCodeEnabled: Turn class code on or off. On the pages: Class ▸ Settings. Parameters:{class: id, enabled: bool}class.join: Join class. On the pages: Classes ▸ +. Parameters:{code: string}class.addStudent: Invite students. On the pages: Class ▸ People. Parameters:{class: id, email: string}class.addTeacher: Invite teachers. On the pages: Class ▸ People. Parameters:{class: id, email: string}class.removeMember: Remove. On the pages: Class ▸ People. Parameters:{class: id, user: id}class.mute: Mute. On the pages: Class ▸ People. Parameters:{class: id, user: id, muted?: bool}class.offerOwnership: Invite to own class. On the pages: Class ▸ People. Parameters:{class: id, user: id}class.cancelOwnership: Cancel invitation to own. On the pages: Class ▸ People. Parameters:{class: id}class.acceptOwnership: Accept (class ownership). On the pages: Classes. Parameters:{class: id}class.declineOwnership: Decline (class ownership). On the pages: Classes. Parameters:{class: id}class.invite: Invite by email. On the pages: Class ▸ People. Parameters:{class: id, email: string, role: "student"|"teacher", tokenHash?: string}class.cancelInvite: Cancel invitation. On the pages: Class ▸ People. Parameters:{class: id, invite: id}class.acceptInvite: Join (invitation). On the pages: Classes. Parameters:{class: id}class.declineInvite: Decline (invitation). On the pages: Classes. Parameters:{class: id}class.leave: Unenroll. On the pages: Classes. Parameters:{class: id}class.archive: Archive. On the pages: Classes. Parameters:{class: id}class.restore: Restore. On the pages: Archived classes. Parameters:{class: id}class.delete: Delete. On the pages: Archived classes. Parameters:{class: id}class.setGrading: Save grading settings. On the pages: Class ▸ Settings ▸ Grading. Parameters:{class: id, mode?: "none"|"totalPoints"|"weighted", showOverall?: bool, categories?: [{id?: id, name: string, weight?: number}]}class.copyGradingPeriods: Copy grading periods to other classes. On the pages: Class ▸ Settings ▸ Grading periods. Parameters:{class: id, to: [id]}class.setGradingPeriods: Save grading periods. On the pages: Class ▸ Settings ▸ Grading periods. Parameters:{class: id, periods: [{id?: id, name: string, start: "YYYY-MM-DD", end: "YYYY-MM-DD"}]}
Topics
topic.create: Topic. On the pages: Classwork ▸ Create. Parameters:{class: id, name: string}topic.rename: Rename topic. On the pages: Classwork. Parameters:{class: id, topic: id, name: string}topic.delete: Delete topic. On the pages: Classwork. Parameters:{class: id, topic: id}topic.move: Move topic up or down. On the pages: Classwork. Parameters:{class: id, topic: id, up: bool}
Stream and scheduling
post.announce: Announce something to your class. On the pages: Class ▸ Stream. Parameters:{class: id, text: string, schedule?: "YYYY-MM-DD[THH:MM]"|ms, draft?: bool, reusedFrom?: id, attachments?: [{url, title?} | {file, name, size}]}post.reuse: Reuse post. On the pages: Classwork ▸ Create. Parameters:{class: id, from: id}post.comment: Add class comment. On the pages: Class ▸ Stream. Parameters:{class: id, post: id, text: string}post.edit: Edit. On the pages: Class ▸ Stream. Parameters:{class: id, post: id, text: string}post.delete: Delete. On the pages: Class ▸ Stream. Parameters:{class: id, post: id}post.attach: Add. On the pages: Class ▸ Stream. Parameters:{class: id, post: id, url?: string, title?: string, file?: string, name?: string, size?: number}post.detach: Remove attachment. On the pages: Class ▸ Stream. Parameters:{class: id, post: id, attachment: id}post.deleteComment: Delete comment. On the pages: Class ▸ Stream. Parameters:{class: id, post: id, comment: id}post.publish: Post now. On the pages: Class ▸ Stream. Parameters:{class: id, post: id}post.schedule: Schedule. On the pages: Class ▸ Stream. Parameters:{class: id, post: id, at: "YYYY-MM-DD[THH:MM]"|ms|""}
Classwork
work.create: Assignment. On the pages: Classwork ▸ Create. Parameters:{class: id, title: string, instructions?: string, points?: number|"ungraded", due?: "YYYY-MM-DD[THH:MM]"|ms, topic?: id, category?: id, period?: id, students?: [id], groups?: [id], alsoTo?: [id], draft?: bool, schedule?: "YYYY-MM-DD[THH:MM]"|ms, attachments?: [{url, title?} | {file, name, size, mode?: "view"|"copy"}]}material.create: Material. On the pages: Classwork ▸ Create. Parameters:{class: id, title: string, description?: string, topic?: id, students?: [id], groups?: [id], alsoTo?: [id], draft?: bool, schedule?: "YYYY-MM-DD[THH:MM]"|ms, attachments?: [{url, title?} | {file, name, size, mode?: "view"}]}work.move: Move up or down. On the pages: Classwork. Parameters:{class: id, post: id, up?: bool, top?: bool}work.update: Save. On the pages: Classwork. Parameters:{class: id, post: id, title?: string, instructions?: string, description?: string, points?: number|"ungraded", due?: "YYYY-MM-DD[THH:MM]"|ms|"", topic?: id|"", category?: id|"", period?: id|"", students?: [id], groups?: [id], choices?: [string]|"one per line", studentsReply?: bool, studentsEdit?: bool, showSummary?: bool, showResults?: bool, allowFiles?: bool}work.publish: Assign. On the pages: Classwork. Parameters:{class: id, post: id}work.markReviewed: Mark as reviewed. On the pages: To-do ▸ To review. Parameters:{class: id, post: id, reviewed?: bool}work.attach: Add. On the pages: Assignment ▸ Edit ▸ Add. Parameters:{class: id, post: id, url?: string, title?: string, file?: string, name?: string, size?: number, mode?: "view"|"copy"}work.detach: Remove attachment. On the pages: Assignment ▸ Edit. Parameters:{class: id, post: id, attachment: id}
Questions
question.create: Question. On the pages: Classwork ▸ Create. Parameters:{class: id, type: "shortAnswer"|"multipleChoice"|"checkboxes", title: string, choices?: [string]|"one per line", instructions?: string, points?: number|"ungraded", due?: "YYYY-MM-DD[THH:MM]"|ms, topic?: id, category?: id, period?: id, students?: [id], groups?: [id], alsoTo?: [id], draft?: bool, schedule?: "YYYY-MM-DD[THH:MM]"|ms, studentsReply?: bool, studentsEdit?: bool, showSummary?: bool, attachments?: [{url, title?} | {file, name, size, mode?: "view"|"copy"}]}question.answer: Turn in. On the pages: Question ▸ Your answer. Parameters:{class: id, post: id, answer?: string, answers?: [string]}question.reply: Reply. On the pages: Question ▸ Class answers. Parameters:{class: id, post: id, student: id, text: string}question.deleteReply: Delete reply. On the pages: Question ▸ Class answers. Parameters:{class: id, post: id, student: id, reply: id}
Quiz assignments
quiz.create: Quiz assignment. On the pages: Classwork ▸ Create. Parameters:{class: id, title: string, instructions?: string, due?: "YYYY-MM-DD[THH:MM]"|ms, topic?: id, category?: id, period?: id, students?: [id], groups?: [id], showResults?: bool, allowFiles?: bool, attachments?: [{url, title?} | {file, name, size, mode?: "view"|"copy"}]}quiz.addQuestion: Add question. On the pages: Quiz ▸ Questions. Parameters:{class: id, post: id, type: "shortAnswer"|"paragraph"|"multipleChoice"|"checkboxes", text: string, choices?: [string]|"one per line, * before correct ones", accepted?: [string]|"one per line", points?: number}quiz.updateQuestion: Save question. On the pages: Quiz ▸ Questions. Parameters:{class: id, post: id, question: id, text?: string, choices?: [string]|"one per line, * before correct ones", accepted?: [string]|"one per line", points?: number}quiz.removeQuestion: Delete question. On the pages: Quiz ▸ Questions. Parameters:{class: id, post: id, question: id}quiz.moveQuestion: Move question. On the pages: Quiz ▸ Questions. Parameters:{class: id, post: id, question: id, direction: "up"|"down"}quiz.save: Save answers. On the pages: Quiz ▸ Your answers. Parameters:{class: id, post: id, quiz: {question id: string|[string]}, turnIn?: bool}quiz.mark: Save marks. On the pages: Quiz ▸ Student work. Parameters:{class: id, post: id, student: id, marks: {question id: number|""}}
Student work and grading
submission.save: Save your work. On the pages: Assignment ▸ Your work. Parameters:{class: id, post: id, answer: string}submission.turnIn: Turn in. On the pages: Assignment ▸ Your work. Parameters:{class: id, post: id}submission.unsubmit: Unsubmit. On the pages: Assignment ▸ Your work. Parameters:{class: id, post: id}submission.grade: Grade. On the pages: Assignment ▸ Student work. Parameters:{class: id, post: id, student: id, grade: number|""}submission.return: Return. On the pages: Assignment ▸ Student work. Parameters:{class: id, post: id, students: [id]}submission.comment: Add private comment. On the pages: Assignment. Parameters:{class: id, post: id, student?: id, text: string}submission.attach: Add or create. On the pages: Assignment ▸ Your work. Parameters:{class: id, post: id, url?: string, title?: string, file?: string, name?: string, size?: number, replace?: id}submission.detach: Remove attachment. On the pages: Assignment ▸ Your work. Parameters:{class: id, post: id, attachment: id}
Other
admin.addUser: Add a person. On the pages: Users. Parameters:{name: string, email: string, role: "student"|"teacher", passwordHash: string}admin.setSignUp: Who can create an account. On the pages: Users. Parameters:{who: "anyone"|"classCode"|"adminOnly"}admin.setWeekStart: First day of the week. On the pages: Users. Parameters:{day: "saturday"|"sunday"|"monday"}admin.addUsers: Add many people. On the pages: Users. Parameters:{people: [{name: string, email: string, role?: "student"|"teacher", classCode?: string, passwordHash: string, row?: number}], check?: bool}admin.setRole: Change role. On the pages: Users. Parameters:{user: id, role: "student"|"teacher"}admin.setAdmin: Administrator. On the pages: Users. Parameters:{user: id, admin: bool}admin.setDisabled: Turn account off or on. On the pages: Users. Parameters:{user: id, disabled: bool}group.create: Create group. On the pages: Class ▸ People. Parameters:{class: id, name: string, students?: [id]}group.update: Edit group. On the pages: Class ▸ People. Parameters:{class: id, group: id, name?: string, students?: [id]}group.delete: Delete group. On the pages: Class ▸ People. Parameters:{class: id, group: id}rubric.save: Save rubric. On the pages: Assignment ▸ Rubric. Parameters:{class: id, post: id, scoring?: bool, sort?: "descending"|"ascending", criteria: [{title: string, description?: string, remove?: bool, levels: [{title?: string, description?: string, points?: number}]}]}rubric.delete: Delete rubric. On the pages: Assignment ▸ Rubric. Parameters:{class: id, post: id}rubric.reuse: Reuse rubric. On the pages: Assignment ▸ Rubric. Parameters:{class: id, post: id, from: id}rubric.moveCriterion: Move criterion up or down. On the pages: Assignment ▸ Rubric. Parameters:{class: id, post: id, criterion: id, up: bool}rubric.grade: Save rubric grading. On the pages: Assignment ▸ Student work. Parameters:{class: id, post: id, student: id, levels: {criterion id: level id|""}}guardian.invite: Invite guardian. On the pages: Class ▸ People. Parameters:{student: id, email: string, tokenHash: string}guardian.remove: Remove guardian. On the pages: Class ▸ People. Parameters:{student: id, guardian: id}admin.inviteGuardians: Invite guardians from a spreadsheet. On the pages: Users. Parameters:{rows: [{student: string, email: string, tokenHash: string, row?: number}], check?: bool}admin.setGuardians: Guardian summaries on or off. On the pages: Users. Parameters:{on: bool}guardian.accept: Accept (guardian). Parameters:{tokenHash: string, frequency?: "daily"|"weekly"|"never"}guardian.decline: I'm not the guardian. Parameters:{tokenHash: string}guardian.setFrequency: Summary emails (guardian). Parameters:{tokenHash: string, frequency: "daily"|"weekly"|"never"}training.mark: Mark as done. On the pages: Training. Parameters:{step: string, done?: bool}training.practice: Make a practice class. On the pages: Training. Parameters:{}training.removePractice: Remove practice class. On the pages: Training. Parameters:{}
Read-only queries
Accounts and settings (queries)
session.me: Who am I. Parameters:{}
Classes, people and grading (queries)
class.list: Classes. Parameters:{}class.stream: Stream. Parameters:{class: id}class.classwork: Classwork. Parameters:{class: id}class.people: People. Parameters:{class: id}class.grades: Grades. Parameters:{class: id, period?: id}class.gradesCsv: Download grades as CSV. Parameters:{class: id, post?: id, drafts?: bool, period?: id}class.myGrades: Your grades. Parameters:{class: id}class.grading: Grading settings. Parameters:{class: id}class.storage: Storage. Parameters:{class: id}class.findByCode: The class an invite link opens. Parameters:{code: string}
Classwork (queries)
work.get: Assignment. Parameters:{class: id, post: id}
To-do (queries)
todo.list: To-do. Parameters:{class?: id}
Other (queries)
training.progress: Training. Parameters:{}calendar.week: Calendar. Parameters:{day?: "YYYY-MM-DD", class?: id}review.list: To review. Parameters:{class?: id}admin.users: Users. Parameters:{}invite.list: Invitations. Parameters:{}email.preview: Your next daily summary email. Parameters:{}admin.classEmails: Daily summary email of every class. Parameters:{}admin.signUp: Who can create an account. Parameters:{}command.list: List commands. Parameters:{filter?: string}command.describe: Describe command. Parameters:{command: string}
Example
Example: The list has class.create: Create class, on the pages Classes ▸ +, with the
parameters {name: string, section?: string, …}. Ms. Sara does it on the Classes page with
+ Create a class: she types "Science" and the section "Grade 8 – A" and chooses Create.
The server's administrator can do exactly the same from the command line (see
For the person who runs the server):
schoolstack-cli --data /var/lib/schoolstack/school.json exec --as sara@school.org class.create '{"name":"Science","section":"Grade 8 – A"}'
A read-only query works the same way: todo.list with {"class": 12} lists that person's To-do
for class 12 only, as the Class menu on the To-do page does.