Quiz Grading via API

Jump to solution
sam_dickerman
Community Explorer

Hi:

I'm trying to develop my own quiz speed grader using the API.

I'd like to pull down all of the answers to a particular open response (essay) quiz question and then grade them all on one page using a custom UI and send the scores back in for each student.

I'm having trouble finding the part of the API that let's me pull down a student's answer to a particular quiz question and then update the score for that question.  I saw one thread that suggested I needed to use some kind of report (with a download URL) but I'm really hoping that's not the case.  That also wouldn't help me change the score for a particular question.  I saw a place to change the fudge score but that's for the overall quiz (I think).

This seems so fundamental I can't believe it's not possible but I just can't figure it out.

Thanks,

Sam

2 Solutions

OK!  Hi Deactivated user,  @Renee_Carney  and  @James :

Big thanks to wfrakes​ from Instructure for sending me a correct JSON string that works.  Here is the deal for other users who run into trouble here:

Here is the CORRECT FORMAT (the documentation is WRONG and/or misleading)

{

  "quiz_submissions": [{

    "attempt": 3,

    "fudge_points": 1,

    "questions": {

      "10959": {

        "score": 2.5,

        "comment": "test."

      },

      "10960": {

        "score": 1,

        "comment": "test."

      }

    }

  }]

}

Note , the red value is the id number of the quiz question.  I got confused because the API documentation is problematic.  Here are the examples from the docs:

Main example from the docs

{

  "quiz_submissions": [{

  "attempt": 1,

  "fudge_points": -2.4,

  "questions": {

  "1": {      <=========  These look like an array index of the questions in the quiz, not a six+ digit ID number

  "score": 2.5,

  "comment": "This can't be right, but I'll let it pass this one time."

  },

  "2": {      <========= see?

  "score": 0,

  "comment": "Good thinking. Almost!"

  }

  }

  }]

}

Three examples from the manual scoring appendix

The following come from the Appendix on manual scoring...

FIRST

{

  "quiz_submissions": [{

    "fudge_points": null, // null for no change, or a signed decimal

    "questions": {

      "QUESTION_ID": {   <============  This HAS the question ID but it fails because.... can you see it?... no attempt number

        "score": null, // null for no change, or an unsigned decimal

        "comment": null // null for no change, '' for no comment, or a string

      }

    }

  }]

}

SECOND

{

  "quiz_submissions": [{

    "attempt": 1,    <=========================  This HAS the attempt number but fails because no questions (it works WITH questions)

    "fudge_points": -2.4

  }]

}

THIRD

{

  "quiz_submissions": [{

    "attempt": 1,

    "questions": {

      "1": {     <============= We're back to single digit ID numbers

        "comment": ""

      }

    }

  }]

}

I hope Instructure fixes up the docs AND please note that the Live!  API tool is still broken for this call.

Regards,

Sam Dickerman

Brookline High School

View solution in original post

This is super unfortunate.  My TAs have been disappointed with the Instructure provided grading tools, so I was like "oohhhh, there's a REST API!, I'll just whip up a new one in a few hours, here."  But then the REST API didn't seem to be working right.  Instead of documenting the fact that the API doesn't work on the API page, Instructure forces me to go all around the world looking for this thread, which clarifies that not only can Instructure not make a functional website, they can't even make a functional REST API.  This level of incompetence is truly astounding.

View solution in original post