Training

External training & xAPI sources

Define training courses that live outside QFormance — in your LMS, your supplier's portal, or a regulator's site — and track completions automatically via xAPI statements pushed by the external system.

For
Training admins, Quality Managers
Find it at
Admin → Training → Training Catalog + Admin → Training → xAPI Sources
Reading time
5 min

In one sentence

External training is QFormance's way of tracking required courses that don't live inside QFormance — your corporate LMS, a regulator's portal, a supplier-provided certification — with completions flowing in via xAPI statements that the external system pushes to QFormance.

Three things to remember
  • Two admin pages, one workflow. The Training Catalog defines which courses exist and who needs them. The xAPI Sources page issues the API keys those external systems use to push completion statements. You need both for end-to-end automation.
  • Activity IDs are the contract. Each external course has an activity ID (a stable URL or IRI). The external system pushes xAPI statements naming that activity ID; QFormance matches the statement against the catalog and credits the user automatically.
  • Distribution is by user or by role. Assign a course to specific users and / or to whole roles. Adding the role to someone new picks up the course requirement immediately.

Why external training exists

Internal courses (managed at Internal Courses) cover training authored and delivered inside QFormance — content, quiz, completion tracking, all in-app.

External training covers the other half — courses delivered elsewhere where QFormance needs to track who has completed what without owning the content:

  • Corporate LMS like Cornerstone, SuccessFactors, Workday Learning.
  • Regulator-mandated training on a third-party portal (OSHA, FAA, GMP refreshers).
  • Supplier or customer certifications delivered through their portal.
  • Conference / industry training where the issuing body provides an xAPI completion stream.

Once a course is in the catalog and an xAPI source is configured, completions land in QFormance automatically — feeding role-level training gates, audit trails, and renewal tracking with no manual data entry.

Training Catalog — defining the courses

Admin → Training → Training Catalog.

Each course in the catalog has:

  • Title — what users see.
  • Description — optional context.
  • Category — free-text classification (Quality, Safety, Compliance, etc.) for filtering.
  • Activity ID — the xAPI activity URL/IRI that incoming statements name. This is the technical contract. Examples: https://corp.acme.com/lms/courses/iso9001-overview, https://regulator.example/training/gmp-refresher. Whatever the source system uses to identify the course.
  • External URL — optional link out to where the course lives. Users assigned the course can click through to take it.
  • Retrain interval (months) — optional. When set, completions expire after this many months and a renewal is required.
  • Reminder cadence — picks the email schedule that fires when users are assigned the course. Six presets (default Weekly for 4 weeks). See Acknowledgement & training reminders for the full list.

Distributing a course

For each course, pick who's required to complete it. Two ways:

  • By user — pick specific people. The course requirement appears on their training dashboard immediately.
  • By role — pick a role. Everyone with that role (now and future) inherits the requirement automatically. New people granted the role pick it up next sign-in.

Distribution can mix both — "this course is required for everyone with the Lead Auditor role, plus these three specific contractors".

Read & Acknowledge users are first-class consumers of external training. xAPI completions pushed from your LMS land on their training records the same way they land on full users' records — same matching logic, same audit trail, same visibility in the user's Training Hub history. So the workforce doing the work via your corporate LMS shows up on QFormance with their certifications intact, at $3/seat.

When a user (full or R&A) is assigned an external course — either directly or because they were added to a role or group that's on the distribution list — they get an email immediately, and follow-up reminders fire on the cadence set on the course. See Acknowledgement & training reminders.

Activating and retiring courses

A course row carries an Active toggle. Deactivating:

  • Removes the requirement from users who haven't yet completed it.
  • Keeps existing completion records intact for audit purposes.
  • Stops accepting fresh xAPI statements for that course.

Re-activate later if the course returns; the catalog row stays in place.

xAPI Sources — issuing API keys

Admin → Training → xAPI Sources.

This page is where you provision the API keys external systems use to push completion statements to QFormance.

Each source has:

  • Name — descriptive, what system this key represents (Cornerstone Production, OSHA Portal).
  • API key — generated when you create the source. Shown once at creation time.
  • Created at / Last used at — when the key was issued and when the source last successfully pushed a statement.
  • Active toggle — flip off to suspend the key without deleting it.

Creating a source

  1. Click New source.
  2. Enter a name and click Create.
  3. The dialog shows the issued API key once. Copy it and configure it in your external system's xAPI / LRS endpoint.
  4. Close the dialog. The key is gone — there's no way to retrieve it later. If you lose it, delete the source and create a new one.

The xAPI endpoint your source posts to is https://app.qformance.io/api/xapi/statements with HTTP Basic Auth using the issued key. The exact format follows the xAPI / Tin Can specification.

How completions get credited

When an external system pushes an xAPI statement:

  1. The statement's actor carries a user identifier — typically an email address — that QFormance matches to a profiles row in your org.
  2. The statement's object.id is the activity ID you configured on the catalog course.
  3. The statement's verb is one of the completion verbs (http://adlnet.gov/expapi/verbs/completed, http://adlnet.gov/expapi/verbs/passed).
  4. If the actor maps to a user in your org and the activity ID matches an active catalog course, QFormance writes a completion record and (if result.score is present) records the score.

If any of those fail, the statement is rejected and the source's Last used at doesn't update. Check the activity ID exactly matches and that the user's email matches their QFormance profile.

Watch out for: activity-ID drift

A new edition of a course in your LMS often gets a new activity ID. Statements with the new ID won't match a catalog entry keyed to the old ID. Update the catalog activity ID when your LMS bumps its version, or add a new catalog row for the new course and retire the old one.

Permissions

Both pages are gated on the Access audit admin permission. The default Admin role has it; Standard User doesn't. Grant it on a custom role if you've delegated training administration.

What this doesn't do

  • It doesn't author courses. External training is purely a tracking layer. Content lives in your LMS or external portal; QFormance only records that the user completed it.
  • It doesn't render quizzes. Quizzes are for internal courses — see Internal Courses. External completions arrive pre-graded from the source.
  • It doesn't push to external systems. xAPI here is a one-way pull — the external system pushes completions to QFormance, not the other way around. If you need to push training requirements to an external LMS, that's a separate integration.
Was this helpful?
Suggest an edit →