> For the complete documentation index, see [llms.txt](https://studyreel.gitbook.io/studyreel-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://studyreel.gitbook.io/studyreel-docs/getting-started/lti-registration.md).

# LTI Tool Registration

Next, you’ll need to setup your app as an LTI tool. As per 1EdTech’s LTI1.3 standard, an LTI (Learning Tools Interoperability) Tool is a third-party learning application or service that integrates with an educational platform like StudyReel using the LTI standard. By registering as an LTI tool, your app becomes accessible within StudyReel, where it can launch in a secure and context-aware manner.

To register an LTI tool with the StudyReel platform, use the following endpoint:

HTTP Method: `POST`

Base Production URL: `https://prod-studyreel.alpha1edtech.com/`

Base Staging URL: `https://studyreel.alpha1edtech.com/`

Endpoint URL: `/tools/register`

## API Endpoint

Use this endpoint to register an LTI tool with the StudyReel platform.

**Headers**

| Name         | Value              |
| ------------ | ------------------ |
| Content-Type | `application/json` |
| x-api-key    | `<your-api-key>`   |

Example body payload:

```json
{
  "name": "My Awesome Reading App",
  "description": "My reading app teaches you how to read.",
  "launchUrl": "https://myawesometool.com/launch",
  "logoUrl": "https://myawesometool.com/logo.png",
  "coverImageUrl": "https://myawesometool.com/cover.jpg",
  "status": "active",
  "platform": "1EdTech",
  "version": "1.3",
  "namesAndRolesService": "https://platform.com/lti/nrps",
  "gradeService": "https://platform.com/lti/ags",
  "redirectUris": [
    "https://myawesometool.com/auth/callback"
  ],
  "contacts": [
    {
      "name": "John Doe",
      "email": "john.doe@example.com"
    }
  ]
}
```

<table><thead><tr><th width="184">Name</th><th width="95" data-type="checkbox">Required</th><th width="113">Type</th><th>Description</th></tr></thead><tbody><tr><td><code>name</code></td><td>true</td><td>string</td><td>The name of the LTI tool i.e., your app</td></tr><tr><td><code>description</code></td><td>false</td><td>string</td><td>A brief description of your app, visible to students</td></tr><tr><td><code>launchUrl</code></td><td>true</td><td>string</td><td>The URL StudyReel should send the LTI launch request to</td></tr><tr><td><code>logoUrl</code></td><td>false</td><td>string</td><td>URL of your app’s logo</td></tr><tr><td><code>coverImageUrl</code></td><td>false</td><td>string</td><td>URL of your app’s cover image to be shown in your app page</td></tr><tr><td><code>status</code></td><td>true</td><td>string</td><td>Status of the app on StudyReel</td></tr><tr><td><code>platform</code></td><td>false</td><td>string</td><td>The platform name (e.g., "1EdTech").</td></tr><tr><td><code>version</code></td><td>false</td><td>string</td><td>Your app’s version. This can be used for rollbacks.</td></tr><tr><td><code>namesAndRolesService</code></td><td>false</td><td>string</td><td>URL of your LTI Names and Roles service</td></tr><tr><td><code>gradeService</code></td><td>false</td><td>string</td><td>URL of your LTI Grade Service</td></tr><tr><td><code>redirectUris</code></td><td>true</td><td>array of strings</td><td>Whitelisted URIs StudyReel would redirect students to. These are the only URIs StudyReel would accept as a redirection, and so your login URI should be a part of this.</td></tr><tr><td><code>contacts</code></td><td>true</td><td>array of objects</td><td>Contact information for support, including name and email.</td></tr></tbody></table>

**Response**

{% tabs %}
{% tab title="201" %}

```json
{
  "status": "success",
  "message": "Tool registered successfully",
  "toolId": "5be8e7a4-f6dc-4266-a5af-3c86fe108a36",
  "deploymentKey": "U3BhcnNoJ3MgdGVzdCBhcHAgNjoxLjM="
}
```

{% endtab %}

{% tab title="400" %}

```json
{
  "message": [
    "name must be a string"
  ],
  "error": "Bad Request",
  "statusCode": 400
}
```

{% endtab %}

{% tab title="401" %}

```json
{
  "message": "Invalid or missing API key",
  "error": "Unauthorized",
  "statusCode": 401
}
```

{% endtab %}

{% tab title="500" %}

```
{
  "statusCode": 500,
  "message": "Internal server error"
}
```

{% endtab %}
{% endtabs %}
