Moodle is a free, open-source Learning Management System (LMS) used by universities, schools, and corporate training programs worldwide. It supports richly structured courses, enrolments, grade and competency tracking, quizzes and assignments, and collaboration via forums and groups. Its REST web services API exposes courses, users, grades, assignments, quiz attempts, enrolments, groups, badges, and calendar events.
Power end-to-end data operations for your Moodle LMS API with Nexla. Our bi-directional Moodle LMS connector is purpose-built for Moodle LMS, making it simple to ingest data, sync it across systems, and deliver it anywhere — all with no coding required. Nexla turns API-sourced data into ready-to-use, reusable data products and makes it easy to send data to Moodle LMS or any other destination. With comprehensive monitoring, lineage tracking, and access controls, Nexla keeps your Moodle LMS workflows fast, secure, and fully governed.
Features
Type: API
SourceDestination
Seamless API Integration: Connect to any endpoint as source or destination without coding, with automatic data product creation
Visual Composition & Chaining: Build complex integrations using visual templates, chain API calls, and compose workflows with data validation and filtering
API Proxy: Expose curated slices of your data securely with a secure and customizable API proxy that validates and transforms data on the fly
Request optimization with intelligent batching, retry, and caching to minimize API calls and costs
Nexla connects to Moodle LMS through its REST web services API. Before creating a credential in Nexla, you must enable web services on your Moodle instance and obtain either a pre-generated token or the credentials needed to generate one at runtime.
Moodle's web services require API calls to be associated with a specific user account. Nexla recommends using a dedicated service account rather than a personal admin account.
Navigate to Site administration > Users > Add a new user.
Fill in the required fields: Username, First name, Surname, Email address, and Password. Use a strong password and note it for later.
Set the Authentication method to Manual accounts.
Click Create user to save the new service account.
An external service defines which API functions are exposed and which users are authorized to call them.
Navigate to Site administration > Plugins > Web services > External services.
Click Add to create a new external service.
Enter a Name (e.g., Nexla Integration) and a Short name (e.g., nexla_integration). Note the short name, as it is required for the Username & Password authentication method.
Ensure both Enabled and Authorised users only are checked, then click Add service.
On the External services page, click Functions next to your new service.
Add all required API functions by searching for and selecting them. At a minimum, add core_webservice_get_site_info (used to validate the connection). Add additional functions corresponding to the Moodle LMS endpoints you plan to use with Nexla.
Return to the External services page and click Authorised users next to your service.
Search for and add the service account user created above.
Moodle supports two token approaches, corresponding to the two credential types available in Nexla:
Option A — Pre-Generated Token (recommended for simplicity):
Navigate to Site administration > Plugins > Web services > Manage tokens.
Click Add to create a new token.
Select the service account user in the User field and select your external service in the Service field.
Optionally set an expiry date in the Valid until field.
Click Save changes. The generated token will be displayed on the Manage tokens page — copy and store it securely, as this is the value you will enter in Nexla.
Option B — Username & Password (Auto Token):
With this method, Nexla automatically exchanges the service account username and password for a token at runtime by calling Moodle's /login/token.php endpoint. No manual token generation is required, but you must provide the service account Username, Password, and the Service Shortname of your external service.
For additional security, Moodle tokens can be assigned an expiry date. If you use a pre-generated token with an expiry, you will need to generate a new token and update the Nexla credential before the existing token expires. The Username & Password method avoids this by obtaining a fresh token automatically at runtime.
To create a new Moodle LMS credential, after selecting the data source/destination type, click the Add Credential tile to open the Add New Credential overlay.
Enter a name for the credential in the Credential Name field and a short, meaningful description in the Credential Description field.
Nexla supports two authentication methods for Moodle LMS. Select the method that matches how you obtained your token in the prerequisites section.
Moodle LMS Authentication Methods
Username & Password (Auto Token)
Pre-Generated Token
Nexla automatically exchanges your Moodle service account username and password for a web service token at runtime by calling the Moodle /login/token.php endpoint. The token is cached and reused for all API calls. This method requires the service account user to be authorized on the named external service.
Enter the base URL of your Moodle instance in the **Site URL** field. This should be the root URL without a trailing slash — for example, `https://lms.yourorganization.com`. All API calls will be made relative to this URL.
Enter the username of the Moodle service account in the **Username** field. This must be the username of a user who is authorized on the external service you configured in the prerequisites.
Enter the password of the Moodle service account in the **Password** field. The password is transmitted over HTTPS to Moodle's `/login/token.php` endpoint and is not stored in plain text by Nexla.
Enter the short name of the Moodle external service in the **Service Shortname** field. This is the value you set when creating the external service in Moodle — for example, `nexla_integration`. The default value `moodle_mobile_app` refers to Moodle's built-in mobile app service, which can be used if it has been enabled and the service account authorized on it.
Uses a static web service token generated in Moodle admin under Site administration > Plugins > Web services > Manage tokens. No username or password is required at runtime. This is the simpler option when you already have a valid token, but the token must be manually regenerated if it expires.
Enter the base URL of your Moodle instance in the **Site URL** field. This should be the root URL without a trailing slash — for example, `https://lms.yourorganization.com`.
Enter the pre-generated web service token in the **Web Service Token** field. This is the token you generated in Moodle admin under **Site administration** > **Plugins** > **Web services** > **Manage tokens**. The token authenticates all API requests Nexla makes to your Moodle instance.
Once all of the relevant steps in the above sections have been completed, click the Save button at the bottom of the overlay to save the configured credential. The newly added credential will now appear in a tile on the Authenticate screen during data source/destination creation and can be selected for use with a new data source or destination.
To create a new data flow, navigate to the Integrate section, and click the New Data Flow button. Select the Moodle LMS connector tile, then select the credential that will be used to connect to the Moodle instance, and click Next; or, create a new Moodle LMS credential for use in this flow.
Nexla provides pre-built templates that can be used to rapidly configure data sources to ingest data from common Moodle LMS REST API endpoints. Each template is pre-configured for the corresponding Moodle web service function, making data source setup easy and efficient. Select the endpoint from which this source will fetch data from the Endpoint pulldown menu. Available endpoint templates are listed in the expandable boxes below.
Get Site Info
Returns metadata about the Moodle site, the installed Moodle version, and information about the authenticated user. This endpoint is commonly used to validate that a credential is working correctly and to discover the capabilities of the connected Moodle instance.
No additional configuration parameters are required. Select this endpoint and click Test to verify connectivity and retrieve site metadata.
This endpoint calls the core_webservice_get_site_info Moodle web service function. Confirm that this function is added to your external service in Moodle admin before using this endpoint.
Get Courses
Retrieves all courses in the Moodle instance with full course metadata, including short name, full name, category, format, start/end dates, and summary. Supports pagination for large course catalogues. Use this endpoint when you need a complete inventory of courses for reporting or synchronization.
Enter the number of courses to return per page in the Page Size field. The default value is 100. Nexla automatically advances through pages until all courses are retrieved.
This endpoint calls core_course_get_courses. For large Moodle instances with thousands of courses, a page size of 100 is recommended to balance throughput and API load.
Get Courses by Field
Retrieves courses filtered by a specific field. Use this endpoint when you need to fetch a targeted subset of courses rather than the full catalogue — for example, all courses in a particular category or a single course by its short name.
Select the field to filter courses by from the Filter Field dropdown. Available options are:
Category ID — filters by the numeric Moodle category ID
Course ID — retrieves a single course by its numeric Moodle ID
Short Name — filters by the course short name (case-sensitive)
ID Number — filters by the administrator-assigned ID number field
Enter the value to match in the Filter Value field. This field is required. For example, to retrieve all courses in category 5, select Category ID and enter 5.
Course category IDs and course IDs can be found in the Moodle admin interface under Site administration > Courses > Manage courses and categories, or by running the Get Courses or Get Course Categories endpoint first.
Get Course Categories
Returns all course categories defined in the Moodle instance, including their hierarchy (parent/child relationships), names, descriptions, and the number of courses in each category. Use this endpoint to build category trees or enrich course data with category metadata.
No additional configuration parameters are required. Select this endpoint and click Test to retrieve all categories.
Get Course Contents
Returns the sections and activity modules (resources, assignments, quizzes, forums, labels, etc.) for a specified course. Use this endpoint to audit course structure, extract learning activity metadata, or feed content inventories into downstream systems.
Enter the numeric Moodle course ID in the Course ID field. This field is required. The course ID can be found in the URL when viewing a course in Moodle (e.g., https://lms.example.com/course/view.php?id=42 — the course ID is 42).
This endpoint calls core_course_get_contents. The authenticated service account must be enrolled in the course or have site-level course viewing permissions to retrieve its contents.
Get Users
Searches for and returns users matching a specified field-value criterion. Use this endpoint to retrieve user profiles for reporting, synchronization with HR systems, or to look up users before performing enrolment operations.
Select the user field to search by from the Search Field dropdown. Available options are:
Email — match by email address (default)
Username — match by Moodle username
ID Number — match by the administrator-assigned ID number
First Name — match by first name
Last Name — match by last name
Enter the value to match in the Search Value field. Use % as a wildcard to match all users or perform partial matches (e.g., entering % in the Email field retrieves all users with any email address).
This endpoint calls core_user_get_users. For retrieving all users, set Search Field to Email and Search Value to %. The service account must have the moodle/user:viewdetails capability.
Get Users by Field
Returns an exact-match list of users for a specific field value. Unlike the Get Users endpoint (which supports wildcards), this endpoint performs a strict exact match and is suited for programmatic lookups where you know the precise identifier.
Select the field to look up by from the Field dropdown. Available options are:
User ID — exact match by numeric Moodle user ID
ID Number — exact match by administrator-assigned ID number
Username — exact match by Moodle username
Email — exact match by email address
Enter the exact value to look up in the Field Value field. This field is required.
Get Enrolled Users
Returns all users enrolled in a specific course, including their role assignments, enrolment method, and enrolment timestamps. Use this endpoint to track who is enrolled in a course for compliance reporting or to synchronize enrolment data with external HR or student information systems.
Enter the numeric Moodle course ID in the Course ID field. This field is required.
Enter the number of users to return per page in the Page Size field. The default is 100. Nexla automatically paginates through all enrolled users.
This endpoint calls core_enrol_get_enrolled_users. The service account must have enrolment viewing permissions for the specified course.
Get User Course Enrolments
Returns all courses that a specific user is enrolled in. Use this endpoint to build per-learner dashboards, track individual learning journeys, or identify which courses a user has access to.
Enter the numeric Moodle user ID in the User ID field. This field is required. User IDs can be retrieved using the Get Users or Get Users by Field endpoint.
Get Grade Items
Returns grade items and user grades for a specified course. Each record contains grade item definitions (name, maximum grade, weight) along with the earned grade for each user. Use this endpoint to extract detailed grading data for analytics, dashboards, or LRS integration.
Enter the numeric Moodle course ID in the Course ID field. This field is required.
Enter a numeric Moodle user ID in the User ID field to filter results to a specific user, or leave the value as 0 to retrieve grades for all enrolled users in the course.
This endpoint calls gradereport_user_get_grade_items. The response groups grade items by user — each record in the returned Nexset represents one user's complete grade report for the course.
Get Course Grades Overview
Returns the final course-level grade for a specific user across all courses they are enrolled in. Use this endpoint to generate per-learner progress summaries or feed overall course grades into external reporting systems.
Enter the numeric Moodle user ID in the User ID field. This field is required.
Get Assignments
Returns all assignments for a specified course (or all accessible courses), including assignment names, due dates, submission type settings, grade settings, and configuration details. Use this endpoint to audit assignment structures or synchronize assignment metadata with external systems.
Enter the numeric Moodle course ID in the Course ID field to limit results to a single course. Set the value to 0 or leave it at the default to retrieve assignments from all courses accessible to the service account.
This endpoint calls mod_assign_get_assignments. The data path extracts assignments nested within each course object, so each returned record represents a single assignment.
Get Assignment Submissions
Returns student submissions for a given assignment, including submission status, timestamps, plugin data (e.g., file or online text submissions), and grading information. Use this endpoint for tracking submission compliance, analyzing submission patterns, or feeding submission data into grading workflows.
Enter the numeric Moodle assignment ID in the Assignment ID field. This field is required. Assignment IDs can be obtained from the Get Assignments endpoint.
Optionally filter submissions by status using the Submission Status Filter dropdown:
All — returns all submissions regardless of status (default)
Draft — returns only submissions saved as drafts
Submitted — returns only submissions that have been finalized
New — returns only submissions with no student activity yet
Get Quizzes by Courses
Returns quizzes in one or more specified courses, including quiz name, timing settings (open/close dates), grading method, number of attempts allowed, and other configuration details. Use this endpoint to audit quiz availability or synchronize quiz metadata with external assessment platforms.
Enter the numeric Moodle course ID in the Course ID field to retrieve quizzes for a specific course. Set the value to 0 to retrieve quizzes from all courses accessible to the service account.
Get Quiz Attempts
Returns attempt records for a specific quiz, including each attempt's score, start time, finish time, duration, and completion state. Use this endpoint to analyze learner quiz performance, identify struggling participants, or feed attempt data into learning analytics dashboards.
Enter the numeric Moodle quiz ID in the Quiz ID field. This field is required. Quiz IDs can be found from the Get Quizzes by Courses endpoint or in the Moodle course admin interface.
Optionally enter a numeric Moodle user ID in the User ID field to filter attempts to a specific learner, or leave it as 0 to retrieve attempts for all users.
Select the attempt completion state to filter by from the Attempt Status dropdown:
All — returns all attempts regardless of state (default)
Finished — returns only completed attempts
Unfinished — returns only in-progress attempts
Get Activity Completion Status
Returns the completion status for every activity in a course for a specific user, including whether each activity has been completed, the completion date, and the completion condition used. Use this endpoint to track per-learner progress through course activities and identify incomplete requirements.
Enter the numeric Moodle course ID in the Course ID field. This field is required.
Enter the numeric Moodle user ID in the User ID field. This field is required.
Activity completion tracking must be enabled on the Moodle site (Site administration > Advanced features > Enable completion tracking) and for the specific course for data to be returned by this endpoint.
Get Course Completion Status
Returns the overall course completion status for a specific user in a given course, including whether the course is complete, the completion date, and the list of individual completion criteria and their statuses. Use this endpoint to power completion dashboards, trigger downstream workflows on course completion, or generate compliance reports.
Enter the numeric Moodle course ID in the Course ID field. This field is required.
Enter the numeric Moodle user ID in the User ID field. This field is required.
Get Groups
Returns all groups defined within a specific course, including group name, description, enrolment key, and member count. Use this endpoint to synchronize Moodle group memberships with external collaboration tools or reporting systems.
Enter the numeric Moodle course ID in the Course ID field. This field is required.
Get Group Members
Returns the user IDs of all members belonging to a specific group. Use this endpoint together with the Get Groups endpoint to build a complete picture of group membership within a course.
Enter the numeric Moodle group ID in the Group ID field. This field is required. Group IDs can be retrieved using the Get Groups endpoint.
Get Forums by Courses
Returns forums in one or more courses, including forum name, type, subscription settings, discussion count, and post count. Use this endpoint to monitor forum activity levels, audit forum configurations, or feed forum metadata into engagement analytics.
Enter the numeric Moodle course ID in the Course ID field. Set the value to 0 to retrieve forums from all courses accessible to the service account.
Get Forum Discussions
Returns discussions in a forum with pagination, sorted by last post time. Each record includes the discussion subject, author, creation date, last reply date, and reply count. Use this endpoint to analyze forum engagement, extract discussion content for moderation, or feed communication data into analytics platforms.
Enter the numeric Moodle forum ID in the Forum ID field. This field is required. Forum IDs can be obtained from the Get Forums by Courses endpoint.
Enter the number of discussions to return per page in the Page Size field. The default is 50. Nexla automatically paginates until all discussions are retrieved.
Get Calendar Events
Returns calendar events (course events, site events, and user events) within a specified date range. Use this endpoint to synchronize Moodle events with external calendaring systems, build event-based notifications, or analyze scheduling patterns.
Enter the start of the date range as a Unix timestamp in the Time Start (Unix) field. The default value {now-30} represents 30 days before the current date. Unix timestamps can be generated using standard date/time conversion tools.
Enter the end of the date range as a Unix timestamp in the Time End (Unix) field. The default value {now} represents the current date and time.
Unix timestamps are the number of seconds elapsed since January 1, 1970 (UTC). For example, 2024-01-01T00:00:00Z corresponds to the Unix timestamp 1704067200. Many date/time converters are freely available online to generate Unix timestamps from human-readable dates.
Get User Badges
Returns badges awarded to a specific user, including the badge name, description, criteria, issue date, and issuer. Use this endpoint to track achievement and gamification data, synchronize badges with external HR systems, or power learner recognition dashboards.
Enter the numeric Moodle user ID in the User ID field. This field is required.
Optionally enter a numeric Moodle course ID in the Course ID field to filter badges issued within a specific course. Set the value to 0 to retrieve all badges across all courses for the user.
Get Competencies by Course
Returns the competency framework items linked to a specific course. Competencies in Moodle are skills or learning outcomes that can be tracked and evidenced. Use this endpoint to extract competency structures for skills gap analysis or integration with competency management systems.
Enter the numeric Moodle course ID in the Course ID field. This field is required.
Moodle's competency features must be enabled on the site (Site administration > Advanced features > Enable competencies) for this endpoint to return data.
Get User Competencies
Returns competency evidence and proficiency ratings for a specific user in a specific course. Each record includes the competency definition, the user's current proficiency rating, evidence items, and the date last modified. Use this endpoint to power skills tracking dashboards or feed learner competency data into talent management systems.
Enter the numeric Moodle user ID in the User ID field. This field is required.
Enter the numeric Moodle course ID in the Course ID field. This field is required.
Once the selected endpoint template has been configured, click the Test button to the right of the endpoint selection menu to retrieve a sample of the data that will be fetched. Sample data will be displayed in the Endpoint Test Result panel on the right, allowing you to verify that the source is configured correctly before saving.
Moodle LMS data sources can also be manually configured to ingest data from any valid Moodle REST web service endpoint. Select the Advanced tab at the top of the configuration screen, and follow the instructions in Connect to Any API to configure the API method, endpoint URL, date/time and lookup macros, path to data, metadata, and request headers.
All Moodle REST API calls are made as POST requests to https://<your-moodle-domain>/webservice/rest/server.php over HTTPS, with the function name, token, and parameters supplied in the request body rather than the URL. Moodle web service responses frequently wrap the relevant data array within a top-level object (e.g., {"users": [...]} or {"courses": [...]}), so setting Path to Data correctly (e.g., $.users[*], $.courses[*].assignments[*]) is important for proper record extraction. Additional request headers are typically not required, since authentication is handled via the wstoken parameter in the request body.
Once all of the relevant settings have been configured, click the Create button in the upper right corner of the screen to save and create the new Moodle LMS data source. Nexla will now begin ingesting data from the configured endpoint and will organize any data that it finds into one or more Nexsets.
Click the + icon on the Nexset that will be sent to the Moodle LMS destination, and select the Send to Destination option from the menu. Select the Moodle LMS connector from the list of available destination connectors, then select the credential that will be used to connect to the Moodle instance, and click Next; or, create a new Moodle LMS credential for use in this flow.
Nexla provides pre-built templates that can be used to rapidly configure destinations to send data to common Moodle LMS write endpoints. Select the endpoint to which data will be sent from the Endpoint pulldown menu. Then, click on the template in the list below to expand it, and follow the instructions to configure additional endpoint settings.
Create Users
Creates new Moodle user accounts from records in the Nexset. Use this endpoint to provision users in Moodle from an HR system, student information system, or any external user directory. Each record in the Nexset should represent one user to be created.
Ensure each record in the Nexset includes the required Moodle user fields. At a minimum, each record must contain the following:
username — unique Moodle username (lowercase, no spaces)
Optional fields such as idnumber, city, country, lang, timezone, description, and custom profile fields can also be included in each record. Refer to the Moodle Web Services documentation for the full list of supported user fields.
No additional endpoint-level configuration parameters are required. Nexla sends one user record per API call to the core_user_create_users web service function.
Moodle's core_user_create_users function enforces your site's password policy and will reject user records with passwords that do not meet the minimum requirements. Ensure passwords in the source data comply with the Moodle site's password policy before running this flow.
Update Users
Updates existing Moodle user profile fields from records in the Nexset. Use this endpoint to synchronize user profile changes from an authoritative source (such as an HR system or directory) into Moodle. Each record in the Nexset represents one user to be updated.
Each record in the Nexset must include the id field containing the numeric Moodle user ID of the user to be updated. This field is required for Moodle to identify which user account to modify.
Include only the fields that should be updated in each record. Moodle will update only the fields present in the request and leave all other fields unchanged.
Updatable fields include firstname, lastname, email, username, idnumber, city, country, lang, timezone, description, and custom profile fields.
To retrieve the numeric Moodle user IDs needed for updates, use the Moodle LMS Get Users or Get Users by Field source endpoint first to build a lookup mapping external identifiers to Moodle user IDs.
Enrol Users
Manually enrols users into a course with a specified role. Use this endpoint to programmatically enrol learners in courses based on records from an HR system, registration platform, or other external system. Each record in the Nexset should represent one enrolment action.
Each record in the Nexset must include the following fields:
roleid — numeric Moodle role ID for the enrolment
userid — numeric Moodle user ID of the user to enrol
courseid — numeric Moodle course ID of the course to enrol the user in
Alternatively, set the Role ID configuration parameter at the endpoint level to apply a single role to all enrolments in this flow. Available role options are:
Student (5) — standard learner role (default)
Teacher (3) — editing teacher with full course management
Non-editing teacher (4) — teacher with grading access but no course editing
Manager (1) — site manager role
Optionally include timestart and timeend fields as Unix timestamps to define the enrolment period. If omitted, the enrolment will have no time restriction.
This endpoint uses Moodle's manual enrolment plugin (enrol_manual_enrol_users). The manual enrolment method must be enabled on the target course in Moodle for enrolments to succeed. Confirm this under the course settings in Course administration > Users > Enrolment methods.
Unenrol Users
Removes user enrolments from a course. Use this endpoint to programmatically unenrol learners when they leave an organization, complete a program, or when enrolment records in an authoritative source are revoked. Each record in the Nexset should represent one unenrolment action.
Each record in the Nexset must include the following fields:
userid — numeric Moodle user ID of the user to unenrol
courseid — numeric Moodle course ID of the course from which the user will be unenrolled
No additional endpoint-level configuration parameters are required. Nexla sends one unenrolment record per API call to the enrol_manual_unenrol_users web service function.
Important
Unenrolling a user from a course in Moodle permanently removes their access to all course content and may affect their grade data visibility. Verify that the unenrolment records in the source Nexset are accurate before activating this flow.
Create Courses
Creates new courses in Moodle from records in the Nexset. Use this endpoint to provision courses programmatically from an external course catalogue, curriculum management system, or migration source. Each record in the Nexset represents one course to be created.
Each record in the Nexset must include the following required fields:
fullname — the full display name of the course
shortname — a unique short name for the course (no spaces, used in URLs)
categoryid — the numeric Moodle category ID under which the course will be created
Optional fields such as summary, format (e.g., topics, weeks), startdate (Unix timestamp), enddate (Unix timestamp), visible (0 or 1), and idnumber can also be included. Refer to the Moodle Web Services documentation for the full list of supported course creation fields.
Course short names must be unique across the entire Moodle site. If a short name collision occurs, the API call will fail for that record. Review your source data for duplicate short names before activating this flow.
Moodle LMS destinations can also be manually configured to send data to any valid Moodle REST web service write endpoint. Select the Advanced tab at the top of the configuration screen, and follow the instructions in Connect to Any API to configure the API method, data format, endpoint URL, request headers, attribute exclusions, record batching, and response webhooks.
All Moodle REST write functions use POST with JSON content, and the endpoint URL must include the function name, token, and response format as query parameters: https://<your-moodle-domain>/webservice/rest/server.php?wstoken=<your-token>&wsfunction=<function_name>&moodlewsrestformat=json. Moodle's bulk write functions (such as core_user_create_users) accept arrays of records in a single call, so enabling record batching can significantly improve throughput. Enabling the response webhook lets you capture the response from each call — for example, the newly assigned Moodle IDs for created users or courses.
Once all endpoint settings have been configured, click the Done button in the upper right corner of the screen to save and create the destination. To begin sending data to the configured Moodle LMS endpoint, open the destination resource menu, and select Activate.
The Nexset data will not be sent to Moodle LMS until the destination is activated. Destinations can be activated immediately or at a later time, providing full control over data movement.