# Google Classroom

> Manage Google Classroom classes: create and update courses, read rosters, invite students and teachers, post announcements and materials, set assignments with due dates, and read and grade student work.

App · Courses · 20 actions. Web page: https://docs.lodol.com/docs/integrations/google-classroom

## Actions

### Create assignment

Create an assignment or a question in a class, with instructions, a due date, a point value, a topic and attached links. Classroom creates one submission per student as soon as it is published.

**Inputs**

- Course (`course_id`, text, required): The class to work with.
- Title (`title`, text, required): Title of the assignment.
- Instructions (`description`, text): Instructions shown to students.
- Type (`work_type`, text): What kind of work students hand in. One of: `ASSIGNMENT`, `SHORT_ANSWER_QUESTION` (Short-answer question), `MULTIPLE_CHOICE_QUESTION` (Multiple-choice question). Default: `ASSIGNMENT`.
- Publish or save as draft (`state`, text): Publish it to the class now, or save it as a draft only teachers can see. One of: `PUBLISHED` (Publish to the class), `DRAFT` (Save as a draft). Default: `PUBLISHED`.
- Points (`max_points`, number): What the assignment is out of, as a whole number. Use 0, or leave empty, for ungraded work. From 0 to 1000.
- Due (`due_at`, date and time): When the assignment is due. Leave empty for no due date.
- Topic (`topic_id`, text): File this under an existing topic in the class. Leave empty for none.
- Attachment links (`link_urls`, list): Web addresses to attach, one per entry. A YouTube link is attached as a playable video; anything else (including a Google Docs or Drive link) is attached as a link card. Up to 20.
- Publish at (`scheduled_time`, date and time): Hold the assignment until this date and time. Leave empty to publish it right away.

**Outputs**

- `alternate_link` (text): Link to the assignment in Google Classroom
- `course_id` (text): ID of the class
- `creation_time` (text): When it was created
- `creator_user_id` (text): User ID of the teacher who created it
- `description` (text): Instructions
- `due_at` (text): When it is due, as a UTC timestamp; empty if no due date
- `id` (text): Assignment ID. Use this with the submission actions.
- `materials` (list): Attachments on the post
- `max_points` (number): Points the assignment is out of; 0 means ungraded, and null means no point value was set
- `scheduled_time` (text): When it is scheduled to publish, if it is scheduled
- `state` (text): PUBLISHED, DRAFT or DELETED
- `title` (text): Assignment title
- `topic_id` (text): ID of the topic it is filed under
- `update_time` (text): When it was last changed
- `work_type` (text): ASSIGNMENT, SHORT_ANSWER_QUESTION or MULTIPLE_CHOICE_QUESTION

**Example output**

```json
{
  "alternate_link": "https://classroom.google.com/c/NzQ1MjkxMDM4NDcy/a/NzQ1MjkxMDM5MjIy",
  "course_id": "745291038472",
  "creation_time": "2026-08-21T14:12:33.006Z",
  "creator_user_id": "108372910384729103847",
  "description": "Write up Tuesday's potato-core experiment.",
  "due_at": "2026-09-04T23:59:00Z",
  "id": "745291039222",
  "materials": [],
  "max_points": 100,
  "scheduled_time": "",
  "state": "PUBLISHED",
  "title": "Lab report: osmosis",
  "topic_id": "745291038999",
  "update_time": "2026-08-21T14:12:33.006Z",
  "work_type": "ASSIGNMENT"
}
```

### Create class

Create a Google Classroom class owned by the connected account. The result includes the enrollment code students use to join.

**Inputs**

- Class name (`name`, text, required): Name of the class.
- Section (`section`, text): Section of the class, e.g. 'Period 3'.
- Subject (`description_heading`, text): Short subject line shown under the class name.
- Description (`description`, text): Longer description of the class.
- Room (`room`, text): Room the class meets in.
- Class state (`course_state`, text): Active classes are visible to students right away. Provisioned classes stay hidden until you activate them. One of: `ACTIVE`, `PROVISIONED` (Provisioned (hidden for now)). Default: `ACTIVE`.

**Outputs**

- `alternate_link` (text): Link to the class in Google Classroom
- `calendar_id` (text): Google Calendar ID for the class, once it is active
- `course_group_email` (text): Google Group address for everyone in the class, if any
- `course_state` (text): ACTIVE, ARCHIVED, PROVISIONED, DECLINED or SUSPENDED
- `creation_time` (text): When the class was created
- `description` (text): Class description
- `description_heading` (text): Description heading
- `enrollment_code` (text): Code students use to join the class
- `id` (text): Course ID. Use this with the other actions.
- `name` (text): Class name
- `owner_id` (text): User ID of the teacher who owns the class
- `room` (text): Room
- `section` (text): Section, e.g. 'Period 2'
- `update_time` (text): When the class was last changed

**Example output**

```json
{
  "alternate_link": "https://classroom.google.com/c/NzQ1MjkxMDM4NDcy",
  "calendar_id": "classroom1234567890@group.calendar.google.com",
  "course_group_email": "ap_biology_a1b2c3@classroom.google.com",
  "course_state": "ACTIVE",
  "creation_time": "2026-08-14T16:02:11.735Z",
  "description": "Cells, genetics, evolution and ecology.",
  "description_heading": "AP Biology",
  "enrollment_code": "k7m2xqa",
  "id": "745291038472",
  "name": "AP Biology",
  "owner_id": "108372910384729103847",
  "room": "Lab 2",
  "section": "Period 3",
  "update_time": "2026-08-20T09:41:52.118Z"
}
```

### Create topic

Create a topic in a class, so assignments and materials can be grouped under it on the Classwork page.

**Inputs**

- Course (`course_id`, text, required): The class to work with.
- Topic name (`name`, text, required): Name of the topic.

**Outputs**

- `course_id` (text): ID of the class
- `name` (text): Topic name
- `topic_id` (text): Topic ID. Use this when creating an assignment or material.
- `update_time` (text): When the topic was last changed

**Example output**

```json
{
  "course_id": "745291038472",
  "name": "Unit 1: Cell structure",
  "topic_id": "745291038999",
  "update_time": "2026-08-20T09:41:52.118Z"
}
```

### Delete assignment

Delete an assignment or question, along with every student submission for it.

**Inputs**

- Course (`course_id`, text, required): The class to work with.
- Assignment (`course_work_id`, text, required): The assignment or question to work with.

**Outputs**

- `course_id` (text): ID of the class
- `deleted` (text): Always 'true' when the assignment was deleted
- `id` (text): ID of the deleted assignment

**Example output**

```json
{
  "course_id": "745291038472",
  "deleted": "true",
  "id": "745291039222"
}
```

### Delete class

Permanently delete a class and everything in it. Classroom only deletes an archived class, so an active one is archived first.

**Inputs**

- Course (`course_id`, text, required): The class to work with.

**Outputs**

- `archived_first` (text): 'true' if the class had to be archived before deleting
- `deleted` (text): Always 'true' when the class was deleted
- `id` (text): ID of the deleted class

**Example output**

```json
{
  "archived_first": "true",
  "deleted": "true",
  "id": "745291038472"
}
```

### Get class

Read one class in full, including its enrollment code, its Classroom link, and the Calendar and Google Group it owns.

**Inputs**

- Course (`course_id`, text, required): The class to work with.

**Outputs**

- `alternate_link` (text): Link to the class in Google Classroom
- `calendar_id` (text): Google Calendar ID for the class, once it is active
- `course_group_email` (text): Google Group address for everyone in the class, if any
- `course_state` (text): ACTIVE, ARCHIVED, PROVISIONED, DECLINED or SUSPENDED
- `creation_time` (text): When the class was created
- `description` (text): Class description
- `description_heading` (text): Description heading
- `enrollment_code` (text): Code students use to join the class
- `id` (text): Course ID. Use this with the other actions.
- `name` (text): Class name
- `owner_id` (text): User ID of the teacher who owns the class
- `room` (text): Room
- `section` (text): Section, e.g. 'Period 2'
- `update_time` (text): When the class was last changed

**Example output**

```json
{
  "alternate_link": "https://classroom.google.com/c/NzQ1MjkxMDM4NDcy",
  "calendar_id": "classroom1234567890@group.calendar.google.com",
  "course_group_email": "ap_biology_a1b2c3@classroom.google.com",
  "course_state": "ACTIVE",
  "creation_time": "2026-08-14T16:02:11.735Z",
  "description": "Cells, genetics, evolution and ecology.",
  "description_heading": "AP Biology",
  "enrollment_code": "k7m2xqa",
  "id": "745291038472",
  "name": "AP Biology",
  "owner_id": "108372910384729103847",
  "room": "Lab 2",
  "section": "Period 3",
  "update_time": "2026-08-20T09:41:52.118Z"
}
```

### Get user profile

Look up a Classroom user's name, email address and photo by their user ID or email address. Leave it as 'me' for the connected account.

**Inputs**

- User (`user_id`, text): Email address or Classroom user ID. Use 'me' for the connected account. Default: `me`.

**Outputs**

- `email_address` (text): Email address
- `family_name` (text): Last name
- `full_name` (text): Full name
- `given_name` (text): First name
- `photo_url` (text): Profile photo URL
- `user_id` (text): Classroom user ID. Use this with 'Get user profile'.

**Example output**

```json
{
  "email_address": "jordan.alvarez@example.edu",
  "family_name": "Alvarez",
  "full_name": "Jordan Alvarez",
  "given_name": "Jordan",
  "photo_url": "//lh3.googleusercontent.com/a/default-user",
  "user_id": "114829301847293018472"
}
```

### Grade submission

Grade one student's submission and, by default, return it so the student can see the grade. Turn returning off to leave the grade as a draft only teachers can see.

**Inputs**

- Course (`course_id`, text, required): The class to work with.
- Assignment (`course_work_id`, text, required): The assignment or question to work with.
- Submission (`submission_id`, text, required): The student submission to grade.
- Grade (`grade`, number, required): Points to award, out of the assignment's total. Decimals are rounded to two places. From 0 to 1000.
- Return to the student (`return_to_student`, true/false): Hand the work back so the student sees the grade. Turn this off to keep it as a draft grade. Default: `true`.

**Outputs**

- `alternate_link` (text): Link to the submission in Google Classroom
- `assigned_grade` (number): Grade the student can see; null when not yet returned
- `course_id` (text): ID of the class
- `course_work_id` (text): ID of the assignment
- `course_work_type` (text): Type of the assignment this answers
- `creation_time` (text): When it was created
- `draft_grade` (number): Grade only the teacher can see; null when ungraded
- `id` (text): Submission ID. Use this with 'Grade submission'.
- `late` (true/false): Whether it was handed in late
- `returned_to_student` (true/false): Whether the work was returned to the student
- `state` (text): NEW, CREATED, TURNED_IN, RETURNED or RECLAIMED_BY_STUDENT
- `update_time` (text): When it was last changed
- `user_id` (text): User ID of the student the submission belongs to

**Example output**

```json
{
  "alternate_link": "https://classroom.google.com/c/NzQ1MjkxMDM4NDcy/a/NzQ1MjkxMDM5MjIy/submissions/by-status/and-sort-last-name/student/MTE0ODI5",
  "assigned_grade": 92,
  "course_id": "745291038472",
  "course_work_id": "745291039222",
  "course_work_type": "ASSIGNMENT",
  "creation_time": "2026-08-21T14:12:34.220Z",
  "draft_grade": 92,
  "id": "Cg4I2LqbnpUQEO_hxr7VEA",
  "late": false,
  "returned_to_student": true,
  "state": "RETURNED",
  "update_time": "2026-09-03T18:30:02.774Z",
  "user_id": "114829301847293018472"
}
```

### Invite someone to a class

Invite someone to join a class as a student, a teacher, or its owner. They join once they accept the invitation in Classroom.

**Inputs**

- Course (`course_id`, text, required): The class to work with.
- Email address (`user_id`, text, required): Email address of the person to invite (their Classroom user ID also works).
- Role (`role`, text): What to invite them as. One of: `STUDENT`, `TEACHER`, `OWNER` (Owner (hands over the class)). Default: `STUDENT`.

**Outputs**

- `course_id` (text): ID of the class
- `id` (text): Invitation ID
- `role` (text): STUDENT, TEACHER or OWNER
- `user_id` (text): Who was invited, as Classroom resolved them

**Example output**

```json
{
  "course_id": "745291038472",
  "id": "Y2xhc3Nyb29tL2ludml0YXRpb24vNzQ1MjkxMDM4NDcy",
  "role": "STUDENT",
  "user_id": "114829301847293018472"
}
```

### List announcements

List the announcements posted to a class's stream, most recently updated first.

**Inputs**

- Course (`course_id`, text, required): The class to work with.
- States (`announcement_states`, list): Only return items in these states. Leave empty for published and draft items. One or more of: `PUBLISHED`, `DRAFT`, `DELETED` (Deleted (not yet purged)).
- Maximum results (`max_results`, number): How many items to return, at most (1-500). Defaults to 50. From 1 to 500. Default: `50`.

**Outputs**

- `announcements` (list): List of announcements

**Example output**

```json
{
  "announcements": [
    {
      "alternate_link": "https://classroom.google.com/c/NzQ1MjkxMDM4NDcy/p/NzQ1MjkxMDM5MTAx",
      "course_id": "745291038472",
      "creation_time": "2026-08-21T14:05:00.412Z",
      "creator_user_id": "108372910384729103847",
      "id": "745291039101",
      "materials": [
        {
          "title": "Lab safety checklist",
          "type": "link",
          "url": "https://example.edu/lab-safety"
        }
      ],
      "scheduled_time": "",
      "state": "PUBLISHED",
      "text": "Reminder: bring your lab notebooks on Thursday.",
      "update_time": "2026-08-21T14:05:00.412Z"
    }
  ]
}
```

### List assignments

List the assignments and questions in a class, with their due dates and point values. Sort by due date to see what is next.

**Inputs**

- Course (`course_id`, text, required): The class to work with.
- States (`course_work_states`, list): Only return items in these states. Leave empty for published and draft items. One or more of: `PUBLISHED`, `DRAFT`, `DELETED` (Deleted (not yet purged)).
- Sort by (`order_by`, text): What order to return the assignments in. One of: `updateTime desc` (Recently changed first), `updateTime asc` (Least recently changed first), `dueDate asc` (Due soonest first), `dueDate desc` (Due latest first). Default: `updateTime desc`.
- Maximum results (`max_results`, number): How many items to return, at most (1-500). Defaults to 50. From 1 to 500. Default: `50`.

**Outputs**

- `course_work` (list): List of assignments and questions

**Example output**

```json
{
  "course_work": [
    {
      "alternate_link": "https://classroom.google.com/c/NzQ1MjkxMDM4NDcy/a/NzQ1MjkxMDM5MjIy",
      "course_id": "745291038472",
      "creation_time": "2026-08-21T14:12:33.006Z",
      "creator_user_id": "108372910384729103847",
      "description": "Write up Tuesday's potato-core experiment.",
      "due_at": "2026-09-04T23:59:00Z",
      "id": "745291039222",
      "materials": [],
      "max_points": 100,
      "scheduled_time": "",
      "state": "PUBLISHED",
      "title": "Lab report: osmosis",
      "topic_id": "745291038999",
      "update_time": "2026-08-21T14:12:33.006Z",
      "work_type": "ASSIGNMENT"
    }
  ]
}
```

### List classes

List the Google Classroom classes the connected account can see. Narrow to the ones you teach or the ones you are enrolled in, and filter by state.

**Inputs**

- My role (`role`, text): Which classes to return, by your role in them. One of: `any` (Any class I can see), `teacher` (Classes I teach), `student` (Classes I'm enrolled in). Default: `any`.
- Class states (`course_states`, list): Only return classes in these states. Leave empty for all. One or more of: `ACTIVE`, `ARCHIVED`, `PROVISIONED` (Provisioned (created, not yet accepted)), `DECLINED`, `SUSPENDED`.
- Maximum results (`max_results`, number): How many items to return, at most (1-500). Defaults to 50. From 1 to 500. Default: `50`.

**Outputs**

- `courses` (list): List of classes

**Example output**

```json
{
  "courses": [
    {
      "alternate_link": "https://classroom.google.com/c/NzQ1MjkxMDM4NDcy",
      "calendar_id": "classroom1234567890@group.calendar.google.com",
      "course_group_email": "ap_biology_a1b2c3@classroom.google.com",
      "course_state": "ACTIVE",
      "creation_time": "2026-08-14T16:02:11.735Z",
      "description": "Cells, genetics, evolution and ecology.",
      "description_heading": "AP Biology",
      "enrollment_code": "k7m2xqa",
      "id": "745291038472",
      "name": "AP Biology",
      "owner_id": "108372910384729103847",
      "room": "Lab 2",
      "section": "Period 3",
      "update_time": "2026-08-20T09:41:52.118Z"
    }
  ]
}
```

### List materials

List the materials posted to a class: reading, links and resources with nothing to hand in and no grade.

**Inputs**

- Course (`course_id`, text, required): The class to work with.
- States (`material_states`, list): Only return items in these states. Leave empty for published and draft items. One or more of: `PUBLISHED`, `DRAFT`, `DELETED` (Deleted (not yet purged)).
- Maximum results (`max_results`, number): How many items to return, at most (1-500). Defaults to 50. From 1 to 500. Default: `50`.

**Outputs**

- `course_materials` (list): List of materials

**Example output**

```json
{
  "course_materials": [
    {
      "alternate_link": "https://classroom.google.com/c/NzQ1MjkxMDM4NDcy/m/NzQ1MjkxMDM5MzMz",
      "course_id": "745291038472",
      "creation_time": "2026-08-21T14:20:07.901Z",
      "creator_user_id": "108372910384729103847",
      "description": "Chapters 1-4, plus the two optional papers.",
      "id": "745291039333",
      "materials": [
        {
          "title": "Osmosis explained",
          "type": "youtube_video",
          "url": "https://www.youtube.com/watch?v=aBcDeFgHiJk"
        }
      ],
      "scheduled_time": "",
      "state": "PUBLISHED",
      "title": "Unit 1 reading list",
      "topic_id": "745291038999",
      "update_time": "2026-08-21T14:20:07.901Z"
    }
  ]
}
```

### List student submissions

List every student's submission for one assignment, with its state, whether it was late, and the grades on it. Classroom creates a submission per student when the assignment is published, so filtering by state answers 'who hasn't handed in'.

**Inputs**

- Course (`course_id`, text, required): The class to work with.
- Assignment (`course_work_id`, text, required): The assignment or question to work with.
- Submission states (`states`, list): Only return submissions in these states. Leave empty for all of them. One or more of: `NEW` (New (never opened)), `CREATED` (In progress), `TURNED_IN` (Turned in), `RETURNED` (Returned to the student), `RECLAIMED_BY_STUDENT` (Reclaimed by the student).
- Timeliness (`late`, text): Whether to return only late or only on-time work. One of: `any` (Late and on time), `late` (Late only), `on_time` (On time only). Default: `any`.
- Maximum results (`max_results`, number): How many items to return, at most (1-500). Defaults to 50. From 1 to 500. Default: `50`.

**Outputs**

- `student_submissions` (list): List of student submissions

**Example output**

```json
{
  "student_submissions": [
    {
      "alternate_link": "https://classroom.google.com/c/NzQ1MjkxMDM4NDcy/a/NzQ1MjkxMDM5MjIy/submissions/by-status/and-sort-last-name/student/MTE0ODI5",
      "assigned_grade": null,
      "course_id": "745291038472",
      "course_work_id": "745291039222",
      "course_work_type": "ASSIGNMENT",
      "creation_time": "2026-08-21T14:12:34.220Z",
      "draft_grade": null,
      "id": "Cg4I2LqbnpUQEO_hxr7VEA",
      "late": false,
      "state": "TURNED_IN",
      "update_time": "2026-09-03T18:30:02.774Z",
      "user_id": "114829301847293018472"
    }
  ]
}
```

### List students

List the students enrolled in a class, with each one's name and email address. This is the class roster.

**Inputs**

- Course (`course_id`, text, required): The class to work with.
- Maximum results (`max_results`, number): How many items to return, at most (1-500). Defaults to 50. From 1 to 500. Default: `50`.

**Outputs**

- `students` (list): List of students

**Example output**

```json
{
  "students": [
    {
      "course_id": "745291038472",
      "email_address": "jordan.alvarez@example.edu",
      "family_name": "Alvarez",
      "full_name": "Jordan Alvarez",
      "given_name": "Jordan",
      "photo_url": "//lh3.googleusercontent.com/a/default-user",
      "user_id": "114829301847293018472"
    }
  ]
}
```

### List teachers

List the teachers of a class, with each one's name and email address.

**Inputs**

- Course (`course_id`, text, required): The class to work with.
- Maximum results (`max_results`, number): How many items to return, at most (1-500). Defaults to 50. From 1 to 500. Default: `50`.

**Outputs**

- `teachers` (list): List of teachers

**Example output**

```json
{
  "teachers": [
    {
      "course_id": "745291038472",
      "email_address": "jordan.alvarez@example.edu",
      "family_name": "Alvarez",
      "full_name": "Jordan Alvarez",
      "given_name": "Jordan",
      "photo_url": "//lh3.googleusercontent.com/a/default-user",
      "user_id": "114829301847293018472"
    }
  ]
}
```

### List topics

List the topics in a class: the headings that assignments and materials are grouped under on the Classwork page.

**Inputs**

- Course (`course_id`, text, required): The class to work with.
- Maximum results (`max_results`, number): How many items to return, at most (1-500). Defaults to 50. From 1 to 500. Default: `50`.

**Outputs**

- `topics` (list): List of topics

**Example output**

```json
{
  "topics": [
    {
      "course_id": "745291038472",
      "name": "Unit 1: Cell structure",
      "topic_id": "745291038999",
      "update_time": "2026-08-20T09:41:52.118Z"
    }
  ]
}
```

### Post announcement

Post an announcement to a class's stream, optionally with links attached, and optionally scheduled to publish later.

**Inputs**

- Course (`course_id`, text, required): The class to work with.
- Announcement (`text`, text, required): What the announcement says.
- Publish or save as draft (`state`, text): Publish it to the class now, or save it as a draft only teachers can see. One of: `PUBLISHED` (Publish to the class), `DRAFT` (Save as a draft). Default: `PUBLISHED`.
- Attachment links (`link_urls`, list): Web addresses to attach, one per entry. A YouTube link is attached as a playable video; anything else (including a Google Docs or Drive link) is attached as a link card. Up to 20.
- Publish at (`scheduled_time`, date and time): Hold the announcement until this date and time. Leave empty to post it right away.

**Outputs**

- `alternate_link` (text): Link to the announcement in Google Classroom
- `course_id` (text): ID of the class
- `creation_time` (text): When it was created
- `creator_user_id` (text): User ID of whoever posted it
- `id` (text): Announcement ID
- `materials` (list): Attachments on the post
- `scheduled_time` (text): When it is scheduled to publish, if it is scheduled
- `state` (text): PUBLISHED, DRAFT or DELETED
- `text` (text): Announcement text
- `update_time` (text): When it was last changed

**Example output**

```json
{
  "alternate_link": "https://classroom.google.com/c/NzQ1MjkxMDM4NDcy/p/NzQ1MjkxMDM5MTAx",
  "course_id": "745291038472",
  "creation_time": "2026-08-21T14:05:00.412Z",
  "creator_user_id": "108372910384729103847",
  "id": "745291039101",
  "materials": [
    {
      "title": "Lab safety checklist",
      "type": "link",
      "url": "https://example.edu/lab-safety"
    }
  ],
  "scheduled_time": "",
  "state": "PUBLISHED",
  "text": "Reminder: bring your lab notebooks on Thursday.",
  "update_time": "2026-08-21T14:05:00.412Z"
}
```

### Post material

Post material to a class (reading, links or resources with nothing to hand in and no grade), optionally filed under a topic.

**Inputs**

- Course (`course_id`, text, required): The class to work with.
- Title (`title`, text, required): Title of the material.
- Description (`description`, text): Description shown to students.
- Publish or save as draft (`state`, text): Publish it to the class now, or save it as a draft only teachers can see. One of: `PUBLISHED` (Publish to the class), `DRAFT` (Save as a draft). Default: `PUBLISHED`.
- Topic (`topic_id`, text): File this under an existing topic in the class. Leave empty for none.
- Attachment links (`link_urls`, list): Web addresses to attach, one per entry. A YouTube link is attached as a playable video; anything else (including a Google Docs or Drive link) is attached as a link card. Up to 20.

**Outputs**

- `alternate_link` (text): Link to the material in Google Classroom
- `course_id` (text): ID of the class
- `creation_time` (text): When it was created
- `creator_user_id` (text): User ID of the teacher who posted it
- `description` (text): Material description
- `id` (text): Material ID
- `materials` (list): Attachments on the post
- `scheduled_time` (text): When it is scheduled to publish, if it is scheduled
- `state` (text): PUBLISHED, DRAFT or DELETED
- `title` (text): Material title
- `topic_id` (text): ID of the topic it is filed under
- `update_time` (text): When it was last changed

**Example output**

```json
{
  "alternate_link": "https://classroom.google.com/c/NzQ1MjkxMDM4NDcy/m/NzQ1MjkxMDM5MzMz",
  "course_id": "745291038472",
  "creation_time": "2026-08-21T14:20:07.901Z",
  "creator_user_id": "108372910384729103847",
  "description": "Chapters 1-4, plus the two optional papers.",
  "id": "745291039333",
  "materials": [
    {
      "title": "Osmosis explained",
      "type": "youtube_video",
      "url": "https://www.youtube.com/watch?v=aBcDeFgHiJk"
    }
  ],
  "scheduled_time": "",
  "state": "PUBLISHED",
  "title": "Unit 1 reading list",
  "topic_id": "745291038999",
  "update_time": "2026-08-21T14:20:07.901Z"
}
```

### Update class

Change a class's name, section, subject, description, room or state. Only the fields you fill in are changed; set the state to Archived to close a class out at the end of a term.

**Inputs**

- Course (`course_id`, text, required): The class to work with.
- Class name (`name`, text): New name for the class. Leave empty to keep it.
- Section (`section`, text): New section. Leave empty to keep it.
- Subject (`description_heading`, text): New subject line. Leave empty to keep it.
- Description (`description`, text): New description. Leave empty to keep it.
- Room (`room`, text): New room. Leave empty to keep it.
- Class state (`course_state`, text): New state for the class. Leave empty to keep it. One of: `ACTIVE`, `ARCHIVED`, `PROVISIONED` (Provisioned (created, not yet accepted)), `DECLINED`, `SUSPENDED`.

**Outputs**

- `alternate_link` (text): Link to the class in Google Classroom
- `calendar_id` (text): Google Calendar ID for the class, once it is active
- `course_group_email` (text): Google Group address for everyone in the class, if any
- `course_state` (text): ACTIVE, ARCHIVED, PROVISIONED, DECLINED or SUSPENDED
- `creation_time` (text): When the class was created
- `description` (text): Class description
- `description_heading` (text): Description heading
- `enrollment_code` (text): Code students use to join the class
- `id` (text): Course ID. Use this with the other actions.
- `name` (text): Class name
- `owner_id` (text): User ID of the teacher who owns the class
- `room` (text): Room
- `section` (text): Section, e.g. 'Period 2'
- `update_time` (text): When the class was last changed

**Example output**

```json
{
  "alternate_link": "https://classroom.google.com/c/NzQ1MjkxMDM4NDcy",
  "calendar_id": "classroom1234567890@group.calendar.google.com",
  "course_group_email": "ap_biology_a1b2c3@classroom.google.com",
  "course_state": "ACTIVE",
  "creation_time": "2026-08-14T16:02:11.735Z",
  "description": "Cells, genetics, evolution and ecology.",
  "description_heading": "AP Biology",
  "enrollment_code": "k7m2xqa",
  "id": "745291038472",
  "name": "AP Biology",
  "owner_id": "108372910384729103847",
  "room": "Lab 2",
  "section": "Period 3",
  "update_time": "2026-08-20T09:41:52.118Z"
}
```
