> ## Documentation Index
> Fetch the complete documentation index at: https://lava.so/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Canvas LMS

> Canvas LMS API for accessing courses, assignments, grades, discussions, and calendar across university and K-12 institutions.

Canvas LMS API for accessing courses, assignments, grades, discussions, and calendar across university and K-12 institutions. Best for student productivity workflows — checking due dates, viewing grades, reading course content, and submitting assignments. Institution-specific base URLs (*.instructure.com or canvas.*.edu).

5 example endpoints available through Lava's AI Gateway. See the [Canvas LMS API docs](https://canvas.instructure.com/doc/api/) for full documentation.

<Warning>This provider requires your own credentials — connect your API key or OAuth account before use.</Warning>

<Info>This is a **catch-all provider** — any valid URL under `https://canvas.instructure.com` is supported. Canvas LMS API. URL is institution-specific: https\://\{institution}.instructure.com/api/v1/\{path} or [https://canvas.\&#123;school\&#125;.edu/api/v1/\&#123;path\&#125](https://canvas.\&#123;school\&#125;.edu/api/v1/\&#123;path\&#125);. See [https://canvas.instructure.com/doc/api/](https://canvas.instructure.com/doc/api/) for full reference. The endpoints below are curated examples.</Info>

## Endpoints

### List enrolled courses

**GET** `https://<canvas>.instructure.com/api/v1/courses` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://<canvas>.instructure.com/api/v1/courses', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2F%3Ccanvas%3E.instructure.com%2Fapi%2Fv1%2Fcourses" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

### Unified planner feed (assignments, quizzes, discussions with due dates)

**GET** `https://<canvas>.instructure.com/api/v1/planner/items` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://<canvas>.instructure.com/api/v1/planner/items', { method: 'GET' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl "https://api.lava.so/v1/forward?u=https%3A%2F%2F%3Ccanvas%3E.instructure.com%2Fapi%2Fv1%2Fplanner%2Fitems" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY"
    ```
  </Tab>
</Tabs>

### Submit an assignment

**POST** `https://<canvas>.instructure.com/api/v1/courses/{course_id}/assignments/{assignment_id}/submissions` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://<canvas>.instructure.com/api/v1/courses/{course_id}/assignments/{assignment_id}/submissions', {
      body: {
    "submission[submission_type]": "online_text_entry",
    "submission[body]": "My submission text"
    },
    });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl -X POST "https://api.lava.so/v1/forward?u=https%3A%2F%2F%3Ccanvas%3E.instructure.com%2Fapi%2Fv1%2Fcourses%2F%7Bcourse_id%7D%2Fassignments%2F%7Bassignment_id%7D%2Fsubmissions" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY" \
      -H "Content-Type: application/json" \
      -d '{"submission[submission_type]":"online_text_entry","submission[body]":"My submission text"}'
    ```
  </Tab>
</Tabs>

### Update planner item (mark complete)

**PUT** `https://<canvas>.instructure.com/api/v1/planner/items/{id}` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://<canvas>.instructure.com/api/v1/planner/items/{id}', { method: 'PUT' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl -X PUT "https://api.lava.so/v1/forward?u=https%3A%2F%2F%3Ccanvas%3E.instructure.com%2Fapi%2Fv1%2Fplanner%2Fitems%2F%7Bid%7D" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY" \
      -H "Content-Type: application/json"
    ```
  </Tab>
</Tabs>

### Delete a personal calendar event

**DELETE** `https://<canvas>.instructure.com/api/v1/calendar_events/{id}` — Free

<Tabs>
  <Tab title="SDK">
    ```typescript theme={null}
    const data = await lava.gateway('https://<canvas>.instructure.com/api/v1/calendar_events/{id}', { method: 'DELETE' });
    ```
  </Tab>

  <Tab title="cURL">
    ```bash theme={null}
    curl -X DELETE "https://api.lava.so/v1/forward?u=https%3A%2F%2F%3Ccanvas%3E.instructure.com%2Fapi%2Fv1%2Fcalendar_events%2F%7Bid%7D" \
      -H "Authorization: Bearer $LAVA_SECRET_KEY" \
      -H "Content-Type: application/json"
    ```
  </Tab>
</Tabs>

## Next Steps

<CardGroup cols={2}>
  <Card title="All Providers" icon="grid" href="/gateway/supported-providers">
    Browse all supported AI providers
  </Card>

  <Card title="Forward Proxy" icon="route" href="/gateway/forward-proxy">
    Learn how to construct proxy URLs and authenticate requests
  </Card>
</CardGroup>
