Skip To Main Content
All modules

Academics

Fields marked * are required. Updates keep every field they are not given. An AI app can ask vritto_describe for the same details, filtered to what its connection may use.

Academic Termacademic_term

A semester, quarter, or school year.

academics_upsertTermCreate or Updatethrough vritto_create or vritto_update

Add a term (semester/quarter) or update one. Omit record.id to create (name + startDate + endDate required); include a real record.id to update, sent fields merge.

FieldTypeDescription
record*object
record.idstringExisting term ID to update. Omit to create.
record.namestringe.g. 'Fall 2026'. Required when creating.
record.levelone of high_school, undergrad, grad, other
record.startDatestringRequired when creating.
record.endDatestringRequired when creating.
record.statusone of planned, active, completed
record.gradeScaleIdstringGrade-scale ID from the dashboard's grade scales: never invented.
record.scheduleConfigobjectRotating class-schedule config. Fields you omit keep their current value; send dayLabels: [] to clear the labels.
record.sortOrderintegerManual ordering among terms.
record.institutionstring
record.notesstring
record.subjectPersonIdstringWhose studies: a People person id when the term is a family member's (a child's school term). Omit for the account owner's own. Courses and coursework inherit through the term.
Example input
{
  "record": {
    "name": "Fall 2026",
    "level": "undergrad",
    "startDate": "2026-08-24",
    "endDate": "2026-12-11",
    "status": "active"
  }
}
academics_deleteTermDeletethrough vritto_delete

Delete (archive) one term. Courses and coursework in it are NOT removed: they keep their grades, still count toward the cumulative GPA, and are reported as 'unassigned' until they are moved to another term or deleted. Only for explicit removals; confirm intent.

FieldTypeDescription
termId*stringTerm ID from a prior academics_queryAcademicsDashboard result, never invented.

Coursecourse

A class the user or their child takes in a term, with grading and schedule.

academics_queryAcademicsDashboardFindthrough vritto_find

List terms, courses, coursework, grade scales, study sessions, and degree plans. Use for schedule/due-date/status questions and to resolve IDs before any write. Defaults to a compact summary: counts plus current courses and upcoming open coursework. For grade or GPA questions use academics_queryGrades instead.

FieldTypeDescription
detailone of summary, fullResponse shape: "summary" (default, counts + current courses + upcoming coursework) or "full" (every record incl. grading schemes, meeting times, raw grades, and notes).
academics_upsertCourseCreate or Updatethrough vritto_create or vritto_update

Add a course or update one (grading scheme, credits, status, target grade, costs). Omit record.id to create (name + termId required); include a real record.id to update. gradingScheme replaces the whole scheme when sent.

Note: gradingScheme replaces the whole scheme when sent.

FieldTypeDescription
record*object
record.idstringExisting course ID to update. Omit to create.
record.termIdstringRequired when creating.
record.namestringe.g. 'Organic Chemistry II'. Required when creating.
record.codestringe.g. 'CHEM 201'.
record.sectionstringSection identifier, e.g. '002'.
record.creditHoursnumberCredit hours; default 3.
record.instructorNamestring
record.instructorPersonIdslist of stringPeople-module person IDs for the instructor(s), resolve with people tools, never invented.
record.locationstring
record.meetingTimeslist of objectWeekly class meetings. Sending this REPLACES the whole list, include every meeting.
record.statusone of planned, enrolled, in_progress, completed, dropped, withdrawn, waitlisted
record.gradingSchemeobjectGrading scheme. Fields you omit keep their current value; `categories`, when sent, replaces the whole list.
record.gradeScaleIdstringCourse-specific grade-scale ID from the dashboard, overriding the term's scale.
record.includeInGpaboolean
record.passFailboolean
record.honorsBumpnumberExtra grade points for honors/AP in weighted GPA.
record.finalGradeobjectOfficial final grade for a completed course ('my final grade in chem was an A-'). Pass null to clear it.
record.targetPercentnumberGrade the student is aiming for.
record.colorstringDisplay color token/hex for the course.
record.textbookCostnumber
record.courseFeenumber
record.notesstring
Example input
{
  "record": {
    "termId": "term_fall26",
    "name": "Linear Algebra",
    "code": "MATH 221",
    "creditHours": 4,
    "status": "enrolled"
  }
}
academics_deleteCourseDeletethrough vritto_delete

Delete (archive) one course AND its coursework, grades leave the transcript. Only for explicit removals; confirm intent.

FieldTypeDescription
courseId*stringCourse ID from a prior academics_queryAcademicsDashboard result, never invented.

Assignment or Examcoursework

A graded assignment or exam in a course.

academics_upsertCourseworkCreate or Updatethrough vritto_create or vritto_update

Add an assignment or exam, update one, or record its grade (pointsEarned/pointsPossible, gradePercent, or letterGrade, grade entry marks it graded). Omit record.id to create (courseId + title + dueAt required). Due dates schedule reminders.

FieldTypeDescription
record*object
record.idstringExisting coursework ID to update. Omit to create.
record.courseId*stringWhich course this belongs to. Required.
record.kindone of assignment, examDefaults to 'assignment'.
record.titlestringRequired when creating.
record.typeone of homework, essay, lab_report, project, reading, paper, presentation, discussion, problem_set, quiz, midterm, final, test, practical, oral, other
record.categoryIdstringGrade-category ID from the course's gradingScheme (weighted mode).
record.dueAtstringRequired when creating.
record.availableAtstringWhen the assignment opens/becomes available.
record.endAtstringWhen a timed item (e.g. an exam) ends.
record.durationMinutesnumberLength of a timed item like an exam, in minutes.
record.statusone of todo, in_progress, submitted, graded, missing, excusedEntering a grade implies 'graded' automatically.
record.pointsPossiblenumber
record.pointsEarnednumberEntering this records the grade.
record.gradePercentnumberAlternative grade entry as a percent.
record.letterGradestringAlternative grade entry as a letter.
record.countsTowardGradebooleanDefaults true. Set false for extra credit or ungraded practice work so grade math stays correct.
record.priorityone of low, normal, high
record.estimatedHoursnumberEstimated hours of work.
record.submittedAtstringWhen the user turned it in.
record.reminderLeadMinutesintegerMinutes before dueAt to remind. Default 1440 (1 day).
record.roomstringExam room (kind 'exam').
record.seatstringAssigned seat (kind 'exam').
record.formatstringExam format, e.g. 'closed book, multiple choice' (kind 'exam').
record.topicslist of stringExam topics (kind 'exam').
record.studyChecklistlist of objectStudy/prep checklist items. Sending this REPLACES the whole list.
record.linkedNoteIdstringNotes-module note ID to link, resolve with notes tools, never invented.
record.linkedBookIdstringBooks-module book ID to link (e.g. the course textbook), resolve with books tools, never invented.
record.descriptionstringThe assignment's OWN text (the prompt/instructions as set by the course). Canvas overwrites this on every sync, never put the student's words here; use notes.
record.notesstringThe student's own notes on the item. This is the box every Vritto client shows and edits, so anything the user says about the item belongs here.
Example input
{
  "record": {
    "courseId": "course_math221",
    "kind": "exam",
    "title": "Midterm 1",
    "type": "midterm",
    "dueAt": "2026-10-14T10:00:00-05:00",
    "pointsPossible": 100
  }
}
academics_deleteCourseworkDeletethrough vritto_delete

Delete (archive) one assignment or exam and clear its reminder. Only for explicit removals, resolve the ID first.

FieldTypeDescription
courseworkId*stringCoursework ID from a prior academics_queryAcademicsDashboard result.

Study Sessionstudy_session

Time spent studying, optionally for one course or assignment.

academics_logStudySessionCreate or Updatethrough vritto_create or vritto_update

Log a study session (start time + duration, optionally course/topic/focus). Feeds weekly study stats and any linked study-hours Goal.

FieldTypeDescription
record*object
record.idstringExisting study-session ID from the dashboard to correct. Omit to create.
record.courseIdstringCourse studied, when known.
record.courseworkIdstringCoursework item this session prepared for, from the dashboard, never invented.
record.startAt*stringWhen the session started. Required.
record.endAtstringWhen the session ended, alternative to durationMinutes.
record.durationMinutesintegerHow long they studied. Required unless endAt is provided.
record.techniqueone of freeform, pomodoroStudy technique; defaults to 'freeform'.
record.topicstring
record.focusRatinginteger
record.notesstring
Example input
{
  "record": {
    "courseId": "course_math221",
    "startAt": "2026-09-26T19:00:00-05:00",
    "durationMinutes": 50,
    "technique": "pomodoro",
    "topic": "Eigenvalues"
  }
}

Degree Plandegree_plan

A degree's credit and requirement plan.

academics_upsertDegreePlanCreate or Updatethrough vritto_create or vritto_update

Create or update a degree plan (degree type, total credits, expected graduation, and requirement buckets with the courses that satisfy them). Omit record.id to create (name required); include a real record.id from the dashboard to update. requirements replaces the whole list when sent.

Note: requirements replaces the whole list when sent.

FieldTypeDescription
record*object
record.idstringExisting degree-plan ID from the dashboard to update. Omit to create.
record.namestringe.g. 'BS Computer Science'. Required when creating.
record.degreeTypestringe.g. 'BS', 'BA', 'MS'.
record.institutionstring
record.catalogYearstringe.g. '2024-2025'.
record.totalCreditsRequirednumberTotal credits to graduate; default 120.
record.minGpanumberMinimum GPA requirement, if any.
record.expectedGraduationstringExpected graduation month, YYYY-MM.
record.requirementslist of objectDegree requirements. Sending this REPLACES the whole list, include every requirement.
record.linkedGoalIdstringGoals-module goal ID to roll degree progress into, never invented.
record.notesstring
academics_deleteDegreePlanDeletethrough vritto_delete

Delete (archive) one degree plan. Only for explicit removals, resolve the ID with academics_queryAcademicsDashboard first.

FieldTypeDescription
planId*stringDegree-plan ID from a prior academics_queryAcademicsDashboard result.

Grades and GPAgrades

Computed grades and GPA; read-only.

academics_queryGradesFindthrough vritto_find

Engine-computed grades and GPA for ONE student. Defaults to the account owner's own summary: cumulative GPA plus each term's GPA and credits. Pass courseId for one course's percent/letter/breakdown, termId to scope to a term, subjectPersonId for a family member's transcript, or detail:'full' for the whole transcript. The ONLY correct source for grade and GPA answers, never compute them from raw coursework.

FieldTypeDescription
detailone of summary, fullResponse shape: "summary" (default, cumulative and per-term GPA only) or "full" (every course's percent, letter, grade points and category breakdown).
courseIdstringAnswer about ONE course (grade, letter, category breakdown) instead of returning the transcript.
termIdstringScope the answer to a single term.
subjectPersonIdstringWhose grades: omit (or 'me') for the account owner's own. Pass a People person id ONLY when the user asks about that family member's school work: a GPA belongs to one student and is never blended across people.