Skip to content

New Quiz update() method uses incorrect parameter format causing "quiz is missing" error #700

@robiRagan

Description

@robiRagan

Bug Description

The NewQuiz.update() method sends parameters in the wrong format, causing Canvas API to return "quiz is missing" errors even when the quiz exists and is accessible.

Expected Behavior

According to the Canvas New Quizzes API documentation, parameters should be formatted as:

  • quiz[title]=New Title
  • quiz[points_possible]=100

Actual Behavior

The canvasapi library sends parameters as:

  • title=New Title
  • points_possible=100

Steps to Reproduce

from canvasapi import Canvas

canvas = Canvas(API_URL, API_KEY)
course = canvas.get_course(COURSE_ID)
new_quiz = course.get_new_quiz(ASSIGNMENT_ID)

# This works - quiz is accessible
print(new_quiz.title)

# This fails with "quiz is missing" error
new_quiz.update(title="Updated Title")

Error Response

{"errors":[{"message":"quiz is missing"}]}

Root Cause

In canvasapi/new_quiz.py, the update() method uses combine_kwargs() which outputs parameters without the required quiz[] prefix that the Canvas API expects.

Workaround

Direct API calls with correct parameter formatting work:

import requests

data = {'quiz[title]': 'Updated Title'}
response = requests.patch(
    f"{api_url}/api/quiz/v1/courses/{course_id}/quizzes/{assignment_id}",
    headers={'Authorization': f'Bearer {api_key}'},
    data=data
)

Environment

  • canvasapi version: 3.3.0
  • Python version: 3.12

Suggested Fix

Prefix parameters with quiz[] in the update() method before calling combine_kwargs().

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions