I have a script that sets new quiz accommodations in a course through this API:
POST /api/quiz/v1/courses/:course_id/quizzes/:assignment_id/accommodations
The script sends this request once per quiz, some of them succeed and some fail unexplicably. I am aware that I can set the accommodations at the course level, but I have to do it on a per quiz basis in my case.
Here is the request payload:
[
{
"user_id": 395417,
"extra_time": 8
},
{
"user_id": 367374,
"extra_time": 0
},
{
"user_id": 308374,
"extra_time": 0
},
{
"user_id": 300411,
"extra_time": 0
},
{
"user_id": 306292,
"extra_time": 0
},
{
"user_id": 355503,
"extra_time": 0
},
{
"user_id": 313105,
"extra_time": 0
},
{
"user_id": 396924,
"extra_time": 0
},
{
"user_id": 257058,
"extra_time": 0
},
{
"user_id": 159936,
"extra_time": 0
},
{
"user_id": 166394,
"extra_time": 0
},
{
"user_id": 245555,
"extra_time": 0
},
{
"user_id": 375535,
"extra_time": 0
},
{
"user_id": 321133,
"extra_time": 0
},
{
"user_id": 195697,
"extra_time": 0
},
{
"user_id": 243056,
"extra_time": 0
},
{
"user_id": 322387,
"extra_time": 0
},
{
"user_id": 364769,
"extra_time": 0
},
{
"user_id": 360135,
"extra_time": 0
},
{
"user_id": 374270,
"extra_time": 0
},
{
"user_id": 301210,
"extra_time": 0
},
{
"user_id": 352196,
"extra_time": 0
},
{
"user_id": 306324,
"extra_time": 0
},
{
"user_id": 295945,
"extra_time": 0
},
{
"user_id": 363631,
"extra_time": 0
},
{
"user_id": 397840,
"extra_time": 0
},
{
"user_id": 398430,
"extra_time": 0
},
{
"user_id": 348167,
"extra_time": 0
},
{
"user_id": 371350,
"extra_time": 0
},
{
"user_id": 391297,
"extra_time": 0
},
{
"user_id": 375537,
"extra_time": 0
},
{
"user_id": 373515,
"extra_time": 0
}
]
Here is a summary of all the requests:
STATE and assignment ID, request URL, number of student accommodations in the payload
SUCCESS: 3008652 | https://colostate.instructure.com/api/quiz/v1/courses/219093/quizzes/3008652/accommodations | 32 |
|---|
SUCCESS: 3008653 | https://colostate.instructure.com/api/quiz/v1/courses/219093/quizzes/3008653/accommodations | 32 |
SUCCESS: 3008654 | https://colostate.instructure.com/api/quiz/v1/courses/219093/quizzes/3008654/accommodations | 32 |
FAILED: 3008655 | https://colostate.instructure.com/api/quiz/v1/courses/219093/quizzes/3008655/accommodations | 32 |
FAILED: 3008656 | https://colostate.instructure.com/api/quiz/v1/courses/219093/quizzes/3008656/accommodations | 32 |
FAILED: 3008657 | https://colostate.instructure.com/api/quiz/v1/courses/219093/quizzes/3008657/accommodations | 32 |
SUCCESS: 3008658 | https://colostate.instructure.com/api/quiz/v1/courses/219093/quizzes/3008658/accommodations | 32 |
SUCCESS: 3008659 | https://colostate.instructure.com/api/quiz/v1/courses/219093/quizzes/3008659/accommodations | 32 |
FAILED: 3008660 | https://colostate.instructure.com/api/quiz/v1/courses/219093/quizzes/3008660/accommodations | 32 |
FAILED: 3008661 | https://colostate.instructure.com/api/quiz/v1/courses/219093/quizzes/3008661/accommodations | 32 |
FAILED: 3008662 | https://colostate.instructure.com/api/quiz/v1/courses/219093/quizzes/3008662/accommodations | 32 |
FAILED: 3008663 | https://colostate.instructure.com/api/quiz/v1/courses/219093/quizzes/3008663/accommodations | 32 |
SUCCESS: 3008664 | https://colostate.instructure.com/api/quiz/v1/courses/219093/quizzes/3008664/accommodations | 32 |
SUCCESS: 3008665 | https://colostate.instructure.com/api/quiz/v1/courses/219093/quizzes/3008665/accommodations | 32 |
The URL is the same for all requests except for the assignment ID. The JSON payload is the same in all request. However, half of them fail with this error:
Response Code: <404>
Response Headers: {'Date': 'Mon, 09 Feb 2026 09:00:10 GMT', 'Content-Type': 'application/json; charset=utf-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Server': 'Apache', 'x-session-id': '453d8fad9d87e9ace9d05eea76eb1d6c', 'x-request-context-id': '7977a551-ed7e-46f9-a966-9c192b885353', 'vary': 'Accept-Encoding', 'content-encoding': 'gzip', 'x-rate-limit-remaining': '700.0', 'x-canvas-meta': 'q=2850;tid=Root=1-6989a21a-32927e410c7a81af6d10d596;at=37160000000927074;dk=37160000000000300;a=1;g=v1stxr6mxlkQKuDGQ1XQ7ZwDdGchN35jcJ0KJSgH;s=3716;c=cluster39;z=us-east-1e;o=new_quizzes/accommodation_api;n=quiz_level_accommodations;t=Course;i=219093;st=890e7eca9a504c2b917945f6df495867-c78dde3ffe8b43fe-0;b=2087176;m=2087176;u=0.05;y=0.01;d=0.01;rlr=700.0;', 'content-security-policy': "frame-ancestors 'self' colostate.instructure.com colostate.beta.instructure.com colostate.test.instructure.com;", 'x-request-cost': '0.11176763600189368', 'cache-control': 'no-cache', 'strict-transport-security': 'max-age=63072000', 'referrer-policy': 'no-referrer-when-downgrade', 'x-permitted-cross-domain-policies': 'none', 'x-xss-protection': '1; mode=block', 'x-canvas-user-id': '37160000000002026', 'x-download-options': 'noopen', 'x-runtime': '0.126477', 'x-content-type-options': 'nosniff', 'Set-Cookie': '_csrf_token=uAYcrKcLI48B2M4SADC08HjE%2Ft8qDNRikFmuQ%2B9jZMHobFKY0j5pzmngpVk4VtKnCqaohV904jr5Kt0Enws9lQ%3D%3D; path=/; secure, log_session_id=453d8fad9d87e9ace9d05eea76eb1d6c; path=/; secure; httponly, canvas_session=TuNyKG3o52z88oXrSQP2Dw._2q5DohxhFIJ41U0TyaVaubpxshRGE64j5LJaVb7I6ciL_BmjDn2kJFBiEQb4A2-yoEUETc7l66GPfvudj_o3dKQ1RlzApL9w20OFM8666jrysd2GGfpLS6Q1eTA0OD8.qoQU_H5PxFknF-b97B3RDjmJdtA.aYmiGg; path=/; secure; httponly; samesite=none', 'X-Request-Processor': '03c26d999b5531b26', 'X-A11y-Ally': 'Dana Danger Grey', 'Status': '404 Not Found', 'P3P': 'CP="None, see http://www.instructure.com/privacy-policy"'}
Response Text: {"error":"Users with IDs 364769, 245555, 166394, 375535, 363631, 391297, 306324, 308374, 371350, 348167, 398430, 367374, 322387, 243056, 257058, 352196, 374270, 195697, 397840, 355503, 301210, 360135, 300411, 373515, 375537, 159936, 395417, 321133, 313105, 295945, 306292, 396924 are not participants in this assignment"}
The error says that all the students are not participants in the assignment, however the quiz is assigned to "everyone". Exactly like all other quizzes. There is no difference that I can tell between these 14 quizzes that I am testing on. The quizzes that fail are always the same, no matter how many times I run the script.
This seems like a bug in the API to me. Unless I am missing something. Can someone explain?