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

# Connect an LMS

> Register Exec as an LTI 1.3 tool in your LMS using dynamic registration or a manual connection.

You connect an LMS from **Workspace settings → Integrations → LTI 1.3**, which opens the LTI settings page. There are two ways to register Exec as a tool — pick the one your LMS supports.

| If your LMS supports...               | Use                                           |
| :------------------------------------ | :-------------------------------------------- |
| LTI 1.3 Dynamic Registration          | [Dynamic registration](#dynamic-registration) |
| Manual LTI 1.3 platform configuration | [Manual connection](#manual-connection)       |

When in doubt, look for a "Dynamic Registration URL" or "Register external tool from URL" option in your LMS's LTI settings — that's the fast path. If you only see fields for issuer, client ID, keyset URL etc., use the manual flow.

***

## Open the LTI settings page

<Steps>
  <Step title="Open Workspace settings">
    Click your profile avatar, then **Workspace settings**.
  </Step>

  <Step title="Open Integrations">
    From the left sidebar under **Administration**, click **Integrations**.
  </Step>

  <Step title="Open LTI 1.3">
    Under the **Learning** section, click the **LTI 1.3** card. You land on the LTI settings page.

    <Frame>
      <img src="https://mintcdn.com/exec-79a6bbdb/mHn8qFXnxH8fRAz0/images/lti/lti-settings-page.png?fit=max&auto=format&n=mHn8qFXnxH8fRAz0&q=85&s=158a2885e6bc8a84de7abda43d736ff3" alt="LTI settings page showing endpoint URLs, manual form, dynamic registration button, and connected LMSes table" width="2560" height="2844" data-path="images/lti/lti-settings-page.png" />
    </Frame>
  </Step>
</Steps>

The page is divided into four sections:

* **Endpoint URLs** — The four URLs your LMS needs when registering Exec as a tool.
* **Manual LMS connection** — A form for pasting platform details from LMSes that don't support dynamic registration.
* **Dynamic registration** — A button that mints a one-time URL for LMSes that do.
* **Connected LMSes** — The list of platforms already wired up to this workspace.

***

## Endpoint URLs

These four URLs uniquely identify Exec to your LMS. Every LTI 1.3 LMS asks for some subset of them when you register an external tool.

| Endpoint                  | What it's for                                                                               |
| :------------------------ | :------------------------------------------------------------------------------------------ |
| **OIDC login initiation** | Where the LMS sends learners to start the launch handshake.                                 |
| **Launch (redirect URI)** | Where the LMS POSTs the signed launch token.                                                |
| **JWKS**                  | Exec's public keys, used by the LMS to verify our outbound requests (e.g., grade passback). |
| **OpenID configuration**  | Discovery document. Some LMSes ask for this single URL and pull the others from it.         |

Use the **Copy** button next to each URL to copy it to your clipboard.

<Info>
  These URLs are stable per environment. You only need to copy them once when registering Exec in your LMS.
</Info>

***

## Dynamic registration

For LMSes that support [LTI 1.3 Dynamic Registration](https://www.imsglobal.org/spec/lti-dr/v1p0). The LMS opens a one-time URL we generate, exchanges configuration with Exec automatically, and the connection appears in **Connected LMSes** with no manual copy-paste.

<Steps>
  <Step title="Generate a registration URL">
    On the LTI settings page, click **Generate registration URL** in the **Dynamic registration** section.

    Exec creates a signed URL valid for **1 hour** and copies it to your clipboard. The URL is also displayed below the button so you can copy it again if needed.

    <Frame>
      <img src="https://mintcdn.com/exec-79a6bbdb/mHn8qFXnxH8fRAz0/images/lti/dynamic-registration-url.png?fit=max&auto=format&n=mHn8qFXnxH8fRAz0&q=85&s=06252cbb652cd252809e7c9d0ec50800" alt="Dynamic registration section with the registration URL displayed below the button" width="2076" height="372" data-path="images/lti/dynamic-registration-url.png" />
    </Frame>
  </Step>

  <Step title="Paste the URL into your LMS">
    In your LMS's LTI 1.3 settings, find the field labelled "Dynamic Registration URL", "Register from URL", or similar, and paste the URL Exec generated. Submit the form.

    Your LMS will open Exec's registration endpoint in a popup or new tab.
  </Step>

  <Step title="Wait for confirmation">
    Once the LMS finishes exchanging configuration with Exec, the popup shows a "Registration complete" message and closes automatically.

    The new connection now shows in the **Connected LMSes** table on the LTI settings page.
  </Step>
</Steps>

<Warning>
  Registration URLs expire after 1 hour. If the LMS sits on the URL for too long, generate a fresh one.
</Warning>

***

## Manual connection

For LMSes that don't support dynamic registration. You first create the External tool inside the LMS using Exec's **Endpoint URLs**, then paste the platform details the LMS gives you back into Exec.

This is a two-sided handshake:

1. **In your LMS:** create an External tool / LTI 1.3 platform, paste in Exec's four endpoint URLs, save. The LMS gives you back its own issuer, client ID, deployment ID, authentication URL, token URL, and public keyset URL.
2. **In Exec:** open the LTI settings page, paste those values into the **Manual LMS connection** form, and save.

### Step 1 — Create the External tool in your LMS

The exact field names vary by LMS. Match them like this:

| In your LMS                              | Paste from Exec's Endpoint URLs |
| :--------------------------------------- | :------------------------------ |
| Tool URL / Launch URL / Target Link URI  | **Launch (redirect URI)**       |
| Initiate login URL / OIDC login URL      | **OIDC login initiation**       |
| Public keyset URL / JWKS URL (Exec side) | **JWKS**                        |
| Redirect URI(s)                          | **Launch (redirect URI)**       |
| LTI version                              | LTI 1.3                         |

A few settings to check while you're there:

* Configure the LMS to use a **keyset URL** (not an inline public key) so key rotation works automatically.
* Enable **Assignment and Grade Services** if you want [grade passback](/lti/grade-passback) — without it, scores won't post back to the gradebook.
* If your LMS offers a launch container choice, use **New window** when the LMS is on a different domain than Exec.

Save the tool. The LMS then issues you platform details — issuer, client ID, deployment ID, and its own auth URLs — that Exec needs to validate launches.

### Step 2 — Save the platform details in Exec

<Steps>
  <Step title="Open the Manual LMS connection form">
    On the LTI settings page, scroll to **Manual LMS connection**.

    <Frame>
      <img src="https://mintcdn.com/exec-79a6bbdb/mHn8qFXnxH8fRAz0/images/lti/manual-lms-connection.png?fit=max&auto=format&n=mHn8qFXnxH8fRAz0&q=85&s=19691157f07103f08fbe3b823c7606c3" alt="Manual LMS connection form with Platform name, Issuer, Client ID, Deployment ID, Authentication request URL, Access token URL, and Public keyset URL fields" width="2076" height="972" data-path="images/lti/manual-lms-connection.png" />
    </Frame>
  </Step>

  <Step title="Fill in the form">
    Paste the values your LMS issued you:

    * **Platform name** — A label for this connection (e.g., "Internal LMS" or your LMS product name).
    * **Issuer / platform ID** — The LMS's issuer URL, usually the site URL (e.g., `https://lms.example.com`).
    * **Client ID** — The client ID the LMS generated when you saved the External tool.
    * **Deployment ID** — The deployment ID for this tool registration. Most LMSes give you a single deployment ID; if you have several, separate them with spaces or commas.
    * **Authentication request URL** — Your LMS's OIDC authorization endpoint.
    * **Access token URL** — Your LMS's token endpoint.
    * **Public keyset URL** — Your LMS's JWKS URL (where Exec fetches your LMS's public keys).

    All URLs must be HTTPS.
  </Step>

  <Step title="Save the connection">
    Click **Save manual connection**. Exec validates the URLs and saves the configuration. You'll see a "LTI configuration saved" toast and the new platform appears in the **Connected LMSes** table.
  </Step>
</Steps>

<Tip>
  If you're connecting two Exec workspaces to the same LMS site, repeat this flow per workspace. Each Exec workspace stores its own configuration and key pair, even if the issuer URL is the same.
</Tip>

***

## Connected LMSes

Once a connection is saved (manual or dynamic), it appears in the **Connected LMSes** table at the bottom of the page.

<Frame>
  <img src="https://mintcdn.com/exec-79a6bbdb/mHn8qFXnxH8fRAz0/images/lti/connected-lmses.png?fit=max&auto=format&n=mHn8qFXnxH8fRAz0&q=85&s=9eea68bc8fc0a0828d8e2348c9b03012" alt="Connected LMSes table showing platform name, issuer, client ID, deployment ID, and connected timestamp" width="2076" height="576" data-path="images/lti/connected-lmses.png" />
</Frame>

| Column            | What it shows                                     |
| :---------------- | :------------------------------------------------ |
| **Platform**      | Display name of the LMS.                          |
| **Issuer**        | Issuer URL — links out to the LMS.                |
| **Client ID**     | Identifier the LMS issued for Exec as a tool.     |
| **Deployment ID** | Per-tool deployment identifier.                   |
| **Connected**     | When this connection was created (relative time). |

Each row is one (issuer, client ID) pair. If your LMS issues distinct client IDs for separate courses or tenants, you'll see one row per pair.

***

## Next steps

Once at least one LMS is connected, you can [add scenarios as LMS activities](/lti/add-roleplays) so learners can launch them from inside a course.

***

## Getting Help

Stuck on the connection? Contact us at [hello@exec.com](mailto:hello@exec.com) and include the LMS name plus the issuer URL.
