Core concepts¶
The Public API exposes a learning platform. Before you integrate, it helps to have a mental model of the main objects and how they relate. This page is the map; the API reference is the territory.
The object model at a glance¶
graph TD
U[Users] -->|grouped into| G[Groups]
CI[Content items] -->|surfaced in| CH[Channels]
CI -->|bundled into| COL[Collections]
TR[Tracks] -->|ordered sequence of| CI
A[Assignments] -->|link user to| CI
A -->|link user to| U
ES[Event series] -->|template for| EV[Events]
EN[Enrollments] -->|link user to| EV
EN -->|link user to| U
TAG[Tags] -->|categorize| CI
Content items¶
A content item is any piece of learning content. Every content item shares a common shape — public_id, name, description, is_hidden, is_archived, tags, facilitators — and supports the same lifecycle actions (archive, unarchive, clone). The content_type field tells you which subtype you're looking at:
content_type |
What it is | Assignable? | Notes |
|---|---|---|---|
article |
Text-based content | Yes | Authored inline or via Markdown. |
video |
A video, hosted natively (Mux) or linked (YouTube/Vimeo) | Yes | See Uploading a video. |
course |
A SCORM/AICC/xAPI package | Yes | Hosted via SCORM Cloud. See Building a course. |
guide |
An interactive, step-based codelab | Yes | Built from a ZIP. See Building a guide. |
link |
A pointer to external content | Yes | Lives outside PlusPlus. |
track |
An ordered sequence of other content items | Yes | A learning path. See Building learning paths. |
collection |
A curated, ordered set of content items | No | A catalog container, not a learning unit. |
event |
A scheduled occurrence with timeslots | No (use enrollments) | See Events lifecycle. |
The generic GET /content-items/ endpoint lists and searches across all types at once; the type-specific endpoints (/videos/, /courses/, …) expose the fields unique to each subtype.
Tracks vs. Collections
Both group content, but they serve different jobs. A track is a learning path — assignable and completable, with ordering and sections that drive a learner through material. A collection is a catalog shelf — it presents related content for browsing but is never assigned or completed. Reach for a track when you want progress tracking; reach for a collection when you just want to group things on the catalog.
People and organization¶
- Users are the people on your platform — learners, organizers, and admins (
role). Each user optionally references amanager(another user). - Groups are logical collections of users (teams, departments, cohorts). Groups scope access and reporting, and let you assign or enroll many users at once. Manage membership via the
/groups/{public_id}/members/sub-resource. - Channels are spaces that surface content to learners. A channel has owners, group-based access controls, and curated featured and shared item lists. Channels organize presentation; they don't own content exclusively.
- Tags categorize content items by topic. Filter the catalog by tag with
GET /content-items/?tag=onboarding.
Connecting users to content¶
Two relationship objects link people to things:
- Assignments connect a user to a content item. An assignment carries state (
not_started,in_progress,completed,dropped,exempted), progress, score, and a due date. Assigning a track fans out into one assignment per item in the track. See Assignments & completion. - Enrollments connect a user to an event. An enrollment carries attendance method (
in_person/online), status (enrolled, waitlisted, dropped), and check-in. See Events lifecycle.
The distinction matters: content items are assigned; events are enrolled. You won't find an assignment endpoint for events — use enrollments.
Events and event series¶
An event series is a reusable template that holds default settings (location, capacity, online/in-person modes). An event is a concrete scheduled occurrence with one or more timeslots. An event may belong to a series (inheriting its defaults) or stand alone. Recordings attach to a series and play back via Mux. See Events lifecycle and Uploading recordings.
Reporting¶
- Insights are read-only, pre-aggregated analytics — assignment completion breakdowns, overdue counts, ratings, pass/fail rates, and video engagement (sourced from Mux).
- Saved reports are reusable filters ("segments") over a content type, expressed in RQL. Run one via its
/results/sub-resource to get the matching rows.
Identifiers¶
Every resource is identified by a public_id — an opaque, stable UUID. Internal numeric IDs are never exposed. When you reference one resource from another (assign a content item to a user, add an item to a track), you always pass public_id values. The one exception is location_id on events, which is a numeric location id. Treat every public_id as an opaque string — don't parse or generate it.
Where to go next¶
- Conventions — pagination, errors, rate limits, ETags.
- Filtering & sorting — narrowing list results.
- Guides — end-to-end walkthroughs for multi-step flows.