# Connect an External LMS

Keep your courses where they already live, and let partners reach them from Suger without a second login.

---

## Overview

If your partner training already lives in a learning management system, you do not have to rebuild it in Suger. Connect the LMS once and Suger can:

- publish **external courses** that are a link into your LMS;
- sign partners in on arrival, through SAML single sign-on, so there is no second password;
- record who opened each course, and gate access by partner tier.

Suger is the **identity provider** in this arrangement and your LMS is the service provider. Your LMS remains the authority on course content and completion.

## Configure the connection

Open **Partner settings → Training / LMS**.

### Turn it on

A single switch gates the whole path. **Until you enable it, every sign-on request is denied** — which is what an organization that has never configured an LMS should do.

Set **Provider** to the name of your LMS (for example, *Skilljar*). It is display-only: it is the name partners see on the button that sends them there.

### What to give your LMS

Three values are generated for you and are read-only here. Copy them into your LMS's SAML configuration:

| Field | What it is |
| ----- | ---------- |
| **Sign-in URL** | Where your LMS sends users to authenticate. |
| **Metadata URL** | The identity-provider metadata document. |
| **Identity provider entity ID** | The identifier your LMS should expect assertions from. |

### What to take from your LMS

Three values come the other way, from your LMS's service-provider metadata. Type them in here:

| Field | What it is |
| ----- | ---------- |
| **SP entity ID** | Your LMS's own identifier. |
| **ACS URL** | Where your LMS receives the assertion. |
| **SLO URL** | Where your LMS handles single logout. |

### What Suger sends about each user

The tab shows the exact attribute mapping — each attribute, the value Suger sends, and whether it is required — so you can match it against what your LMS expects before anyone tries to sign in.

### Launch URL template

This is the setting most worth understanding, because skipping it produces a confusing result rather than an error.

**A course destination is an ordinary deep link, and whether your LMS asks who the visitor is remains your LMS's decision.** If the destination page is publicly readable, your LMS has no reason to challenge for identity — so the partner arrives *signed out*, on the right page, and has to find a Sign in button themselves. Single sign-on was configured correctly and still appears not to work.

The fix is to send the learner at your LMS's **own login entry point** and let it carry them onward. That makes the LMS initiate SAML, which hands off to Suger — silently, because a partner clicking from Suger already has a session.

Enter an absolute `http(s)` URL containing at least one placeholder:

| Placeholder | Substitutes |
| ----------- | ----------- |
| `{path}` | The destination's path and query, for example `/certification-exam`. |
| `{destination}` | The whole destination URL. |

Both are substituted URL-encoded. For Skilljar, whose `/auth/login` honours a `next` parameter:

```
https://your-site.skilljar.com/auth/login?next={path}
```

:::note
This is a template rather than something Suger derives, because the entry point and its return parameter are vendor-specific — `next`, `RelayState`, `returnUrl` — and a wrong guess would strand every learner on a login page with no route back to their course. A template can be corrected here; a built-in pattern would need a release.
:::

**Leaving it empty is valid.** The destination then opens exactly as it did before, with whatever sign-in behaviour your LMS applies to it.

### Restrict by tier

Optionally narrow access to partners in specific [tiers](/prm/partner-tiers/).

:::warning
**Leaving the tier list empty means every active partner, not nobody.** The common case is an organization that wants all its partners in training, and a filter you had to populate before it worked would have locked everyone out on the day it was switched on.
:::

### Completion sync

The tab's **Completion sync** section controls whether completions recorded in your LMS flow back into Suger.

## Publish an external course

**Link external LMS** is a third kind of course, alongside the built-in editor and SCORM uploads. See [Build a Training Course](/prm/build-a-training-course/).

An external course is only a destination, so it asks for less:

| Field | Notes |
| ----- | ----- |
| **Course name** | What partners see, for example *Harness Partner Onboarding*. |
| **Destination link** | The URL in your LMS. |
| **LMS** | Which system it lives in. |
| **Category** | Where it sits in your catalogue. |
| **Estimated minutes** | Shown to partners as the expected time. |

The destination is pinned to a version, so editing the course later does not silently repoint partners who are already working through it.

## What partners see

On an external course the partner gets a single button — **Open in *{your LMS}*** — at every stage. There is no Start / Resume / Review progression, because Suger is not running the lessons and has nothing to resume.

## What you can still monitor

**An external course reports that it was opened, not how far through it a partner is.** Suger keeps a per-enrollment open ledger, so [Share and Monitor Training](/prm/share-monitor-training/) shows an **Opened** status and a count of how many partners have opened it — never a percentage complete.

That is a real limit, not a gap to work around: the lessons run in your LMS, so it is your LMS that knows how far a learner has got. Use completion sync if you need that back in Suger.

## Troubleshooting

### A partner lands on "access denied"

A partner refused access sees a Suger-branded page carrying a **reference code**. The code is deliberately opaque — it identifies the reason without telling an unauthenticated visitor which of several checks they failed.

Ask the partner for the code. The usual causes are:

- external LMS single sign-on is not enabled;
- the partnership is not **Active**;
- the partner's tier is not in the allowed list.

### The partner arrives signed out

Set the **launch URL template**. See above — the destination link alone does not make your LMS ask who the visitor is.

## Related

- [Build a Training Course](/prm/build-a-training-course/)
- [Share and Monitor Partner Training Courses](/prm/share-monitor-training/)
- [Take a Training Course](/prm/take-training-course/)
- [Partner Tiers](/prm/partner-tiers/)
