---
title: Unified LMS API — Truto Unified API
slug: lms
canonical: "https://truto.one/unified-apis/lms/"
---

# Learning Management System Unified API

Integrate Learning Management System data across 1 providers with one API. 4 normalized resources, real-time pass-through, fully customizable.

**Base URL:** `https://api.truto.one/unified/lms`  
**Resources:** 4  
**Integrations:** 1

## Resources

### Course-enrollments

CourseEnrollments represent the User-to-Course learning record. These are usually called enrollments, registrations, assignments, transcript items, or learning records in the underlying products. A CourseEnrollment links a User to a Course and captures assignment details, progress, completion status, scores, due dates, and other completion outcomes where supported. (21 fields)

- `id` (string) — The unique identifier for the course enrollment record
- `user` (object) — The learner associated with this record
- `course` (object) — The course associated with this record
- `status` (string) — The lifecycle status for the user in this course
- `assigned_at` (string) — The date and time the course was assigned to the user, when available
- `due_at` (string) — The due date for course completion, when available
- `enrolled_at` (string) — The date and time the user enrolled or registered, when available
- `started_at` (string) — The date and time the user started the course, when available
- `last_activity_at` (string) — The date and time of the last recorded activity for this enrollment, when available
- `completed_at` (string) — The date and time the user completed the course, when available
- `progress_percent` (number) — Progress percentage from 0 to 100, when available
- `time_spent_seconds` (integer) — Total time spent in seconds, when available
- `score` (number) — The latest or final score, when available
- `is_mandatory` (boolean) — Whether this enrollment is part of a mandatory assignment, when available
- `assigned_by` (object) — The assigner of this course to the user, when available
- `attempt_number` (integer) — The latest attempt number, when the LMS supports retakes
- `attempts_count` (integer) — Total attempts count, when available
- `urls` (array) — The URLs of the course-enrollments
- `created_at` (string) — The date and time the enrollment record was created
- `updated_at` (string) — The date and time the enrollment record was last updated
- `custom_fields` (object) — Provider or customer specific fields mapped into a flexible key-value object

### Course-items

CourseItems represent the content structure inside a Course. These are usually called modules, lessons, units, chapters, topics, activities, or learning objects in the underlying products. A Course can contain one or more CourseItems, and CourseItems may be hierarchical where an item can belong to another item. (13 fields)

- `id` (string) — The unique identifier for the course item
- `course` (object) — The course this item belongs to
- `parent` (object) — The parent course item, when the provider models a hierarchy
- `type` (string) — The type of the course item
- `title` (string) — The title of the course item
- `description` (string) — The description of the course item, when available
- `position` (integer) — The ordering position of the course item within its parent or course, when available
- `duration_seconds` (integer) — The estimated duration of this course item in seconds, when available
- `is_required` (boolean) — Whether this course item is required for course completion, when available
- `urls` (array) — The URLs of the course items
- `created_at` (string) — The date and time the course item was created
- `updated_at` (string) — The date and time the course item was last updated
- `custom_fields` (object) — Provider or customer specific fields mapped into a flexible key-value object

### Courses

Courses represent the learning items available in the LMS catalog. These are usually called courses, training, learning items, classes, or content in the underlying products. A Course can contain one or more CourseItems and can be assigned or enrolled in by Users via CourseEnrollments. (17 fields)

- `id` (string) — The unique identifier for the course
- `title` (string) — The title of the course
- `description` (string) — The description of the course
- `code` (string) — A course code or SKU, when available
- `type` (string) — The type of learning item
- `status` (string) — The publication or availability status of the course
- `language` (string) — The primary language of the course, when available. Example: en
- `duration_seconds` (integer) — The estimated duration of the course in seconds, when available
- `level` (string) — The difficulty level of the course, when available
- `urls` (array) — The URLs related to the course.
- `tags` (array) — Tags applied to the course
- `categories` (array) — Categories the course belongs to, when available
- `organization` (object) — The organization or tenant the course belongs to, when available
- `published_at` (string) — The date and time the course was published, when available
- `created_at` (string) — The date and time the course record was created
- `updated_at` (string) — The date and time the course record was last updated
- `custom_fields` (object) — Provider or customer specific fields mapped into a flexible key-value object

### Users

Users represent the people in the LMS. These are usually called users, learners, employees, or members in the underlying products. A User can be assigned Courses, can enroll in Courses, and generates progress and completion history through CourseEnrollments. (17 fields)

- `id` (string) — The unique identifier for the user
- `first_name` (string) — The user's first name
- `last_name` (string) — The user's last name
- `name` (string) — The user's name
- `username` (string) — The user's username or login identifier, when different from email
- `emails` (array) — The emails of the user
- `status` (string) — The lifecycle status of the user in the LMS
- `role` (string) — The primary role of the user in the LMS
- `phones` (array) — The phones of the user
- `locale` (string) — The locale of the user, when available. Example: en-US
- `timezone` (string) — The timezone of the user, when available. Example: Asia/Kolkata
- `job_title` (string) — The user's job title, when available
- `organization` (object) — The organization or tenant the user belongs to, when available
- `manager` (object) — The user's manager, when available
- `created_at` (string) — The date and time the user record was created
- `updated_at` (string) — The date and time the user record was last updated
- `custom_fields` (object) — Provider or customer specific fields mapped into a flexible key-value object

## Supported integrations

- [TalentLMS](https://truto.one/integrations/detail/talentlms/)

## Related reading

- [The Best Alternatives to Paragon Embedded iPaaS for AI Agent Integrations (2026)](https://truto.one/blog/best-alternative-to-paragon-embedded-ipaas-for-ai-agent-integrations/) — Evaluating Paragon for AI agent tool calling? Discover why embedded iPaaS latency breaks LLMs and compare the best real-time proxy alternatives in 2026.
- [Automating the Employee Compliance Lifecycle: From Offer Letter to Offboarding](https://truto.one/blog/automating-the-employee-compliance-lifecycle-from-offer-letter-to-offboarding/) — Automate the employee compliance lifecycle from hiring to offboarding. Learn how to use Unified APIs to sync ATS, HRIS, LMS, and Directory data for SOC 2 readiness.
- [Launching: Unified API for Learning Management Systems](https://truto.one/blog/launching-unified-api-for-learning-management-systems/) — Integrate with Canvas, Moodle, Docebo, and TalentLMS through a single Unified API for Learning Management Systems.
