Skip to Content

Assignments

Assignment authoring, tasks, submissions and grading — fully drivable headlessly with an API token. Learner-side "/me" and submission endpoints remain session-only.

Create assignment

POST/api/v1/assignments/
API tokenassignments:createor user session

Create a new assignment attached to an activity. The authenticated user must have permission to edit the parent course.

Request bodyapplication/jsonrequired

titlestringrequired
descriptionstringrequired
due_datestring | null
publishedboolean | null
grading_typeGradingTypeEnumrequired
ALPHABETNUMERICPERCENTAGEPASS_FAILGPA_SCALE
auto_gradingboolean | null
anti_copy_pasteboolean | null
show_correct_answersboolean | null
allow_retriesboolean | null
max_retriesinteger | null
pass_threshold_percentagenumber | null
ungradedboolean | null
solutionstring | null
solution_filestring | null
solution_revealenum | null

When the assignment's model answer (the "corrigé") becomes readable by the learner. NEVER - never sent to a student (the default: existing assignments never start handing out a solution on their own). ON_SUBMISSION - unlocked the moment the learner turns their work in. This is the formative-assessment mode: hand in the document, immediately get the worked solution to self-assess against. AFTER_GRADING - unlocked only once the submission is GRADED, i.e. the teacher (or the auto-grader) has finished with it.

NEVERON_SUBMISSIONAFTER_GRADING
deliveryenum | null

How an assignment's tasks reach the candidate. OPEN - every task at once. What an assignment has always been, and what every existing row stays as. SEQUENTIAL - one task at a time, in order, with no way back. This is what a computer-based exam does, and it is enforced server-side: the task read returns only the current one.

OPENSEQUENTIAL
time_limit_minutesinteger | null
shuffle_tasksboolean | null
shuffle_optionsboolean | null
ai_plannedboolean | null
org_idintegerrequired
course_idintegerrequired
chapter_idintegerrequired
activity_idintegerrequired

Returns

AssignmentRead — Assignment created and returned.

titlestringrequired
descriptionstringrequired
due_datestring | null
publishedboolean | null
grading_typeGradingTypeEnumrequired
ALPHABETNUMERICPERCENTAGEPASS_FAILGPA_SCALE
auto_gradingboolean | null
anti_copy_pasteboolean | null
show_correct_answersboolean | null
allow_retriesboolean | null
max_retriesinteger | null
pass_threshold_percentagenumber | null
ungradedboolean | null
solutionstring | null
solution_filestring | null
solution_revealenum | null

When the assignment's model answer (the "corrigé") becomes readable by the learner. NEVER - never sent to a student (the default: existing assignments never start handing out a solution on their own). ON_SUBMISSION - unlocked the moment the learner turns their work in. This is the formative-assessment mode: hand in the document, immediately get the worked solution to self-assess against. AFTER_GRADING - unlocked only once the submission is GRADED, i.e. the teacher (or the auto-grader) has finished with it.

NEVERON_SUBMISSIONAFTER_GRADING
deliveryenum | null

How an assignment's tasks reach the candidate. OPEN - every task at once. What an assignment has always been, and what every existing row stays as. SEQUENTIAL - one task at a time, in order, with no way back. This is what a computer-based exam does, and it is enforced server-side: the task read returns only the current one.

OPENSEQUENTIAL
time_limit_minutesinteger | null
shuffle_tasksboolean | null
shuffle_optionsboolean | null
ai_plannedboolean | null
org_idintegerrequired
course_idintegerrequired
chapter_idintegerrequired
activity_idintegerrequired
idintegerrequired
assignment_uuidstringrequired
creation_datestring | null
update_datestring | null
course_uuidstring | null
activity_uuidstring | null
course_target_languagestring | null
course_target_levelstring | null
has_solutionboolean | null
solution_unlockedboolean | null
Error responses
  • 401 Authentication required
  • 403 User lacks permission to create assignments in this course
  • 404 Parent activity or course not found
  • 422 Validation Error — HTTPValidationError
Request
Response
{
  "title": "Example title",
  "description": "An example description",
  "due_date": "string",
  "published": false,
  "grading_type": "ALPHABET",
  "auto_grading": false,
  "anti_copy_paste": false,
  "show_correct_answers": false,
  "allow_retries": false,
  "max_retries": 0,
  "pass_threshold_percentage": 0,
  "ungraded": false,
  "solution": "string",
  "solution_file": "string",
  "solution_reveal": "NEVER",
  "delivery": "OPEN",
  "time_limit_minutes": 10,
  "shuffle_tasks": false,
  "shuffle_options": false,
  "ai_planned": false,
  "org_id": 1,
  "course_id": 1,
  "chapter_id": 1,
  "activity_id": 1,
  "id": 1,
  "assignment_uuid": "string",
  "creation_date": "string",
  "update_date": "string",
  "course_uuid": "string",
  "activity_uuid": "string",
  "course_target_language": "string",
  "course_target_level": "string",
  "has_solution": false,
  "solution_unlocked": false
}

Get assignment

GET/api/v1/assignments/{assignment_uuid}
API tokenassignments:reador user session

Read an assignment by its UUID.

Path parameters

assignment_uuidstringrequired

Returns

AssignmentRead — Assignment returned.

titlestringrequired
descriptionstringrequired
due_datestring | null
publishedboolean | null
grading_typeGradingTypeEnumrequired
ALPHABETNUMERICPERCENTAGEPASS_FAILGPA_SCALE
auto_gradingboolean | null
anti_copy_pasteboolean | null
show_correct_answersboolean | null
allow_retriesboolean | null
max_retriesinteger | null
pass_threshold_percentagenumber | null
ungradedboolean | null
solutionstring | null
solution_filestring | null
solution_revealenum | null

When the assignment's model answer (the "corrigé") becomes readable by the learner. NEVER - never sent to a student (the default: existing assignments never start handing out a solution on their own). ON_SUBMISSION - unlocked the moment the learner turns their work in. This is the formative-assessment mode: hand in the document, immediately get the worked solution to self-assess against. AFTER_GRADING - unlocked only once the submission is GRADED, i.e. the teacher (or the auto-grader) has finished with it.

NEVERON_SUBMISSIONAFTER_GRADING
deliveryenum | null

How an assignment's tasks reach the candidate. OPEN - every task at once. What an assignment has always been, and what every existing row stays as. SEQUENTIAL - one task at a time, in order, with no way back. This is what a computer-based exam does, and it is enforced server-side: the task read returns only the current one.

OPENSEQUENTIAL
time_limit_minutesinteger | null
shuffle_tasksboolean | null
shuffle_optionsboolean | null
ai_plannedboolean | null
org_idintegerrequired
course_idintegerrequired
chapter_idintegerrequired
activity_idintegerrequired
idintegerrequired
assignment_uuidstringrequired
creation_datestring | null
update_datestring | null
course_uuidstring | null
activity_uuidstring | null
course_target_languagestring | null
course_target_levelstring | null
has_solutionboolean | null
solution_unlockedboolean | null
Error responses
  • 401 Authentication required
  • 403 User lacks permission to view this assignment
  • 404 Assignment not found
  • 422 Validation Error — HTTPValidationError
Request
Response
{
  "title": "Example title",
  "description": "An example description",
  "due_date": "string",
  "published": false,
  "grading_type": "ALPHABET",
  "auto_grading": false,
  "anti_copy_paste": false,
  "show_correct_answers": false,
  "allow_retries": false,
  "max_retries": 0,
  "pass_threshold_percentage": 0,
  "ungraded": false,
  "solution": "string",
  "solution_file": "string",
  "solution_reveal": "NEVER",
  "delivery": "OPEN",
  "time_limit_minutes": 10,
  "shuffle_tasks": false,
  "shuffle_options": false,
  "ai_planned": false,
  "org_id": 1,
  "course_id": 1,
  "chapter_id": 1,
  "activity_id": 1,
  "id": 1,
  "assignment_uuid": "string",
  "creation_date": "string",
  "update_date": "string",
  "course_uuid": "string",
  "activity_uuid": "string",
  "course_target_language": "string",
  "course_target_level": "string",
  "has_solution": false,
  "solution_unlocked": false
}

Update assignment

PUT/api/v1/assignments/{assignment_uuid}
API tokenassignments:updateor user session

Update an assignment by its UUID. The authenticated user must have permission to edit the parent course.

Path parameters

assignment_uuidstringrequired

Request bodyapplication/jsonrequired

titlestring | null
descriptionstring | null
due_datestring | null
publishedboolean | null
grading_typeenum | null
ALPHABETNUMERICPERCENTAGEPASS_FAILGPA_SCALE
auto_gradingboolean | null
anti_copy_pasteboolean | null
show_correct_answersboolean | null
allow_retriesboolean | null
max_retriesinteger | null
pass_threshold_percentagenumber | null
deliveryenum | null

How an assignment's tasks reach the candidate. OPEN - every task at once. What an assignment has always been, and what every existing row stays as. SEQUENTIAL - one task at a time, in order, with no way back. This is what a computer-based exam does, and it is enforced server-side: the task read returns only the current one.

OPENSEQUENTIAL
time_limit_minutesinteger | null
shuffle_tasksboolean | null
shuffle_optionsboolean | null
ungradedboolean | null
solutionstring | null
solution_revealenum | null

When the assignment's model answer (the "corrigé") becomes readable by the learner. NEVER - never sent to a student (the default: existing assignments never start handing out a solution on their own). ON_SUBMISSION - unlocked the moment the learner turns their work in. This is the formative-assessment mode: hand in the document, immediately get the worked solution to self-assess against. AFTER_GRADING - unlocked only once the submission is GRADED, i.e. the teacher (or the auto-grader) has finished with it.

NEVERON_SUBMISSIONAFTER_GRADING
update_datestring | null

Returns

AssignmentRead — Assignment updated and returned.

titlestringrequired
descriptionstringrequired
due_datestring | null
publishedboolean | null
grading_typeGradingTypeEnumrequired
ALPHABETNUMERICPERCENTAGEPASS_FAILGPA_SCALE
auto_gradingboolean | null
anti_copy_pasteboolean | null
show_correct_answersboolean | null
allow_retriesboolean | null
max_retriesinteger | null
pass_threshold_percentagenumber | null
ungradedboolean | null
solutionstring | null
solution_filestring | null
solution_revealenum | null

When the assignment's model answer (the "corrigé") becomes readable by the learner. NEVER - never sent to a student (the default: existing assignments never start handing out a solution on their own). ON_SUBMISSION - unlocked the moment the learner turns their work in. This is the formative-assessment mode: hand in the document, immediately get the worked solution to self-assess against. AFTER_GRADING - unlocked only once the submission is GRADED, i.e. the teacher (or the auto-grader) has finished with it.

NEVERON_SUBMISSIONAFTER_GRADING
deliveryenum | null

How an assignment's tasks reach the candidate. OPEN - every task at once. What an assignment has always been, and what every existing row stays as. SEQUENTIAL - one task at a time, in order, with no way back. This is what a computer-based exam does, and it is enforced server-side: the task read returns only the current one.

OPENSEQUENTIAL
time_limit_minutesinteger | null
shuffle_tasksboolean | null
shuffle_optionsboolean | null
ai_plannedboolean | null
org_idintegerrequired
course_idintegerrequired
chapter_idintegerrequired
activity_idintegerrequired
idintegerrequired
assignment_uuidstringrequired
creation_datestring | null
update_datestring | null
course_uuidstring | null
activity_uuidstring | null
course_target_languagestring | null
course_target_levelstring | null
has_solutionboolean | null
solution_unlockedboolean | null
Error responses
  • 401 Authentication required
  • 403 User lacks permission to update this assignment
  • 404 Assignment not found
  • 422 Validation Error — HTTPValidationError
Request
Response
{
  "title": "Example title",
  "description": "An example description",
  "due_date": "string",
  "published": false,
  "grading_type": "ALPHABET",
  "auto_grading": false,
  "anti_copy_paste": false,
  "show_correct_answers": false,
  "allow_retries": false,
  "max_retries": 0,
  "pass_threshold_percentage": 0,
  "ungraded": false,
  "solution": "string",
  "solution_file": "string",
  "solution_reveal": "NEVER",
  "delivery": "OPEN",
  "time_limit_minutes": 10,
  "shuffle_tasks": false,
  "shuffle_options": false,
  "ai_planned": false,
  "org_id": 1,
  "course_id": 1,
  "chapter_id": 1,
  "activity_id": 1,
  "id": 1,
  "assignment_uuid": "string",
  "creation_date": "string",
  "update_date": "string",
  "course_uuid": "string",
  "activity_uuid": "string",
  "course_target_language": "string",
  "course_target_level": "string",
  "has_solution": false,
  "solution_unlocked": false
}

Delete assignment

DELETE/api/v1/assignments/{assignment_uuid}
API tokenassignments:deleteor user session

Delete an assignment by its UUID. The authenticated user must have permission to edit the parent course.

Path parameters

assignment_uuidstringrequired
Error responses
  • 401 Authentication required
  • 403 User lacks permission to delete this assignment
  • 404 Assignment not found
  • 422 Validation Error — HTTPValidationError
Request
Response
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}

Get assignment by activity

GET/api/v1/assignments/activity/{activity_uuid}
API tokenassignments:reador user session

Read the assignment attached to a given activity UUID.

Path parameters

activity_uuidstringrequired

Returns

AssignmentRead — Assignment returned.

titlestringrequired
descriptionstringrequired
due_datestring | null
publishedboolean | null
grading_typeGradingTypeEnumrequired
ALPHABETNUMERICPERCENTAGEPASS_FAILGPA_SCALE
auto_gradingboolean | null
anti_copy_pasteboolean | null
show_correct_answersboolean | null
allow_retriesboolean | null
max_retriesinteger | null
pass_threshold_percentagenumber | null
ungradedboolean | null
solutionstring | null
solution_filestring | null
solution_revealenum | null

When the assignment's model answer (the "corrigé") becomes readable by the learner. NEVER - never sent to a student (the default: existing assignments never start handing out a solution on their own). ON_SUBMISSION - unlocked the moment the learner turns their work in. This is the formative-assessment mode: hand in the document, immediately get the worked solution to self-assess against. AFTER_GRADING - unlocked only once the submission is GRADED, i.e. the teacher (or the auto-grader) has finished with it.

NEVERON_SUBMISSIONAFTER_GRADING
deliveryenum | null

How an assignment's tasks reach the candidate. OPEN - every task at once. What an assignment has always been, and what every existing row stays as. SEQUENTIAL - one task at a time, in order, with no way back. This is what a computer-based exam does, and it is enforced server-side: the task read returns only the current one.

OPENSEQUENTIAL
time_limit_minutesinteger | null
shuffle_tasksboolean | null
shuffle_optionsboolean | null
ai_plannedboolean | null
org_idintegerrequired
course_idintegerrequired
chapter_idintegerrequired
activity_idintegerrequired
idintegerrequired
assignment_uuidstringrequired
creation_datestring | null
update_datestring | null
course_uuidstring | null
activity_uuidstring | null
course_target_languagestring | null
course_target_levelstring | null
has_solutionboolean | null
solution_unlockedboolean | null
Error responses
  • 401 Authentication required
  • 403 User lacks permission to view this assignment
  • 404 Activity or assignment not found
  • 422 Validation Error — HTTPValidationError
Request
Response
{
  "title": "Example title",
  "description": "An example description",
  "due_date": "string",
  "published": false,
  "grading_type": "ALPHABET",
  "auto_grading": false,
  "anti_copy_paste": false,
  "show_correct_answers": false,
  "allow_retries": false,
  "max_retries": 0,
  "pass_threshold_percentage": 0,
  "ungraded": false,
  "solution": "string",
  "solution_file": "string",
  "solution_reveal": "NEVER",
  "delivery": "OPEN",
  "time_limit_minutes": 10,
  "shuffle_tasks": false,
  "shuffle_options": false,
  "ai_planned": false,
  "org_id": 1,
  "course_id": 1,
  "chapter_id": 1,
  "activity_id": 1,
  "id": 1,
  "assignment_uuid": "string",
  "creation_date": "string",
  "update_date": "string",
  "course_uuid": "string",
  "activity_uuid": "string",
  "course_target_language": "string",
  "course_target_level": "string",
  "has_solution": false,
  "solution_unlocked": false
}

Delete assignment by activity

DELETE/api/v1/assignments/activity/{activity_uuid}
API tokenassignments:deleteor user session

Delete the assignment attached to the given activity UUID.

Path parameters

activity_uuidstringrequired
Error responses
  • 401 Authentication required
  • 403 User lacks permission to delete this assignment
  • 404 Activity or assignment not found
  • 422 Validation Error — HTTPValidationError
Request
Response
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}

Upload the assignment model answer document

POST/api/v1/assignments/{assignment_uuid}/solution_file
API tokenassignments:createor user session

Upload or replace the model answer document for an assignment. Instructor only. The document is withheld from learners until the assignment's solution_reveal rule unlocks it.

Path parameters

assignment_uuidstringrequired

Request bodymultipart/form-data

solution_filefile | null

Returns

AssignmentRead — Solution file stored.

titlestringrequired
descriptionstringrequired
due_datestring | null
publishedboolean | null
grading_typeGradingTypeEnumrequired
ALPHABETNUMERICPERCENTAGEPASS_FAILGPA_SCALE
auto_gradingboolean | null
anti_copy_pasteboolean | null
show_correct_answersboolean | null
allow_retriesboolean | null
max_retriesinteger | null
pass_threshold_percentagenumber | null
ungradedboolean | null
solutionstring | null
solution_filestring | null
solution_revealenum | null

When the assignment's model answer (the "corrigé") becomes readable by the learner. NEVER - never sent to a student (the default: existing assignments never start handing out a solution on their own). ON_SUBMISSION - unlocked the moment the learner turns their work in. This is the formative-assessment mode: hand in the document, immediately get the worked solution to self-assess against. AFTER_GRADING - unlocked only once the submission is GRADED, i.e. the teacher (or the auto-grader) has finished with it.

NEVERON_SUBMISSIONAFTER_GRADING
deliveryenum | null

How an assignment's tasks reach the candidate. OPEN - every task at once. What an assignment has always been, and what every existing row stays as. SEQUENTIAL - one task at a time, in order, with no way back. This is what a computer-based exam does, and it is enforced server-side: the task read returns only the current one.

OPENSEQUENTIAL
time_limit_minutesinteger | null
shuffle_tasksboolean | null
shuffle_optionsboolean | null
ai_plannedboolean | null
org_idintegerrequired
course_idintegerrequired
chapter_idintegerrequired
activity_idintegerrequired
idintegerrequired
assignment_uuidstringrequired
creation_datestring | null
update_datestring | null
course_uuidstring | null
activity_uuidstring | null
course_target_languagestring | null
course_target_levelstring | null
has_solutionboolean | null
solution_unlockedboolean | null
Error responses
  • 400 No solution file provided
  • 401 Authentication required
  • 403 User lacks permission to edit this assignment
  • 404 Assignment not found
  • 422 Validation Error — HTTPValidationError
Request
Response
{
  "title": "Example title",
  "description": "An example description",
  "due_date": "string",
  "published": false,
  "grading_type": "ALPHABET",
  "auto_grading": false,
  "anti_copy_paste": false,
  "show_correct_answers": false,
  "allow_retries": false,
  "max_retries": 0,
  "pass_threshold_percentage": 0,
  "ungraded": false,
  "solution": "string",
  "solution_file": "string",
  "solution_reveal": "NEVER",
  "delivery": "OPEN",
  "time_limit_minutes": 10,
  "shuffle_tasks": false,
  "shuffle_options": false,
  "ai_planned": false,
  "org_id": 1,
  "course_id": 1,
  "chapter_id": 1,
  "activity_id": 1,
  "id": 1,
  "assignment_uuid": "string",
  "creation_date": "string",
  "update_date": "string",
  "course_uuid": "string",
  "activity_uuid": "string",
  "course_target_language": "string",
  "course_target_level": "string",
  "has_solution": false,
  "solution_unlocked": false
}

Remove the assignment model answer document

DELETE/api/v1/assignments/{assignment_uuid}/solution_file
API tokenassignments:deleteor user session

Detach the model answer document from an assignment. Instructor only.

Path parameters

assignment_uuidstringrequired

Returns

AssignmentRead — Solution file detached.

titlestringrequired
descriptionstringrequired
due_datestring | null
publishedboolean | null
grading_typeGradingTypeEnumrequired
ALPHABETNUMERICPERCENTAGEPASS_FAILGPA_SCALE
auto_gradingboolean | null
anti_copy_pasteboolean | null
show_correct_answersboolean | null
allow_retriesboolean | null
max_retriesinteger | null
pass_threshold_percentagenumber | null
ungradedboolean | null
solutionstring | null
solution_filestring | null
solution_revealenum | null

When the assignment's model answer (the "corrigé") becomes readable by the learner. NEVER - never sent to a student (the default: existing assignments never start handing out a solution on their own). ON_SUBMISSION - unlocked the moment the learner turns their work in. This is the formative-assessment mode: hand in the document, immediately get the worked solution to self-assess against. AFTER_GRADING - unlocked only once the submission is GRADED, i.e. the teacher (or the auto-grader) has finished with it.

NEVERON_SUBMISSIONAFTER_GRADING
deliveryenum | null

How an assignment's tasks reach the candidate. OPEN - every task at once. What an assignment has always been, and what every existing row stays as. SEQUENTIAL - one task at a time, in order, with no way back. This is what a computer-based exam does, and it is enforced server-side: the task read returns only the current one.

OPENSEQUENTIAL
time_limit_minutesinteger | null
shuffle_tasksboolean | null
shuffle_optionsboolean | null
ai_plannedboolean | null
org_idintegerrequired
course_idintegerrequired
chapter_idintegerrequired
activity_idintegerrequired
idintegerrequired
assignment_uuidstringrequired
creation_datestring | null
update_datestring | null
course_uuidstring | null
activity_uuidstring | null
course_target_languagestring | null
course_target_levelstring | null
has_solutionboolean | null
solution_unlockedboolean | null
Error responses
  • 401 Authentication required
  • 403 User lacks permission to edit this assignment
  • 404 Assignment not found
  • 422 Validation Error — HTTPValidationError
Request
Response
{
  "title": "Example title",
  "description": "An example description",
  "due_date": "string",
  "published": false,
  "grading_type": "ALPHABET",
  "auto_grading": false,
  "anti_copy_paste": false,
  "show_correct_answers": false,
  "allow_retries": false,
  "max_retries": 0,
  "pass_threshold_percentage": 0,
  "ungraded": false,
  "solution": "string",
  "solution_file": "string",
  "solution_reveal": "NEVER",
  "delivery": "OPEN",
  "time_limit_minutes": 10,
  "shuffle_tasks": false,
  "shuffle_options": false,
  "ai_planned": false,
  "org_id": 1,
  "course_id": 1,
  "chapter_id": 1,
  "activity_id": 1,
  "id": 1,
  "assignment_uuid": "string",
  "creation_date": "string",
  "update_date": "string",
  "course_uuid": "string",
  "activity_uuid": "string",
  "course_target_language": "string",
  "course_target_level": "string",
  "has_solution": false,
  "solution_unlocked": false
}

List assignment tasks

GET/api/v1/assignments/{assignment_uuid}/tasks
API tokenassignments:reador user session

Read all tasks for the given assignment.

Path parameters

assignment_uuidstringrequired
Error responses
  • 401 Authentication required
  • 403 User lacks permission to view this assignment
  • 404 Assignment not found
  • 422 Validation Error — HTTPValidationError
Request
Response
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}

Create assignment task

POST/api/v1/assignments/{assignment_uuid}/tasks
API tokenassignments:createor user session

Create a new task under an assignment. The authenticated user must have permission to edit the parent course.

Path parameters

assignment_uuidstringrequired

Request bodyapplication/jsonrequired

titlestringrequired
descriptionstringrequired
hintstringrequired
reference_filestring | null
assignment_typeAssignmentTaskTypeEnumrequired
FILE_SUBMISSIONQUIZFORMCODESHORT_ANSWERNUMBER_ANSWERCUSTOMOTHERSPEAKINGSIMULATION
contentsContents
max_grade_valueinteger
difficulty_scalestring | null
difficulty_bandstring | null
Error responses
  • 401 Authentication required
  • 403 User lacks permission to edit this assignment
  • 404 Assignment not found
  • 422 Validation Error — HTTPValidationError
Request
Response
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}

Replace assignment tasks

PUT/api/v1/assignments/{assignment_uuid}/tasks
API tokenassignments:updateor user session

Replace an assignment's entire task set in one atomic operation. Used to rebuild the tasks the course planner drafted once the course has content to ground them on. Refused when the assignment already has learner submissions.

Path parameters

assignment_uuidstringrequired

Request bodyapplication/jsonrequired

titlestringrequired
descriptionstringrequired
hintstringrequired
reference_filestring | null
assignment_typeAssignmentTaskTypeEnumrequired
FILE_SUBMISSIONQUIZFORMCODESHORT_ANSWERNUMBER_ANSWERCUSTOMOTHERSPEAKINGSIMULATION
contentsContents
max_grade_valueinteger
difficulty_scalestring | null
difficulty_bandstring | null
Error responses
  • 401 Authentication required
  • 403 User lacks permission to edit this assignment
  • 404 Assignment not found
  • 409 Assignment has learner submissions; tasks cannot be replaced
  • 422 Validation Error — HTTPValidationError
Request
Response
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}

Read the current exam sitting

GET/api/v1/assignments/{assignment_uuid}/exam-session
API tokenassignments:reador user session

The candidate's run in progress: which question they are on, and how many seconds remain. The remaining time is computed server-side — the client renders that countdown, it does not decide it.

Path parameters

assignment_uuidstringrequired
Error responses
  • 401 Authentication required
  • 404 Assignment not found
  • 422 Validation Error — HTTPValidationError
Request
Response
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}

Start or resume a timed exam sitting

POST/api/v1/assignments/{assignment_uuid}/exam-session
API tokenassignments:createor user session

Begins the candidate's run of a sequential assignment, or returns the run already in progress. Resuming does not restart the clock: a candidate who lost their browser re-enters at the same question with the same deadline.

Path parameters

assignment_uuidstringrequired
Error responses
  • 400 This assignment is not delivered sequentially
  • 401 Authentication required
  • 404 Assignment not found
  • 409 This exam has already been taken
  • 422 Validation Error — HTTPValidationError
Request
Response
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}

Move to the next question

POST/api/v1/assignments/{assignment_uuid}/exam-session/advance
API tokenassignments:createor user session

Advances the sitting by one. Forward only: a task that has been left is locked, which is what makes a per-task recording window meaningful. Advancing past the last question completes the sitting.

Path parameters

assignment_uuidstringrequired
Error responses
  • 401 Authentication required
  • 404 Assignment not found
  • 409 This exam is no longer in progress
  • 422 Validation Error — HTTPValidationError
Request
Response
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}

Get assignment task

GET/api/v1/assignments/task/{assignment_task_uuid}
API tokenassignments:reador user session

Read a single assignment task by its UUID.

Path parameters

assignment_task_uuidstringrequired
Error responses
  • 401 Authentication required
  • 403 User lacks permission to view this task
  • 404 Assignment task not found
  • 422 Validation Error — HTTPValidationError
Request
Response
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}

Update assignment task

PUT/api/v1/assignments/{assignment_uuid}/tasks/{assignment_task_uuid}
API tokenassignments:updateor user session

Update an assignment task by its UUID. The authenticated user must have permission to edit the parent course.

Path parameters

assignment_task_uuidstringrequired

Request bodyapplication/jsonrequired

titlestring | null
descriptionstring | null
hintstring | null
assignment_typeenum | null
FILE_SUBMISSIONQUIZFORMCODESHORT_ANSWERNUMBER_ANSWERCUSTOMOTHERSPEAKINGSIMULATION
contentsContents | null
max_grade_valueinteger | null
difficulty_scalestring | null
difficulty_bandstring | null
Error responses
  • 401 Authentication required
  • 403 User lacks permission to edit this task
  • 404 Assignment task not found
  • 422 Validation Error — HTTPValidationError
Request
Response
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}

Delete assignment task

DELETE/api/v1/assignments/{assignment_uuid}/tasks/{assignment_task_uuid}
API tokenassignments:deleteor user session

Delete an assignment task by its UUID. The authenticated user must have permission to edit the parent course.

Path parameters

assignment_task_uuidstringrequired
Error responses
  • 401 Authentication required
  • 403 User lacks permission to delete this task
  • 404 Assignment task not found
  • 422 Validation Error — HTTPValidationError
Request
Response
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}

Upload task reference file

POST/api/v1/assignments/{assignment_uuid}/tasks/{assignment_task_uuid}/ref_file
API tokenassignments:createor user session

Upload or replace the reference file for an assignment task. Instructors use this to attach a canonical solution or prompt attachment.

Path parameters

assignment_task_uuidstringrequired

Request bodymultipart/form-data

reference_filefile | null
Error responses
  • 401 Authentication required
  • 403 User lacks permission to edit this task
  • 404 Assignment task not found
  • 422 Validation Error — HTTPValidationError
Request
Response
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}

Upload task submission file

POST/api/v1/assignments/{assignment_uuid}/tasks/{assignment_task_uuid}/sub_file
API tokenassignments:createor user session

Upload or replace the submission file for an assignment task on behalf of the current user.

Path parameters

assignment_task_uuidstringrequired

Request bodymultipart/form-data

sub_filefile | null
Error responses
  • 401 Authentication required
  • 403 User lacks permission to submit to this task
  • 404 Assignment task not found
  • 422 Validation Error — HTTPValidationError
Request
Response
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}

List task submissions

GET/api/v1/assignments/{assignment_uuid}/tasks/{assignment_task_uuid}/submissions
API tokenassignments:reador user session

Read all submissions for a given assignment task (instructor view).

Path parameters

assignment_task_uuidstringrequired

Query parameters

limitinteger
offsetinteger
Error responses
  • 401 Authentication required
  • 403 User lacks permission to view these submissions
  • 404 Assignment task not found
  • 422 Validation Error — HTTPValidationError
Request
Response
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}

Upsert assignment task submission

PUT/api/v1/assignments/{assignment_uuid}/tasks/{assignment_task_uuid}/submissions
API tokenassignments:updateor user session

Create or update the current user's submission for an assignment task.

Path parameters

assignment_task_uuidstringrequired

Query parameters

on_behalf_of_user_idinteger | null

Request bodyapplication/jsonrequired

assignment_task_idinteger | null
assignment_task_submission_uuidstring | null
task_submissionTask Submission | null
gradeinteger | null
task_submission_grade_feedbackstring | null
manually_gradedboolean | null
assignment_typeenum | null
FILE_SUBMISSIONQUIZFORMCODESHORT_ANSWERNUMBER_ANSWERCUSTOMOTHERSPEAKINGSIMULATION
Error responses
  • 401 Authentication required
  • 403 User lacks permission to submit to this task
  • 404 Assignment task not found
  • 422 Validation Error — HTTPValidationError
Request
Response
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}

List task submissions for user

GET/api/v1/assignments/{assignment_uuid}/tasks/{assignment_task_uuid}/submissions/user/{user_id}
API tokenassignments:reador user session

Read the task submissions made by a specific user for the given assignment task.

Path parameters

assignment_task_uuidstringrequired
user_idintegerrequired
Error responses
  • 401 Authentication required
  • 403 User lacks permission to view these submissions
  • 404 Assignment task or user not found
  • 422 Validation Error — HTTPValidationError
Request
Response
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}

Batch read current user's task submissions

GET/api/v1/assignments/{assignment_uuid}/tasks/submissions/me
API tokenassignments:reador user session

Read all current-user task submissions for an assignment in one round trip. Returns a map keyed by assignment_task_uuid (value is null if no submission). Registered before the per-task variant so the literal submissions path segment isn't shadowed.

Path parameters

assignment_uuidstringrequired
Error responses
  • 401 Authentication required
  • 403 User lacks permission to view this assignment
  • 404 Assignment not found
  • 422 Validation Error — HTTPValidationError
Request
Response
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}

Get current user's task submission

GET/api/v1/assignments/{assignment_uuid}/tasks/{assignment_task_uuid}/submissions/me
API tokenassignments:reador user session

Read the current user's submission for a specific assignment task. Returns 404 if the user has no submission yet.

Path parameters

assignment_task_uuidstringrequired
Error responses
  • 401 Authentication required
  • 404 Assignment Task Submission not found
  • 422 Validation Error — HTTPValidationError
Request
Response
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}

Delete task submission

DELETE/api/v1/assignments/{assignment_uuid}/tasks/{assignment_task_uuid}/submissions/{assignment_task_submission_uuid}
API tokenassignments:deleteor user session

Delete a specific task submission by its UUID.

Path parameters

assignment_task_submission_uuidstringrequired
Error responses
  • 401 Authentication required
  • 403 User lacks permission to delete this submission
  • 404 Task submission not found
  • 422 Validation Error — HTTPValidationError
Request
Response
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}

List assignment submissions

GET/api/v1/assignments/{assignment_uuid}/submissions
API tokenassignments:reador user session

Read all assignment-level submissions for the given assignment (instructor view).

Path parameters

assignment_uuidstringrequired

Query parameters

limitinteger
offsetinteger
Error responses
  • 401 Authentication required
  • 403 User lacks permission to view these submissions
  • 404 Assignment not found
  • 422 Validation Error — HTTPValidationError
Request
Response
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}

Create assignment submission

POST/api/v1/assignments/{assignment_uuid}/submissions
API tokenassignments:createor user session

Create a new assignment-level submission for the current user on the given assignment.

Path parameters

assignment_uuidstringrequired

Query parameters

on_behalf_of_user_idinteger | null
Error responses
  • 401 Authentication required
  • 403 User lacks permission to submit to this assignment
  • 404 Assignment not found
  • 422 Validation Error — HTTPValidationError
Request
Response
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}

Get current user's assignment submission

GET/api/v1/assignments/{assignment_uuid}/submissions/me
API tokenassignments:reador user session

Read the current user's assignment-level submission for the given assignment.

Path parameters

assignment_uuidstringrequired
Error responses
  • 401 Authentication required
  • 403 User lacks permission to view this assignment
  • 404 Assignment or submission not found
  • 422 Validation Error — HTTPValidationError
Request
Response
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}

Get assignment submission for user

GET/api/v1/assignments/{assignment_uuid}/submissions/{user_id}
API tokenassignments:reador user session

Read the assignment-level submission for a specific user on the given assignment (instructor view).

Path parameters

assignment_uuidstringrequired
user_idintegerrequired
Error responses
  • 401 Authentication required
  • 403 User lacks permission to view this submission
  • 404 Assignment, user, or submission not found
  • 422 Validation Error — HTTPValidationError
Request
Response
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}

Update assignment submission for user

PUT/api/v1/assignments/{assignment_uuid}/submissions/{user_id}
API tokenassignments:updateor user session

Update a user's assignment-level submission on the given assignment.

Path parameters

assignment_uuidstringrequired
user_idintegerrequired

Request bodyapplication/jsonrequired

assignment_idintegerrequired
submission_statusenum | null
PENDINGSUBMITTEDGRADEDLATENOT_SUBMITTED
gradeinteger | null
user_idinteger | null
Error responses
  • 401 Authentication required
  • 403 User lacks permission to update this submission
  • 404 Assignment, user, or submission not found
  • 422 Validation Error — HTTPValidationError
Request
Response
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}

Delete assignment submission for user

DELETE/api/v1/assignments/{assignment_uuid}/submissions/{user_id}
API tokenassignments:deleteor user session

Delete a user's assignment-level submission on the given assignment.

Path parameters

assignment_uuidstringrequired
user_idintegerrequired
Error responses
  • 401 Authentication required
  • 403 User lacks permission to delete this submission
  • 404 Assignment, user, or submission not found
  • 422 Validation Error — HTTPValidationError
Request
Response
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}

Get assignment submission grade

GET/api/v1/assignments/{assignment_uuid}/submissions/{user_id}/grade
API tokenassignments:reador user session

Read the computed grade for a user's assignment submission.

Path parameters

assignment_uuidstringrequired
user_idintegerrequired
Error responses
  • 401 Authentication required
  • 403 User lacks permission to view this grade
  • 404 Assignment, user, or submission not found
  • 422 Validation Error — HTTPValidationError
Request
Response
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}

Finalize assignment submission grade

POST/api/v1/assignments/{assignment_uuid}/submissions/{user_id}/grade
API tokenassignments:createor user session

Compute and store the final grade for an assignment submission. Accepts an optional overall_feedback note that will be stored alongside the grade.

Path parameters

assignment_uuidstringrequired
user_idintegerrequired

Request bodyapplication/json

overall_feedbackstring | null
Error responses
  • 401 Authentication required
  • 403 User lacks permission to grade this submission
  • 404 Assignment, user, or submission not found
  • 422 Validation Error — HTTPValidationError
Request
Response
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}

Retry assignment for current user

POST/api/v1/assignments/{assignment_uuid}/submissions/me/retry
API tokenassignments:createor user session

Reset the current user's submission so they can attempt the assignment again. Only allowed when the assignment has allow_retries=true, the existing submission is in GRADED state, and the attempt counter is still below max_retries (0 means unlimited). Wipes per-task submissions, resets the trail step, and revokes any course certificate.

Path parameters

assignment_uuidstringrequired
Error responses
  • 400 Submission is not in a retryable state
  • 401 Authentication required
  • 403 Retries disabled or attempt limit reached
  • 404 Assignment or submission not found
  • 422 Validation Error — HTTPValidationError
Request
Response
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}

Mark assignment as done for user

POST/api/v1/assignments/{assignment_uuid}/submissions/{user_id}/done
API tokenassignments:createor user session

Mark the underlying activity as completed for a user once their assignment submission is accepted.

Path parameters

assignment_uuidstringrequired
user_idintegerrequired
Error responses
  • 401 Authentication required
  • 403 User lacks permission to mark this submission as done
  • 404 Assignment, user, or submission not found
  • 422 Validation Error — HTTPValidationError
Request
Response
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}

List course assignments

GET/api/v1/assignments/course/{course_uuid}
API tokenassignments:reador user session

Get all assignments attached to activities within the given course.

Path parameters

course_uuidstringrequired
Error responses
  • 401 Authentication required
  • 403 User lacks permission to view this course
  • 404 Course not found
  • 422 Validation Error — HTTPValidationError
Request
Response
{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string",
      "input": null,
      "ctx": {}
    }
  ]
}

List my assignments

GET/api/v1/assignments/org/{org_id}/me
API tokenassignments:reador user session

Get every assignment across all courses the current user is enrolled in, with their own submission status.

Path parameters

org_idintegerrequired

Returns

MyAssignmentRead[] — Assignments retrieved.

assignment_uuidstringrequired
titlestringrequired
due_datestring | null
grading_typeGradingTypeEnumrequired
ALPHABETNUMERICPERCENTAGEPASS_FAILGPA_SCALE
course_uuidstringrequired
course_namestringrequired
activity_uuidstringrequired
statusMyAssignmentStatusrequired

Derived (not stored) status for a single assignment in a student's cross-course "My Assignments" list. See get_my_assignments for the derivation rules.

not_startedin_progresssubmittedgradedlate
grade_percentagenumber | null
Error responses
  • 401 Authentication required
  • 422 Validation Error — HTTPValidationError
Request
Response
[
  {
    "assignment_uuid": "string",
    "title": "Example title",
    "due_date": "string",
    "grading_type": "ALPHABET",
    "course_uuid": "string",
    "course_name": "Example name",
    "activity_uuid": "string",
    "status": "not_started",
    "grade_percentage": 0
  }
]

List submissions waiting for a grade

GET/api/v1/assignments/org/{org_id}/pending-reviews
API tokenassignments:reador user session

Every assignment in the organization that still has a submitted or late submission, with the learners who are waiting.

Path parameters

org_idintegerrequired

Returns

PendingAssignmentReview[] — Pending reviews retrieved.

assignment_uuidstringrequired
titlestringrequired
course_uuidstringrequired
course_namestringrequired
due_datestring | null
auto_gradingboolean
pending_countintegerrequired
late_countintegerrequired
latest_submitted_atstring | null
studentsPendingReviewStudent[]
Show child attributes
user_idintegerrequired
user_uuidstringrequired
first_namestring
last_namestring
usernamestring
emailstring
submission_statusstringrequired
submitted_atstring
Error responses
  • 401 Authentication required
  • 403 Only organization administrators and maintainers can view pending reviews
  • 422 Validation Error — HTTPValidationError
Request
Response
[
  {
    "assignment_uuid": "string",
    "title": "Example title",
    "course_uuid": "string",
    "course_name": "Example name",
    "due_date": "string",
    "auto_grading": false,
    "pending_count": 0,
    "late_count": 0,
    "latest_submitted_at": "string",
    "students": []
  }
]