
Learning management system to create and sell courses online
released May 22, 2026
npm install strapi-plugin-maestroTransform your Strapi app into a Learning Management System to create and sell courses online effortlessly.
In the root of your strapi application, run the following command:
npm i strapi-plugin-maestroOnce installed, set the following values in your project's .env:
ACCESS_TOKEN_ID={Mux access token ID}
ACCESS_TOKEN_SECRET={Mux secret key}
WEBHOOK_SIGNING_SECRET={Mux webhook signing secret}
SIGNING_KEY_ID={Mux signing Key ID}
SIGNING_KEY_PRIVATE_KEY={Mux base64-encoded Private Key}
STRIPE_SECRET_KEY={Stripe secret key}
STRIPE_CHECKOUT_SUCCESS_URL={Frontend checkout success URL}
STRIPE_CHECKOUT_CANCEL_URL={Frontend checkout cancel URL}Finally, add the following configuration in config/plugins.ts:
export default ({ env }: { env: any }) => ({
"maestro": {
enabled: true,
config: {
stripeSecretKey: env('STRIPE_SECRET_KEY'),
checkoutSuccessUrl: env('STRIPE_CHECKOUT_SUCCESS_URL'),
checkoutCancelUrl: env('STRIPE_CHECKOUT_CANCEL_URL'),
}
},
"mux-video-uploader": {
enabled: true,
config: {
accessTokenId: env('ACCESS_TOKEN_ID'),
secretKey: env('ACCESS_TOKEN_SECRET'),
webhookSigningSecret: env('WEBHOOK_SIGNING_SECRET'),
playbackSigningId: env('SIGNING_KEY_ID'),
playbackSigningSecret: env('SIGNING_KEY_PRIVATE_KEY'),
}
}
});And that's it, now you can start the server with npm run develop.
In order for the plugin to serve content, manage users and create and confirm orders, you must enable some endpoints in the Users & Permissions Pluginfor the Maestro plugin.
For Authenticated users, enable the following:
From courses:
From orders:
For Public users, enable the following:
From categories:
From courses:
From orders:
Creating courses is done through the Strapi Admin Dashboard.
The Maestro plugin exposes a REST API for managing and consuming courses, categories, orders, and user progress. Below is a list of available endpoints, grouped by resource, with their methods, paths, authentication requirements, and descriptions.
GET /categories/index
Auth: Public
Returns a list of all categories, each with its thumbnail and associated courses (with thumbnails and modules/lectures).
GET /categories/:slug
Auth: Public
Returns a single category by slug, including its thumbnail and courses (with thumbnails and modules/lectures).
GET /courses
Auth: Public
Returns all courses with thumbnails, modules, lectures, category, students, and instructor info.
GET /courses/:slug
Auth: Public
Returns a course by slug, including modules, lectures, category, students, and instructor info.
GET /courses-slugs
Auth: Public
Returns a list of all course slugs.
GET /course-details/:courseId
Auth: Authenticated
Returns the number of students and, if authenticated, the classes the user has completed for a course.
GET /courses/:courseId/classes-completed
Auth: Authenticated
Returns the lectures the user has completed for a course.
GET /courses/:courseId/get-current-lecture
Auth: Authenticated
Returns the current lecture for the user to resume in a course.
GET /courses/:courseId/resume-course
Auth: Authenticated
Resumes the course for the user, returning the next lecture to watch.
GET /courses/:courseId/get-play-auth-lecture
Auth: Authenticated
Returns play authorization for a lecture video (e.g., Mux playback token).
PUT /courses/:courseId/check-lecture
Auth: Authenticated
Marks a lecture as completed for the user.
GET /my-items-purchased
Auth: Authenticated
Returns the IDs of all courses purchased by the user.
GET /my-learning
Auth: Authenticated
Returns full information for all courses purchased by the user.
GET /orders
Auth: Authenticated
Returns all orders for the authenticated user.
GET /orders/:id
Auth: Authenticated
Returns a single order by ID, only if it belongs to the user.
POST /orders
Auth: Public or Authenticated
Creates a new order for one or more courses. Requires courses (array of course IDs), payment_method (credit_card or paypal), and optionally email (for guest checkout). Returns a checkout session for Stripe or PayPal.
PUT /orders/confirm
Auth: Public
Confirms an order after payment (Stripe/PayPal webhook or redirect). Marks the order as confirmed and enrolls the user in the purchased courses.
PUT /orders/confirm-with-user
Auth: Authenticated
Confirms an order for the authenticated user after payment. Enrolls the user in the purchased courses.
PUT /orders/finish-register
Auth: Public
Completes registration for a user after a guest checkout and order confirmation.
The plugin provides internal services for advanced usage and extension:
The plugin defines the following main content-types:
See the server/src/content-types/ directory for full schema details.
If you find a bug or need support for using this plugin, open an issue at https://github.com/luisguve/strapi-plugin-maestro
Share your work with the community and get it listed in the Strapi ecosystem for everyone to discover and use.
Submit
