Enhanced Portfolio LTI Configuration: Part 1 – LTI registration
This is Part 1 of the enhanced Portfolio LTI setup guide. In this section, you'll learn how to register and configure the Portfolio LTI tool within your Canvas environment. Admin access is required to complete these steps.
You’ll be guided through:
-
Creating the necessary Developer Keys (API + LTI)
-
Selecting the correct region
Once you’ve completed these configuration steps, continue to Part 2 – Installation & Placement to install the Portfolio tool in your Canvas account.
Overview
This setup is required to register and install the Portfolio LTI tool within a Canvas environment, either at the root account or subaccount level. You will need Canvas admin access to complete this configuration.
For subaccount setups, certain placements (e.g., Global, User and Account Navigation) may not function correctly, so we recommend enabling only Course Navigation.
Placement Information:
Placement option |
Root account install |
Subaccount install |
Global navigation |
✅ Yes |
❌ No |
User navigation |
✅ Yes |
❌ No |
Account navigation |
✅ Yes(admin only) |
✅ Yes(admin only) |
Course navigation |
✅ Yes |
✅ Yes |
Here is where you can learn more about what each placement option means and how it behaves within Canvas.
Setup Steps – Root Account
1. Log into Canvas (root account level)
2. Navigate to Developer Keys
- Click Admin in the global navigation
- Select Developer Keys
Note: If you do not see the Developer Keys option, it likely means you do not have the necessary admin permissions. Please contact your institution’s Canvas administrator and request to be granted an admin role with access to Developer Keys at the root account level.
3. Create an API Key
- Click + Developer Key > + API Key
- Please ensure you use the correct AWS region and corresponding domain when configuring the tool.
Region Code |
Location |
dub |
Europe (Ireland) |
fra |
Europe (Frankfurt) |
iad |
US East (N. Virginia) |
pdx |
US West (Oregon) |
sin |
Asia Pacific (Singapore) |
syd |
Asia Pacific (Sydney) |
yul |
Canada (Central) |
- Domain format: https://<region>.portfolio.instructure.com
Example: https://iad.portfolio.instructure.com
- Fill out only the required fields:
Field |
Value |
Key Name |
Portfolio |
Owner Email |
Your email address |
Redirect URIs |
https://<region>.portfolio.instructure.com/api/lti/oauth-login |
- Replace <region> with the correct region code
Note: The URL must be entered in all lowercase.
- Click Save
4. Enable the API Key
- Locate the new row in the Developer Keys table
- Toggle the State pill to ON ✅
🔒 Save these values from the Details column:
- API Client ID (above “Show Key”)
- API Secret (click “Show Key” to reveal it)
5. Create the LTI Registration Key
- Click + Developer Key -> + LTI Registration
- Set the Dynamic Registration URL as:
https://<region>.portfolio.instructure.com/api/lti/register- Make sure to use the same region code you used during the API Key creation step (3.)
- Make sure to use the same region code you used during the API Key creation step (3.)
- Click Continue
6. Complete LTI Registration Fields
Once the form loads:
- Canvas API Client ID → Paste your saved API Client ID
- API Secret → Paste your saved API Secret
- Click Save
7. Configure LTI Placements
- A modal will appear prompting for placement configuration:
Do the following:
- Deselect any placements you do not want to use or enable
- For subaccount use cases, we recommend only enabling Course Navigation
- Update the title of the selected placement to “Portfolio”
Click Enable & Close
8. Save the LTI Client ID
- The new LTI key appears in the table
- Ensure the State is toggled ON ✅
- Copy the LTI Client ID from the Details column
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
Thank you for these great instructions. They worked perfectly yesterday in our Beta environment. Today, I'm setting it up in our Production environment and in step #5 (LTI registration key), I am getting the error: {"statusCode":500,"message":"Internal server error"}
Do you know what's wrong?
Thanks!
Heather
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
My reply above has been resolved. I entered the wrong URL (the /login and not the /register).
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
@Dalma_Schnell is it possible to scope the API Key? Having an unscoped key butts against our policies for adopting new tools - will the specific, necessary scopes be published for this integration?
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
Hi @heather_monti, I’m glad to hear it’s been resolved! Feel free to reach out if you run into any issues while testing in!
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
Hi @jmerlenbach2,
Thanks so much for raising this! We’re aware of the issue, and this will be changed soon on our end. We’re aiming to address it by the end of August.
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
My turn to get the error when registering this tool in BETA:
{"statusCode":500,"message":"Internal server error"}
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
I got the same error:
{"statusCode":500,"message":"Internal server error"}
I might be missing something..?
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
I'm getting the same "Internal Server Error" as the two posters above. I've checked and double checked the URL and it matches the directions with the correct region code. @Dalma_Schnell any insight on what may be wrong?
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
I'm setting the portfolio up in our Bata environment and getting the same error when I enter the dynamic registration URL.
{"statusCode":500,"message":"Internal server error"}
Cheers,
Mark Murphy
ACU.
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
Ditto! I'm setting this up in our live instance and getting this error:
{"statusCode":500,"message":"Internal server error"}
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
Can we can an update from Product about this, please? Is something wrong with Portfolio, or is there something we're all missing?
Thanks!
@Dalma_Schnell
- Mark as Read
- Mark as New
- Bookmark
- Permalink
- Report Inappropriate Content
I am also getting the error when trying to install in Beta. Managed to get it set up in Production in a subaccount but really need this to work in Beta.
Any help is appreciated 🙂
John
{"statusCode":500,"message":"Internal server error"}