openapi: 3.0.3 info: title: Purdue.io Course Catalog API description: >- A community-built, public OData v4 REST API exposing Purdue University's course catalog data, including Campuses, Buildings, Rooms, Terms, Courses, Classes, Sections, Meetings, Subjects and Instructors. This OpenAPI 3.0 description was converted faithfully from the live OData v4 $metadata (EDMX 4.0) document at https://api.purdue.io/odata/$metadata and verified against live responses. Entities are queryable via standard OData system query options. Note: the live service disables the $top option (limit 0); use $skip with server-driven paging instead. version: "4.0" contact: name: Purdue.io url: https://github.com/Purdue-io/PurdueApi license: name: MIT url: https://github.com/Purdue-io/PurdueApi/blob/master/LICENSE servers: - url: https://api.purdue.io/odata description: Purdue.io OData production service tags: - name: Campuses - name: Buildings - name: Rooms - name: Terms - name: Courses - name: Classes - name: Sections - name: Meetings - name: Subjects - name: Instructors paths: /Campuses: get: tags: [Campuses] operationId: listCampuses summary: List campuses parameters: - $ref: '#/components/parameters/filter' - $ref: '#/components/parameters/select' - $ref: '#/components/parameters/expand' - $ref: '#/components/parameters/orderby' - $ref: '#/components/parameters/skip' - $ref: '#/components/parameters/count' responses: '200': description: A collection of campuses. content: application/json: schema: $ref: '#/components/schemas/CampusCollection' /Campuses({Id}): get: tags: [Campuses] operationId: getCampus summary: Get a campus by Id parameters: - $ref: '#/components/parameters/keyId' - $ref: '#/components/parameters/select' - $ref: '#/components/parameters/expand' responses: '200': description: A single campus. content: application/json: schema: $ref: '#/components/schemas/Campus' '404': $ref: '#/components/responses/NotFound' /Buildings: get: tags: [Buildings] operationId: listBuildings summary: List buildings parameters: - $ref: '#/components/parameters/filter' - $ref: '#/components/parameters/select' - $ref: '#/components/parameters/expand' - $ref: '#/components/parameters/orderby' - $ref: '#/components/parameters/skip' - $ref: '#/components/parameters/count' responses: '200': description: A collection of buildings. content: application/json: schema: $ref: '#/components/schemas/BuildingCollection' /Buildings({Id}): get: tags: [Buildings] operationId: getBuilding summary: Get a building by Id parameters: - $ref: '#/components/parameters/keyId' - $ref: '#/components/parameters/select' - $ref: '#/components/parameters/expand' responses: '200': description: A single building. content: application/json: schema: $ref: '#/components/schemas/Building' '404': $ref: '#/components/responses/NotFound' /Rooms: get: tags: [Rooms] operationId: listRooms summary: List rooms parameters: - $ref: '#/components/parameters/filter' - $ref: '#/components/parameters/select' - $ref: '#/components/parameters/expand' - $ref: '#/components/parameters/orderby' - $ref: '#/components/parameters/skip' - $ref: '#/components/parameters/count' responses: '200': description: A collection of rooms. content: application/json: schema: $ref: '#/components/schemas/RoomCollection' /Rooms({Id}): get: tags: [Rooms] operationId: getRoom summary: Get a room by Id parameters: - $ref: '#/components/parameters/keyId' - $ref: '#/components/parameters/select' - $ref: '#/components/parameters/expand' responses: '200': description: A single room. content: application/json: schema: $ref: '#/components/schemas/Room' '404': $ref: '#/components/responses/NotFound' /Terms: get: tags: [Terms] operationId: listTerms summary: List terms parameters: - $ref: '#/components/parameters/filter' - $ref: '#/components/parameters/select' - $ref: '#/components/parameters/expand' - $ref: '#/components/parameters/orderby' - $ref: '#/components/parameters/skip' - $ref: '#/components/parameters/count' responses: '200': description: A collection of terms. content: application/json: schema: $ref: '#/components/schemas/TermCollection' /Terms({Id}): get: tags: [Terms] operationId: getTerm summary: Get a term by Id parameters: - $ref: '#/components/parameters/keyId' - $ref: '#/components/parameters/select' - $ref: '#/components/parameters/expand' responses: '200': description: A single term. content: application/json: schema: $ref: '#/components/schemas/Term' '404': $ref: '#/components/responses/NotFound' /Courses: get: tags: [Courses] operationId: listCourses summary: List courses parameters: - $ref: '#/components/parameters/filter' - $ref: '#/components/parameters/select' - $ref: '#/components/parameters/expand' - $ref: '#/components/parameters/orderby' - $ref: '#/components/parameters/skip' - $ref: '#/components/parameters/count' responses: '200': description: A collection of courses. content: application/json: schema: $ref: '#/components/schemas/CourseCollection' /Courses({Id}): get: tags: [Courses] operationId: getCourse summary: Get a course by Id parameters: - $ref: '#/components/parameters/keyId' - $ref: '#/components/parameters/select' - $ref: '#/components/parameters/expand' responses: '200': description: A single course. content: application/json: schema: $ref: '#/components/schemas/Course' '404': $ref: '#/components/responses/NotFound' /Classes: get: tags: [Classes] operationId: listClasses summary: List classes parameters: - $ref: '#/components/parameters/filter' - $ref: '#/components/parameters/select' - $ref: '#/components/parameters/expand' - $ref: '#/components/parameters/orderby' - $ref: '#/components/parameters/skip' - $ref: '#/components/parameters/count' responses: '200': description: A collection of classes. content: application/json: schema: $ref: '#/components/schemas/ClassCollection' /Classes({Id}): get: tags: [Classes] operationId: getClass summary: Get a class by Id parameters: - $ref: '#/components/parameters/keyId' - $ref: '#/components/parameters/select' - $ref: '#/components/parameters/expand' responses: '200': description: A single class. content: application/json: schema: $ref: '#/components/schemas/Class' '404': $ref: '#/components/responses/NotFound' /Sections: get: tags: [Sections] operationId: listSections summary: List sections parameters: - $ref: '#/components/parameters/filter' - $ref: '#/components/parameters/select' - $ref: '#/components/parameters/expand' - $ref: '#/components/parameters/orderby' - $ref: '#/components/parameters/skip' - $ref: '#/components/parameters/count' responses: '200': description: A collection of sections. content: application/json: schema: $ref: '#/components/schemas/SectionCollection' /Sections({Id}): get: tags: [Sections] operationId: getSection summary: Get a section by Id parameters: - $ref: '#/components/parameters/keyId' - $ref: '#/components/parameters/select' - $ref: '#/components/parameters/expand' responses: '200': description: A single section. content: application/json: schema: $ref: '#/components/schemas/Section' '404': $ref: '#/components/responses/NotFound' /Meetings: get: tags: [Meetings] operationId: listMeetings summary: List meetings parameters: - $ref: '#/components/parameters/filter' - $ref: '#/components/parameters/select' - $ref: '#/components/parameters/expand' - $ref: '#/components/parameters/orderby' - $ref: '#/components/parameters/skip' - $ref: '#/components/parameters/count' responses: '200': description: A collection of meetings. content: application/json: schema: $ref: '#/components/schemas/MeetingCollection' /Meetings({Id}): get: tags: [Meetings] operationId: getMeeting summary: Get a meeting by Id parameters: - $ref: '#/components/parameters/keyId' - $ref: '#/components/parameters/select' - $ref: '#/components/parameters/expand' responses: '200': description: A single meeting. content: application/json: schema: $ref: '#/components/schemas/Meeting' '404': $ref: '#/components/responses/NotFound' /Subjects: get: tags: [Subjects] operationId: listSubjects summary: List subjects parameters: - $ref: '#/components/parameters/filter' - $ref: '#/components/parameters/select' - $ref: '#/components/parameters/expand' - $ref: '#/components/parameters/orderby' - $ref: '#/components/parameters/skip' - $ref: '#/components/parameters/count' responses: '200': description: A collection of subjects. content: application/json: schema: $ref: '#/components/schemas/SubjectCollection' /Subjects({Id}): get: tags: [Subjects] operationId: getSubject summary: Get a subject by Id parameters: - $ref: '#/components/parameters/keyId' - $ref: '#/components/parameters/select' - $ref: '#/components/parameters/expand' responses: '200': description: A single subject. content: application/json: schema: $ref: '#/components/schemas/Subject' '404': $ref: '#/components/responses/NotFound' /Instructors: get: tags: [Instructors] operationId: listInstructors summary: List instructors parameters: - $ref: '#/components/parameters/filter' - $ref: '#/components/parameters/select' - $ref: '#/components/parameters/expand' - $ref: '#/components/parameters/orderby' - $ref: '#/components/parameters/skip' - $ref: '#/components/parameters/count' responses: '200': description: A collection of instructors. content: application/json: schema: $ref: '#/components/schemas/InstructorCollection' /Instructors({Id}): get: tags: [Instructors] operationId: getInstructor summary: Get an instructor by Id parameters: - $ref: '#/components/parameters/keyId' - $ref: '#/components/parameters/select' - $ref: '#/components/parameters/expand' responses: '200': description: A single instructor. content: application/json: schema: $ref: '#/components/schemas/Instructor' '404': $ref: '#/components/responses/NotFound' components: parameters: keyId: name: Id in: path required: true description: The GUID key of the entity. schema: type: string format: uuid filter: name: $filter in: query required: false description: OData $filter expression for restricting the entities returned. schema: type: string select: name: $select in: query required: false description: OData $select comma-separated list of properties to return. schema: type: string expand: name: $expand in: query required: false description: OData $expand comma-separated list of related entities to include. schema: type: string orderby: name: $orderby in: query required: false description: OData $orderby expression for sorting the entities returned. schema: type: string skip: name: $skip in: query required: false description: OData $skip count for server-driven paging. schema: type: integer minimum: 0 count: name: $count in: query required: false description: When true, requests the total count of matching entities. schema: type: boolean responses: NotFound: description: The requested entity was not found. content: application/json: schema: $ref: '#/components/schemas/ODataError' schemas: DaysOfWeek: description: >- Flags enumeration of meeting days (Edm enum, IsFlags=true, byte underlying type). Values may be combined as a comma-separated string. type: string enum: - None - Monday - Tuesday - Wednesday - Thursday - Friday - Saturday - Sunday Campus: type: object properties: Id: type: string format: uuid Code: type: string nullable: true Name: type: string nullable: true ZipCode: type: string nullable: true Buildings: type: array items: $ref: '#/components/schemas/Building' Classes: type: array items: $ref: '#/components/schemas/Class' required: [Id] Building: type: object properties: Id: type: string format: uuid CampusId: type: string format: uuid nullable: true Name: type: string nullable: true ShortCode: type: string nullable: true Campus: $ref: '#/components/schemas/Campus' Rooms: type: array items: $ref: '#/components/schemas/Room' required: [Id] Room: type: object properties: Id: type: string format: uuid Number: type: string nullable: true BuildingId: type: string format: uuid nullable: true Building: $ref: '#/components/schemas/Building' required: [Id] Term: type: object properties: Id: type: string format: uuid Code: type: string nullable: true Name: type: string nullable: true StartDate: type: string format: date nullable: true EndDate: type: string format: date nullable: true Classes: type: array items: $ref: '#/components/schemas/Class' required: [Id] Course: type: object properties: Id: type: string format: uuid Number: type: string nullable: true SubjectId: type: string format: uuid nullable: true Title: type: string nullable: true CreditHours: type: number format: double Description: type: string nullable: true Subject: $ref: '#/components/schemas/Subject' Classes: type: array items: $ref: '#/components/schemas/Class' required: [Id, CreditHours] Class: type: object properties: Id: type: string format: uuid CourseId: type: string format: uuid nullable: true TermId: type: string format: uuid nullable: true CampusId: type: string format: uuid nullable: true Course: $ref: '#/components/schemas/Course' Term: $ref: '#/components/schemas/Term' Campus: $ref: '#/components/schemas/Campus' Sections: type: array items: $ref: '#/components/schemas/Section' required: [Id] Section: type: object properties: Id: type: string format: uuid Crn: type: string nullable: true ClassId: type: string format: uuid nullable: true Type: type: string nullable: true StartDate: type: string format: date nullable: true EndDate: type: string format: date nullable: true Class: $ref: '#/components/schemas/Class' Meetings: type: array items: $ref: '#/components/schemas/Meeting' required: [Id] Meeting: type: object properties: Id: type: string format: uuid SectionId: type: string format: uuid nullable: true Type: type: string nullable: true StartDate: type: string format: date nullable: true EndDate: type: string format: date nullable: true DaysOfWeek: $ref: '#/components/schemas/DaysOfWeek' StartTime: type: string description: OData Edm.TimeOfDay value (HH:mm:ss.fffffff). nullable: true Duration: type: string description: OData Edm.Duration value (ISO 8601 duration). RoomId: type: string format: uuid nullable: true Section: $ref: '#/components/schemas/Section' Instructors: type: array items: $ref: '#/components/schemas/Instructor' Room: $ref: '#/components/schemas/Room' required: [Id, DaysOfWeek, Duration] Subject: type: object properties: Id: type: string format: uuid Name: type: string nullable: true Abbreviation: type: string nullable: true Courses: type: array items: $ref: '#/components/schemas/Course' required: [Id] Instructor: type: object properties: Id: type: string format: uuid Name: type: string nullable: true Email: type: string nullable: true Meetings: type: array items: $ref: '#/components/schemas/Meeting' required: [Id] ODataError: type: object properties: error: type: object properties: code: type: string message: type: string CampusCollection: type: object properties: '@odata.context': type: string '@odata.count': type: integer value: type: array items: $ref: '#/components/schemas/Campus' BuildingCollection: type: object properties: '@odata.context': type: string '@odata.count': type: integer value: type: array items: $ref: '#/components/schemas/Building' RoomCollection: type: object properties: '@odata.context': type: string '@odata.count': type: integer value: type: array items: $ref: '#/components/schemas/Room' TermCollection: type: object properties: '@odata.context': type: string '@odata.count': type: integer value: type: array items: $ref: '#/components/schemas/Term' CourseCollection: type: object properties: '@odata.context': type: string '@odata.count': type: integer value: type: array items: $ref: '#/components/schemas/Course' ClassCollection: type: object properties: '@odata.context': type: string '@odata.count': type: integer value: type: array items: $ref: '#/components/schemas/Class' SectionCollection: type: object properties: '@odata.context': type: string '@odata.count': type: integer value: type: array items: $ref: '#/components/schemas/Section' MeetingCollection: type: object properties: '@odata.context': type: string '@odata.count': type: integer value: type: array items: $ref: '#/components/schemas/Meeting' SubjectCollection: type: object properties: '@odata.context': type: string '@odata.count': type: integer value: type: array items: $ref: '#/components/schemas/Subject' InstructorCollection: type: object properties: '@odata.context': type: string '@odata.count': type: integer value: type: array items: $ref: '#/components/schemas/Instructor'