> ## Documentation Index
> Fetch the complete documentation index at: https://docs.junojourney.com/llms.txt
> Use this file to discover all available pages before exploring further.

# External Tools (LTI)

> Connect external LTI 1.3 tools — quizzes, simulations, interactive content — and track completion and grades in Juno.

export const RelatedPages = ({pages = []}) => {
  if (pages.length === 0) return null;
  return <>
      <br />
      <strong>Related articles</strong>
      <CardGroup cols={2}>
        {pages.map(page => <Card title={page.title} href={page.href} key={page.href} />)}
      </CardGroup>
    </>;
};

export const VideoWalkthrough = ({src, alt, caption}) => {
  return <Frame caption={caption}>
      <img src={src} alt={alt || caption || "Walkthrough"} />
    </Frame>;
};

export const Prerequisites = ({items = []}) => {
  return <Note title="Before you start">
      {items.length > 0 && <ul>
          {items.map((item, index) => <li key={index}>{item}</li>)}
        </ul>}
    </Note>;
};

export const RoleBadge = ({roles = []}) => {
  const colorMap = {
    Admin: "yellow",
    Manager: "blue",
    Learner: "green",
    "Co-editor": "purple"
  };
  return <>
      {roles.map(role => <span key={role}><Badge color={colorMap[role] || "gray"} size="sm" shape="pill">{role}</Badge>{" "}</span>)}
    </>;
};

export const FeatureAvailability = ({module, feature}) => {
  const label = feature || module;
  return <Info title="Feature availability">
      {label ? <>This feature requires the <strong>{label}</strong> module. </> : <>This feature may not be enabled for your organization. </>}
      If you don't see it in Juno, contact your administrator.
    </Info>;
};

<FeatureAvailability module="LMS" />

External tools let you add learning that lives in another system — an interactive quiz, a simulation, a specialized content provider — and have it behave like any other Unit in Juno: learners launch it in one click, and their score comes back to mark the Unit complete.

## What is LTI?

**LTI** (Learning Tools Interoperability) is an education industry standard for connecting an LMS to external learning tools. Juno supports **LTI 1.3**, the current secure version built on OpenID Connect.

When you connect an LTI tool, Juno becomes the **platform**: it signs learners into the external tool (so they don't log in again) and receives their results back automatically.

An LTI tool appears in Juno as an **LTI Unit** — a single piece of learning you place inside a Journey, just like a course, video, or SCORM package.

```mermaid theme={null}
flowchart LR
  L((Learner)) -->|opens the LTI Unit| J["Juno<br/>(your LMS)"]
  J ==>|"1 · Launch — secure sign-on:<br/>who is learning + which activity"| T["External LTI tool<br/>quiz · simulation · content"]
  T ==>|"2 · Grade sent back →<br/>Unit marked complete"| J

  classDef juno fill:#a5d8ff,stroke:#2563eb;
  classDef tool fill:#b2f2bb,stroke:#15803d;
  class J juno
  class T tool
```

***

## How a learner takes an LTI Unit

<Steps>
  <Step title="Open the Unit">
    The learner opens the LTI Unit in a Journey and selects **Launch content**.
  </Step>

  <Step title="Secure launch">
    Juno signs the learner into the external tool and opens it in an embedded frame (or a new tab). No separate login is needed.
  </Step>

  <Step title="Complete the activity">
    The learner works through the activity in the external tool at their own pace.
  </Step>

  <Step title="Grade returns to Juno">
    When the tool reports a result, Juno records the grade and marks the Unit complete — the Journey progress updates automatically.
  </Step>
</Steps>

***

## Completion and grading

The external tool decides when the activity is done and what score to send. Juno supports two evaluation methods, set when you create the LTI Unit:

| Method                      | How it works                                                                              |
| --------------------------- | ----------------------------------------------------------------------------------------- |
| **By completion** (default) | The Unit is marked complete as soon as the tool reports the activity finished.            |
| **By score**                | The Unit is marked complete only when the returned grade meets the minimum score you set. |

<Note>
  The grade and completion are recorded against the learner's progress. If a learner finished the activity in the external tool but Juno still shows it incomplete, the tool may not have sent its result yet — see [Troubleshooting](#troubleshooting).
</Note>

***

## Before you start

<RoleBadge roles={["Admin"]} />

<Prerequisites
  items={[
"LMS module enabled",
"Admin access to Admin → Settings",
"The external tool's connection details (its login URL, launch URL, and public keyset / JWKS URL)",
]}
/>

Connecting an LTI tool is a **two-way exchange**: you give Juno a few details about the tool, and Juno gives you back identifiers and URLs to paste into the tool. You only do this once per tool.

***

## Registering an external tool

<RoleBadge roles={["Admin"]} />

<Steps>
  <Step title="Open the LTI registration screen">
    Go to **Admin → Settings → External Tools (LTI)** and select **Register tool**.
  </Step>

  <Step title="Enter the tool's details">
    Fill in the tool name, its audience, OIDC login URL, target link (launch) URL, at least one redirect URI, and the tool's key source — either a **JWKS keyset URL** or a **public key (PEM)**. Save.
  </Step>

  <Step title="Copy Juno's identifiers back to the tool">
    Expand **Identifiers & endpoints** on the saved tool. Copy the generated **Client ID**, **Deployment ID**, and the platform endpoint URLs (issuer, authorization, access token, public JWKS) into the external tool's LTI configuration.
  </Step>

  <Step title="Confirm the connection">
    Most tools provide a test launch. A successful test confirms both sides are wired correctly.
  </Step>
</Steps>

<img src="https://mintcdn.com/juno-76d1c392/4SaWdajdi818QLbe/images/learning/lti-register-dialog.png?fit=max&auto=format&n=4SaWdajdi818QLbe&q=85&s=31cc764583c941139671b99d16b8b824" alt="The Register LTI tool form under Admin → Settings → External Tools (LTI)" width="1280" height="800" data-path="images/learning/lti-register-dialog.png" />

After saving, expand **Identifiers & endpoints** on the tool to copy the generated Client ID, Deployment ID, and platform endpoint URLs into the external tool:

<img src="https://mintcdn.com/juno-76d1c392/4SaWdajdi818QLbe/images/learning/lti-admin-registrations.png?fit=max&auto=format&n=4SaWdajdi818QLbe&q=85&s=ff83680d957e7b5555e5783ac8df69ff" alt="A registered tool showing its generated identifiers and platform endpoints" width="1280" height="800" data-path="images/learning/lti-admin-registrations.png" />

<Tip>
  Keep the registration **Enabled**. A disabled registration blocks launches for every LTI Unit that uses it.
</Tip>

***

## Adding an LTI Unit to a Journey

<RoleBadge roles={["Admin"]} />

<Steps>
  <Step title="Open a Journey and add a step">
    In the Journey builder, select **+** to add a step, then choose **LTI tool**.
  </Step>

  <Step title="Configure the Unit">
    Give the Unit a title, pick the **External tool** from the list of registered tools, and choose the completion evaluation method (**By completion** or **By score**). Add optional custom parameters if the tool needs them — for example, a Moodle activity published as an LTI tool requires its `id` custom property, shown on Moodle's published-content page.
  </Step>

  <Step title="Create and publish">
    Create the Unit. It becomes step content in the Journey and is ready for learners to launch.
  </Step>
</Steps>

<Note>
  LTI Units are added from inside a **Journey** (the step picker), not from the standalone **Create** menu.
</Note>

***

## Editing an LTI Unit

<RoleBadge roles={["Admin"]} />

In the Journey builder, select the **edit** control on the LTI step. The settings dialog opens with the Unit's title, external tool, completion evaluation, and custom parameters — changes take effect on the learner's next launch.

***

## Troubleshooting

| Issue                                        | Solution                                                                                                                                                                                                                                                                                   |
| -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Launch fails or the tool shows an error      | Re-check that the platform identifiers (Client ID, Deployment ID, issuer, authorization/token/JWKS URLs) were copied into the tool exactly as shown in **Identifiers & endpoints**.                                                                                                        |
| "Registration is disabled"                   | Re-enable the registration in **Admin → Settings → External Tools (LTI)**.                                                                                                                                                                                                                 |
| Learner finished but the Unit isn't complete | The tool hasn't sent a result yet, or **By score** is set and the grade is below the minimum. Many tools send grades on a schedule rather than instantly — Moodle, for example, syncs roughly every 30 minutes. Confirm the tool sends grades and check the evaluation method on the Unit. |
| Grade arrives but completion doesn't show    | The learner must have opened (started) the Unit so progress exists for the result to attach to. Have the learner open the Unit, then re-send the score.                                                                                                                                    |

***

<RelatedPages
  pages={[
{ href: "/learning/scorm-content", title: "SCORM Content" },
{ href: "/learning/learning-paths", title: "Journeys" },
{ href: "/learning/units-and-courses", title: "Content Types Overview" },
]}
/>
