Grades and GPA
Use to see what is graded or still pending in a course. To locate one assessment the user named in words ("Lab 3", "the midterm"), prefer grading.assessment.find.
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
course_id*Course IdCourse id
status?|graded, or pending (no score yet)
fields?array<>|Agent/MCP only: return just these fields of each assessment (and its id)
cursor?|next_cursor of the previous page
limit?LimitPage size
200Successful Response
application/json- response
items*array<>next_cursor*string|nullcurl -X GET 'https://example.com/courses/string/assessments'{ "items": [ { "id": "string", "course_id": "string", "category_id": "string", "title": "string", "due_at": "2019-08-24T14:15:22Z", "due_has_time": true, "due_date": "2019-08-24", "due_time": "14:15:22Z", "weight": 0, "score_percentage": 0, "points_earned": 0, "points_possible": 0, "dropped": true, "note": "string", "source_kind": "lms", "source_ref": "string", "position": 0, "status": "graded", "created_at": "2019-08-24T14:15:22Z", "updated_at": "2019-08-24T14:15:22Z" } ], "next_cursor": "string"}Use when the user adds a graded item. Give the deadline as due_date (and
due_time if known) in the Program's time zone. Do not use to record a score on an existing
assessment; use grading.assessment.update.
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
course_id*Course IdCourse id
application/json- body
title*TitleAssessment title, e.g. 'Midterm 1'
1 <= length <= 200category_id?|Category id
due_at?|Exact deadline with time zone; wins over due_date/due_time
due_date?|Deadline date in the Program's time zone
due_time?|Deadline time in the Program's time zone; without it the deadline is the end of due_date and only the date is shown
weight?WeightShare of the course grade in percent
0 <= value <= 1000score_percentage?|Score in percent; leave empty until it is graded
points_earned?|Points earned, e.g. 18 of 20; sets the percentage
points_possible?|Points possible
dropped?DroppedIgnored in every calculation (e.g. lowest quiz dropped)
falsenote?|Free-form note
source_kind?|Where an imported item came from; used to skip duplicates
source_ref?|Id of the item in its source, used with source_kind
Successful Response
application/json- response
id*Idcourse_id*Course Idcategory_id*string|nulltitle*Titledue_at*|Deadline (UTC)
due_has_time*Due Has TimeFalse when only the date is known
due_date*|Deadline date in the Program's time zone
due_time*|Deadline time in the Program's time zone
weight*Weightscore_percentage*number|nullpoints_earned*number|nullpoints_possible*number|nulldropped*Droppednote*string|nullsource_kind*|nullsource_ref*string|nullposition*Positionstatus*Status"graded""pending"created_at*Created Atdate-timeupdated_at*Updated Atdate-timecurl -X POST 'https://example.com/courses/string/assessments' \ -H 'Content-Type: application/json' \ -d '{ "title": "string"}'{ "id": "string", "course_id": "string", "category_id": "string", "title": "string", "due_at": "2019-08-24T14:15:22Z", "due_has_time": true, "due_date": "2019-08-24", "due_time": "14:15:22Z", "weight": 0, "score_percentage": 0, "points_earned": 0, "points_possible": 0, "dropped": true, "note": "string", "source_kind": "lms", "source_ref": "string", "position": 0, "status": "graded", "created_at": "2019-08-24T14:15:22Z", "updated_at": "2019-08-24T14:15:22Z"}Use when the user adds graded items in the chat, one or several. Give each
deadline as due_date (and due_time if known) in the Program's time zone. Do not use to record a
score on an existing assessment; use grading.assessment.update. A grading scheme in a file goes
through imports.session.create, and LMS assignments through lms.assignment.import.
Items that carry source_kind and source_ref are skipped when the course
already has an assessment from the same source, so repeating an import creates no duplicates.
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
course_id*Course IdCourse id
application/json- body
assessments*array<>Assessments to add
1 <= items <= 200Successful Response
application/json- response
created*array<>skipped*array<>Items left out because the course already has one from the same source
curl -X POST 'https://example.com/courses/string/assessments:batch' \ -H 'Content-Type: application/json' \ -d '{ "assessments": [ { "title": "string" } ]}'{ "created": [ { "id": "string", "course_id": "string", "category_id": "string", "title": "string", "due_at": "2019-08-24T14:15:22Z", "due_has_time": true, "due_date": "2019-08-24", "due_time": "14:15:22Z", "weight": 0, "score_percentage": 0, "points_earned": 0, "points_possible": 0, "dropped": true, "note": "string", "source_kind": "lms", "source_ref": "string", "position": 0, "status": "graded", "created_at": "2019-08-24T14:15:22Z", "updated_at": "2019-08-24T14:15:22Z" } ], "skipped": [ { "source_kind": "lms", "source_ref": "string", "assessment_id": "string" } ]}Record a score with score_percentage (82), or points_earned with
points_possible (18 of 20). Send null to clear the score again. Also changes title, category,
deadline, weight, dropped (ignore it in every calculation) and note. Only the fields that are sent
change.
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
assessment_id*Assessment IdAssessment id
application/json- body
title?|Title
category_id?|Category id, or null for none
due_at?|Exact deadline, or null to clear
due_date?|Deadline date, or null to clear
due_time?|Deadline time, or null for date only
weight?|Share of the course in percent
score_percentage?|Score in percent, or null
points_earned?|Points earned, or null
points_possible?|Points possible, or null
dropped?|Ignored in every calculation
note?|Note, or null to clear
Successful Response
application/json- response
id*Idcourse_id*Course Idcategory_id*string|nulltitle*Titledue_at*|Deadline (UTC)
due_has_time*Due Has TimeFalse when only the date is known
due_date*|Deadline date in the Program's time zone
due_time*|Deadline time in the Program's time zone
weight*Weightscore_percentage*number|nullpoints_earned*number|nullpoints_possible*number|nulldropped*Droppednote*string|nullsource_kind*|nullsource_ref*string|nullposition*Positionstatus*Status"graded""pending"created_at*Created Atdate-timeupdated_at*Updated Atdate-timecurl -X PATCH 'https://example.com/assessments/string' \ -H 'Content-Type: application/json' \ -d '{}'{ "id": "string", "course_id": "string", "category_id": "string", "title": "string", "due_at": "2019-08-24T14:15:22Z", "due_has_time": true, "due_date": "2019-08-24", "due_time": "14:15:22Z", "weight": 0, "score_percentage": 0, "points_earned": 0, "points_possible": 0, "dropped": true, "note": "string", "source_kind": "lms", "source_ref": "string", "position": 0, "status": "graded", "created_at": "2019-08-24T14:15:22Z", "updated_at": "2019-08-24T14:15:22Z"}Irreversible: the score and its place in the grade are gone. To ignore an
assessment in the grade, set dropped with grading.assessment.update instead. Find the id with
grading.assessment.find.
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
assessment_id*Assessment IdAssessment id
Successful Response
application/json- response
deleted?Deletedtruecurl -X DELETE 'https://example.com/assessments/string'{ "deleted": true}Assessments not listed keep their order after the listed ones.
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
course_id*Course IdCourse id
application/json- body
assessment_ids*array<>Assessment ids in order
items <= 500Successful Response
application/json- response
course_id*Course Idassessment_ids*array<string>curl -X PUT 'https://example.com/courses/string/assessment-order' \ -H 'Content-Type: application/json' \ -d '{ "assessment_ids": [ "string" ]}'{ "course_id": "string", "assessment_ids": [ "string" ]}Use for "what is due next". Overdue ones come first; graded and dropped ones are left out.
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
program_id*Program IdProgram id
term_id?|Only the courses of this term
course_id?|Only this course
limit?LimitMax assessments
10Successful Response
application/json- response
items*array<>Ungraded, with a deadline, soonest first
curl -X GET 'https://example.com/programs/string/upcoming-assessments'{ "items": [ { "id": "string", "course_id": "string", "category_id": "string", "title": "string", "due_at": "2019-08-24T14:15:22Z", "due_has_time": true, "due_date": "2019-08-24", "due_time": "14:15:22Z", "weight": 0, "score_percentage": 0, "points_earned": 0, "points_possible": 0, "dropped": true, "note": "string", "source_kind": "lms", "source_ref": "string", "position": 0, "status": "graded", "created_at": "2019-08-24T14:15:22Z", "updated_at": "2019-08-24T14:15:22Z" } ]}Use when the syllabus has a kind of assessment the built-in categories lack.
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
course_id*Course IdCourse id
application/json- body
name*NameCategory name, e.g. 'Midterm'
1 <= length <= 200color?ColorColor name or #rrggbb
^(blue|amber|emerald|violet|cyan|rose|slate|#[0-9a-fA-F]{6})$"slate"key?|Stable key; derived from the name when omitted
Successful Response
application/json- response
id*Idcourse_id*Course Idkey*Keyname*Namecolor*Colorposition*Positionarchived*Archivedcurl -X POST 'https://example.com/courses/string/grading-categories' \ -H 'Content-Type: application/json' \ -d '{ "name": "string"}'{ "id": "string", "course_id": "string", "key": "string", "name": "string", "color": "string", "position": 0, "archived": true}Partial update. Archived categories keep their assessments but leave the pickers.
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
category_id*Category IdCategory id
application/json- body
name?|New name
color?|New color
archived?|Archived categories are hidden from pickers
Successful Response
application/json- response
id*Idcourse_id*Course Idkey*Keyname*Namecolor*Colorposition*Positionarchived*Archivedcurl -X PATCH 'https://example.com/grading-categories/string' \ -H 'Content-Type: application/json' \ -d '{}'{ "id": "string", "course_id": "string", "key": "string", "name": "string", "color": "string", "position": 0, "archived": true}Irreversible, but no assessment is deleted. Prefer archiving.
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
category_id*Category IdCategory id
Successful Response
application/json- response
deleted?Deletedtruecurl -X DELETE 'https://example.com/grading-categories/string'{ "deleted": true}Categories not listed keep their order after the listed ones.
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
course_id*Course IdCourse id
application/json- body
category_ids*array<>Category ids in display order
items <= 50Successful Response
application/json- response
items*array<>curl -X PUT 'https://example.com/courses/string/grading-category-order' \ -H 'Content-Type: application/json' \ -d '{ "category_ids": [ "string" ]}'{ "items": [ { "id": "string", "course_id": "string", "key": "string", "name": "string", "color": "string", "position": 0, "archived": true } ]}Use to enter the official final grade (final_override_percentage, which wins
over the calculated one; null clears it), set the target in grade points, switch a course to
pass/fail, or enter a final grade for a course without a gradebook (manual_percentage with
gradebook_enabled: false). To record the score of one assessment use
grading.assessment.update.
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
course_id*Course IdCourse id
application/json- body
basis?|'pass_fail' courses have no GPA
manual_percentage?|Final grade of a course without a gradebook, or null
final_override_percentage?|Official final grade; wins over the calculated one. Null clears
pass_fail_result?|Result of a pass/fail course, or null while unknown
target_points?|Goal in grade points, or null for the scale's maximum
forecast_model?|Forecast model
gradebook_enabled?|False when only a final grade is entered for the course
Successful Response
application/json- response
course_id*Course Idbasis*Basis"percentage""pass_fail"manual_percentage*number|nullfinal_override_percentage*number|nullpass_fail_result*|nulltarget_points*|Chosen goal; the scale's top points if null
forecast_model*Forecast Model"auto""simple_minimum_needed"gradebook_enabled*Gradebook Enabledupdated_at*Updated Atdate-timecurl -X PATCH 'https://example.com/courses/string/grade' \ -H 'Content-Type: application/json' \ -d '{}'{ "course_id": "string", "basis": "percentage", "manual_percentage": 0, "final_override_percentage": 0, "pass_fail_result": "pass", "target_points": 0, "forecast_model": "auto", "gradebook_enabled": true, "updated_at": "2019-08-24T14:15:22Z"}Use to compare courses or list which are finished, in progress or pass/fail.
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
program_id*Program IdProgram id
include_in_progress?Include In ProgressCount the current average of unfinished courses
falseSuccessful Response
application/json- response
program_id*Program Idmax_points*Max Pointshide_gpa*Hide Gpaitems*array<>curl -X GET 'https://example.com/programs/string/course-grades'{ "program_id": "string", "max_points": 0, "hide_gpa": true, "items": [ { "course_id": "string", "code": "string", "title": "string", "alias": "string", "credits": 0, "include_in_gpa": true, "basis": "percentage", "status": "completed", "percentage": 0, "current_percentage": 0, "points": 0, "letter": "string", "counts_in_gpa": true, "year_long": true, "attributed_credits": 0 } ]}Use to answer questions about a course's grade: the current average, the final
grade, the forecast, or what the remaining assessments must average to reach a target grade
(summary.required_average). The summary figures are null while the weights do not add up to
100 (summary.weight_gap says how much is missing). Never calculate grades yourself.
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
course_id*Course IdCourse id
Successful Response
application/json- response
course_id*Course Idprogram_id*Program Idscale*result*categories*array<>assessments*array<>summary*Every figure of M03 §3 for one course; null where it cannot be calculated.
curl -X GET 'https://example.com/courses/string/gradebook'{ "course_id": "string", "program_id": "string", "scale": { "max_points": 0, "hide_gpa": true, "round_before_lookup": true }, "result": { "course_id": "string", "basis": "percentage", "manual_percentage": 0, "final_override_percentage": 0, "pass_fail_result": "pass", "target_points": 0, "forecast_model": "auto", "gradebook_enabled": true, "updated_at": "2019-08-24T14:15:22Z" }, "categories": [ { "id": "string", "course_id": "string", "key": "string", "name": "string", "color": "string", "position": 0, "archived": true } ], "assessments": [ { "id": "string", "course_id": "string", "category_id": "string", "title": "string", "due_at": "2019-08-24T14:15:22Z", "due_has_time": true, "due_date": "2019-08-24", "due_time": "14:15:22Z", "weight": 0, "score_percentage": 0, "points_earned": 0, "points_possible": 0, "dropped": true, "note": "string", "source_kind": "lms", "source_ref": "string", "position": 0, "status": "graded", "created_at": "2019-08-24T14:15:22Z", "updated_at": "2019-08-24T14:15:22Z" } ], "summary": { "status": "completed", "weight_total": 0, "weight_gap": 0, "weights_ok": true, "graded_count": 0, "remaining_count": 0, "graded_weight": 0, "remaining_weight": 0, "locked_contribution": 0, "current_percentage": 0, "current_points": 0, "current_letter": "string", "final_percentage": 0, "final_points": 0, "final_letter": "string", "final_source": "override", "overridden": true, "forecast_percentage": 0, "forecast_points": 0, "forecast_letter": "string", "predictions": { "property1": 0, "property2": 0 }, "missing_history_category_ids": [ "string" ], "target_points": 0, "target_percentage": 0, "required_average": 0, "reachable": true, "categories": [ { "category_id": "string", "weight": 0, "graded_weight": 0, "average": 0, "contribution": 0 } ] }}Use to convert a percentage to grade points or a letter, or to read the Program's grading defaults (how year-long courses count, default categories, hidden GPA).
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
program_id*Program IdProgram id
Successful Response
application/json- response
program_id*Program Idbands*array<>Highest percentage first
max_points*Max PointsPoints of a perfect grade, e.g. 4.0
year_course_attribution*Year Course AttributionWhich term a year-long course's grade counts in
"end_term""split_evenly"default_forecast_model*Default Forecast Model"auto""simple_minimum_needed"default_categories*array<>Categories every new course of the Program starts with
hide_gpa*Hide Gparound_before_lookup*Round Before LookupPercentages are rounded to whole numbers (half up) before the band lookup
updated_at*Updated Atdate-timecurl -X GET 'https://example.com/programs/string/grading-scale'{ "program_id": "string", "bands": [ { "min": 0, "max": 0, "points": 0, "letter": "string" } ], "max_points": 0, "year_course_attribution": "end_term", "default_forecast_model": "auto", "default_categories": [ { "key": "string", "name": "string", "color": "string" } ], "hide_gpa": true, "round_before_lookup": true, "updated_at": "2019-08-24T14:15:22Z"}Partial update: only the fields that are sent change. bands replaces the whole
table; the ranges must not overlap and must reach from 0 to 100, with points of at most
max_points. Every GPA of the Program is recalculated from the new scale.
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
program_id*Program IdProgram id
application/json- body
bands?array<>|The percentage → points table; must cover 0-100 without overlapping
max_points?|Points of a perfect grade
year_course_attribution?|'end_term' counts a year-long course once in its last term
default_forecast_model?|Forecast model new courses start with
default_categories?array<>|Category template for new courses
hide_gpa?|Mask GPA figures in the interface
round_before_lookup?|Round percentages to whole numbers before reading the scale (84.6 → 85)
Successful Response
application/json- response
program_id*Program Idbands*array<>Highest percentage first
max_points*Max PointsPoints of a perfect grade, e.g. 4.0
year_course_attribution*Year Course AttributionWhich term a year-long course's grade counts in
"end_term""split_evenly"default_forecast_model*Default Forecast Model"auto""simple_minimum_needed"default_categories*array<>Categories every new course of the Program starts with
hide_gpa*Hide Gparound_before_lookup*Round Before LookupPercentages are rounded to whole numbers (half up) before the band lookup
updated_at*Updated Atdate-timecurl -X PUT 'https://example.com/programs/string/grading-scale' \ -H 'Content-Type: application/json' \ -d '{}'{ "program_id": "string", "bands": [ { "min": 0, "max": 0, "points": 0, "letter": "string" } ], "max_points": 0, "year_course_attribution": "end_term", "default_forecast_model": "auto", "default_categories": [ { "key": "string", "name": "string", "color": "string" } ], "hide_gpa": true, "round_before_lookup": true, "updated_at": "2019-08-24T14:15:22Z"}Use to offer ready-made scales; apply one with grading.scale.update.
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
Successful Response
application/json- response
items*array<>curl -X GET 'https://example.com/grading/scale-presets'{ "items": [ { "id": "string", "max_points": 0, "bands": [ { "min": 0, "max": 0, "points": 0, "letter": "string" } ] } ]}Scores follow the student's results so far in each category and land exactly on the target. Used to auto-fill a what-if plan. Fails with grading.weights_not_100 while the weights do not add up.
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
course_id*Course IdCourse id
application/json- body
target?|Goal; the course's own target when omitted
Successful Response
application/json- response
items*array<>target_percentage*number|nullresulting_percentage*Resulting Percentagereachable*Reachablecurl -X POST 'https://example.com/courses/string/gradebook:suggest' \ -H 'Content-Type: application/json' \ -d '{}'{ "items": [ { "assessment_id": "string", "score": 0 } ], "target_percentage": 0, "resulting_percentage": 0, "reachable": true}Use to answer "what if I get 80 on the final". Nothing is saved: never change
real scores to simulate. Scores it could not use (already graded, not of this course) come back in
ignored. Fails with grading.weights_not_100 while the weights do not add up.
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
course_id*Course IdCourse id
application/json- body
scores?Assumed score in percent per ungraded assessment id; nothing is saved
target?|Goal; the course's own target when omitted
Successful Response
application/json- response
status*Status"completed""in_progress""passed""failed"weight_total*Weight Totalweight_gap*Weight Gap100 - weight_total; positive means weight is missing
weights_ok*Weights OkFalse: the weights do not add up to 100, so no figures
graded_count*Graded Countremaining_count*Remaining Countgraded_weight*Graded Weightremaining_weight*Remaining Weightlocked_contribution*|The final grade if everything still to come scored 0
current_percentage*|Weighted average of the graded items
current_points*number|nullcurrent_letter*string|nullfinal_percentage*|Official or fully calculated final grade, null while the course is running
final_points*number|nullfinal_letter*string|nullfinal_source*|nulloverridden*Overriddenforecast_percentage*|Predicted final grade ('auto' model)
forecast_points*number|nullforecast_letter*string|nullpredictions*Predicted score per ungraded assessment id
missing_history_category_ids*array<string|null>Categories of ungraded items predicted from the course average
target_points*Target Pointstarget_percentage*|Lowest percentage reaching the target
required_average*|Average the remaining items need to reach the target
reachable*|False when the target needs more than 100%
categories*array<>Per category; in a simulation assumed scores count as scores
ignored*array<>Assumed scores that were not used
curl -X POST 'https://example.com/courses/string/gradebook:simulate' \ -H 'Content-Type: application/json' \ -d '{}'{ "status": "completed", "weight_total": 0, "weight_gap": 0, "weights_ok": true, "graded_count": 0, "remaining_count": 0, "graded_weight": 0, "remaining_weight": 0, "locked_contribution": 0, "current_percentage": 0, "current_points": 0, "current_letter": "string", "final_percentage": 0, "final_points": 0, "final_letter": "string", "final_source": "override", "overridden": true, "forecast_percentage": 0, "forecast_points": 0, "forecast_letter": "string", "predictions": { "property1": 0, "property2": 0 }, "missing_history_category_ids": [ "string" ], "target_points": 0, "target_percentage": 0, "required_average": 0, "reachable": true, "categories": [ { "category_id": "string", "weight": 0, "graded_weight": 0, "average": 0, "contribution": 0 } ], "ignored": [ { "id": "string", "reason": "graded" } ]}Pass assumed final percentages per unfinished course in scores; with
target_gpa the result says whether it is reachable and what average the other unfinished courses
need. Marks it could not use (finished or unknown courses) come back in ignored. Nothing is
saved.
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
term_id*Term IdTerm id
application/json- body
scores?Assumed final percentage per unfinished course id; nothing is saved
target_gpa?|Term GPA to aim for
include_in_progress?|Count the current average of unfinished courses; omitted follows the Program setting (grading.count_in_progress)
Successful Response
application/json- response
term_id*Term Idgpa*number|nullaverage_percentage*number|nullcredits_counted*Credits Countedtarget_gpa*number|nullgap*|target - simulated GPA; positive means short
max_possible_gpa*number|nullreachable*boolean|nullrequired_percentage*|One average for the courses left blank that reaches the target
ignored*array<>Assumed percentages that were not used
curl -X POST 'https://example.com/terms/string/grade-summary:simulate' \ -H 'Content-Type: application/json' \ -d '{}'{ "term_id": "string", "gpa": 0, "average_percentage": 0, "credits_counted": 0, "target_gpa": 0, "gap": 0, "max_possible_gpa": 0, "reachable": true, "required_percentage": 0, "ignored": [ { "id": "string", "reason": "finished" } ]}Use for "what is my overall GPA" or "how many credits do I have left". Every course counts once, a year-long one in the term the Program's setting names.
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
program_id*Program IdProgram id
include_in_progress?Include In ProgressCount the current average of unfinished courses
falseSuccessful Response
application/json- response
program_id*Program Idmax_points*Max Pointshide_gpa*Hide Gpagpa*number|nullaverage_percentage*number|nullcredits_counted*Credits Countedcredits_earned*Credits Earnedcredits_required*number|nullprogress*|credits_earned / credits_required, 0-1
graded_course_count*Graded Course Countterm_count*Term Countterms*array<>Chronological, for charts
curl -X GET 'https://example.com/programs/string/grade-summary'{ "program_id": "string", "max_points": 0, "hide_gpa": true, "gpa": 0, "average_percentage": 0, "credits_counted": 0, "credits_earned": 0, "credits_required": 0, "progress": 0, "graded_course_count": 0, "term_count": 0, "terms": [ { "term_id": "string", "name": "string", "start_date": "2019-08-24", "gpa": 0, "cumulative_gpa": 0, "credits_counted": 0, "cumulative_credits": 0 } ]}Use for "what is my GPA this term". Unfinished courses count at their current
average when include_in_progress is true; left out, it follows the Program's "count unfinished
courses" setting.
semestra_session<token>Set by the sign-in endpoints for the web app. Requests other than GET, HEAD and OPTIONS also need the X-Semestra-CSRF header set to the semestra_csrf cookie.
term_id*Term IdTerm id
include_in_progress?|Count the current average of unfinished courses; omitted follows the Program setting (grading.count_in_progress)
Successful Response
application/json- response
term_id*Term Idmax_points*Max Pointshide_gpa*Hide Gpagpa*number|nullaverage_percentage*number|nullcredits_counted*Credits CountedCredits behind the GPA
credits_total*Credits TotalCredits of all courses landing in the term
credits_earned*Credits Earnedexcluded_count*Excluded CountFinished courses outside the GPA (pass/fail, not counted, no credits)
in_progress_count*In Progress CountCourses still waiting for their grade
courses*array<>curl -X GET 'https://example.com/terms/string/grade-summary'{ "term_id": "string", "max_points": 0, "hide_gpa": true, "gpa": 0, "average_percentage": 0, "credits_counted": 0, "credits_total": 0, "credits_earned": 0, "excluded_count": 0, "in_progress_count": 0, "courses": [ { "course_id": "string", "code": "string", "title": "string", "alias": "string", "credits": 0, "include_in_gpa": true, "basis": "percentage", "status": "completed", "percentage": 0, "current_percentage": 0, "points": 0, "letter": "string", "counts_in_gpa": true, "year_long": true, "attributed_credits": 0 } ]}