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

# Content providers

> Integration guide for content providers connecting to customer LMS systems

This guide is for **content providers** (e.g., compliance training platforms, coaching providers, video course platforms, language learning tools) who want to integrate with their customers' Learning Management Systems.

## Overview

As a content provider, you typically need to:

1. **Read users from the LMS** - automatically provision user profiles without manual signup
2. **Import your courses into the LMS** - users see your catalog in their company's LMS and get redirected to your platform
3. **Write completion data back** - track which courses users have finished

## Why integrate with customer LMS systems?

* **Discovery & assignment** - More users find and access your courses when they're in the LMS, and administrators can assign content directly to their learners
* **Analytics for stakeholders** - HR and leadership can track training completion and correlate it with outcomes
* **Sales checkbox** - "LMS integration" is a requirement in many sales cycles. Most end customers demand the content to appear in their LMS
* **ROI demonstration** - Prove your platform's value (e.g., "employees who complete 6+ hours of training score X higher on performance reviews")

## Implementation flow

The typical integration flow for content providers looks like this:

```mermaid theme={null}
flowchart LR
    subgraph you[You via Kombo]
        A[Read users] --> B[Upsert courses]
    end
    subgraph lms[In the LMS]
        C[User sees your course] --> D[User opens it]
    end
    subgraph your_platform[On Your Platform]
        E[Enroll user via Kombo] --> F[User learns] --> G[Write completion via Kombo]
    end
    you --> lms --> your_platform
```

## API endpoints you'll need

| Endpoint                                                                                                      | Purpose                                       |
| ------------------------------------------------------------------------------------------------------------- | --------------------------------------------- |
| [GET /lms/users](/lms/v1/get-users)                                                                           | Sync employee profiles from the LMS           |
| [POST /lms/courses/bulk](/lms/v1/post-courses-bulk)                                                           | Import your course catalog (create or update) |
| [POST /lms/courses/:course\_id/deactivate](/lms/v1/post-courses-course-id-deactivate)                         | Deactivate a course in the LMS                |
| [GET /lms/course-progressions](/lms/v1/get-course-progressions)                                               | Check which users are assigned/enrolled       |
| [POST /lms/course-progressions](/lms/v1/post-course-progressions)                                             | Enroll users in courses                       |
| [POST /lms/course-progressions/:id/complete](/lms/v1/post-course-progressions-course-progression-id-complete) | Write back completion data                    |

## Step 1: Read users from the LMS

First, sync the user base from your customer's LMS. This allows you to:

* Know which employees exist in the organization
* Match users when they access your platform
* Provision accounts automatically

```bash theme={null}
curl --request GET \
  --url 'https://api.kombo.dev/v1/lms/users' \
  --header 'Authorization: Bearer <api_key>' \
  --header 'X-Integration-Id: <integration_id>'
```

The response includes user details like email, name, and remote IDs that you can use to match users in your system.

<Note>
  When a learner launches a course from the LMS and lands on your platform,
  you'll need to authenticate them (typically via SSO) and match them back to a
  Kombo user without a login prompt. See the [SSO and identity matching
  guide](/lms/implementation-guide/sso-and-identity-matching) for the
  recommended architecture.
</Note>

## Step 2: Import your course catalog

Use the [bulk upsert endpoint](/lms/v1/post-courses-bulk) to create or update courses in the customer's LMS. Each course includes a deep link that redirects users to your platform.

```bash theme={null}
curl --request POST \
  --url 'https://api.kombo.dev/v1/lms/courses/bulk' \
  --header 'Authorization: Bearer <api_key>' \
  --header 'X-Integration-Id: <integration_id>' \
  --header 'Content-Type: application/json' \
  --data '{
    "items": [
      {
        "origin_id": "cybersecurity-101",
        "course": {
          "type": "EXTERNAL",
          "title": "Introduction to Cybersecurity",
          "description": "Learn the fundamentals of cybersecurity.",
          "course_url": "https://your-platform.com/courses/cybersecurity-101",
          "thumbnail_url": "https://your-platform.com/images/cybersecurity-101.png"
        }
      },
      {
        "origin_id": "data-privacy-basics",
        "course": {
          "type": "EXTERNAL",
          "title": "Data Privacy Basics",
          "description": "Understand GDPR and data privacy best practices.",
          "course_url": "https://your-platform.com/courses/data-privacy-basics",
          "thumbnail_url": "https://your-platform.com/images/data-privacy.png"
        }
      }
    ]
  }'
```

<Note>
  The `course_url` field should be a deep link to your platform. When users
  click on the course in their LMS, they'll be redirected to your platform where
  they can consume the content.
</Note>

### Deactivating courses

When a course should no longer be available in the customer's LMS, use the [deactivate endpoint](/lms/v1/post-courses-course-id-deactivate) to make it unavailable for new enrollments while preserving existing progress records:

```bash theme={null}
curl --request POST \
  --url 'https://api.kombo.dev/v1/lms/courses/26vafvWSRmbhNcxJYqjCzuJg/deactivate' \
  --header 'Authorization: Bearer <api_key>' \
  --header 'X-Integration-Id: <integration_id>'
```

## Step 3: Track assignments and enrollments

Check which users have been assigned or enrolled in your courses:

```bash theme={null}
curl --request GET \
  --url 'https://api.kombo.dev/v1/lms/course-progressions' \
  --header 'Authorization: Bearer <api_key>' \
  --header 'X-Integration-Id: <integration_id>'
```

You can filter by specific users using the `user_ids` query parameter:

```bash theme={null}
curl --request GET \
  --url 'https://api.kombo.dev/v1/lms/course-progressions?user_ids=7xPdr68N8kG9EzLwjsN9xyz,8yQes79O9lH0FaLxktO0yza' \
  --header 'Authorization: Bearer <api_key>' \
  --header 'X-Integration-Id: <integration_id>'
```

## Step 4: Write completions back to the LMS

When a user completes a course on your platform, mark it as complete in the LMS:

```bash theme={null}
curl --request POST \
  --url 'https://api.kombo.dev/v1/lms/course-progressions/{course_progression_id}/complete' \
  --header 'Authorization: Bearer <api_key>' \
  --header 'X-Integration-Id: <integration_id>' \
  --header 'Content-Type: application/json' \
  --data '{
    "completed_at": "2024-01-15"
  }'
```

The `completed_at` field is optional and defaults to the current date if not provided.

This ensures that:

* The completion appears in the customer's LMS reports
* L\&D teams can track training progress
* Compliance requirements are documented

## Compared to SCORM

Many content providers currently use **SCORM exports** (a standard package format that LMS systems accept). However, SCORM has limitations:

* **No user sync** - You can't read users from the LMS
* **No dynamic completions** - You can't write back completions programmatically
* **Worse UX** - Users stay in the LMS instead of your optimized platform

Using Kombo's API gives you the flexibility of SCORM with the added benefits of user provisioning and real-time completion tracking.

## Next steps

1. Complete the [setup guide](/lms/implementation-guide/setup) to configure your Kombo account
2. Set up the [connection flow](/lms/implementation-guide/connection-setup) for your customers
3. Implement [SSO and identity matching](/lms/implementation-guide/sso-and-identity-matching) so learners land on your platform authenticated when they launch a course within the LMS
4. Explore the [LMS API reference](/lms/v1/get-users) for detailed endpoint documentation
