People & learning groups
Manage a large company directory, build cross-team cohorts and apply reviewed learning actions with clear per-person results.
Choose teams or learning groups
Teams model your company structure and manager scope. Learning groups are reusable cohorts across teams: new starters, future leaders or shared interests. Joining a group does not grant a role, enrol someone or bypass course permissions. A person can belong to multiple groups.
Company-managed groups can be created, edited and archived by organisation-wide administrators. Identity-managed groups come from SCIM; change their memberships in the identity provider. The local screen is read-only for those groups.
Find people at scale
- Open People. Search by display name or member ID; use the member ID to distinguish people with the same name.
- Filter by direct team, learning group, role and active or suspended status. Managers only see their authorised team subtree; learners see themselves. Filters never expand these permissions.
- Sort by person, status, active learning, completed records or overdue assignments. Choose 25, 50 or 100 rows per page. Counts, filtering, sorting and pagination run on the server.
- Use Columns to tailor the table. This preference is stored in your browser. On narrow screens, scroll the table horizontally; row actions remain available.
Create a cohort and manage membership
- Open Learning groups and choose Create learning group. Give it a unique, meaningful name and describe its purpose.
- In People, select individuals or use Select this page. Choose Actions → Add to a learning group, find the group and review the people before applying.
- Use View people on a group to open the directory with that group filter. Remove membership through the same reviewed action menu.
- Archive a group to retire it from new membership actions. Its membership and learning history remain; restore it by clearing Archive.
Assign or recommend learning
Individual rows and the selection toolbar use the same Actions dialog. Courses and pathways assign a selected published version, with an optional deadline entered in your browser’s local time. Existing conflicting assignments are preserved and reported. Starting a new course assignment after completion can create a new learning cycle; retrying the same request never does.
Recommend a collection highlights it as Recommended for you in the recipient’s Collections page. It neither follows it for them nor enrols them in every course. Collection audience restrictions still apply.
Select this page means exactly the displayed people. Selection persists across pages, up to 100 explicit people per action. Changing a search, filter or sort clears it. There is no hidden select-all-matching operation. New group members do not inherit earlier assignments automatically.
Results, retries and limits
The result lists each person as applied, denied, conflict, invalid or retryable. Mixed outcomes are possible because permissions, suspension and resource state are checked for each person. Previously successful people are not undone when another fails.
Retry same request retains its request ID and payload. Server receipts prevent duplicate effects after network interruption. Keep the dialog open to retry; closing it discards its in-memory request ID. A new selection is a new operation. Resolve conflicts before starting a new request.
This release supports batches of up to 100. Background jobs for all matching people, scheduled/dynamic groups and automatic future-member enrolment are not implemented. Learning counts are assignment records, not unique-course totals. Emails and last-activity dates are not shown because the directory does not expose verified values for them.
API and authority
These browser APIs derive company and actor from the active session. Writes require a valid same-origin CSRF token. Group writes use optimistic revision checks. Bulk actions accept an explicit request UUID, action, resource UUID, selected publication version for assignments, userIds and optional dueAt in RFC3339. Reusing a request ID with another payload returns a conflict. See the API reference for the generated schemas.
GET /api/v1/people?search=Alex&status=active&sort=name&direction=asc&offset=0&limit=25
GET /api/v1/people/options?kind=course&search=leadership&offset=0
GET /api/v1/learning-groups?status=active&offset=0
POST /api/v1/learning-groups
POST /api/v1/people/actions