@jguerrero1
Are you talking about the information you get when you click on "View Progress" at the top of a course?
In my sandbox, it looks like this:
If that is what you're talking about, then that information can be obtained programmatically through the API using the List Modules endpoint of the Modules API.
When Canvas makes the call to generate the report shown above, it sets
- student_id to specify the student. You can only get one student at a time.
- include[]=items to include information about the items.
So the relative URL (put your Canvas instance in front of this) looks something like this:
/api/v1/modules?student_id=12345&include[]=items
You get an array with an entry for each module. Within each entry, there is an items property that is an array that has the details about all of the items in that module. Within each element of the items array, there is a completion_requirement that has a 'completed' property that is true or false to indicate that the item has been satisfied (or not when false)
There is a warning that you might need to use the List module items endpoint because Canvas may not return all of the items information if there is too much of it. When you look at that, it looks the same as List Modules and you may miss that the List Module Items needs the module_id from the List Modules call. So you have to make the List Modules call and you may need to also make one or more List Module Items calls as well.
Also be aware that pagination is used and so you may need to fetch additional pages of data to get all of the results. In most cases, you can specify per_page=100 (or some smaller value) to get the results in a single call. If none of your courses have 100 modules, then the 100 should suffice. I suspect that including more modules may cause Canvas to be more likely to not return all of the information about each one, meaning that you'll need to make calls to the list module items, but that is hypothesizing on my part and I haven't researched it. When Canvas makes the call, it just requests the default 10 at a time (what it uses when you don't specify the per_page query parameter)