Grow LMS API Documentation
Grow by Plenum — Live Sessions, Calendar & Events
Surfacing scheduled training events — live sessions, content releases, and assignment deadlines — in your own systems.
Not all compliance training is self-paced. Instructor-led training (ILT) — live safety sessions, toolbox talks, hands-on certifications — is a first-class part of a workforce-compliance program, and it has to be documented in the system the same way e-learning is: who was scheduled, who attended, and who completed. This document covers both halves: reading scheduled events into your calendars and reminders, and recording and evidencing instructor-led training so it lands in the same completion and certification record as everything else (Section 4).
Scheduled content releases and assignment due dates also surface as events and are covered alongside.
Every call uses the Pl-Client header and Authorization: Bearer <ACCESS_TOKEN> from Authentication & Access Setup. <SCHOOL_ID> is your environment.
1. What counts as an event
Grow tracks three kinds of scheduled event, all retrievable through the same endpoint:
Event type |
What it is | Why it matters |
|---|---|---|
liveSession |
An instructor-led live session (1:1 or group) | The one most relevant to safety training delivered live — scheduled sessions with a host and attendees. |
dripFeed |
A scheduled release of course content | When a section/unit unlocks for learners on a timed curriculum. |
fileAssignment |
A file-assignment milestone | Assignment-based activities with a scheduled date. |
2. Retrieving upcoming events
Request the upcoming scheduled events, optionally filtered by type:
curl "https://<SCHOOL_ID>/admin/api/v2/schoolevents?event_type=liveSession" \
-H "Pl-Client: <CLIENT_ID>" \
-H "Authorization: Bearer <ACCESS_TOKEN>"
event_type accepts liveSession, dripFeed, or fileAssignment; omit it to get all upcoming events.
3. The SchoolEvent record
Each event carries:
| Field | Type | Description |
|---|---|---|
title |
string | Title of the event. |
startDate |
number | Start time, as a Unix timestamp. |
type |
string (enum) | dripFeed, fileAssignment, or liveSession. |
productId |
string | The product (course/program) the event belongs to. |
bookingDetails |
object or null | Booking details for one-on-one or group sessions; null for other event types. |
learnerUserId |
string | The learner the event is for. |
hostUserId |
string | The user hosting the session (for live sessions). |
status |
string | Session status — e.g. scheduled. |
The learnerUserId / hostUserId pair is what lets you build a roster: who’s attending which session, and who’s running it.
4. Documenting instructor-led training (ILT)
This is the part that matters most for a live safety program: proving, in the system of record, that instructor-led training happened and who completed it. Grow documents ILT through three connected mechanisms.
Scheduling and rosters
A liveSession event carries the session’s hostUserId (the instructor) and learnerUserId (the attendee), with a status such as scheduled. Group sessions extend the same model to multiple attendees. That gives you the roster: who’s running each session and who’s expected.
Recording attendance
Attendance for live sessions is recorded in the system and surfaces in the event log (see Pull-Based Data Access) as activity entries:
| Activity | Meaning |
|---|---|
session_scheduled / group_session_scheduled |
A (group) session was scheduled. |
session_attended / group_session_attended |
Attendance was registered for a (group) session. |
session_manually_attended / group_session_manually_attended |
An instructor or administrator manually marked a learner as having attended. |
The *_manually_attended activities are the key ones for ILT: they’re how an instructor records, after the fact, that a worker showed up to a live session — the digital equivalent of a sign-in sheet, captured against the learner’s record.
Turning attendance into a completion
To make ILT count toward a compliance requirement, attendance is converted into a completion on the learner’s record (the same Mark as complete mechanism used elsewhere). Once recorded, it flows through exactly the same records as e-learning:
- It populates
UserProgress.completed_atand can trigger a certificate (see Data Schema Reference). - It emits the
courseCompletedwebhook — withmanually_completed: true, which transparently flags the completion as instructor-recorded rather than system-tracked (see Webhooks).
That manually_completed distinction is a compliance feature, not a footnote: an auditor can see at a glance which completions came from a live, instructor-attested session versus an automatically tracked e-learning module — while both sit in one unified record.
Net effect: instructor-led training is documented in the same place, and pulled through the same API and webhooks, as every other completion. You don’t run a separate system for live training — the live session, its attendance, and its resulting completion all live in the learner’s Grow record.
5. Calendar, reminders, and reporting
- Calendar sync. Pull upcoming
liveSessionevents into your corporate calendar or scheduling system so a required safety session shows up where your people already look. - Reminders. Combine upcoming events with the notification paths in Integrations & Notifications — e.g. an automation that texts or emails attendees ahead of a scheduled live session.
- Attendance & completion reporting. Reconcile “who was scheduled” (events) against “who attended/completed” (event log + progress records) for a complete ILT compliance picture.
6. Where to go next
- Pull-Based Data Access — the event log that records session scheduling and attendance.
- Integrations & Notifications — the reminder/notification channels for upcoming sessions.
- Provisioning & Workforce Management — enrolling learners into the programs these events belong to.
Prepared by Plenum Solutions for your evaluation. “Grow by Plenum” is operated and supported by Plenum on your behalf. Exact endpoint paths are confirmed for your environment during onboarding. For integration design support, contact your Plenum engagement lead.


