Skip to content

Assignments

Assignments connect a quiz to students (individual assignments) or produce a shareable public link (promotional assignments).

OperationEndpointScope
List assignmentsGET /api/v1/assignmentsapi:assignment:read
Create an assignmentPOST /api/v1/assignmentsapi:assignment:write
Get an assignmentGET /api/v1/assignments/{assignmentId}api:assignment:read
Update an assignmentPATCH /api/v1/assignments/{assignmentId}api:assignment:write
Delete an assignmentDELETE /api/v1/assignments/{assignmentId}api:assignment:write
List a quiz's assignmentsGET /api/v1/quizzes/{quizId}/assignmentsapi:assignment:read

To list every assignment under one quiz, you can either filter GET /api/v1/assignments?quizId=… or use the nested route GET /api/v1/quizzes/{quizId}/assignments.

List assignments

GET /api/v1/assignments?page=1&limit=20&status=&quizId=
QueryDefaultNotes
page11–1000.
limit201–100.
statusFilter by status.
quizIdFilter by quiz.

Create an assignment

POST /api/v1/assignments

Promotional (shareable public link):

FieldTypeRequiredNotes
type"promotional"YesSelects the promotional shape.
quiz_idUUIDYesQuiz to share.
max_usesnumber | nullNoCap on uses.
exam_type"classic" | "guided" | "interactive"NoExam mode.
is_indexablebooleanNoWhether it appears in the public directory.

Individual (assign to specific students):

FieldTypeRequiredNotes
quiz_idUUIDYesQuiz to assign.
student_idsUUID[]Yes1–500 students.
json
{ "data": { "id": "…" } }   // promotional, 201
{ "data": [ { "…": "…" } ] } // individual, 201

Reaching a quota returns 403 with a code and limit.

Update / delete

GET    /api/v1/assignments/{assignmentId}  →  { "data": { …assignment } }  (404 if not found)
PATCH  /api/v1/assignments/{assignmentId}  →  body { exam_type?, is_indexable? }
DELETE /api/v1/assignments/{assignmentId}  →  delete the assignment

TechTrans Lab