LifterLMS AI Agents: The WordPress Abilities API, Used Safely

What LifterLMS 10.x registers with the WordPress Abilities API, how an AI agent can discover and run those abilities over REST or MCP, and the permissions, read-only limits and review steps that keep a course site safe.

  • Add as a preferred source on Google
Illustration for “LifterLMS AI Agents: The WordPress Abilities API, Used Safely”

AI agents can now work with a LifterLMS site directly: answer "which students have not started the new course?", draft a course outline, or enroll a list of new hires. Since version 10.1, LifterLMS registers its core operations with the WordPress Abilities API, which gives AI tools a standard, permission-checked way to discover and use them.

This guide is for developers and technical owners who want LifterLMS AI automation without handing a chatbot the keys to their student data. It explains what the Abilities API is, exactly which LifterLMS abilities exist, how agents reach them, and the controls we put in place before letting any agent touch a live site.

Details were checked against the LifterLMS 10.3 source and the WordPress developer documentation at the time of writing. This area is moving quickly, so check the current docs before you build.

What the Abilities API is

The Abilities API arrived in WordPress 6.9. Plugins register named abilities, each with a label, a description, a JSON schema for its input and output, and a permission check. Any client can then list what a site can do and run an ability by name, without knowing the plugin's internals.

Abilities registered for REST are exposed under /wp-json/wp-abilities/v1. According to the Abilities REST API documentation, every endpoint requires an authenticated user, application passwords are the recommended method for external clients, and each ability's own permission check runs on top of that.

Read-only abilities are run with GET, destructive ones with DELETE, and others with POST. The WordPress team's MCP Adapter then translates abilities into the Model Context Protocol, the standard most AI assistants use to call tools.

LifterLMS AI abilities: what is registered

On WordPress 6.9 or later, LifterLMS registers a lifterlms ability category automatically. There is no setting to switch on. Each ability wraps a LifterLMS REST API endpoint.

For courses, sections, lessons, memberships, access plans, students, quizzes, questions and certificate templates, there are five abilities each, following one pattern. For courses they are:

  • lifterlms/list-courses and lifterlms/get-course
  • lifterlms/create-course and lifterlms/update-course
  • lifterlms/delete-course

On top of those come task-specific abilities:

AreaAbilities
Course structureget-course-content, get-course-enrollments
Enrollmentlist-enrollments, enroll-student, update-enrollment, unenroll-student
Progress and gradesget-progress, update-progress, delete-progress, get-student-grades
Quizzesget-quiz-questions, list-quiz-attempts, get-quiz-attempt, grade-quiz-attempt, delete-quiz-attempt
Orderslist-orders, get-order, get-order-transactions
Certificateslist-awarded-certificates, get-awarded-certificate, award-certificate, revoke-awarded-certificate

All of them carry the lifterlms/ prefix. Orders are read-only through abilities: there is no create, update or refund ability.

How the LifterLMS abilities behave

  • Same permissions as the REST API. Each ability calls the matching REST controller's permission check for the current user. An agent logged in as an Instructor can do what an Instructor can do through the API, and no more.
  • Annotated by risk. List and get abilities are marked read-only. Delete abilities, including unenrolling, deleting progress and revoking certificates, are marked destructive. Well-behaved clients use these annotations to ask for confirmation.
  • Strict input. Input schemas reject unknown parameters, so a mistyped field fails loudly instead of being silently ignored.
  • Full data on reads. Read abilities default to the API's edit context, returning complete records the user is allowed to see. That is helpful for agents and a reason to limit who the agent runs as.
  • Human-friendly grading. grade-quiz-attempt can leave remarks without points, which keeps the attempt pending for an instructor to sign off.

Three ways an agent can reach LifterLMS

RouteBest forAuthentication
Abilities over REST or MCPAI assistants and tools without server accessWordPress application password
WP-CLI (wp llms)Coding agents with a shell on the server or stagingServer access; pass --user
LifterLMS REST APIYour own integrations and scriptsLifterLMS API keys or application passwords

LifterLMS's own AI agents guide recommends the CLI for agents with shell access, with --format=json and --fields to keep output small. Our LifterLMS WP-CLI guide covers those commands.

Trying an ability over REST

# List the registered abilities
curl -u "agent-user:xxxx xxxx xxxx xxxx xxxx xxxx" \
  "https://example.com/wp-json/wp-abilities/v1/abilities"

# Run a read-only ability
curl -u "agent-user:xxxx xxxx xxxx xxxx xxxx xxxx" \
  "https://example.com/wp-json/wp-abilities/v1/lifterlms/list-courses/run"

# Enroll student 5 in course 42 (POST, input as JSON)
curl -X POST -u "agent-user:xxxx xxxx xxxx xxxx xxxx xxxx" \
  -H "Content-Type: application/json" \
  -d '{"input":{"id":5,"post_id":42}}' \
  "https://example.com/wp-json/wp-abilities/v1/lifterlms/enroll-student/run"

Through the MCP Adapter

The MCP Adapter plugin publishes abilities to MCP clients over HTTP, or over STDIO through WP-CLI for local work. Its default server only exposes abilities marked public. LifterLMS registers its abilities for REST but, at the time of writing, does not mark them public for MCP, so you choose which ones to expose by listing them in your own MCP server configuration. That is a feature, not a gap: you should be choosing.

Useful jobs for an agent

The abilities are building blocks. These are the jobs where we see them earn their keep, roughly in order of risk:

  1. Reporting questions. "Which students enrolled in the compliance course last month have not completed it?" combines get-course-enrollments and get-progress. Read-only, and it saves an admin a spreadsheet session.
  2. Content audits. get-course-content returns a course's sections and lessons in one call. An agent can check every course for empty sections, draft lessons or missing quizzes and produce a list for a human to fix.
  3. Drafting. create-course and create-lesson can produce draft outlines from a brief. Keep new content in draft status and have an instructional designer review it before anything is published.
  4. Grading support. For open-ended quiz questions, an agent can propose remarks through grade-quiz-attempt without points, leaving the attempt pending for the instructor to confirm.
  5. Enrollment tasks. Enrolling a list of new hires with enroll-student is the first write most teams allow. Every enrollment triggers the usual emails and engagements, so test on staging.

Agents are poor at anything where a wrong answer is expensive and invisible, such as changing access plan prices or bulk-resetting progress. Keep those abilities off.

Limit what the agent can do

1. A dedicated user with the lowest role that works

Create a WordPress user just for the agent and give it the least powerful role that covers the task. LifterLMS adds LMS Manager, Instructor and Instructor's Assistant roles; a reporting agent rarely needs more than an instructor-level role scoped to its courses. Never connect an agent as a real administrator. Our guide to LifterLMS roles and capabilities explains what each role can reach.

2. One application password per agent

Create the password under the agent user's profile, name it after the tool, and store it in that tool's secret store, not in a prompt, document or repository. Revoke it the moment the tool is retired.

3. Remove the abilities you do not want

LifterLMS passes its ability list through a filter before registering anything. This keeps only read-only abilities on the whole site, a sensible starting point:

<?php
/**
 * Plugin Name: LLMSX Read-only Abilities
 */
add_filter( 'llms_rest_ability_configs', 'llmsx_readonly_abilities' );

function llmsx_readonly_abilities( $configs ) {
	return array_values(
		array_filter(
			$configs,
			function ( $config ) {
				return in_array( $config['operation'], array( 'list', 'get' ), true );
			}
		)
	);
}

When you are ready for writes, allow specific ones by name, for example keeping enroll-student while every delete stays off. The name key in each configuration holds the ability name without the lifterlms/ prefix.

4. Staging first, and a human for anything destructive

Point new agents at a staging copy. Review what they ran before giving them production access, and require human confirmation for destructive abilities. A cloned site carries webhooks and payment settings, so read our notes on staging and recurring payments before cloning.

Risks specific to course sites

  • Student data leaves your site. Anything an agent reads may be sent to the AI provider. Names, emails, grades and orders are personal data; check your privacy policy and data processing agreements, and see our GDPR and privacy guide.
  • Prompt injection through content. Lesson text, quiz answers and student profile fields are written by people. An agent that reads them can be told to do things. Read-only permissions limit the damage.
  • Automations fire. An ability enrollment is a real enrollment: welcome emails, engagements and webhooks all run.
  • Bulk mistakes are fast. An agent can unenroll a whole course in a loop. Keep backups and keep deletes off unless they are needed.

Frequently asked questions

Which LifterLMS version added Abilities API support?

LifterLMS 10.1 registered courses, sections, lessons, memberships, access plans, students, enrollments and progress. Version 10.2 added quizzes, attempts, orders, certificates and student grades.

Do I need to enable anything?

No. On WordPress 6.9 or later the abilities register automatically. On older WordPress versions they are simply absent.

Can an AI agent take payments or issue refunds?

Not through the LifterLMS abilities. Orders and transactions are read-only there.

Is the LifterLMS AI integration a paid add-on?

No. The ability registration is part of the free core plugin. The AI tool you connect has its own costs.

What to do next

Start read-only. On staging, add the read-only filter above, create a dedicated user and application password, and connect your AI tool. Ask it reporting questions you can check by hand. Only when its answers are reliable, allow one write ability at a time.

If you want an AI workflow on your LifterLMS site, such as reporting, onboarding enrollments or grading support, built with proper permissions, logging and review, our LifterLMS integrations service designs it and our consulting service can review a plan you already have. Tell us what you want the agent to do.

Add LifterLMS Expert to your preferred sources

Add lifterlmsexpert as a preferred source on Google, or open this article in your AI assistant to use it as a source.

  • Add as a preferred source on Google
Free consultation

Prefer expert help over DIY?

Skip the trial and error. Get specialist LifterLMS help and ship faster.

Talk to a LifterLMS Expert Explore our services

Replies within one business day