30 days free. No credit card. Full access from the moment you connect your site.

Start free trial

LearnDash Get User Progress

learndash/get-user-progress reports how far a learner has got through one course: overall status and percentage, the completion date if finished, and a per-step breakdown.

Pass include_steps=false for just the summary.

At a glance

Abilitylearndash/get-user-progress
ToolsetLearnDash — toolset/learndash
GroupLearnDash › Progress
RequiresAcrossAI Pro, plus LearnDash LMS active on the site
Capabilitymanage_options
SafetyRead-only — changes nothing
RepeatableIdempotent — running it twice leaves the same result
Ships inAcrossAI Pro 0.9.16 and later

How it works

The per-step breakdown is what answers “where are they stuck”. A learner at 60% who has completed the first six lessons and none of the seventh’s topics is stuck on a specific thing, and the summary alone cannot say what.

Once you know the step, learndash/get-lesson or learndash/get-topic says what it requires — assignment approval and video progression are the usual answers.

The percentage is computed from steps completed against steps in the course, so it moves when the course structure changes. Adding a lesson to a course everybody has finished drops everybody below 100%.

That is correct and it is worth knowing before restructuring a live course.

The completion date only exists if they finished. A course completed and then restructured keeps the date while the percentage drops.

Input

NameTypeRequiredWhat it is
learnerstring | integerYesUser ID, login or email.
course_idintegerYesThe course.
include_stepsbooleanNo — defaults to trueInclude the per-step breakdown.

What comes back

NameTypeWhat it is
statusstringNot started, in progress or completed.
percentageintegerCompletion percentage.
completed_onstringWhen they finished, if they did.
stepsarrayPer-step completion.
successbooleanWhether the call completed.
messagestringA one-line summary of what happened, suitable for showing a human.
error_codestringPresent only on failure — a stable machine-readable reason, such as a missing field, a wrong field type or an unmet confirmation.

Example

Ask your assistant:

Where has this learner got to?

It resolves to one call:

{
  "ability": "learndash/get-user-progress",
  "parameters": {
    "learner": "sam@example.com",
    "course_id": 412
  }
}

Worth knowing

  • The per-step breakdown is what identifies a blocker.
  • Adding a step to a finished course drops everybody below 100%.
  • The completion date survives a restructure; the percentage does not.
  • Read-only.

Related abilities


Get the plugins:
AcrossAI Abilities Manager · AcrossAI MCP Manager

Browse the rest: Every ability, by category


Keep reading