Managing LTI Course Navigation Visibility

35 13 4,275

The Story

A common frustration of teachers using Canvas at an institution is when their course navigation gets messed up by an admin. A teacher may have been teaching their courses for a couple of weeks and then all of a sudden, their institution adds a new LTI that has a course navigation launch and it messes up their course navigation in all their courses. Then their students start asking about the new LTI and the teacher has to tell them all they aren't using it and hide it in their course settings


However, the story is worse for those instructors who don't know to customize their course navigation. Before you know it, they have a course navigation list that is so long that students have to scroll to see everything on it (see image to right). Core Canvas tools will hide themselves if they aren't being used (light grey items), but not with LTI's. So now those teachers have their students asking about each new tool and wondering why their teachers aren't using it...

Taking Control

Part 1 - Installing New LTIs

As the Canvas admin, you have the ability to decide, when an LTI is installed, whether you want it to be visible or not. Most LTI vendors want to encourage your teachers to use the tool and they enable it by default. A simple edit can help you avoid the above hassle for your teachers, while allowing you to roll the tool out to the teachers who need it.

When installing an LTI tool, the 3rd party provider will generally provide you a URL to configure the tool. If installing the tool from the apps tab in Canvas, the URL's for the installs can be found at the tool's detail page on These URLs should end in .xml which is the format needed to configure an LTI tool. Navigating to these URL's in your browser should take you to a page that looks like this:

<blti:title>Course Wanda Fish</blti:title>
<blti:description>This tool adds a course navigation link to a page on a fish called "Wanda"</blti:description>
<blti:extensions platform="">
  <lticm:property name="tool_id">course_navigation</lticm:property>
  <lticm:property name="privacy_level">anonymous</lticm:property>
  <lticm:options name="course_navigation">
    <lticm:property name="text">Course Wanda Fish</lticm:property>

The trick is to find the <lticm:options name="course_navigation"> part of the xml file so we can customize it a little bit. We just need to add one more line after this and then we can install the LTI by pasting in XML. So here are the instructions:

  1. Copy and paste the XML into a text editor (Notepad for Windows or textEdit for Mac)
  2. Find the <lticm:options name="course_navigation"part of the code
  3. Copy and paste the following code immediately below the course navigation line
    • <lticm:property name="default">disabled</lticm:property>
  4. Follow these instructions to install the LTI via XML
  5. Enjoy the new LTI being hidden by default

Part 2 - Editing Existing LTIs

If you already have LTIs that are visible by default that you'd like to change, you can do that by using the Canvas API. There is a lot to working with the API that I will not go into on this post, but if you have a Mac you already have "cURL" installed by default so you can copy and paste the following code to update your LTI tools. If you have a PC, you can try and follow the instructions here to install cURL on Windows.

You will need to:

  1. Copy and paste the following code snippet to a text editor
    • NOTE: If the tool has other custom navigation parameters they need to be added to avoid breaking some functionality
      • View the existing parameters by viewing the response from step 4
    • curl -X PUT 'https://<canvas>/api/v1/accounts/<account_id>/external_tools/<external_tool_id>' \
             -H "Authorization: Bearer <token>" \
             -F 'course_navigation[default]=disabled'\

             -F 'course_navigation[*CUSTOM PARAMETERS*]=VALUE"

  2. Put your Institution's Canvas URL where <canvas> placeholder is ( or vanity URL)
  3. Put the Account/Sub-Account ID where the <account_id> placeholder is
    • The can be found by navigating to the Account/Sub-account in Canvas and looking at the url. It should be https://<canvas>/accounts/123 with number 123 being the account_id
  4. External tool ID can be found by updating the <school> and <account_id> fields in the url below and then navigating to it in your browser
    • https://<school>/api/v1/accounts/<account_id>/external_tools?per_page=100

    • You may want to download this Chrome Plugin to make the text more organized (similar plugins exist for other browsers)
    • Find the LTI tool you are looking for, the LTI should be a number. eg:


  1. Update the <external_tool_id> placeholder with the LTI id number
  2. Generate an API Token
  3. Replace the <token> placeholder with your new API Token
  4. Copy and paste the edited code snippet into Terminal (on mac) or Command Prompt (on Windows after you install cURL)
  5. Hit Enter and watch the LTI be hidden by default in all courses. 

*Note, your teachers may have to re-enable the LTI tool in their courses to have access. So you may want to send out communication about this change before you do it.

Explorer III

Thank you for sharing! I've known about this, but this is the clearest write up that I've seen of the process so far.

Explorer III

Thank you for sharing this‌.  I have been searching for an answer to this dilemma for months now.  Great step-by-step directions! Smiley Happy

Surveyor II

Pretty nice. Thanks for this. 

Has anyone come across some kind of guidance (best practices, outright standards, etc.) around creating and using LTIs? It'd be great if there was something to point vendors to that offered suggestions like "don't make stuff automatically visible." 

Learner II

Thank you for this. Super easy instructions!

I tried this with my latest LTI install and it works perfect, but when I go back to disable it, it does not show up as an option in my list??? Have you experienced any problems with items not showing up in this list?




It means that you have more than 10 external tools installed (only the first 10 show up on the list). Adding ?per_page=100 to the end of the URL to get the list of external tools should list the first 100 tools. I'll update the documentation. Thanks!


I'm trying to disable by default some previously enabled apps in a sub account.

I'm getting some errors from the terminal:

curl: (3) [globbing] bad range in column 214

curl: (3) [globbing] unmatched close brace/bracket in column 12

curl: (6) Could not resolve host: Bearer

curl: (3) [globbing] bad range in column 108

Here is my code with the school and token blacked out.

api code with token blacked out

Any ideas on how to get this to work?

We have a ridiculous amount of clutter in the navigation. I will be forever grateful if I can hide some of it.

345111_Screen Shot 2020-04-16 at 6.09.24 PM.png


A couple of points to help you out.

  1. Make sure your  -H "Authorization: Bearer <token>" \   is all on one line
  2. The -F 'course_navigation[*CUSTOM PARAMETERS*]=VALUE" needs to be customized for each LTI you are editing... like the following example for the Instructure SCORM LTI:

curl -X PUT 'https://<domain>/api/v1/accounts/<account_id>/external_tools/123' \
-H "Authorization: Bearer 123~4567" \
-F 'course_navigation[default]=disabled'\
-F 'course_navigation[text]=SCORM'\
-F 'course_navigation[visibility]=admins'\
-F 'course_navigation[url]='\
-F 'course_navigation[selection_width]=800'\
-F 'course_navigation[selection_height]=400'

Hope that helps


Hi Jeremy,

Thanks for your help. I tried a lot of things and spent a long time talking to Canvas support. Even after following their specific directions and running code on both the Mac terminal and a PC it still didn't work. After finding a video that showed making Canvas API calls using the Postman software I tried giving that a shot. Lo and behold it finally worked!

What you need:

  1. Postman (free software)
  2. JSON formatter chrome plugin
  3. This command line - https://<canvas>/api/v1/accounts/<account_id>/external_tools/<external_tool_id>?course_navigation[default]=disabled

*Tech support told me to add the question mark after the external tool id.

Here's a step by step how to video for people looking to do this without a lot of experience using API calls.

Learner II

@helfcoI followed the steps on the video and ran it without any error messages. But it didn't work, did you have the issue too?


It's still working for me. 

This may not work if you don't have admin rights to the account.

Double-check that in Postman you have it set to Put.

Add the Query Params that match the tool course_navigation readout from the https://<school>/api/v1/accounts/<account_id>/external_tools?per_page=100 link

Make sure to add/change course_navigation[default] to disabled in postman under "Query Params"

Screen Shot 2020-09-21 at 5.39.08 PM.png

Screen Shot 2020-09-21 at 5.34.54 PM.png

Double-check that Authorization is set to "Bearer Token." The token must be valid and not have any extra spaces after it. 

Screen Shot 2020-09-21 at 5.42.05 PM.png

Learner II

Hi @jperkins @helfco,

Is there a way , as addition to all these codes, to disable the default menus only to a set of courses. For my schools, teacher would like to keep their past courses the same way, only changes to new courses from now on.



I don't think so, but maybe @jperkins could weigh in.

The issue is that some of the tools are installed at the root account level (top level). If you had a subaccount with past courses you wouldn't be able to hide and display certain tools for that specific subaccount as the tools can only be controlled at the root account. You could hide/display them at the root account, but that would affect the entire institution. There may be a workaround, but I haven't heard of one.


@qnguyen If you update via the API and aren't reinstalling it after tweaking the XML, a teacher that updated their course navigation items and touched that lti, that course should have an override config in place that would not be changed with the updating of the LTI. Otherwise, if teachers didn't tweak their course nav, then their navigation would probably be changed to reflect the new defaults.

I have not tested this, and would recommend that you validate before applying globally if you're concerned. However, based on my knowledge I believe that should be the expected behavior.