Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
title: Student Web Service (SWS) Enrollment Major API
description: Student Web Service (SWS) provides a RESTful API to access and update central student data. Subscribe to http://mailman.u.washington.edu/mailman/listinfo/sws-client-app-dev to get notifications about planned outages, support and the announcement of new features.
contact:
name: Enterprise Web Services & Events Team
url: https://itconnect.uw.edu/service/enterprise-web-services-and-events/
email: sws-support@uw.edu
version: v5
termsOfService: https://www.washington.edu/online/terms/
servers:
- url: https://ws.admin.washington.edu/student
description: UW-IT Enterprise Web Services production host for the Student Web Service
externalDocs:
description: UW-IT Enterprise Web Services registry
url: https://webservices.washington.edu/sws/
tags:
- name: EnrollmentMajor
x-operator: institution
x-provenance:
method: derived
source: openapi/_original/university-of-washington-student-web-service.yaml
generated: '2026-08-30'
note: Re-based by the university pipeline on 2026-08-30. refine-openapis had welded the IdCard Web Service title/contact/base onto outputs split from the Student Web Service original; identity restored from the true parent named above and the relative base resolved to the production host published on the EWS registry.
paths:
/v5/enrollment/{year},{quarter},{regid}/major:
get:
tags:
- EnrollmentMajor
summary: Get the enrolled major for a specific student
description: "<pre>\n {\n \"DisplayTitle\" : \"Enrollment Major Search\",\n \"ews_guid\" : \"5B4A9CC8-2744-4FCB-9977-495798098EE5\",\n \"LongDescription\" : \"Display the enrolled major for the specified year, quarter and regid\",\n \"ShortDescription\" : \"Get a specific enrolled major\",\n \"OriginatingSchema\" : [ { \"source\":\"swssdb\" }, { \"source\":\"uweo\" }, { \"source\":\"sdb\" }, { \"source\":\"irws\" } ],\n \"Notes\" : \"This resource requires any of the following ASTRA roles:\n - sws:Support\n - sws:MajorUpdater\n This resource supports the following authentication types:\n - X.509 Certificate\n - NetID \",\n \"Links\" : [ \"https://metadata.uw.edu/Catalog/ViewItem/Term/studentdata.major\" ],\n \"Synonyms\" : []\n }\n </pre>"
operationId: GetEnrollmentMajor
parameters:
- name: year
in: path
description: 'The 4 digit year. For example: 2025'
required: true
schema:
type: string
- name: quarter
in: path
description: 'The 1 digit quarter. For example: 0=Default, 1=winter, 2=spring, 3=summer, 4=autumn'
required: true
schema:
type: string
- name: regid
in: path
description: RegIDs are the authoritative unique IDs guaranteed to identify a UW person permanently. RegIDs are assigned to a person by the Identity Registration Service, the authoritative source for person data reconciled from several data sources which may represent multiple records and accounts for a single person. A given RegID will always refer to the same person, regardless of name, status or affiliation changes.
required: true
schema:
type: string
responses:
'400':
description: 'Invalid arg: year | Invalid arg: quarter | Invalid arg: regid ID | No student found for RegID | not a graduate student in requested year / quarter | one or more params are missing'
'404':
description: No major found.
'200':
description: OK
content:
text/html:
schema:
$ref: '#/components/schemas/EnrollmentMajorListViewModel'
application/xml:
schema:
$ref: '#/components/schemas/EnrollmentMajorListViewModel'
text/xml:
schema:
$ref: '#/components/schemas/EnrollmentMajorListViewModel'
text/plain:
schema:
$ref: '#/components/schemas/EnrollmentMajorListViewModel'
application/json:
schema:
$ref: '#/components/schemas/EnrollmentMajorListViewModel'
text/json:
schema:
$ref: '#/components/schemas/EnrollmentMajorListViewModel'
'202':
description: Accepted
'301':
description: MovedPermanently
'302':
description: Found
'304':
description: NotModified
'401':
description: Identity '{identity}' is not authorized to access this resource.
'405':
description: MethodNotAllowed
'500':
description: InternalServerError
'503':
description: ServiceUnavailable
put:
tags:
- EnrollmentMajor
summary: Update the enrollment majors for a specific student
description: "<pre>\n {\n \"DisplayTitle\" : \"Enrollment Major\",\n \"ews_guid\" : \"9F380A08-D597-44AD-87BE-A2B2B1B4F328\",\n \"LongDescription\" : \"Update the list of enrollment majors for a specific student\",\n \"ShortDescription\" : \"Update enrollment majors\",\n \"OriginatingSchema\" : [ { \"source\":\"swssdb\" }, { \"source\":\"sdb\" }, { \"source\":\"irws\" } ],\n \"Notes\" : \"This resource requires any of the following ASTRA roles:\n - sws:Support\n - sws:MajorUpdater\n This resource supports the following authentication types:\n - X.509 Certificate\n - NetID\n The put request allows you to make a change to an existing major in the returned results of the get request.\n You must PUT back the full set of majors, even if you are only changing one.\n The count of majors in the PUT must match the count of majors from the GET.\n Required/validated request header fields are x-uw-act-as (netid) and if-match(etag). \n You must include the ETag from the GET in the PUT. This ensures that you are working with the current representation.\n Required/validated fields in the payload for person is Student name.\n Required/validated fields in the payload for each major are Abbreviation, DegreeLevel, DegreeType, \n and Pathway. All other fields are ignored in the PUT.\",\n \"Links\" : [ \"https://metadata.uw.edu/Catalog/ViewItem/Term/studentdata.major\" ],\n \"Synonyms\" : []\n }\n </pre>"
operationId: UpdateEnrollmentMajor
parameters:
- name: year
in: path
description: 'The 4 digit year. For example: 2025'
required: true
schema:
type: string
- name: quarter
in: path
description: 'The 1 digit quarter. For example: 0=Default, 1=winter, 2=spring, 3=summer, 4=autumn'
required: true
schema:
type: string
- name: regid
in: path
description: RegIDs are the authoritative unique IDs guaranteed to identify a UW person permanently. RegIDs are assigned to a person by the Identity Registration Service, the authoritative source for person data reconciled from several data sources which may represent multiple records and accounts for a single person. A given RegID will always refer to the same person, regardless of name, status or affiliation changes.
required: true
schema:
type: string
requestBody:
description: The information about the desired majors is in this targetViewModel
content:
application/json-patch+json:
schema:
$ref: '#/components/schemas/EnrollmentMajorListViewUpdateModel'
application/json:
schema:
$ref: '#/components/schemas/EnrollmentMajorListViewUpdateModel'
text/json:
schema:
$ref: '#/components/schemas/EnrollmentMajorListViewUpdateModel'
application/*+json:
schema:
$ref: '#/components/schemas/EnrollmentMajorListViewUpdateModel'
required: true
responses:
'201':
description: Updated
content:
text/html:
schema:
$ref: '#/components/schemas/EnrollmentMajorListViewModel'
application/xml:
schema:
$ref: '#/components/schemas/EnrollmentMajorListViewModel'
text/xml:
schema:
$ref: '#/components/schemas/EnrollmentMajorListViewModel'
text/plain:
schema:
$ref: '#/components/schemas/EnrollmentMajorListViewModel'
application/json:
schema:
$ref: '#/components/schemas/EnrollmentMajorListViewModel'
text/json:
schema:
$ref: '#/components/schemas/EnrollmentMajorListViewModel'
'304':
description: No changes detected in request.
'400':
description: 'Invalid arg: year | Invalid arg: quarter | invalid year/quarter (past quarter) | invalid year/quarter (transcript posted) | invalid year/quarter (not active reg quarter) | invalid year/quarter (no autumn changes prior to last day summer) | year/quarter must be after admit year/quarter | student not currently enrolled | not a graduate student in requested year/quarter | no changes specified | invalid current majors | current major not found | duplicate new major inputs | requested new major/pathway is invalid | requested new major/pathway/deglvl/type is invalie | new major already present | inputs result in duplicate majors | HTTP if-match header is empty; it is required for a PUT request. | Invalid arg: direct caller ID | x-uw-act-as is required. | No student found for RegID | Number of majors from the GET does not match number of majors in the PUT | major cannot be in a different position in the list'
'404':
description: Term not found
'412':
description: if-match ETag does not match current Etag
'202':
description: Accepted
'301':
description: MovedPermanently
'302':
description: Found
'401':
description: Identity '{identity}' is not authorized to access this resource.
'405':
description: MethodNotAllowed
'500':
description: InternalServerError
'503':
description: ServiceUnavailable
components:
schemas:
PersonResourceUri:
type: object
properties:
Name:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"IRWS.identity.uwPersonPrefferredName\" },\n { \"source\":\"IRWS.identity.uwPersonRegisteredName\" }\n ],\n \"TechnicalDescription\": \"This field is resource specific\"\n }\n </pre>"
RegID:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"IRWS.identity.regid\" }\n ],\n \"TechnicalDescription\": \"UW Registration ID. This field is resource specific\"\n }\n </pre>"
Pronouns:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"IRWS.identity.uwPersonPronoun\" }\n ],\n \"TechnicalDescription\": \"\"\n }\n </pre>"
Href:
type:
- string
- 'null'
additionalProperties: false
description: "{\n \"DisplayTitle\" : \"Person Resource URI\",\n \"TargetSchema\" : [{\"target\" : \"SWS.Person\"}],\n \"TargetOperationId\" : [\"GetPerson\"]\n}"
MajorViewModelRetro:
type: object
properties:
Abbreviation:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.sr_major_code.major_abbr\" }\n ],\n \"TechnicalDescription\": \"Abbreviation\"\n }\n </pre>"
Campus:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.sys_tbl_25_campus.branch_name\" }\n ],\n \"TechnicalDescription\": \"Campus name\"\n }\n </pre>"
DegreeLevel:
type: integer
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.student_1_college_major.deg_level\" },\n { \"source\":\"SWSSDB.registration_regis_col_major.regis_deg_level\" },\n { \"source\":\"SWSSDB.transcript_tran_col_major.tran_deg_level\" }\n ],\n \"TechnicalDescription\": \"Degree level\"\n }\n </pre>"
format: int32
DegreeName:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.sr_degree.deg_title\" }\n ],\n \"TechnicalDescription\": \"Degree name\"\n }\n </pre>"
DegreeType:
type: integer
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.student_1_college_major.deg_type\" },\n { \"source\":\"SWSSDB.registration_regis_col_major.regis_deg_type\" },\n { \"source\":\"SWSSDB.transcript_tran_col_major.tran_deg_type\" }\n ],\n \"TechnicalDescription\": \"Degree type\"\n }\n </pre>"
format: int32
FullName:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.sr_major_code.major_full_nm\" }\n ],\n \"TechnicalDescription\": \"Major full name\"\n }\n </pre>"
MajorName:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.sr_major_code.major_name\" }\n ],\n \"TechnicalDescription\": \"Major name\"\n }\n </pre>"
Pathway:
type: integer
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.registration_regis_col_major.regis_pathway\" },\n { \"source\":\"SWSSDB.student_1_college_major.pathway\"},\n { \"source\":\"SWSSDB.transcript_tran_col_major.tran_pathway\" }\n ],\n \"TechnicalDescription\": \"Major pathway\"\n }\n </pre>"
format: int32
ShortName:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.sr_major_code.major_short_nm\" }\n ],\n \"TechnicalDescription\": \"Major short name\"\n }\n </pre>"
additionalProperties: false
description: "{\n \"DisplayTitle\" : \"Major Model\",\n \"TargetSchema\" : [{\"target\" : \"SWS.Enrollment\"}]\n}"
TermResourceUri:
type: object
properties:
Href:
type:
- string
- 'null'
Year:
type: integer
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.sr_major_code.major_last_yr\" },\n { \"source\":\"SWSSDB.sr_major_code.major_first_yr\" },\n { \"source\":\"SWSSDB.sys_tbl_39_calendar.table_key\" },\n { \"source\":\"SWSSDB.student_1.last_yr_enrolled\" },\n { \"source\":\"SDB.SWI610.trm/yr\" },\n { \"source\":\"SWSSDB.sr_course_titles.first_eff_yr\" },\n { \"source\":\"UWEO.selSWSRegistrations.FirstEffectiveTerm/Year\"}\n ],\n \"TechnicalDescription\": \"Year for the given term\"\n }\n </pre>"
format: int32
Quarter:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.sr_major_code.major_last_qtr\" },\n { \"source\":\"SWSSDB.sr_major_code.major_first_qtr\" },\n { \"source\":\"SWSSDB.sys_tbl_39_calendar.table_key\" },\n { \"source\":\"SWSSDB.student_1.last_qtr_enrolled\" },\n { \"source\":\"SDB.SWI610.trm/qtr\" },\n { \"source\":\"SWSSDB.sr_course_titles.first_eff_qtr\" },\n { \"source\":\"UWEO.selSWSRegistrations.FirstEffectiveTerm/Quarter\"}\n ],\n \"TechnicalDescription\": \"Quarter for the given term\"\n }\n </pre>"
additionalProperties: false
description: "{\n \"DisplayTitle\" : \"Term Resource URI\",\n \"TargetSchema\" : [{\"target\" : \"SWS.Term\"}],\n \"TargetOperationId\" : [\"GetTerm\"]\n}"
EnrollmentMajorListViewUpdateModel:
type: object
properties:
StudentName:
type:
- string
- 'null'
Person:
$ref: '#/components/schemas/PersonResourceUri'
Majors:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/MajorViewModelRetro'
StudentSystemKey:
type:
- string
- 'null'
RegID:
type:
- string
- 'null'
Term:
$ref: '#/components/schemas/TermResourceUri'
additionalProperties: false
EnrollmentMajorListViewModel:
type: object
properties:
StudentName:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SDB.SWI610.trm/mjr.nm\" }\n ],\n \"TechnicalDescription\": \"Student Name\"\n }\n </pre>"
Person:
$ref: '#/components/schemas/PersonResourceUri'
Majors:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/MajorViewModelRetro'
StudentSystemKey:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SDB.SWI610.trm/mjr.sysk\" }\n ],\n \"TechnicalDescription\": \"Student System Key\"\n }\n </pre>"
RegID:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"IRWS.identity.regid\" }\n ],\n \"TechnicalDescription\": \"UW Registration ID\"\n }\n </pre>"
Term:
$ref: '#/components/schemas/TermResourceUri'
additionalProperties: false
description: "{\n \"DisplayTitle\" : \"Enrollment Major List Model\",\n \"TargetSchema\" : [{\"target\" : \"SWS.Enrollment\"}]\n}"