How do I create quiz question via API?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello,
I'm trying to create a question to an existing quiz via API.
The doc is here: Quiz Questions - Canvas LMS REST API Documentation
So I made a simple data.json:
{
"question": {
"question_name": "Question",
"question_text": "<p>test</p>",
"question_type": "essay_question",
"points_possible": 1
}
}
and send it to the canvas:
curl -s 'https://canvas.url/api/v1/courses/1571/quizzes/517/questions' -X POST -d @data.json -H "Authorization: Bearer $CANVAS_TOKEN" | jq -r '.'
But canvas ignored all my fields, and created a dummy question instead:
{
"id": 1446,
"quiz_id": 517,
"quiz_group_id": null,
"assessment_question_id": null,
"position": null,
"question_name": "Question",
"question_type": "text_only_question",
"question_text": "Question text",
"points_possible": 0,
"correct_comments": "",
"incorrect_comments": "",
"neutral_comments": "",
"correct_comments_html": "",
"incorrect_comments_html": "",
"neutral_comments_html": "",
"answers": [],
"variables": null,
"formulas": null,
"answer_tolerance": null,
"formula_decimal_places": null,
"matches": null,
"matching_answer_incorrect_matches": null,
"assessment_question": null
}
Could it be the case of question API does not work?
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Your solution does not match my experience with Canvas, so I tested your original JSON on my sandbox. I used the Advanced Rest Client rather than curl and it worked as expected.
I think what you're missing is that when you send JSON content, you need to add the content-type: application/json header.
To verify this, I did some testing.
In my original request that worked, I had the Authorization header, but I also had
accept: application/json
content-type: application/json
If I take out the content-type header, then I get the same problem that you had where it ignores all of my information.
The accept header isn't necessary, but it doesn't hurt. I took it out and as long as the content-type was there, then the request worked properly.