The Classroom app supports three types of stream items:
CourseWork
, CourseWorkMaterials
, and Announcements
. This guide
describes how to manage CourseWork
, but the APIs for all the stream items are
similar. See API resources to learn more about the stream item types and their
differences.
The CourseWork
resource represents a work item that has been assigned to
students in a particular course, including any additional materials and details,
like due date or max score. There are four subtypes of CourseWork
:
assignments, quiz assignments, short answer questions, and
multiple-choice questions. The Classroom API supports
three of these subtypes: assignments, short answer questions, and
multiple-choice questions. These types are represented by the
CourseWork.workType
field.
In addition to the CourseWork
resource, you can manage completed work
with the StudentSubmission
resource.
Create CourseWork
CourseWork
can only be created on behalf of the course's teacher.
Attempting to create CourseWork
on behalf of a student, or a domain
administrator who is not a teacher in the course, results in a
PERMISSION_DENIED
error. See User types to learn more about the different
roles in Classroom.
When creating CourseWork
using the courses.courseWork.create
method, you
can attach links as materials
, shown in the sample code below:
Java
Python
The title
and workType
fields are required. All other fields are optional.
If state
is unspecified, the CourseWork
is created in a draft state.
Use a Link resource with a specified target
url
to include linked materials in the CourseWork
. Classroom
automatically fetches the title
and thumbnail image URL (thumbnailUrl
). The
Classroom API also natively supports Google Drive and YouTube
materials, which can be included with a DriveFile
resource or YouTubeVideo
resource in a similar way.
To specify a due date, set the dueDate
and dueTime
fields to the
corresponding UTC time. The due date must be in the future.
The CourseWork
response includes a server-assigned identifier that can be used
to reference the assignment in other API requests.
Retrieve CourseWork
You can retrieve CourseWork
on behalf of students and teachers of the
corresponding course. You can also retrieve CourseWork
on behalf of domain
administrators, even if they aren't a teacher in the course. To retrieve a
specific CourseWork
, use courses.courseWork.get
. To retrieve all
CourseWork
(optionally matching some criteria), use
courses.courseWork.list
.
The required scope depends on the role that the requesting user has in the course. If the user is a student, use one of the following scopes:
https://www.googleapis.com/auth/classroom.coursework.me.readonly
https://www.googleapis.com/auth/classroom.coursework.me
If the user is a teacher or a domain administrator, use one of the following scopes:
https://www.googleapis.com/auth/classroom.coursework.students.readonly
https://www.googleapis.com/auth/classroom.coursework.students
Having permission to retrieve a CourseWork
does not imply
permissions to access materials or material metadata. In practice, this means
that an administrator may not see the title of an attached Drive
file if they're not a member of the course.
Manage student responses
A StudentSubmission
resource represents the work done by a student for a
CourseWork
. The resource includes metadata related to the work, such
as the work status and grade. A StudentSubmission
is implicitly
created for each student when a new CourseWork
is created.
The following sections explain common actions that manage student responses.
Retrieve student responses
Students can retrieve their own submissions, teachers can retrieve submissions
for all students in their courses, and domain administrators can retrieve all
submissions for all students in their domain. Each StudentSubmission
is
assigned an identifier. If you know the identifier, use
courses.courseWork.studentSubmissions.get
to retrieve the submission.
Use the courses.courseWork.studentSubmissions.list
method to get all
StudentSubmission
resources that match some criteria, as shown in the
following sample:
Java
Python
Retrieve StudentSubmission
resources that belong to a particular student by
specifying the userId
parameter, as shown in the following sample:
Java
Python
Students are identified by the unique ID or email address, as represented in the
Student
resource. The current user may also refer to their own ID using the
"me"
shorthand.
It's also possible to retrieve student submissions for all assignments within a
course. To do so, use the literal "-"
as the courseWorkId
, as shown in the
following sample:
Java
service.courses().courseWork().studentSubmissions()
.list(courseId, "-")
.set("userId", userId)
.execute();
Python
service.courses().courseWork().studentSubmissions().list(
courseId=<course ID or alias>,
courseWorkId='-',
userId=<user ID>).execute()
The required scope depends on the role that the requesting user has in the course. If the user is a teacher or a domain administrator, use the following scope:
https://www.googleapis.com/auth/classroom.coursework.students.readonly
https://www.googleapis.com/auth/classroom.coursework.students
If the user is a student, use the following scope:
https://www.googleapis.com/auth/classroom.coursework.me.readonly
https://www.googleapis.com/auth/classroom.coursework.me
Having permission to retrieve a StudentSubmission
does not imply permissions
to access attachments or attachment metadata. In practice, this means that an
administrator may not see the title of an attached Drive file if
they're not a member of the course.
Add attachments to a student response
You can attach links to a student submission by attaching a Link
,
DriveFile
, or YouTubeVideo
resource. This is done with
courses.courseWork.studentSubmissions.modifyAttachments
, as shown in the
following sample:
Java
Python
A Link
attachment is defined by the target url
; Classroom
automatically fetches the title
and thumbnail image (thumbnailUrl
). See
Material
to learn about materials that can be attached to
StudentSubmissions
.
The StudentSubmission
can only be modified by a course teacher or by
the student that owns it. You can only attach Materials
if the
CourseWorkType
of the StudentSubmission
is ASSIGNMENT
.
The required scope depends on the role that the requesting user has in the course. If the user is a teacher, use the following scope:
https://www.googleapis.com/auth/classroom.coursework.students
If the user is a student, use the following scope:
https://www.googleapis.com/auth/classroom.coursework.me