Package: canvasapi
CanvasAPICanvasAPI is a Python library for accessing Instructure’sCanvas LMS API. The library enables developers to programmatically manage Canvas courses, users, gradebooks, and more.Table of ContentsCanvasAPITable of ContentsInstallationDocumentationContributingQuickstartWorking with Canvas ObjectsCourse objectsUser objectsPaginated ListsKeyword argumentsCanvasAPI ProjectsContact UsInstallationYou can install CanvasAPI with pip:pip install canvasapiDocumentationFull documentation is available atRead the Docs.ContributingWant to help us improve CanvasAPI? Check out ourContributing Guideto learn about running CanvasAPI as a developer, picking issues to work on, submitting bug reports, contributing patches, and more.QuickstartGetting started with CanvasAPI is easy.Like most API clients, CanvasAPI exposes a single class that provides access to the rest of the API:Canvas.The first thing to do is instantiate a newCanvasobject by providing your Canvas instance’s root API URL and a valid API key:# Import the Canvas classfromcanvasapiimportCanvas# Canvas API URLAPI_URL="https://example.com"# Canvas API keyAPI_KEY="p@$$w0rd"# Initialize a new Canvas objectcanvas=Canvas(API_URL,API_KEY)You can now usecanvasto begin making API calls.Working with Canvas ObjectsCanvasAPI converts the JSON responses from the Canvas API into Python objects. These objects provide further access to the Canvas API. You can find a full breakdown of the methods these classes provide in ourclass documentation. Below, you’ll find a few examples of common CanvasAPI use cases.Course objectsCourses can be retrieved from the API:# Grab course 123456>>>course=canvas.get_course(123456)# Access the course's name>>>course.name'Test Course'# Update the course's name>>>course.update(course={'name':'New Course Name'})See our documentation onkeyword argumentsfor more information about howcourse.update()handles thenameargument.User objectsIndividual users can be pulled from the API as well:# Grab user 123>>>user=canvas.get_user(123)# Access the user's name>>>user.name'Test User'# Retrieve a list of courses the user is enrolled in>>>courses=user.get_courses()# Grab a different user by their SIS ID>>>login_id_user=canvas.get_user('some_user','sis_login_id')Paginated ListsSome calls, like theuser.get_courses()call above, will request multiple objects from Canvas’s API. CanvasAPI collects these objects in aPaginatedListobject.PaginatedListgenerally acts like a regular Python list. You can grab an element by index, iterate over it, and take a slice of it.Warning:PaginatedListlazily loads its elements. Unfortunately, there’s no way to determine the exact number of records Canvas will return without traversing the list fully. This means thatPaginatedListisn’t aware of its own length and negative indexing is not currently supported.Let’s look at how we can use thePaginatedListreturned by ourget_courses()call:# Retrieve a list of courses the user is enrolled in>>>courses=user.get_courses()>>>print(courses)<PaginatedListoftypeCourse># Access the first element in our list.## You'll notice the first call takes a moment, but the next N-1# elements (where N = the per_page argument supplied; the default is 10)# will be instantly accessible.>>>print(courses[0])TST101TestCourse(1234567)# Iterate over our course list>>>forcourseincourses:print(course)TST101TestCourse1(1234567)TST102TestCourse2(1234568)TST103TestCourse3(1234569)# Take a slice of our course list>>>courses[:2][TST101TestCourse1(1234567),TST102TestCourse2(1234568)]Keyword argumentsMost of Canvas’s API endpoints accept a variety of arguments. CanvasAPI allows developers to insert keyword arguments when making calls to endpoints that accept arguments.# Get all of the active courses a user is currently enrolled in>>>courses=user.get_courses(enrollment_state='active')For a more detailed description of how CanvasAPI handles more complex keyword arguments, check out theKeyword Argument Documentation.CanvasAPI ProjectsSince its initial release in June 2016, CanvasAPI has amassed over 100dependent repositories. Many of these include various tools used to enhance the Canvas experience for both instructors and students. Here are a few popular repositories that use CanvasAPI:Canvas GrabCanvas Grab is the most popular project using CanvasAPI. This tool, with one click, copies all files from Canvas LMS to local directory. CanvasAPI is used in this project to connect to a course and grab its files.ClanvasClanvas is a command-line client for Canvas. It uses the already available bash commands plus some additional ones to interact with various features of Canvas from the commmand line.CS221BotCS221Bot is a Discord bot for the CPCS 221 course at University of British Columbia. CanvasAPI is used in this project to connect to and synchronize with a course and get its data, such as announcements, new assignments, and more.If you have a project that uses CanvasAPI that you'd like to promote, please contact us!Contact UsNeed help? Have an idea? Feel free to check out ourDiscussionsboard. Just want to say hi or get extended spport? Come join us on theUCF Open Slack Channeland join the#canvasapichannel!