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_updateAdd 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.
| Field | Type | Description |
|---|---|---|
| record* | object | |
| record.id | string | Existing term ID to update. Omit to create. |
| record.name | string | e.g. 'Fall 2026'. Required when creating. |
| record.level | one of high_school, undergrad, grad, other | |
| record.startDate | string | Required when creating. |
| record.endDate | string | Required when creating. |
| record.status | one of planned, active, completed | |
| record.gradeScaleId | string | Grade-scale ID from the dashboard's grade scales: never invented. |
| record.scheduleConfig | object | Rotating class-schedule config. Fields you omit keep their current value; send dayLabels: [] to clear the labels. |
| record.sortOrder | integer | Manual ordering among terms. |
| record.institution | string | |
| record.notes | string | |
| record.subjectPersonId | string | Whose 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_deleteDelete (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.
| Field | Type | Description |
|---|---|---|
| termId* | string | Term 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_findList 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.
| Field | Type | Description |
|---|---|---|
| detail | one of summary, full | Response 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_updateAdd 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.
| Field | Type | Description |
|---|---|---|
| record* | object | |
| record.id | string | Existing course ID to update. Omit to create. |
| record.termId | string | Required when creating. |
| record.name | string | e.g. 'Organic Chemistry II'. Required when creating. |
| record.code | string | e.g. 'CHEM 201'. |
| record.section | string | Section identifier, e.g. '002'. |
| record.creditHours | number | Credit hours; default 3. |
| record.instructorName | string | |
| record.instructorPersonIds | list of string | People-module person IDs for the instructor(s), resolve with people tools, never invented. |
| record.location | string | |
| record.meetingTimes | list of object | Weekly class meetings. Sending this REPLACES the whole list, include every meeting. |
| record.status | one of planned, enrolled, in_progress, completed, dropped, withdrawn, waitlisted | |
| record.gradingScheme | object | Grading scheme. Fields you omit keep their current value; `categories`, when sent, replaces the whole list. |
| record.gradeScaleId | string | Course-specific grade-scale ID from the dashboard, overriding the term's scale. |
| record.includeInGpa | boolean | |
| record.passFail | boolean | |
| record.honorsBump | number | Extra grade points for honors/AP in weighted GPA. |
| record.finalGrade | object | Official final grade for a completed course ('my final grade in chem was an A-'). Pass null to clear it. |
| record.targetPercent | number | Grade the student is aiming for. |
| record.color | string | Display color token/hex for the course. |
| record.textbookCost | number | |
| record.courseFee | number | |
| record.notes | string |
Example input
{
"record": {
"termId": "term_fall26",
"name": "Linear Algebra",
"code": "MATH 221",
"creditHours": 4,
"status": "enrolled"
}
}academics_deleteCourseDeletethrough vritto_deleteDelete (archive) one course AND its coursework, grades leave the transcript. Only for explicit removals; confirm intent.
| Field | Type | Description |
|---|---|---|
| courseId* | string | Course 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_updateAdd 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.
| Field | Type | Description |
|---|---|---|
| record* | object | |
| record.id | string | Existing coursework ID to update. Omit to create. |
| record.courseId* | string | Which course this belongs to. Required. |
| record.kind | one of assignment, exam | Defaults to 'assignment'. |
| record.title | string | Required when creating. |
| record.type | one of homework, essay, lab_report, project, reading, paper, presentation, discussion, problem_set, quiz, midterm, final, test, practical, oral, other | |
| record.categoryId | string | Grade-category ID from the course's gradingScheme (weighted mode). |
| record.dueAt | string | Required when creating. |
| record.availableAt | string | When the assignment opens/becomes available. |
| record.endAt | string | When a timed item (e.g. an exam) ends. |
| record.durationMinutes | number | Length of a timed item like an exam, in minutes. |
| record.status | one of todo, in_progress, submitted, graded, missing, excused | Entering a grade implies 'graded' automatically. |
| record.pointsPossible | number | |
| record.pointsEarned | number | Entering this records the grade. |
| record.gradePercent | number | Alternative grade entry as a percent. |
| record.letterGrade | string | Alternative grade entry as a letter. |
| record.countsTowardGrade | boolean | Defaults true. Set false for extra credit or ungraded practice work so grade math stays correct. |
| record.priority | one of low, normal, high | |
| record.estimatedHours | number | Estimated hours of work. |
| record.submittedAt | string | When the user turned it in. |
| record.reminderLeadMinutes | integer | Minutes before dueAt to remind. Default 1440 (1 day). |
| record.room | string | Exam room (kind 'exam'). |
| record.seat | string | Assigned seat (kind 'exam'). |
| record.format | string | Exam format, e.g. 'closed book, multiple choice' (kind 'exam'). |
| record.topics | list of string | Exam topics (kind 'exam'). |
| record.studyChecklist | list of object | Study/prep checklist items. Sending this REPLACES the whole list. |
| record.linkedNoteId | string | Notes-module note ID to link, resolve with notes tools, never invented. |
| record.linkedBookId | string | Books-module book ID to link (e.g. the course textbook), resolve with books tools, never invented. |
| record.description | string | The 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.notes | string | The 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_deleteDelete (archive) one assignment or exam and clear its reminder. Only for explicit removals, resolve the ID first.
| Field | Type | Description |
|---|---|---|
| courseworkId* | string | Coursework 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_updateLog a study session (start time + duration, optionally course/topic/focus). Feeds weekly study stats and any linked study-hours Goal.
| Field | Type | Description |
|---|---|---|
| record* | object | |
| record.id | string | Existing study-session ID from the dashboard to correct. Omit to create. |
| record.courseId | string | Course studied, when known. |
| record.courseworkId | string | Coursework item this session prepared for, from the dashboard, never invented. |
| record.startAt* | string | When the session started. Required. |
| record.endAt | string | When the session ended, alternative to durationMinutes. |
| record.durationMinutes | integer | How long they studied. Required unless endAt is provided. |
| record.technique | one of freeform, pomodoro | Study technique; defaults to 'freeform'. |
| record.topic | string | |
| record.focusRating | integer | |
| record.notes | string |
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_updateCreate 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.
| Field | Type | Description |
|---|---|---|
| record* | object | |
| record.id | string | Existing degree-plan ID from the dashboard to update. Omit to create. |
| record.name | string | e.g. 'BS Computer Science'. Required when creating. |
| record.degreeType | string | e.g. 'BS', 'BA', 'MS'. |
| record.institution | string | |
| record.catalogYear | string | e.g. '2024-2025'. |
| record.totalCreditsRequired | number | Total credits to graduate; default 120. |
| record.minGpa | number | Minimum GPA requirement, if any. |
| record.expectedGraduation | string | Expected graduation month, YYYY-MM. |
| record.requirements | list of object | Degree requirements. Sending this REPLACES the whole list, include every requirement. |
| record.linkedGoalId | string | Goals-module goal ID to roll degree progress into, never invented. |
| record.notes | string |
academics_deleteDegreePlanDeletethrough vritto_deleteDelete (archive) one degree plan. Only for explicit removals, resolve the ID with academics_queryAcademicsDashboard first.
| Field | Type | Description |
|---|---|---|
| planId* | string | Degree-plan ID from a prior academics_queryAcademicsDashboard result. |
Grades and GPAgrades
Computed grades and GPA; read-only.
academics_queryGradesFindthrough vritto_findEngine-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.
| Field | Type | Description |
|---|---|---|
| detail | one of summary, full | Response shape: "summary" (default, cumulative and per-term GPA only) or "full" (every course's percent, letter, grade points and category breakdown). |
| courseId | string | Answer about ONE course (grade, letter, category breakdown) instead of returning the transcript. |
| termId | string | Scope the answer to a single term. |
| subjectPersonId | string | Whose 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. |