The Instructure Community will enter a read-only state on November 22, 2025 as we prepare to migrate to our new Community platform in early December. Read our blog post for more info about this change.
Found this content helpful? Log in or sign up to leave a like!
Has there been a change to the Submissions API? Everything seems to indicate that if you make a request to /api/v1/courses/{some course id number}/assignments/{some assignment id number} you should get a list (0-n) submissions. (https://canvas.instructure.com/doc/api/submissions.html#method.submissions_api.index)
Whenever I hit that endpoint (several different assignments and courses), I get at most one (1) submission back. As far as I can tell it's always the most 'recent' submission. Passing per_page or other include(s) don't seem to cause any additional submissions (but includes do cause additional information to be returned).
I'd swear this used to return multiples, but I can't find any combination that does it.
Anyone have any ideas on what I could be doing wrong?
@fentl ,
I'm having trouble following your question. Are you saying that you're only getting 1 submission for the entire class or that you're only getting one submission per student?
By default, with no additional query parameters, only the latest submission is returned, but it returns information for the entire class. This is paginated to stop at 10 unless you include the per_page= parameter. I just tried this on a class from Spring 2019 and got 32 submissions returned, which is what I would expect.
If you're expecting more than one response per student, then that has never been the case as long as I've been using this. I mostly use the list submissions for multiple assignments version, but they're essentially the same. To get more than one submission per student, you need add to include[]=submission_history. When you do that, there will be a submission_history array property with one entry for each submission. If it's a quiz, then this also includes the responses to the quiz.
If you're only getting 1 submission for the entire class, you might double check that you typed the course ID and assignment ID correctly.
The other thing you might check is that your API Token is for a teacher or admin who has the ability to see multiple values. If you're calling this as a student or observer, then the only one you would see is the one that belongs to the token. You can do that quickly by making a call to /api/v1/users/self and make sure it's who you think it is.
Looks like the problem is that related to pulling data for an older course. When the students cease having 'active' enrollment status, they drop off and no longer appear in the submissions end point. I don't see any way to include completed students in the endpoint. It just so happened that I was focused on pulling historical information for nearly finished courses.
@fentl ,
Are you marking them as inactive or concluded? My guess is inactive, but if it is concluded then you can use enrollment_state=concluded.
Someone else was having this issue a week or two ago. I believe the solution is to use the list submissions for multiple assignments endpoint and use student_ids[]= multiple times, one for each of the specific IDs of the students. I don't have any inactive enrollments to test, but this is what Canvas does in it's gradebook so it should work.
James,
It looks like the enrollment_state=concluded and enrollment_state=active parameters only work with the list for multiple assignments (which is fine, that's how the documentation states it should work).
You can also use the student_id[]=all to basically get all the active|concluded student assignments in the same fashion (for the list multiples endpoint), so that works for my needs.
Community helpTo interact with Panda Bot, our automated chatbot, you need to sign up or log in:
Sign inTo interact with Panda Bot, our automated chatbot, you need to sign up or log in:
Sign in