Aktiv Learning

Logo

View the Project on GitHub Aktiv-Learning/Aktiv-Help

Home > Guides > LMS > Canvas

Canvas - FAQ

(for LMS Admin)

  1. I am trying to integrate my Canvas Developer Key with Willo Labs but how do I login to Willo Labs?
  2. I am trying to integrate my Canvas Developer Key with Willo Labs but why does the Grade Sync Mode say ‘LTI’ and not ‘Canvas API’?
  3. I am trying to integrate my Canvas Developer Key with Willo Labs but why do I get a 400 Bad Request Invalid Scopes Error?
  4. What permissions/data does Aktiv require from Canvas?
  5. What additional permissions/data does Aktiv require from Canvas to perform multi-column syncing?
  6. Why do we need the DELETE assignments privilege with the Canvas Developer Key?
  7. Why do grades show up as late in Canvas LTI 1.3 Advantage Integrations?

1. I am trying to integrate my Canvas Developer Key with Willo Labs but how do I login to Willo Labs?

In the Willo Labs Developer Key Integration guide you will need to login to Willo Labs by just providing your LMS admin email address. You will get a direct login link sent to your email, you use this link to complete login, i.e no password required.

If you get an Email address not found notice, then please let the Aktiv Team know about this so they can add your email address. Email template:

“Please add my email address [example@mycollege.com] to the LMS Admin Email List in the Willo Labs Customer setup for my institution [Example College].”

2. I am trying to integrate my Canvas Developer Key with Willo Labs but why does the Grade Sync Mode say ‘LTI’ and not ‘Canvas API’?

This is something that needs to fixed by the Aktiv Team, please email them.

“The Grade Sync Mode in the Willo Labs Customer Access area for [My Institution] is showing up as LTI instead of Canvas API, please fix.”

3. I am trying to integrate my Canvas Developer Key with Willo Labs but why do I get a 400 Bad Request Invalid Scopes Error?

This is due to not having setup the correct scopes in the Canvas Developer Key guide (see points, 6., 7. and 8.). Please make sure you have added every required scope.

Image

4. What permissions/data does Aktiv require from Canvas?

The Aktiv app is installed as an LTI external tool. Any courses launched from LMS will thus pass the Course ID (LTI ContextID), as well as information about the instructor or student making the launch (such as their LTI userId and email).

With this, Aktiv can perform a grade sync for that course for each of the students that have launched.

The settings do not require any custom permission settings other than having the Privacy setting to Public. See more in the Canvas LTI External Tool guide.

5. What additional permissions/data does Aktiv require from Canvas to perform multi-column syncing?

For Aktiv to perform gradebook syncing, we also require a Canvas Developer Key.

Aktiv Actually performs the API calls via an intermediary (Willo Labs, Inc.).

The actual ID and Key (i.e the credentials) of the Canvas Developer Key are not required to be shared with Aktiv or Willo Labs. The LMS Admin following the Willo Labs Developer Key Integration guide, essentially provides the developer key credentials into a client widget in which they then proceed to authorize the app to get an intial token associated with the developer key. From then on, Aktiv uses this token (and refreshed versions of it) to access the LMS.

The developer key that is created will be “scoped”, i.e it will have scoped permissions to:

API Scopes

  1. For Enforce Scopes > Courses:
    • url:GET|/api/v1/courses
  2. For Enforce Scopes > Assignments:
    • url:GET|/api/v1/courses/:course_id/assignments
    • url:GET|/api/v1/courses/:course_id/assignments/:id
    • url:POST|/api/v1/courses/:course_id/assignments
    • url:PUT|/api/v1/courses/:course_id/assignments/:id
    • url:DELETE|/api/v1/courses/:course_id/assignments/:id
  3. For Enforce Scopes > Submissions:
    • url:PUT|/api/v1/courses/:course_id/assignments/:assignment_id/submissions/:user_id
    • url:GET|/api/v1/courses/:course_id/assignments/:assignment_id/submissions/:user_id

API Endpoints

  1. Get Course List
    • GET /api/v1/courses
    • Returns the list of active courses for the current user. Used by Willo Labs to test the API connection to the Canvas instance.
  2. List Assignments
    • GET /api/v1/courses/:course_id/assignments
    • Returns the list of assignments for the current context. Used by Willo Labs grade sync API to determine if an assignment already exists in the course, or if a new assignment should be created.
  3. Get Single Assignment
    • GET /api/v1/courses/:course_id/assignments/:id
    • Returns the assignment with the given id. Used by Willo Labs grade sync API to determine if a previously created assignment still exists.
  4. Create Assignment
    • POST /api/v1/courses/:course_id/assignments
    • Create a new assignment for this course. Willo Labs grade sync API maps the newly created assignment to a grade column in the integrated product gradebook.
  5. Delete Assignment
    • DELETE /api/v1/courses/:course_id/assignments/:id
    • Delete the given assignment. Used by Willo Labs grade sync API to delete a previously created assignment when there is an upstream error mapping the assignment to a grade column the integrated product gradebook.
  6. Edit Assignment
    • PUT /api/v1/courses/:course_id/assignments/:id
    • Modify an existing assignment. Used by Willo Labs grade sync API to update assignment name to reflect current name in product gradebook.
  7. Grade Submission
    • PUT /api/v1/courses/:course_id/assignments/:assignment_id/submissions/:user_id
    • Comment on and/or update the grading for a student’s assignment submission. Used by Willo Labs grade sync API to post a student’s grade from the integrated product into the Canvas course gradebook.
  8. Get a Single Submission
    • GET /api/v1/courses/:course_id/assignments/:assignment_id/submissions/:user_id
    • Return a single user’s submission. Used by Willo Labs LTI 1.1 -> LTI 1.3 Advantage translation service to return a single student’s score for the specified assignment. Applies only to LTI 1.3 Advantage tools.

6. Why do we need the DELETE assignments privilege with the Canvas Developer Key?

We at Aktiv do not use the Canvas Developer Key directly. We do NOT actually call the Canvas API directly. We use an intermediary company called Willo Labs. Or in other words, we at Aktiv call the Willo Labs API, which they in turn, translate that to an API call to Canvas using the Canvas Developer Key.

We at Aktiv at the moment are only ever doing the following:

That being said, Willo Labs requests that we create the developer key with all the following privileges - https://help.aktiv.com/guides/lms/canvas/canvas-developer-key. Which does include the DELETE /api/v1/courses/:course_id/assignments/:id. And they actually need this particular privilege for API token refresh/authorization!

7. Why do grades show up as late in Canvas LTI 1.3 Advantage Integrations?

When syncing to an LMS over LTI, in general there are two “date” concepts to understand:

  1. The column “due_date” (WilloGradebookActivity.dueDate): For an assignment this is the same value as the assignment due date. So we send this value when creating (syncing) the corresponding column in Canvas.

    NOTE! This only applies to the Individual column type (where the each column represents a specific assignment). We never send a column “due_date” for Summary and Single Score column types since there is no obvious way to determine a due date for a collection of assignments. - More info on column types.

  2. The grade “result_date” (WilloGradebookResult.resultDate): This is the date to assign the grade, i.e. when the grade was calculated or synced for e.g. We send this value when syncing a student grade (a cell) for a column.

For point 2, in Aktiv, one can configure how this value is chosen. This is set in the course gradebook settings. Specifically course.gradebook.resultDateSource (or course.processGradebooks['SYNC'].resultDateSource).

The default for all courses is (a) REFERENCE_DATE, is a fresh timestamp when syncing. So each sync of the grade will get a new result date. Thus, in the LMS, the “result_date” will appear as the latest time this grade was synced, effectively.

Generally there is no restrictions or conditions defined by the LMS on this “result_date” field.

Depending on the LMS, the definition of “result_date” may vary. Generally this is assumed to mean the sync date (or grade calculation date), as defined by (a) REFERENCE_DATE.

However, in Canvas LTI 1.3 Advantage, they define it relative to the due date (in the sense of a student submission date). Thus, if the “result_date” is later than the “due_date”, then this is marked as “late” by the Canvas:

Image

So by using (a) REFERENCE_DATE in this scenario, each time the grade is synced, it is overwritten with a new “result_date” (timestamp of the sync), and thus eventually this will be later than the “due_date” and thus show-up as late in Canvas.

This “late” message is something that instructors do not like as it does not reflect the reality in Aktiv (i.e. students have not submitted the assignment late), so typically they want this feature just removed from the LMS. Unfortunately it is not possible to disable this in Canvas (at time of writing).

Thus, to overcome this issue, we should just send a fixed date for all students at some point before the assignment due date. Thus guaranteeing that the “result_date” is always before the “due_date” for all students. And thus putting to bed this “late” message in Canvas.

To do this in Aktiv, one should use (d) SOURCE_DATE, which is a fixed date, taken from the assignment created date, which will always be before the assignment due date.

Note! If you set the Canvas & LTI 1.3. Advantage for the LTI Source properties (when you created this in Admin Site LTI Source), then the Aktiv backend will automatically choose SOURCE_DATE always (regardless of what is set for course gradebook settings).

Alternatively, you should edit the LTI source admin.aktiv.com (Admin Site) and set the LMS provider and grade sync mode, so that the Aktiv backend knows to use this SOURCE_DATE as an override. IMPORTANT! You will then need to remove the existing grade values in Canvas, before re-syncing.