Portflow installation on Canvas

Modified on Mon, 24 Nov, 2025 at 2:52 PM

ℹ︎

This installation manual assumes an institute-wide installation. If an installation on subaccount level is preferred, additional assistance from Drieam is recommended.


Before you start: make sure you have root account admin access.

  1. Generate developer keys
    Go to Admin (root account) > [root account name] > Developer Keys

    1. LTI

      1. Key Name: Portflow

      2. Owner: Admin email
        Used to identify who has created the key for internal purposes.

      3. Redirect URI:
         EU Hosting 
        https://app.portflow.app/lti/launches
         AU Hosting 
        https://au.portflow.app/lti/launches
      4. Method: Paste JSON (see below)

      5. In case availability on sub-account level only is desired, Drieam assistance is required to get help adding the Portflow to the global navigation. 

    2. API

      1. Key Name: Portflow

      2. Owner: Admin email

      3. Redirect URIs:
         EU Hosting 

        https://app.portflow.app/lti/oauth2/callback
        https://app.portflow.app/admin/oauth2/callback
         AU Hosting 
        https://au.portflow.app/lti/oauth2/callback
        https://au.portflow.app/admin/oauth2/callback 
      4. Add the application icon url:
         EU Hosting 
        https://app.portflow.app/favicon.svg 
         AU Hosting 
        https://au.portflow.app/favicon.svg 
    3. Switch on both keys

    4. Communicate the key sets with Drieam.
      Please send both the public and private keys for both the keys, and indicate which is API/LTI.

Make sure to never delete these keys as they are crucial for the Portflow installation.
  1. Add app
    Go to Admin (root account) > Settings > Apps > View app configurations
    In case of installation on sub-account (testing, limited access), add the app on the sub-account instead of the root account and note the sub-account ID (from the URL).
    1. Add app

      1. Type: by Client ID

      2. Client ID: LTI developer key (just created in step 1a)

      3. Communicate Deployment ID with Drieam
        (Click the cog/gear icon behind Portflow and select Deployment ID)

  2. Add new account role for Portfolio Admin 
    Go to Admin (root account) > Permissions > Account roles

    1. Add Role

      1. Name: Portflow role (E.g. Portflow Admin)

      2. Grant permissions

        1. Course content - view

        2. Grades - view all grades (or Marks - view all marks)

        3. Groups - view all student groups

        4. Manage Course Files

        5. Manage Groups

        6. Users - view list

        7. Users - view primary email address

    2. Add person to the account (e.g. [institution name] Portfolio) - name is used to send notifications from.
      N.b.Make sure to set SIS-ID, login, password and use a non-existent e-mail address (e.g. portfolio-admin@drieam.de) to prevent unintended merging of existing Canvas-accounts. E-mail address is required by Canvas, but will not be used.

    3. Communicate login information to Drieam.

    4. Add that new person as Portflow Admin to the account (Admin > Settings > Admins).  In case of sub-account installation, add the person to the intended sub-account only and communicate the sub-account id with Drieam.

Make sure to never delete this account.

  1. In case Portflow is not to be available to everyone, but only for users within a specific subaccount, create a new theme in that subaccount with the custom js snippet from Drieam (see below).

  2. The default language for Portflow has to be set by Drieam. This is the language that will be shown to users who have their Canvas account set to any language other than the supported languages. Let Drieam know what your primary (default) language and secondary language(s) should be. This cannot be changed. 

ℹ︎

Portflow currently supports the following languages:

  • English
  • Dutch (Nederlands)
  • Catalan (Català)
  • Danish (Dansk)
  • French (Français)
  • German (Deutsch)
  • Irish (Gaeilge)
  • Italian (Italianio)
  • Norwegian bokmål (Norsk bokmål)
  • Spanish (Español)
  • Swedish (Svenska)


Tip: enable the feature preview of Assignment enhancements - student under Courses to create a better assignment submission experience in combination with Portfolio.



LTI Key JSON (EU hosting)

For installation, step 1:

{
  "title": "Portflow",
  "description": "Portflow is an LTI application that allows students to collect evidence and receive feedback on their portfolio.",
  "scopes": [
    "https://purl.imsglobal.org/spec/lti-nrps/scope/contextmembership.readonly"
  ],
  "oidc_initiation_url": "https://app.portflow.app/lti/open_id",
  "target_link_uri": "https://app.portflow.app/lti/launches",
  "public_jwk_url": "https://app.portflow.app/lti/keypairs",
  "extensions": [
    {
      "platform": "canvas.instructure.com",
      "tool_id": "com.drieam.portfoliolti",
      "privacy_level": "name_only",
      "settings": {
        "icon_url": "https://app.portflow.app/favicon.svg",
        "placements": [
          {
            "placement": "global_navigation",
            "message_type": "LtiResourceLinkRequest",
            "enabled": true,
            "icon_url": "https://app.portflow.app/portfoliolti_global_nav_icon.svg",
            "icon_svg_path_64": "M50.925 52.497c1.213 0 2.244-.427 3.094-1.28.849-.855 1.273-1.892 1.273-3.112V24.68c0-1.22-.424-2.258-1.273-3.112-.85-.854-1.88-1.28-3.094-1.28h-7.279v-4.393c0-1.22-.424-2.257-1.274-3.111-.849-.854-1.88-1.281-3.093-1.281H24.72c-1.213 0-2.244.427-3.093 1.28-.85.855-1.274 1.892-1.274 3.112v4.392h-7.28c-1.212 0-2.243.427-3.093 1.281-.849.854-1.273 1.891-1.273 3.112v23.425c0 1.22.424 2.257 1.273 3.111.85.854 1.88 1.281 3.094 1.281zM39.28 20.287H24.72v-4.392H39.28zM20.354 48.105h-7.28V24.68h7.28zm18.925 0H24.72V24.68H39.28zm11.646 0h-7.279V24.68h7.28z",
            "display_type": "full_width",
            "visibility": "members"
          },
          {
            "placement": "homework_submission",
            "message_type": "LtiDeepLinkingRequest",
            "enabled": true,
            "icon_url": "https://app.portflow.app/favicon.svg"
          },
          {
            "placement": "course_navigation",
            "message_type": "LtiResourceLinkRequest",
            "enabled": true,
            "text": "Portflow",
            "icon_url": "https://app.portflow.app/favicon.svg",
            "display_type": "full_width_in_context",
            "default": "disabled",
            "visibility": "admins"
          }
        ]
      }
    }
  ],
  "custom_fields": {
    "canvas_assignment_id": "$Canvas.assignment.id",
    "canvas_assignment_title": "$Canvas.assignment.title",
    "canvas_course_id": "$Canvas.course.id",
    "canvas_course_name": "$Canvas.course.name",
    "canvas_user_id": "$Canvas.user.id",
    "canvas_user_is_root_account_admin": "$Canvas.user.isRootAccountAdmin",
    "person_display_name": "$Person.name.display",
    "user_email": "$Person.email.primary",
    "user_image": "$User.image",
    "user_sourced_id": "$Person.sourcedId"
  }
}


LTI Key JSON (AU hosting)

For installation, step 1:

{
  "title": "Portflow",
  "description": "Portflow is an LTI application that allows students to collect evidence and receive feedback on their portfolio.",
  "scopes": [
    "https://purl.imsglobal.org/spec/lti-nrps/scope/contextmembership.readonly"
  ],
  "oidc_initiation_url": "https://au.portflow.app/lti/open_id",
  "target_link_uri": "https://au.portflow.app/lti/launches",
  "public_jwk_url": "https://au.portflow.app/lti/keypairs",
  "extensions": [
    {
      "platform": "canvas.instructure.com",
      "tool_id": "com.drieam.portfoliolti",
      "privacy_level": "name_only",
      "settings": {
        "icon_url": "https://au.portflow.app/favicon.svg",
        "placements": [
          {
            "placement": "global_navigation",
            "message_type": "LtiResourceLinkRequest",
            "enabled": true,
            "icon_url": "https://au.portflow.app/portfoliolti_global_nav_icon.svg",
            "icon_svg_path_64": "M50.925 52.497c1.213 0 2.244-.427 3.094-1.28.849-.855 1.273-1.892 1.273-3.112V24.68c0-1.22-.424-2.258-1.273-3.112-.85-.854-1.88-1.28-3.094-1.28h-7.279v-4.393c0-1.22-.424-2.257-1.274-3.111-.849-.854-1.88-1.281-3.093-1.281H24.72c-1.213 0-2.244.427-3.093 1.28-.85.855-1.274 1.892-1.274 3.112v4.392h-7.28c-1.212 0-2.243.427-3.093 1.281-.849.854-1.273 1.891-1.273 3.112v23.425c0 1.22.424 2.257 1.273 3.111.85.854 1.88 1.281 3.094 1.281zM39.28 20.287H24.72v-4.392H39.28zM20.354 48.105h-7.28V24.68h7.28zm18.925 0H24.72V24.68H39.28zm11.646 0h-7.279V24.68h7.28z",
            "display_type": "full_width",
            "visibility": "members"
          },
          {
            "placement": "homework_submission",
            "message_type": "LtiDeepLinkingRequest",
            "enabled": true,
            "icon_url": "https://au.portflow.app/favicon.svg"
          },
          {
            "placement": "course_navigation",
            "message_type": "LtiResourceLinkRequest",
            "enabled": true,
            "text": "Portflow",
            "icon_url": "https://au.portflow.app/favicon.svg",
            "display_type": "full_width_in_context",
            "default": "disabled",
            "visibility": "admins"
          }
        ]
      }
    }
  ],
  "custom_fields": {
    "canvas_assignment_id": "$Canvas.assignment.id",
    "canvas_assignment_title": "$Canvas.assignment.title",
    "canvas_course_id": "$Canvas.course.id",
    "canvas_course_name": "$Canvas.course.name",
    "canvas_user_id": "$Canvas.user.id",
    "canvas_user_is_root_account_admin": "$Canvas.user.isRootAccountAdmin",
    "person_display_name": "$Person.name.display",
    "user_email": "$Person.email.primary",
    "user_image": "$User.image",
    "user_sourced_id": "$Person.sourcedId"
  }
}


Sub-Account theme JavaScript

For sub-account installation - replace [accountId] with the sub-account ID (step 2) and [toolId] with the number before the colon (:) from the Deployment ID (step 2).

/*Drieam Portfolio Theme - pjsmits*/

(() => {
  const menu = document.getElementById("menu");

  if (!menu) {
    return;
  }

  const historyLink = document.getElementById("global_nav_history_link");
//Rename account id and external id
  const menuItem = document.createElement("li");
  menuItem.className =
    "globalNavExternalTool menu-item ic-app-header__menu-list-item";
  menuItem.innerHTML = `
    <a class="ic-app-header__menu-list-link" href="/accounts/[accountId]/external_tools/[toolId]?launch_type=global_navigation">
            <svg version="1.1" class="ic-icon-svg ic-icon-svg--lti menu-item__icon" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 64 64">
                    <path d="M50.925 52.497c1.213 0 2.244-.427 3.094-1.28.849-.855 1.273-1.892 1.273-3.112V24.68c0-1.22-.424-2.258-1.273-3.112-.85-.854-1.88-1.28-3.094-1.28h-7.279v-4.393c0-1.22-.424-2.257-1.274-3.111-.849-.854-1.88-1.281-3.093-1.281H24.72c-1.213 0-2.244.427-3.093 1.28-.85.855-1.274 1.892-1.274 3.112v4.392h-7.28c-1.212 0-2.243.427-3.093 1.281-.849.854-1.273 1.891-1.273 3.112v23.425c0 1.22.424 2.257 1.273 3.111.85.854 1.88 1.281 3.094 1.281zM39.28 20.287H24.72v-4.392H39.28zM20.354 48.105h-7.28V24.68h7.28zm18.925 0H24.72V24.68H39.28zm11.646 0h-7.279V24.68h7.28z"></path>
                    </svg>
        <div class="menu-item__text">
            Portflow
        </div>
        </a>
    `;

  if (historyLink && historyLink.parentNode.parentNode.id === "menu") {
    menu.insertBefore(menuItem, historyLink.parentNode);
  } else {
    menu.appendChild(menuItem);
  }

})();


Overview of information to send to Drieam

After completion of the installation according to the steps above, you can send the information to support@drieam.com.


  • LTI developer key (step 1)
    1. Public key
    2. Secret key
  • API developer key (step 1)
    1. Public key
    2. Secret key
  • Deployment ID (step 2)
    1. Deployment ID
  • User (step 3)
    1. Username
    2. Password
  • Default and secondary language of your institution.
  • URL (vanity url) of the Canvas instance.
  • In case of sub-account installation (instead of root-account): sub-account ID (from URL).



Was this article helpful?

That’s Great!

Thank you for your feedback

Sorry! We couldn't be helpful

Thank you for your feedback

Let us know how can we improve this article!

Select at least one of the reasons
CAPTCHA verification is required.

Feedback sent

We appreciate your effort and will try to fix the article