Skip to main content



Moodle is a free and open-source online learning management system.

Integration Use Cases

  1. As a teacher on Moodle, I want to send profile, enrollment, and grade updates to CommCare so I can continue supporting students offline.
  2. As a teacher on Moodle, I want to automatically send student engagement data to CommCare so I can integrate SMS notifications to increase student participation.
  3. As a student on Moodle, I want to access my course data and grades even when not connected to the internet.

Learn More

Helpful links...

  1. Moodle Docs –
  2. Moodle API Docs -

Integration Options

Data integration via the Moodle web API:

Data forwarding using a Webhook:

More on the Moodle API

Sample HTTP requests

GET &username=USERNAME&password=PASSWORD

Retrieve course information for all courses:
GET /cv_dgdp/webservice/rest/server.php?wstoken=TOKEN&wsfunction= core_course_get_courses&moodlewsrestformat=json HTTP/1.1

Retrieve enrolled users in a specific course:
GET /cv_dgdp/webservice/rest/server.php?wstoken=TOKEN&wsfunction= core_enrol_get_enrolled_users&courseid=225&moodlewsrestformat=json HTTP/1.1

Retrieve all final grades for one student:
GET /cv_dgdp/webservice/rest/server.php?wstoken=TOKEN&wsfunction= gradereport_user_get_grade_items&userid=46580&courseid=225&moodlewsrestformat=json HTTP/1.1

Integration tips

  1. The endpoint get_enrolled_users does not return all user profile details. We have had to access core_user_get_users_by_field and filter by one specific user to retrieve profile information such as phone number and address.
  2. Googling the endpoint you're using goes a long way!

Connect with OpenFn

The language-http can be used to make HTTP requests to the Moodle API.

Implementation Examples

Moodle -> CommCare Integration:

In a project implementation for creating an education app (based on CommCare), we extract data from a Moodle learning management system daily, and then upload Moodle student user data as case records in Commcare.

Example User Story: As a coach using CommCare, when a student's profile and grades are updated in Moodle, I would like to automatically see that data reflected in my mobile app so that I can follow-up with the relevant support to ensure they perform well.

Example job to get enrolled users via the Moodle API endpoint (aka web service function): core_enrol_get_enrolled_users

fn(state => {
const { loginUrl, username, password, host } = state.configuration;
return get(
state => {
const { token } =;
const courseIds = [224, 225];
const enrolledUsers = [];
return each(
fn(state => {
let courseid =;
return get(
query: {
wstoken: token,
wsfunction: 'core_enrol_get_enrolled_users',
moodlewsrestformat: 'json',
headers: { 'content-type': 'application/json' },
state => {
`Getting users enrolled in the course with ${courseid}...`
return { ...state, enrolledUsers };