Roles API
Base URL: /api/v1/roles
Manage role assignments including students, teachers, advisors, and applicants.
Important: Roles are derived from actions, not created directly. See Role Assignment Business Logic at the bottom.
Endpoints Overview
Students
| Method | Endpoint | Description |
|---|---|---|
| GET | /students | List students |
| GET | /students/search | Search students |
| GET | /students/lookup/by-person/{personUUID} | Find the student record for a person |
| POST | /students | Create student |
| PATCH | /students/{studentID} | Update student |
| DELETE | /students/{studentID} | Delete student |
| GET | /students/{studentID}/majors | Get student majors |
| GET | /students/{studentID}/majors/active | Get currently active majors |
| POST | /students/{studentID}/majors | Add a major |
| DELETE | /students/{studentID}/majors/{majorID} | Remove a major |
| GET | /students/{studentID}/minors | Get student minors |
| GET | /students/{studentID}/minors/active | Get currently active minors |
| POST | /students/{studentID}/minors | Add a minor |
| DELETE | /students/{studentID}/minors/{minorID} | Remove a minor |
| GET | /students/{studentID}/schedule | Get the student's schedule |
There is no GET /students/{studentID}
A single student cannot be fetched by ID. PATCH and DELETE on that path exist, but no GET — read one student out of GET /students or GET /students/search, or look them up by person with GET /students/lookup/by-person/{personUUID}. Enrollments, GPA and transcripts are not here either: see Registration and Grading.
Student majors and minors
A student's programme of study is recorded as majors and minors, not as a separate "program" resource.
| Method | Endpoint | Description |
|---|---|---|
| POST | /student-majors | Assign a major to a student |
| POST | /student-majors/{studentMajorID}/emphases | Add an emphasis to a student major |
| POST | /student-minors | Assign a minor to a student |
Teachers
| Method | Endpoint | Description |
|---|---|---|
| GET | /teachers | List teachers |
| GET | /teachers/{id} | Get teacher details |
| PATCH | /teachers/{id} | Update teacher |
| GET | /teachers/{id}/sections | Get assigned sections |
Advisors
| Method | Endpoint | Description |
|---|---|---|
| GET | /advisors | List advisors |
| GET | /advisors/available | List advisors available for assignment |
| GET | /advisors/candidates | Search people who could advise, including those with no advisor record yet |
| GET | /advisors/lookup/by-person/{personUUID} | Find the advisor record for a person |
| GET | /advisors/lookup/by-person/{personUUID}/all | All advisor records for a person |
| GET | /advisors/{advisorID}/advisees | Get assigned students |
| POST | /advisors | Create advisor |
| PATCH | /advisors/{advisorID} | Update advisor |
| DELETE | /advisors/{advisorID} | Delete advisor |
| POST | /student-advisors | Assign an advisor to a student |
There is no GET /advisors/{advisorID}; read one out of GET /advisors.
/advisors and /advisors/candidates answer different questions
GET /advisors lists people who hold an advisors row. GET /advisors/candidates answers who could advise? — it searches faculty and staff whether or not they have ever advised anyone, and it backs the advisor picker on the cohort screens.
| Parameter | Type | Description |
|---|---|---|
search | string | Type-ahead term |
limit | integer | Defaults to 50; anything <= 0 or > 200 is clamped to 50 |
The cap is a guard rather than paging — the caller is a type-ahead, and a pool of a couple of thousand is not something a person scrolls. There is no offset.
Picking a candidate who has never advised does not require creating an advisor record first: assigning them is the assignment that creates one, which is the project's role model applied literally. A previously deactivated row is reactivated rather than duplicated, because advisors has no unique index on person_id and a second row would be accepted silently and then show the same name twice in every picker.
Applicants
| Method | Endpoint | Description |
|---|---|---|
| GET | /applicants | List applicants |
| GET | /applicants/{id} | Get applicant details |
| PATCH | /applicants/{id} | Update application status |
No /programs or /program-catalogs endpoints
These were documented here but exist nowhere in the API. Degrees, majors and minors are served by Academic; what a given student is enrolled in is served by the major and minor endpoints above.
Student Status History
| Method | Endpoint | Description |
|---|---|---|
| GET | /students/{studentID}/admission-status-history | List admission status history |
| POST | /students/{studentID}/admission-status-history | Create an admission status entry |
| DELETE | /students/{studentID}/admission-status-history/{historyID} | Delete an entry |
Student Academic Status History
| Method | Endpoint | Description |
|---|---|---|
| GET | /students/{studentID}/academic-status-history | List academic status history |
| POST | /students/{studentID}/academic-status-history | Create academic status history entry |
Cohorts
| Method | Endpoint | Description |
|---|---|---|
| GET | /cohorts | List cohorts |
| POST | /cohorts | Create cohort |
| GET | /cohorts/{id} | Get cohort details |
| PATCH | /cohorts/{id} | Update cohort |
| DELETE | /cohorts/{id} | Delete cohort |
| GET | /cohorts/{id}/students | List students in cohort |
| GET | /cohorts/dropdown | Cohorts as picker options |
| GET | /cohorts/{cohortID}/available_students | Students not yet in the cohort |
| POST | /cohorts/{cohortID}/assign_students | Add students to the cohort (batch) |
| POST | /cohorts/{cohortID}/remove_students | Remove students from the cohort (batch) |
| POST | /cohorts/{cohortID}/sync | Force the membership sync an auto-sync cohort otherwise gets hourly |
| GET | /cohorts/{cohortID}/advisors | List the cohort's advisors (dated) |
| POST | /cohorts/{cohortID}/advisors | Assign an advisor to the cohort |
| POST | /cohorts/{cohortID}/advisors/{cohortAdvisorID}/end | End-date a cohort advisor |
| POST | /cohorts/{cohortID}/bulk_assign | Assign majors, minors and one advisor to every open member (below) |
Bulk assignment
POST /cohorts/{cohortID}/bulk_assign (migration 277) applies programs and/or one advisor to every open member of a cohort, in one transaction. Only cohorts whose type has allows_bulk_assign accept it; any other answers 409. Besides ADMIN.COHORTS on the route, the caller needs EDIT on STUDENTS.SEARCH to assign majors or minors and EDIT on ADVISING.ADVISORS to assign an advisor (403 otherwise).
POST /api/v1/roles/cohorts/42/bulk_assign
{
"major_ids": [10845],
"minor_ids": [],
"start_date": "2026-09-21",
"end_current_majors": true,
"advisor_id": 311,
"advisor_is_primary": true,
"end_current_primary_advisor": true
}| Field | Meaning |
|---|---|
major_ids, minor_ids | Programs to add. One a student already holds is left alone |
bulletin_id, start_date | Catalog and start date of the new rows; start_date defaults to today |
end_current_majors, end_current_minors | End-date (never delete) what each student holds now. With end_current_majors, the first major in major_ids becomes the primary |
advisor_id or advisor_person_id | The advisor, by advisor record or by person (a person who is not yet an advisor) |
advisor_role_id, advisor_is_primary | The assignment's advisor role, and whether it is primary |
end_current_primary_advisor | End each student's current primary advisor. Only valid with a primary assignment; without it the old primary stays as a non-primary advisor |
student_ids | Narrow the run to some of the open members. Empty means all |
At least one major, minor or advisor is required. The response counts what was done -- members, students_updated, majors_added, minors_added, majors_ended, minors_ended, advisors_assigned, primary_advisors_ended -- and lists in skipped the students for whom nothing changed. Program-change emails go to each student and their advisors after the commit.
Cohort membership is dated and multi-valued. Colleague's own cohorts arrive through the student_cohorts step of migrate-daily and are marked source = 'ODS'; the importer never touches a cohort or membership the API created.
Cohort Types
Configures what a kind of cohort means: uses_dates, allow_multiple, requires_major, unique_per_level, requires_campus, requires_start_term, supports_auto_sync and allows_bulk_assign are behavioural, not decorative, and the service enforces them. Reads and writes are split deliberately -- maintaining cohorts is not the same authority as redefining what kinds exist.
| Method | Endpoint | Description |
|---|---|---|
| GET | /cohort-types | List cohort types |
| GET | /cohort-types/{cohortTypeID} | Get one cohort type |
| POST | /cohort-types | Create a cohort type |
| PATCH | /cohort-types/{cohortTypeID} | Update a cohort type (code is not updatable) |
| DELETE | /cohort-types/{cohortTypeID} | Delete a cohort type (refused while cohorts use it) |
Student Cohort Membership
| Method | Endpoint | Description |
|---|---|---|
| GET | /students/{studentID}/cohorts | List a student's memberships (?open_only=true for current) |
| POST | /students/{studentID}/cohorts | Add a membership, optionally backdated |
| POST | /students/{studentID}/cohorts/end | End-date a membership. POST, not DELETE -- the history is the point of the table |
| DELETE | /students/{studentID}/cohorts/{studentCohortID} | Delete a membership entered in error (the audit log keeps it). Refused for rows the nightly import owns |
Class Standing Thresholds
| Method | Endpoint | Description |
|---|---|---|
| GET | /class-standing-thresholds | List class standing thresholds |
| POST | /class-standing-thresholds | Create threshold |
| GET | /class-standing-thresholds/{id} | Get threshold details |
| PATCH | /class-standing-thresholds/{id} | Update threshold |
| DELETE | /class-standing-thresholds/{id} | Delete threshold |
Student Lists
| Method | Endpoint | Description |
|---|---|---|
| GET | /student-lists | List student lists |
| POST | /student-lists | Create student list |
| GET | /student-lists/{id} | Get student list details |
| PATCH | /student-lists/{id} | Update student list |
| DELETE | /student-lists/{id} | Delete student list |
| GET | /student-lists/my_lists | Lists the caller owns |
| GET | /student-lists/shared_with_me | Lists shared with the caller |
| GET | /student-lists/org-tree | Org tree for choosing share targets |
| POST | /student-lists/generate | Generate a list from a filter |
| POST | /student-lists/preview_filter | Preview what a filter would select |
| GET | /student-lists/{listID}/members | List members |
| POST | /student-lists/{listID}/members | Add a member |
| POST | /student-lists/{listID}/add_members | Add members (batch) |
| POST | /student-lists/{listID}/remove_members | Remove members (batch) |
| DELETE | /student-lists/{listID}/members/{memberID} | Remove one member |
| POST | /student-lists/{listID}/shares | Share the list |
| DELETE | /student-lists/{listID}/shares/{shareID} | Remove a share |
| POST | /student-lists/{listID}/share | Share the list (legacy path) |
| POST | /student-lists/{listID}/unshare | Unshare (legacy path) |
Student Campus Assignments
| Method | Endpoint | Description |
|---|---|---|
| GET | /student-campus-assignments | List student campus assignments |
| POST | /student-campus-assignments | Create campus assignment |
| GET | /student-campus-assignments/{id} | Get campus assignment details |
| PATCH | /student-campus-assignments/{id} | Update campus assignment |
| DELETE | /student-campus-assignments/{id} | Delete campus assignment |
| POST | /student-campus-assignments/{id}/set_primary | Make this the student's only primary assignment |
All six routes are gated on ADMIN.CAMPUS_ASSIGNMENTS with no per-student scope. Super Administrator and, since migration 303, Registrar (EDIT) hold it. The student record's Campuses tab also needs STUDENTS.TAB.CAMPUSES (migration 302). Its campus picker reads GET /organization/campuses/dropdown (ADMIN.CAMPUSES), where 303 gives Registrar VIEW.
GET filters: student_id, campus_id, is_primary, ordering. Create and PATCH take student_id, campus_id, start_date (required on create, YYYY-MM-DD), optional end_date and is_primary. Note on PATCH:
is_primaryis always written. A body that omits it, such as{"end_date": "2026-12-31"}, which the tab sends to end an assignment, clears the flag.end_datecan be set but not cleared. An empty or absent value leaves it as it is.- Neither create nor PATCH clears
is_primaryon the student's other assignments. Onlyset_primarydoes.
The nightly student_campuses import rewrites is_primary and end_date on rows that match a Colleague home location by (student_id, campus_id, start_date), and never deletes. Setting an assignment primary does not change students.primary_campus_id, which is the campus that billing and cohort rules read. Registration transactions read it too, and use the open primary assignment only when it is empty.
Self-Service (Me)
| Method | Endpoint | Description |
|---|---|---|
| GET | /me/student | Get current user's student record |
| GET | /me/grades | Get current user's grades |
| GET | /me/transcript | Get current user's transcript |
| GET | /me/schedule | Get current user's schedule |
| GET | /me/advisor | Get current user's advisor |
| GET | /me/billing | Get current user's billing |
Students
List Students
GET /api/v1/roles/studentsQuery Parameters
| Parameter | Type | Description |
|---|---|---|
student_status_id | integer | Filter by status |
campus | integer | Filter by campus ID |
initial_term | integer | Filter by initial term |
search | string | Search in student_number, person name |
ordering | string | Sort by: student_number, created_at |
Success Response (200 OK)
{
"count": 5000,
"results": [
{
"student_id": 1001,
"person_id": "550e8400-e29b-41d4-a716-446655440000",
"student_number": "STU001234",
"display_name": "John Smith",
"primary_email": "john.smith@university.edu",
"initial_term_id": 8,
"initial_term_code": "FA2024",
"student_status_code": "ACTIVE",
"student_status_display": "Active",
"campus_id": 1,
"campus_name": "Main Campus",
"cumulative_gpa": 3.45,
"credits_earned": 45.0,
"class_standing": "Sophomore"
}
]
}Get Student Details
This endpoint does not exist
There is no GET /api/v1/roles/students/{studentID}. The shape below is retained because it describes the student object as returned inside GET /api/v1/roles/students and GET /api/v1/roles/students/search; read a single student from one of those.
Success Response (200 OK)
{
"student_id": 1001,
"person_id": "550e8400-e29b-41d4-a716-446655440000",
"student_number": "STU001234",
"display_name": "John Smith",
"primary_email": "john.smith@university.edu",
"initial_term_id": 8,
"initial_term_code": "FA2024",
"student_status_id": 1,
"student_status_code": "ACTIVE",
"student_status_display": "Active",
"campus_id": 1,
"campus_name": "Main Campus",
"cumulative_gpa": 3.45,
"term_gpa": 3.67,
"credits_earned": 45.0,
"credits_attempted": 48.0,
"class_standing": "Sophomore",
"expected_graduation": "2028-05-15",
"programs": [
{
"program_id": 1,
"program_name": "Bachelor of Science in Computer Science",
"catalog_year": "2024-2025",
"status_code": "ACTIVE",
"declaration_date": "2024-08-26"
}
],
"majors": [
{
"major_id": 1,
"major_code": "CS",
"major_name": "Computer Science",
"is_primary": true
}
],
"minors": [],
"advisors": [
{
"advisor_id": 15,
"advisor_name": "Dr. Jane Doe",
"advisor_role": "Academic Advisor"
}
],
"created_at": "2024-08-26T10:00:00Z",
"updated_at": "2024-12-01T14:30:00Z"
}TypeScript Types
interface Student {
student_id: number
person_id: string
student_number: string
display_name: string
primary_email: string | null
initial_term_id: number
initial_term_code: string
student_status_id: number
student_status_code: string
student_status_display: string
campus_id: number | null
campus_name: string | null
cumulative_gpa: number | null
term_gpa: number | null
credits_earned: number
credits_attempted: number
class_standing: string
expected_graduation: string | null
programs?: StudentProgram[]
majors?: StudentMajor[]
minors?: StudentMinor[]
advisors?: StudentAdvisor[]
}Student Enrollments
Not served by this domain. Use the Registration enrollment endpoints, filtered by student.
Student GPA
Not served by this domain. Use the Grading GPA endpoints (/grading/term-gpa, /grading/cumulative-gpa).
Success Response (200 OK)
{
"success": true,
"data": {
"student_id": 1001,
"cumulative_gpa": 3.45,
"term_gpa": 3.67,
"credits_earned": 45.0,
"credits_attempted": 48.0,
"quality_points": 165.6,
"terms": [
{
"term_code": "FA2024",
"term_gpa": 3.67,
"credits_attempted": 15.0,
"credits_earned": 15.0
}
]
}
}Student Majors
GET /api/v1/roles/students/{student_pk}/majors
POST /api/v1/roles/students/{student_pk}/majorsCreate Major Assignment
{
"major_id": 1,
"catalog_year_id": 3,
"is_primary": true,
"declaration_date": "2024-08-26"
}Get Active Majors
GET /api/v1/roles/students/{student_pk}/majors/activeStudent Minors
GET /api/v1/roles/students/{student_pk}/minors
POST /api/v1/roles/students/{student_pk}/minorsCreate Minor Assignment
{
"minor_id": 1,
"catalog_year_id": 3,
"declaration_date": "2024-09-15"
}Teachers
List Teachers
GET /api/v1/roles/teachersQuery Parameters
| Parameter | Type | Description |
|---|---|---|
department | integer | Filter by department |
status_id | integer | Filter by status |
search | string | Search in person name, email |
Success Response (200 OK)
{
"count": 200,
"results": [
{
"teacher_id": 15,
"person_id": "660e8400-e29b-41d4-a716-446655440000",
"display_name": "Dr. Jane Doe",
"primary_email": "jane.doe@university.edu",
"department_id": 10,
"department_name": "Computer Science",
"status_code": "ACTIVE",
"status_display": "Active",
"title": "Associate Professor",
"section_count": 3
}
]
}Teacher Sections
GET /api/v1/roles/teachers/{id}/sectionsGet all sections assigned to a teacher.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
term_id | integer | Filter by term |
Teacher Credentials
GET /api/v1/roles/teacher-credentials
POST /api/v1/roles/teacher-credentialsManage teacher qualifications and credentials.
Success Response (200 OK)
{
"count": 150,
"results": [
{
"credential_id": 1,
"teacher_id": 15,
"credential_type_code": "DOCTORATE",
"credential_type_display": "Doctorate",
"institution": "MIT",
"field_of_study": "Computer Science",
"year_awarded": 2015
}
]
}Advisors
List Advisors
GET /api/v1/roles/advisorsQuery Parameters
| Parameter | Type | Description |
|---|---|---|
advisor_type_id | integer | Filter by advisor type |
department | integer | Filter by department |
search | string | Search in person name |
Success Response (200 OK)
{
"count": 50,
"results": [
{
"advisor_id": 15,
"person_id": "660e8400-e29b-41d4-a716-446655440000",
"display_name": "Dr. Jane Doe",
"primary_email": "jane.doe@university.edu",
"advisor_type_code": "ACADEMIC",
"advisor_type_display": "Academic Advisor",
"department_id": 10,
"department_name": "Computer Science",
"advisee_count": 25,
"max_advisees": 30
}
]
}Advisor Advisees
GET /api/v1/roles/advisors/{advisorID}/adviseesGet all students assigned to an advisor.
Applicants
List Applicants
GET /api/v1/roles/applicantsQuery Parameters
| Parameter | Type | Description |
|---|---|---|
application_term | integer | Filter by application term |
application_status_id | integer | Filter by status |
decision_id | integer | Filter by decision |
search | string | Search in person name |
Success Response (200 OK)
{
"count": 500,
"results": [
{
"applicant_id": 500,
"person_id": "770e8400-e29b-41d4-a716-446655440000",
"display_name": "New Student",
"primary_email": "new.student@email.com",
"application_term_id": 8,
"application_term_code": "FA2024",
"application_program_id": 1,
"application_program_name": "Bachelor of Science in Computer Science",
"application_status_code": "SUBMITTED",
"application_status_display": "Submitted",
"decision_code": null,
"decision_display": null,
"submitted_date": "2024-03-15T10:00:00Z"
}
]
}Update Applicant Status
PATCH /api/v1/roles/applicants/{id}Request Body
| Field | Type | Description |
|---|---|---|
application_status_id | integer | New status |
decision_id | integer | Admission decision |
decision_date | date | Date of decision |
notes | string | Additional notes |
Student Advisor Assignments
GET /api/v1/roles/student-advisors
POST /api/v1/roles/student-advisorsManage advisor assignments for students.
Create Assignment
{
"student_id": 1001,
"advisor_id": 15,
"advisor_role_id": 1,
"is_primary": true,
"effective_date": "2024-08-26"
}Role Assignment Business Logic
Roles are derived from actions, not created directly.
| Role | How It's Created |
|---|---|
| Student | Created when a person registers for their first class |
| Teacher | Created when a person is assigned to teach a section |
| Advisor | Created when a person is assigned to advise students |
| Applicant | Created when a person submits an application |
Workflow
Admission Application → Applicant record created
↓
Admission Decision → Status updated (Admitted/Denied/Waitlist)
↓
Course Registration → When admitted, Student record createdUI Implications
- DO NOT create "New Student" or "New Teacher" forms
- DO create "New Person" - people are the base entity
- Edit demographics through the Person API
- Role-specific data managed through role-specific endpoints
Complete endpoint reference
Every route this domain registers, with the permission node that gates it. Generated from the route table, so it is complete by construction — the sections above explain behaviour, this one guarantees nothing is missing.
Paths are relative to /api/v1/roles. A node in italics is an exemption rather than a grant: selfservice acts only on the caller's own record, public needs no session at all, and custom carries its own wrapper.
| Method | Endpoint | Permission node | Description |
|---|---|---|---|
| GET | /advisors | ADVISING.ADVISORS | List advisors |
| POST | /advisors | ADVISING.ADVISORS | Create a advisor |
| GET | /advisors/available | ADVISING.ADVISORS | Get available |
| GET | /advisors/candidates | ADVISING.ADVISORS | Search advisor candidates |
| GET | /advisors/lookup/by-person/{personUUID} | ADVISING.ADVISORS | Get one by person |
| GET | /advisors/lookup/by-person/{personUUID}/all | ADVISING.ADVISORS | Get the by person's all |
| DELETE | /advisors/{advisorID} | ADVISING.ADVISORS | Delete a advisor |
| PATCH | /advisors/{advisorID} | ADVISING.ADVISORS | Update a advisor |
| GET | /advisors/{advisorID}/advisees | ADVISING.ADVISORS | List the advisor's advisees |
| GET | /applicants | ADMISSIONS.APPLICATIONS | List applicants |
| POST | /applicants | ADMISSIONS.APPLICATIONS | Create a applicant |
| DELETE | /applicants/{applicantID} | ADMISSIONS.APPLICATIONS | Delete a applicant |
| GET | /applicants/{applicantID} | ADMISSIONS.APPLICATIONS | Get one applicant |
| PATCH | /applicants/{applicantID} | ADMISSIONS.APPLICATIONS | Update a applicant |
| GET | /class-standing-thresholds | ADMIN.ACADEMIC_SETTINGS | List class standing thresholds |
| POST | /class-standing-thresholds | ADMIN.ACADEMIC_SETTINGS | Create a class standing threshold |
| DELETE | /class-standing-thresholds/{thresholdID} | ADMIN.ACADEMIC_SETTINGS | Delete a class standing threshold |
| GET | /class-standing-thresholds/{thresholdID} | ADMIN.ACADEMIC_SETTINGS | Get one class standing threshold |
| PATCH | /class-standing-thresholds/{thresholdID} | ADMIN.ACADEMIC_SETTINGS | Update a class standing threshold |
| PUT | /class-standing-thresholds/{thresholdID} | ADMIN.ACADEMIC_SETTINGS | Replace a class standing threshold |
| GET | /cohort-types | ADMIN.COHORTS | List cohort types |
| POST | /cohort-types | ADMIN.COHORT_TYPES | Create a cohort type |
| DELETE | /cohort-types/{cohortTypeID} | ADMIN.COHORT_TYPES | Delete a cohort type |
| GET | /cohort-types/{cohortTypeID} | ADMIN.COHORTS | Get one cohort type |
| PATCH | /cohort-types/{cohortTypeID} | ADMIN.COHORT_TYPES | Update a cohort type |
| GET | /cohorts | ADMIN.COHORTS | List cohorts |
| POST | /cohorts | ADMIN.COHORTS | Create a cohort |
| GET | /cohorts/dropdown | ADMIN.COHORTS | List options for a picker |
| DELETE | /cohorts/{cohortID} | ADMIN.COHORTS | Delete a cohort |
| GET | /cohorts/{cohortID} | ADMIN.COHORTS | Get one cohort |
| PATCH | /cohorts/{cohortID} | ADMIN.COHORTS | Update a cohort |
| GET | /cohorts/{cohortID}/advisors | ADMIN.COHORTS | List a cohort's advisors |
| POST | /cohorts/{cohortID}/advisors | ADMIN.COHORTS | Assign an advisor to a cohort |
| POST | /cohorts/{cohortID}/advisors/{cohortAdvisorID}/end | ADMIN.COHORTS | End a cohort advisor assignment |
| POST | /cohorts/{cohortID}/assign_students | ADMIN.COHORTS | Assign students for a cohort |
| GET | /cohorts/{cohortID}/available_students | ADMIN.COHORTS | List the cohort's available students |
| POST | /cohorts/{cohortID}/bulk_assign | ADMIN.COHORTS | Assign majors, minors and an advisor to every open member |
| POST | /cohorts/{cohortID}/remove_students | ADMIN.COHORTS | Remove students for a cohort |
| GET | /cohorts/{cohortID}/students | ADMIN.COHORTS | List the cohort's students |
| POST | /cohorts/{cohortID}/sync | ADMIN.COHORTS | Sync lockstep cohort membership |
| GET | /me/advisor | selfservice | Get advisor |
| GET | /me/billing | selfservice | Get billing |
| GET | /me/grades | selfservice | List grades |
| GET | /me/schedule | selfservice | Get schedule |
| GET | /me/student | selfservice | Get student |
| GET | /me/transcript | selfservice | Get transcript |
| POST | /probation-batch-check | ADMIN.ACADEMIC_SETTINGS | Create probation batch check |
| GET | /student-advisors | ADVISING.ADVISORS | List student advisors |
| POST | /student-advisors | ADVISING.ADVISORS | Create a student advisor |
| DELETE | /student-advisors/{studentAdvisorID} | ADVISING.ADVISORS | Delete a student advisor |
| GET | /student-advisors/{studentAdvisorID} | ADVISING.ADVISORS | Get one student advisor |
| PATCH | /student-advisors/{studentAdvisorID} | ADVISING.ADVISORS | Update a student advisor |
| GET | /student-campus-assignments | ADMIN.CAMPUS_ASSIGNMENTS | List student campus assignments |
| POST | /student-campus-assignments | ADMIN.CAMPUS_ASSIGNMENTS | Create a student campus assignment |
| DELETE | /student-campus-assignments/{assignmentID} | ADMIN.CAMPUS_ASSIGNMENTS | Delete a student campus assignment |
| GET | /student-campus-assignments/{assignmentID} | ADMIN.CAMPUS_ASSIGNMENTS | Get one student campus assignment |
| PATCH | /student-campus-assignments/{assignmentID} | ADMIN.CAMPUS_ASSIGNMENTS | Update a student campus assignment |
| POST | /student-campus-assignments/{assignmentID}/set_primary | ADMIN.CAMPUS_ASSIGNMENTS | Set primary for a student campus assignment |
| GET | /student-lists | STUDENTS.LISTS | List student lists |
| POST | /student-lists | STUDENTS.LISTS | Create a student list |
| POST | /student-lists/generate | STUDENTS.LISTS | Generate |
| GET | /student-lists/my_lists | STUDENTS.LISTS | List my lists |
| GET | /student-lists/org-tree | STUDENTS.LISTS | Get org tree |
| POST | /student-lists/preview_filter | STUDENTS.LISTS | Preview filter |
| GET | /student-lists/shared_with_me | STUDENTS.LISTS | Get shared with me |
| DELETE | /student-lists/{listID} | STUDENTS.LISTS | Delete a student list |
| GET | /student-lists/{listID} | STUDENTS.LISTS | Get one student list |
| PATCH | /student-lists/{listID} | STUDENTS.LISTS | Update a student list |
| POST | /student-lists/{listID}/add_members | STUDENTS.LISTS | Add members for a student list |
| GET | /student-lists/{listID}/members | STUDENTS.LISTS | List the student list's members |
| POST | /student-lists/{listID}/members | STUDENTS.LISTS | Add members to a student list |
| DELETE | /student-lists/{listID}/members/{memberID} | STUDENTS.LISTS | Delete a member |
| POST | /student-lists/{listID}/remove_members | STUDENTS.LISTS | Remove members for a student list |
| POST | /student-lists/{listID}/share | STUDENTS.LISTS | Add share to a student list |
| POST | /student-lists/{listID}/shares | STUDENTS.LISTS | Add shares to a student list |
| DELETE | /student-lists/{listID}/shares/{shareID} | STUDENTS.LISTS | Delete a share |
| POST | /student-lists/{listID}/unshare | STUDENTS.LISTS | Add unshare to a student list |
| GET | /student-majors | STUDENTS.SEARCH | List student majors |
| POST | /student-majors | STUDENTS.SEARCH | Create a student major |
| DELETE | /student-majors/{majorID} | STUDENTS.SEARCH | Delete a student major |
| PATCH | /student-majors/{majorID} | STUDENTS.SEARCH | Update a student major |
| GET | /student-majors/{studentMajorID}/emphases | STUDENTS.SEARCH | List the student major's emphases |
| POST | /student-majors/{studentMajorID}/emphases | STUDENTS.SEARCH | Add emphases to a student major |
| DELETE | /student-majors/{studentMajorID}/emphases/{studentEmphasisID} | STUDENTS.SEARCH | Delete a emphas |
| GET | /student-minors | STUDENTS.SEARCH | List student minors |
| POST | /student-minors | STUDENTS.SEARCH | Create a student minor |
| DELETE | /student-minors/{minorID} | STUDENTS.SEARCH | Delete a student minor |
| PATCH | /student-minors/{minorID} | STUDENTS.SEARCH | Update a student minor |
| GET | /students | STUDENTS.SEARCH | List students |
| POST | /students | STUDENTS.SEARCH | Create a student |
| GET | /students/lookup/by-person/{personUUID} | selfservice | Get one by person |
| GET | /students/search | STUDENTS.SEARCH | Search |
| DELETE | /students/{studentID} | STUDENTS.SEARCH | Delete a student |
| PATCH | /students/{studentID} | STUDENTS.SEARCH | Update a student |
| GET | /students/{studentID}/academic-status-history | STUDENTS.SEARCH | Get the student's academic status history |
| POST | /students/{studentID}/academic-status-history | STUDENTS.SEARCH | Add academic status history to a student |
| DELETE | /students/{studentID}/academic-status-history/{historyID} | STUDENTS.SEARCH | Delete a academic status history |
| GET | /students/{studentID}/admission-status-history | STUDENTS.SEARCH | Get the student's admission status history |
| POST | /students/{studentID}/admission-status-history | STUDENTS.SEARCH | Add admission status history to a student |
| DELETE | /students/{studentID}/admission-status-history/{historyID} | STUDENTS.SEARCH | Delete a admission status history |
| GET | /students/{studentID}/cohorts | STUDENTS.SEARCH | List a student's cohort memberships |
| POST | /students/{studentID}/cohorts | ADMIN.COHORTS | Add a cohort membership |
| POST | /students/{studentID}/cohorts/end | ADMIN.COHORTS | End-date a cohort membership |
| DELETE | /students/{studentID}/cohorts/{studentCohortID} | ADMIN.COHORTS | Delete a cohort membership |
| GET | /students/{studentID}/majors | STUDENTS.SEARCH | List the student's majors |
| POST | /students/{studentID}/majors | STUDENTS.SEARCH | Add majors to a student |
| GET | /students/{studentID}/majors/active | STUDENTS.SEARCH | Get active |
| DELETE | /students/{studentID}/majors/{majorID} | STUDENTS.SEARCH | Delete a major |
| PATCH | /students/{studentID}/majors/{majorID} | STUDENTS.SEARCH | Update a major |
| GET | /students/{studentID}/minors | STUDENTS.SEARCH | List the student's minors |
| POST | /students/{studentID}/minors | STUDENTS.SEARCH | Add minors to a student |
| GET | /students/{studentID}/minors/active | STUDENTS.SEARCH | Get active |
| DELETE | /students/{studentID}/minors/{minorID} | STUDENTS.SEARCH | Delete a minor |
| PATCH | /students/{studentID}/minors/{minorID} | STUDENTS.SEARCH | Update a minor |
| GET | /students/{studentID}/schedule | STUDENTS.SEARCH | Get the student's schedule |
| GET | /teacher-credentials | PEOPLE.VIEW | List teacher credentials |
| POST | /teacher-credentials | PEOPLE.VIEW | Create a teacher credential |
| DELETE | /teacher-credentials/{credentialID} | PEOPLE.VIEW | Delete a teacher credential |
| GET | /teacher-credentials/{credentialID} | PEOPLE.VIEW | Get one teacher credential |
| PATCH | /teacher-credentials/{credentialID} | PEOPLE.VIEW | Update a teacher credential |
| GET | /teachers | PEOPLE.VIEW | List teachers |
| POST | /teachers | PEOPLE.VIEW | Create a teacher |
| DELETE | /teachers/{teacherID} | PEOPLE.VIEW | Delete a teacher |
| GET | /teachers/{teacherID} | PEOPLE.VIEW | Get one teacher |
| PATCH | /teachers/{teacherID} | PEOPLE.VIEW | Update a teacher |
| GET | /teachers/{teacherID}/sections | PEOPLE.VIEW | List the teacher's sections |