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) Registration 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: Registration
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/registration/{year},{quarter},{curriculum_abbreviation},{course_number},{section_id},{reg_id},{duplicate_code}:
get:
tags:
- Registration
summary: Get the registration associating a student with a particular course section
description: "<pre>\n {\n \"DisplayTitle\" : \"Registration with Duplicate Code\",\n \"ews_guid\" : \"6E4840B1-C6C1-47F2-8366-07BAAFE5F358\",\n \"LongDescription\" : \"The Registration resource represents a given student's association to a specific course section, \n and can refer to both current, past, and future associations.\",\n \"ShortDescription\" : \"Search for a registration record\",\n \"OriginatingSchema\" : [ { \"source\":\"swssdb\" }, { \"source\":\"uweo\" }, { \"source\":\"irws\" } ],\n \"Notes\" : \"This resource requires any of the following ASTRA roles:\n - sws:Support\n - sws:GradeSubmitter\n - sws:GradeReader\n - sws:UnitReader\n This resource supports the following authentication types:\n - X.509 Certificate\n - NetID \",\n \"Links\" : [ \"https://metadata.uw.edu/Catalog/ViewItem/Term/studentdata.studentcourseregistration\" ],\n \"Synonyms\" : []\n }\n </pre>"
operationId: GetRegistration
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: curriculum_abbreviation
in: path
description: ''
required: true
schema:
type: string
- name: course_number
in: path
description: ''
required: true
schema:
type: string
- name: section_id
in: path
description: ''
required: true
schema:
type: string
- name: reg_id
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
- name: duplicate_code
in: path
description: "Optional parameter (made optional by question mark in template). Duplicate Code allows registration of a student in a given section multiple times. \n The duplicate code argument uniquely identifies a specific registration record among others within the same course section. For example, an initial registration may begin with 'Added to class' (duplicate code blank), but then at a later point may become 'Dropped from class' (duplicate code A), followed by a re-registration into the course section 'Added to class' (duplicate code B). \n When a registration is transcript-ed(prior quarter) the duplicate codes will often change to a numeral(1,2,3...) and many of the original registrations will be removed and replaced with a single transcript record. \n Duplicate codes are not serial but often appear to be. They are to be used only to identify uniqueness and should not be assumed to represent any business meaning."
required: true
schema:
maxLength: 1
minLength: 1
type: string
default: ''
responses:
'400':
description: 'Invalid arg: year | Invalid arg: quarter | Invalid arg: curriculum abbreviation | Invalid arg: course number | Invalid arg: section id | Invalid arg: reg ID | Invalid arg: duplicate code | Student not found for regid'
'404':
description: No registration found.
'200':
description: OK
content:
text/html:
schema:
$ref: '#/components/schemas/RegistrationViewModel'
application/xml:
schema:
$ref: '#/components/schemas/RegistrationViewModel'
text/xml:
schema:
$ref: '#/components/schemas/RegistrationViewModel'
text/plain:
schema:
$ref: '#/components/schemas/RegistrationViewModel'
application/json:
schema:
$ref: '#/components/schemas/RegistrationViewModel'
text/json:
schema:
$ref: '#/components/schemas/RegistrationViewModel'
'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/registration/{year},{quarter},{curriculum_abbreviation},{course_number},{section_id},{reg_id},:
get:
tags:
- Registration
summary: Get the registration associating a student with a particular course section
description: "<pre>\n {\n \"DisplayTitle\" : \"Registration\",\n \"ews_guid\" : \"6E4840B1-C6C1-47F2-8366-07BAAFE5F358\",\n \"LongDescription\" : \"The Registration resource represents a given student's association to a specific course section, \n and can refer to both current, past, and future associations.\",\n \"ShortDescription\" : \"Search for a registration record\",\n \"OriginatingSchema\" : [ { \"source\":\"swssdb\" }, { \"source\":\"uweo\" }, { \"source\":\"irws\" } ],\n \"Notes\" : \"This resource requires any of the following ASTRA roles:\n - sws:Support\n - sws:GradeSubmitter\n - sws:GradeReader\n - sws:UnitReader\n This resource supports the following authentication types:\n - X.509 Certificate\n - NetID \",\n \"Links\" : [ \"https://metadata.uw.edu/Catalog/ViewItem/Term/studentdata.studentcourseregistration\" ],\n \"Synonyms\" : []\n }\n </pre>"
operationId: GetRegistrationNoDupeCode
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: curriculum_abbreviation
in: path
description: ''
required: true
schema:
type: string
- name: course_number
in: path
description: ''
required: true
schema:
type: string
- name: section_id
in: path
description: ''
required: true
schema:
type: string
- name: reg_id
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: curriculum abbreviation | Invalid arg: course number | Invalid arg: section id | Invalid arg: reg ID | Invalid arg: duplicate code | Student not found for regid'
'404':
description: No registration found.
'200':
description: OK
content:
text/html:
schema:
$ref: '#/components/schemas/RegistrationViewModel'
application/xml:
schema:
$ref: '#/components/schemas/RegistrationViewModel'
text/xml:
schema:
$ref: '#/components/schemas/RegistrationViewModel'
text/plain:
schema:
$ref: '#/components/schemas/RegistrationViewModel'
application/json:
schema:
$ref: '#/components/schemas/RegistrationViewModel'
text/json:
schema:
$ref: '#/components/schemas/RegistrationViewModel'
'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/registration:
get:
tags:
- Registration
summary: Search for registrations that match the supplied parameters
description: "<pre>\n {\n \"DisplayTitle\" : \"Registration Search\",\n \"ews_guid\" : \"72184D14-4C07-4EBB-AE85-1ABD4979B106\",\n \"LongDescription\" : \"Search for a registration record in many ways\",\n \"ShortDescription\" : \"Search for registration records\",\n \"OriginatingSchema\" : [ { \"source\":\"swssdb\" }, { \"source\":\"uweo\" }, { \"source\":\"irws\" } ],\n \"Notes\" : \"This resource requires any of the following ASTRA roles:\n - sws:Support\n - sws:GradeReader\n - sws:GradeSubmitter\n - sws:UnitReader\n This resource supports the following authentication types:\n - X.509 Certificate\n - NetID\n To return a list of all the student enrollment activity for a specified section including adds and drops, \n enter values for the Year, Quarter, Curriculum Abbreviation, and Section ID attributes.\n To return a list of all students who are actively enrolled in the specified section, enter values \n for the Year, Quarter, Curriculum Abbreviation, and Section ID attributes, and select the Active \n Registrations checkbox.\n To return a list of all sections in which a specified student is actively enrolled, enter the Year, Quarter, \n and Reg_ID attributes and select the Active Registrations checkbox.\n To return list of all sections in which a student is enrolled including those that have been dropped, \n enter the Year, Quarter, and Reg_ID attributes. Notice that is_active has been omitted. The default value \n for this attribute is off.\",\n \"Links\" : [ \"https://metadata.uw.edu/Catalog/ViewItem/Term/studentdata.studentcourseregistration\" ],\n \"Synonyms\" : []\n }\n </pre>"
operationId: RegistrationSearch
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: section_id
in: query
description: ''
schema:
type: string
default: ''
- name: reg_id
in: query
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.
schema:
type: string
default: ''
- name: is_active
in: query
description: Choose on or true to enable. Otherwise off or false.
schema:
type: string
default: ''
- name: instructor_reg_id
in: query
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.
schema:
type: string
default: ''
- name: verbose
in: query
description: Choose on or true to enable. Otherwise off or false. If enabled it returns a list of search result URIs and some information about each registration. Each item contains a link that can be used to request a single registration payload. If disabled (default) it returns a full list of registration resource payloads.
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, 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: page_size
in: query
description: ''
schema:
type: string
- name: page_start
in: query
description: ''
schema:
type: string
responses:
'400':
description: 'Invalid arg: year | Invalid arg: quarter | Invalid arg: curriculum abbreviation | Invalid arg: course number | Invalid arg: section id | Invalid arg: reg ID | Invalid arg: isactive | RegistrationSearch only supports searches using 3-8 params. | Invalid input: Cannot use cache bypass with use of transcriptable system or changed since | Invalid input | Student not found for regid | Maximum size for a change since request is 1000 | Page size must be an integer between 1 and 500, inclusive.'
'404':
description: No registration found.
'200':
description: OK
content:
text/html:
schema:
$ref: '#/components/schemas/RegistrationSearchViewModel'
application/xml:
schema:
$ref: '#/components/schemas/RegistrationSearchViewModel'
text/xml:
schema:
$ref: '#/components/schemas/RegistrationSearchViewModel'
text/plain:
schema:
$ref: '#/components/schemas/RegistrationSearchViewModel'
application/json:
schema:
$ref: '#/components/schemas/RegistrationSearchViewModel'
text/json:
schema:
$ref: '#/components/schemas/RegistrationSearchViewModel'
'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:
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}"
RegistrationViewModel:
type: object
properties:
Section:
$ref: '#/components/schemas/SectionResourceUri'
Person:
$ref: '#/components/schemas/PersonResourceUri'
DuplicateCode:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.registration_courses.dup_enroll\" },\n { \"source\":\"url\" }\n ],\n \"TechnicalDescription\": \"Duplicate code. 0 or empty depending on flipyear for EO.\"\n }\n </pre>"
Href:
type:
- string
- 'null'
format: uri
Instructor:
$ref: '#/components/schemas/PersonResourceUri'
RequestStatus:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.registration_courses.request_status\" },\n { \"source\":\"UWEO.selSWSRegistrations.request_status\" }\n ],\n \"TechnicalDescription\": \"Request Status\"\n }\n </pre>"
IsActive:
type: boolean
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.registration_courses.request_status\" },\n { \"source\":\"UWEO.selSWSRegistrations.is_active\" }\n ],\n \"TechnicalDescription\": \"Is registration active\"\n }\n </pre>"
RequestDate:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.registration_courses.request_dt\" },\n { \"source\":\"UWEO.selSWSRegistrations.request_date\" }\n ],\n \"TechnicalDescription\": \"Request date\"\n }\n </pre>"
Credits:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.registration_courses.credits\" },\n { \"source\":\"SWSSDB.transcript_courses_taken.course_credits\" },\n { \"source\":\"UWEO.selSWSRegistrations.credits\" }\n ],\n \"TechnicalDescription\": \"Credits\"\n }\n </pre>"
VariableCredit:
type: boolean
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.registration_courses.v_cred\" },\n { \"source\":\"UWEO.selSWSRegistrations.variable_credits\" }\n ],\n \"TechnicalDescription\": \"Variable Credits\"\n }\n </pre>"
HonorsCourse:
type: boolean
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.registration_courses.honor_course\" },\n { \"source\":\"SWSSDB.transcript_courses_taken.honor_course\" }\n ],\n \"TechnicalDescription\": \"Honors course\"\n }\n </pre>"
WritingCourse:
type: boolean
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.registration_courses.writing_ind\" },\n { \"source\":\"SWSSDB.transcript_courses_taken.writing\" }\n ],\n \"TechnicalDescription\": \"Writing course\"\n }\n </pre>"
Auditor:
type: boolean
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.registration_courses.grading_system\" },\n { \"source\":\"SWSSDB.transcript_courses_taken.grade_system\" },\n { \"source\":\"UWEO.selSWSRegistrations.auditor\" }\n ],\n \"TechnicalDescription\": \"Auditor\"\n }\n </pre>"
FeeBaseType:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.registration_courses.self_sust_type\" }\n ],\n \"TechnicalDescription\": \"Fee base type\"\n }\n </pre>"
Grade:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.registration_courses.grade\" },\n { \"source\":\"SWSSDB.transcript_courses_taken.grade\" },\n { \"source\":\"UWEO.selSWSRegistrations.grade\" }\n ],\n \"TechnicalDescription\": \"Grade\"\n }\n </pre>"
GradeDocumentID:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.registration_courses.grade_doc_number\" },\n { \"source\":\"SWSSDB.transcript_courses_taken.grade_doc_id\" }\n ],\n \"TechnicalDescription\": \"Grade document id\"\n }\n </pre>"
GradeDate:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.registration_courses.grade_dt\" },\n { \"source\":\"SWSSDB.transcript_courses_taken.grade_dt\" },\n { \"source\":\"UWEO.selSWSRegistrations.grade_date\" }\n ],\n \"TechnicalDescription\": \"Grade date\"\n }\n </pre>"
RepeatCourse:
type: boolean
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.transcript_courses_taken.grade\" }\n ],\n \"TechnicalDescription\": \"Repeat course\"\n }\n </pre>"
SourceDateString:
type:
- string
- 'null'
Metadata:
type:
- string
- 'null'
RepositoryTimeStamp:
type:
- string
- 'null'
GradingSystem:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"UWEO.selSWSRegistrations.grading_system\" }\n ],\n \"TechnicalDescription\": \"Grading system EO only\"\n }\n </pre>"
AccessDateRangeStart:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"UWEO.selSWSRegistrations.access_start_date\" }\n ],\n \"TechnicalDescription\": \"Access date range start EO only\"\n }\n </pre>"
AccessDateRangeEnd:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"UWEO.selSWSRegistrations.access_end_date\" }\n ],\n \"TechnicalDescription\": \"Access date range end EO only\"\n }\n </pre>"
IsCredit:
type: boolean
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"UWEO.selSWSRegistrations.is_credit\" }\n ],\n \"TechnicalDescription\": \"Is credit EO only\"\n }\n </pre>"
StartDate:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"UWEO.selSWSRegistrations.start_date\" }\n ],\n \"TechnicalDescription\": \"Start date EO only\"\n }\n </pre>"
EndDate:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"UWEO.selSWSRegistrations.end_date\" }\n ],\n \"TechnicalDescription\": \"Access date range start EO only\"\n }\n </pre>"
EducationUnitType:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"UWEO.selSWSRegistrations.educational_unit_type\" }\n ],\n \"TechnicalDescription\": \"Education unit type EO only\"\n }\n </pre>"
IsIndependentStart:
type: boolean
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"UWEO.selSWSRegistrations.IsIndependentStart\" }\n ],\n \"TechnicalDescription\": \"Is independent start EO only\"\n }\n </pre>"
additionalProperties: false
description: "{\n \"DisplayTitle\" : \"Registration Model\",\n \"TargetSchema\" : [{\"target\" : \"SWS.Registration\"}]\n}"
RegistrationViewModelBase:
type: object
additionalProperties: false
description: "{\n \"DisplayTitle\" : \"Registration Model\",\n \"TargetSchema\" : [{\"target\" : \"SWS.Registration\"}],\n \"RuntimeTypes\" : [\"RegistrationViewModel\"]\n}"
RegistrationSearchResourceUri:
type: object
properties:
Year:
type:
- integer
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.registration_courses.regis_yr\" },\n { \"source\":\"SWSSDB.transcript_courses_taken.tran_yr\" },\n { \"source\":\"UWEO.selSWSRegistrations.year\" }\n ],\n \"TechnicalDescription\": \"Year\"\n }\n </pre>"
format: int32
Quarter:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"SWSSDB.registration_courses.regis_qtr\" },\n { \"source\":\"SWSSDB.transcript_courses_taken.tran_qtr\" },\n { \"source\":\"UWEO.selSWSRegistrations.quarter\" }\n ],\n \"TechnicalDescription\": \"Quarter\"\n }\n </pre>"
RegID:
type:
- string
- 'null'
description: "<pre>\n {\n \"OriginatingSchema\" : [\n { \"source\":\"IRWS.identity.regid\" }\n ],\n \"TechnicalDescription\": \"UW Registrat
# --- truncated at 32 KB (39 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/university-of-washington/refs/heads/main/openapi/university-of-washington-registration-api-openapi.yml