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
| Ability | learndash/get-user-progress |
| Toolset | LearnDash — toolset/learndash |
| Group | LearnDash › Progress |
| Requires | AcrossAI Pro, plus LearnDash LMS active on the site |
| Capability | manage_options |
| Safety | Read-only — changes nothing |
| Repeatable | Idempotent — running it twice leaves the same result |
| Ships in | AcrossAI 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
| Name | Type | Required | What it is |
|---|---|---|---|
learner | string | integer | Yes | User ID, login or email. |
course_id | integer | Yes | The course. |
include_steps | boolean | No — defaults to true | Include the per-step breakdown. |
What comes back
| Name | Type | What it is |
|---|---|---|
status | string | Not started, in progress or completed. |
percentage | integer | Completion percentage. |
completed_on | string | When they finished, if they did. |
steps | array | Per-step completion. |
success | boolean | Whether the call completed. |
message | string | A one-line summary of what happened, suitable for showing a human. |
error_code | string | Present 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
- LearnDash Mark Step Complete — which reports the blocker
- LearnDash Course Progress Report — the whole cohort
Get the plugins:
AcrossAI Abilities Manager · AcrossAI MCP Manager
Browse the rest: Every ability, by category