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) Course 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: Course
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/course/{year},{quarter},{curriculum_abbreviation},{course_number}:
get:
tags:
- Course
summary: Get the information about a specific course
description: "<pre>\n {\n \"DisplayTitle\" : \"Course\",\n \"ews_guid\" : \"A081D91E-7332-4975-9C5E-67F0133CC94C\",\n \"LongDescription\" : \"Display the information about a specific course. \n Can filter by year, quarter, curriculum and course number.\",\n \"ShortDescription\" : \"Display the information about a specific course\",\n \"OriginatingSchema\" : [ { \"source\":\"sdb\" }, { \"source\":\"swssdb\" }, { \"source\":\"uweo\" } ],\n \"Notes\" : \"This resource requires any of the following ASTRA roles:\n - sws:Support\n - sws:GradeSubmitter\n - sws:UnitReader\n This resource supports the following authentication types:\n - X.509 Certificate\n - NetID\n - AccessToken\n For curriculum abbreviations see the curriculum resource.\",\n \"Links\" : [ \"https://metadata.uw.edu/Catalog/ViewItem/Term/studentdata.course\" ],\n \"Synonyms\" : []\n }\n </pre>"
operationId: GetCourse
parameters:
- name: year
in: path
description: 'The 4 digit year. For example: 2025'
required: true
schema:
maxLength: 4
minLength: 4
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:
maxLength: 6
minLength: 6
type: string
- name: curriculum_abbreviation
in: path
required: true
schema:
type: string
- name: course_number
in: path
required: true
schema:
maxLength: 3
minLength: 3
type: string
responses:
'400':
description: 'Invalid arg: year | Invalid arg: quarter | Invalid arg: curriculum abbreviation | Invalid arg: course number'
'404':
description: No course with requested year, quarter, curriculum, and course number found.
'200':
description: OK
content:
text/html:
schema:
$ref: '#/components/schemas/CourseViewModel'
application/xml:
schema:
$ref: '#/components/schemas/CourseViewModel'
text/xml:
schema:
$ref: '#/components/schemas/CourseViewModel'
text/plain:
schema:
$ref: '#/components/schemas/CourseViewModel'
application/json:
schema:
$ref: '#/components/schemas/CourseViewModel'
text/json:
schema:
$ref: '#/components/schemas/CourseViewModel'
'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
/v5/course:
get:
tags:
- Course
summary: ''
description: "<pre>\n {\n \"DisplayTitle\" : \"Course Search\",\n \"ews_guid\" : \"991BDC13-42C4-4EF7-991B-785CC2516B0E\",\n \"LongDescription\" : \"Search for courses that match the supplied parameters\",\n \"ShortDescription\" : \"Search for courses\",\n \"OriginatingSchema\" : [ { \"source\":\"swssdb\" }, { \"source\":\"uweo\" } ],\n \"Notes\" : \"This resource requires any of the following ASTRA roles:\n - sws:Support\n - sws:GradeSubmitter\n - sws:UnitReader\n This resource supports the following authentication types:\n - X.509 Certificate\n - NetID\n - AccessToken\n You do not need to specify all parameters to return a successful search result. This search resource \n supports different combinations of search parameters to provide different search results.\n For curriculum abbreviations see the curriculum resource.\",\n \"Links\" : [ \"https://metadata.uw.edu/Catalog/ViewItem/Term/studentdata.course\" ],\n \"Synonyms\" : []\n }\n </pre>"
operationId: CourseSearch
parameters:
- name: year
in: query
description: 'The 4 digit year. For example: 2025'
schema:
type: string
default: ''
- name: quarter
in: query
description: 'The 1 digit quarter. For example: 0=Default, 1=winter, 2=spring, 3=summer, 4=autumn'
schema:
type: string
default: ''
- name: curriculum_abbreviation
in: query
description: ''
schema:
type: string
default: ''
- name: course_number
in: query
description: ''
schema:
type: string
default: ''
- name: course_title_contains
in: query
description: ''
schema:
type: string
default: ''
- name: course_title_starts
in: query
description: ''
schema:
type: string
default: ''
- name: exclude_courses_without_sections
in: query
description: ''
schema:
type: string
default: ''
- name: future_terms
in: query
description: Number of future terms to look ahead
schema:
type: integer
format: int32
default: 0
- name: page_size
in: query
description: ''
schema:
type: string
default: ''
- name: page_start
in: query
description: ''
schema:
type: string
default: ''
- name: changed_since_date
in: query
description: If you have a value in ChangedSinceDate all other input fields will be ignored and will return all data that has changed since the date entered. This is used for applications that only need the changes since they last checked without having to know specific details to search by.
schema:
type: string
default: ''
- name: transcriptable_course
in: query
description: "Choose yes, no, or all. If yes then results will include any course that can be creditable such that it can be shown on a transcript. This would include certain classes that also fall under the Educational Outreach (EO). Yes is also the default value chosen for this search criteria if none is specified.\n If no then only classes from EO will be returned.\n If all then both transcriptable and non-transcriptable courses will be returned.\n All will return every course regardless of whether it can be included in a transcript or not."
schema:
type: string
default: 'yes'
- name: view_unpublished
in: query
description: ''
schema:
type: string
default: 'false'
responses:
'400':
description: Invalid input | Invalid number of future terms | exclude_courses_without_sections used with future_terms is undefined | Maximum size for a change since request is 1000 | Page start must be an integer greater than 0. | Maximum size for a change since request is 1000 | Only transcriptable course or changed since or curriculum abbreviation or course title starts or course title contains can be used as a single search parameter
'200':
description: OK
content:
text/html:
schema:
$ref: '#/components/schemas/CourseSearchViewModel'
application/xml:
schema:
$ref: '#/components/schemas/CourseSearchViewModel'
text/xml:
schema:
$ref: '#/components/schemas/CourseSearchViewModel'
text/plain:
schema:
$ref: '#/components/schemas/CourseSearchViewModel'
application/json:
schema:
$ref: '#/components/schemas/CourseSearchViewModel'
text/json:
schema:
$ref: '#/components/schemas/CourseSearchViewModel'
'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
components:
schemas:
GeneralEducationRequirementViewModel:
type: object
properties:
Diversity:
type: boolean
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.time_schedule.diversity_crs\" },\n { \"source\":\"UWEO.selSWSCourseSections.GeneralEducationRequirements/Diversity\"}\n ],\n \"TechnicalDescription\": \"Diversity\"\n }\n </pre>"
EnglishComposition:
type: boolean
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SDB.SWI202.ged.engc\" },\n { \"source\":\"UWEO.selSWSCourseSections.GeneralEducationRequirements/EnglishComposition\"}\n ],\n \"TechnicalDescription\": \"English composition\"\n }\n </pre>"
IndividualsAndSocieties:
type: boolean
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SDB.SWI202.ged.ind\" },\n { \"source\":\"UWEO.selSWSCourseSections.GeneralEducationRequirements/IndividualsAndSocieties\"}\n ],\n \"TechnicalDescription\": \"Individuals and societies\"\n }\n </pre>"
NaturalWorld:
type: boolean
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SDB.SWI202.ged.nw\" },\n { \"source\":\"UWEO.selSWSCourseSections.GeneralEducationRequirements/NaturalWorld\"}\n ],\n \"TechnicalDescription\": \"Natural world\"\n }\n </pre>"
QuantitativeAndSymbolicReasoning:
type: boolean
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SDB.SWI202.ged.qsr\" },\n { \"source\":\"UWEO.selSWSCourseSections.GeneralEducationRequirements/QuantitativeAndSymbolicReasoning\"}\n ],\n \"TechnicalDescription\": \"Quantitative and symbolic reasoning\"\n }\n </pre>"
VisualLiteraryAndPerformingArts:
type: boolean
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SDB.SWI202.ged.vlpa\" },\n { \"source\":\"UWEO.selSWSCourseSections.GeneralEducationRequirements/VisualLiteraryAndPerformingArts\"}\n ],\n \"TechnicalDescription\": \"Visual literary and performing arts\"\n }\n </pre>"
Writing:
type: boolean
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SDB.SWI202.ged.wrt\" },\n { \"source\":\"UWEO.selSWSCourseSections.GeneralEducationRequirements/Writing\"}\n ],\n \"TechnicalDescription\": \"Writing\"\n }\n </pre>"
additionalProperties: false
description: "{\n \"DisplayTitle\" : \"General Education Requirement Model\",\n \"TargetSchema\" : [\n {\"target\" : \"SWS.Section\"},\n {\"target\" : \"SWS.Course\"}\n ]\n}"
CourseViewModel:
type: object
properties:
CourseNumber:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.course.course_number\" },\n { \"source\":\"UWEO.selSWSCourse.CourseNumber\" }\n ],\n \"TechnicalDescription\": \"Course number\"\n }\n </pre>"
CourseTitle:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.sr_course_titles.course_title\" },\n { \"source\":\"UWEO.selSWSCourse.CourseTitle\" }\n ],\n \"TechnicalDescription\": \"Course title\"\n }\n </pre>"
CourseCampus:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.sr_course_titles.course_branch\" },\n { \"source\":\"UWEO.selSWSCourse.CourseCampus\" }\n ],\n \"TechnicalDescription\": \"Course campus\"\n }\n </pre>"
CourseTitleLong:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.sr_course_titles.long_course_title\" },\n { \"source\":\"UWEO.selSWSCourse.CourseTitleLong\" }\n ],\n \"TechnicalDescription\": \"Course title long\"\n }\n </pre>"
CourseDescription:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.course.course_descr\" },\n { \"source\":\"UWEO.selSWSCourse.CourseDescription\" }\n ],\n \"TechnicalDescription\": \"Course description\"\n }\n </pre>"
CourseCollege:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.sr_coll_code.college_name\" },\n { \"source\":\"UWEO.selSWSCourse.CourseCollege\" }\n ],\n \"TechnicalDescription\": \"Course college\"\n }\n </pre>"
CourseComment:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.course.course_comment\" },\n { \"source\":\"UWEO.selSWSCourse.CourseComment\" }\n ],\n \"TechnicalDescription\": \"Course comment\"\n }\n </pre>"
CreditControl:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.course.credit_control\" },\n { \"source\":\"UWEO.selSWSCourse.CreditControl\" }\n ],\n \"TechnicalDescription\": \"Credit control\"\n }\n </pre>"
Curriculum:
$ref: '#/components/schemas/CurriculumShortResourceUri'
FirstEffectiveTerm:
$ref: '#/components/schemas/TermResourceUri'
GradingSystem:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.course.grading_system\" },\n { \"source\":\"UWEO.selSWSCourse.GradingSystem\" }\n ],\n \"TechnicalDescription\": \"Grading system\"\n }\n </pre>"
LastEffectiveTerm:
$ref: '#/components/schemas/TermResourceUri'
MinimumTermCredit:
type: number
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.course.min_qtr_credits\" },\n { \"source\":\"UWEO.selSWSCourse.MinimumTermCredit\" }\n ],\n \"TechnicalDescription\": \"Minimum term credit\"\n }\n </pre>"
format: double
MaximumTermCredit:
type: number
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.course.max_qtr_credits\" },\n { \"source\":\"UWEO.selSWSCourse.MaximumTermCredit\" }\n ],\n \"TechnicalDescription\": \"Maximum term credit\"\n }\n </pre>"
format: double
MaximumCredit:
type: number
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.course.max_credits\" },\n { \"source\":\"UWEO.selSWSCourse.MaximumCredit\" }\n ],\n \"TechnicalDescription\": \"Maximum credit\"\n }\n </pre>"
format: double
GeneralEducationRequirements:
$ref: '#/components/schemas/GeneralEducationRequirementViewModel'
RepositoryTimeStamp:
type:
- string
- 'null'
Metadata:
type:
- string
- 'null'
additionalProperties: false
description: "{\n \"DisplayTitle\" : \"Course Model\",\n \"TargetSchema\" : [{\"target\" : \"SWS.Course\"}]\n}"
CourseSearchResourceUri:
type: object
properties:
Year:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"url\" }\n ],\n \"TechnicalDescription\": \"User supplied value\"\n }\n </pre>"
Quarter:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"url\" }\n ],\n \"TechnicalDescription\": \"User supplied value\"\n }\n </pre>"
CurriculumAbbreviation:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"url\" }\n ],\n \"TechnicalDescription\": \"User supplied value\"\n }\n </pre>"
CourseNumber:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"url\" }\n ],\n \"TechnicalDescription\": \"User supplied value\"\n }\n </pre>"
FutureTerms:
type: integer
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"url\" }\n ],\n \"TechnicalDescription\": \"User supplied value\"\n }\n </pre>"
format: int32
CourseTitleStarts:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"url\" }\n ],\n \"TechnicalDescription\": \"User supplied value\"\n }\n </pre>"
CourseTitleContains:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"url\" }\n ],\n \"TechnicalDescription\": \"User supplied value\"\n }\n </pre>"
ExcludeCoursesWithoutSections:
type: boolean
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"url\" }\n ],\n \"TechnicalDescription\": \"User supplied value\"\n }\n </pre>"
ChangedSinceDate:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"url\" }\n ],\n \"TechnicalDescription\": \"User supplied value\"\n }\n </pre>"
TranscriptableCourse:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"url\" }\n ],\n \"TechnicalDescription\": \"User supplied value\"\n }\n </pre>"
ViewUnpublished:
type: boolean
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"url\" }\n ],\n \"TechnicalDescription\": \"User supplied value\"\n }\n </pre>"
PageStart:
type:
- string
- 'null'
PageSize:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"url\" }\n ],\n \"TechnicalDescription\": \"User supplied value\"\n }\n </pre>"
Href:
type:
- string
- 'null'
additionalProperties: false
description: "{\n \"DisplayTitle\" : \"Course Search Resource URI\",\n \"TargetSchema\" : [{\"target\" : \"SWS.Course\"}],\n \"TargetOperationId\" : [\"CourseSearch\"]\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}"
CourseSearchViewModel:
type: object
properties:
TotalCount:
type: integer
format: int32
PageSize:
type:
- string
- 'null'
PageStart:
type:
- string
- 'null'
Courses:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/CourseSearchResultViewModel'
readOnly: true
Current:
$ref: '#/components/schemas/CourseSearchResourceUri'
Previous:
$ref: '#/components/schemas/CourseSearchResourceUri'
Next:
$ref: '#/components/schemas/CourseSearchResourceUri'
additionalProperties: false
description: "{\n \"DisplayTitle\" : \"Course Search Model\",\n \"TargetSchema\" : [{\"target\" : \"SWS.Course\"}]\n}"
CourseSearchResultViewModel:
type: object
properties:
Href:
type:
- string
- 'null'
Year:
type: integer
format: int32
Quarter:
type:
- string
- 'null'
CourseTitle:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.sr_course_titles.course_title\" },\n { \"source\":\"UWEO.selSWSCourse.CourseTitle\" }\n ],\n \"TechnicalDescription\": \"Course title\"\n }\n </pre>"
CurriculumAbbreviation:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.sr_curric_code.curric_abbr\" }\n ],\n \"TechnicalDescription\": \"Curriculum abbreviation\"\n }\n </pre>"
CourseTitleLong:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.sr_course_titles.long_course_title\" },\n { \"source\":\"UWEO.selSWSCourse.CourseTitleLong\" }\n ],\n \"TechnicalDescription\": \"Course title long\"\n }\n </pre>"
CourseNumber:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.course.course_number\" },\n { \"source\":\"UWEO.selSWSCourse.CourseNumber\" }\n ],\n \"TechnicalDescription\": \"Course number\"\n }\n </pre>"
additionalProperties: false
description: "{\n \"DisplayTitle\" : \"Course Search Result\",\n \"TargetSchema\" : [{\"target\" : \"SWS.Course\"}]\n}"
CurriculumShortResourceUri:
type: object
properties:
Href:
type:
- string
- 'null'
Year:
type: integer
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.sr_course_titles.first_eff_yr\" },\n { \"source\":\"SWSSDB.sr_course_titles.last_eff_yr\" }\n ],\n \"TechnicalDescription\": \"Year\"\n }\n </pre>"
format: int32
Quarter:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.sr_course_titles.first_eff_qtr\" },\n { \"source\":\"SWSSDB.sr_course_titles.last_eff_qtr\" }\n ],\n \"TechnicalDescription\": \"Quarter\"\n }\n </pre>"
CurriculumAbbreviation:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.sr_curric_code.curric_abbr\" }\n ],\n \"TechnicalDescription\": \"Curriculum abbreviation\"\n }\n </pre>"
additionalProperties: false
description: "{\n \"DisplayTitle\" : \"Curriculum Resource URI\",\n \"TargetSchema\" : [{\"target\" : \"SWS.Curriculum\"}],\n \"TargetOperationId\" : [\"CurriculumSearch\"]\n}"