openapi: 3.0.1 info: title: umd.io description: >- Welcome to umd.io, the open-source API for University of Maryland data. If you are building a University data-focused app, hack, or project, you’re in the right place. This site will walk you through basic API use and document all supported API calls. umd.io is a GETful API. It follows RESTful conventions, but for now, you can only get data – you can’t create, update, or destroy. We're now in version 1! We might add new endpoints or more data to existing responses, but we won't remove anything without a major version change. If you're looking for the v0 docs, you can find them at https://docs.umd.io/. Please note that v0 is deprecated. It will continue to be supported until at least 2021, but will get no further feature updates, and will eventually be discontinued. We are actively looking for contributors! Tweet, email, or otherwise get in touch with us. contact: email: hi@umd.io license: name: MIT url: "https://github.com/umdio/umdio/blob/master/LICENSE" version: 1.0.0 Beta externalDocs: description: Github url: "https://github.com/umdio/umdio" servers: - url: "https://api.umd.io/v1" tags: - name: courses description: >- This set of endpoints lets you get data about university courses and their sections. You can get one course or section at a time, several courses or sections at a time, or a list of all the courses. All the data is scraped from Testudo. - name: professors description: >- This endpoint contains information about university professors and the courses they have taught. - name: bus description: >- This endpoint lets you get data about bus routes, schedules, stops, locations, and predicted arrival times. The data is provided by NextBus, which monitors buses and gives the data to us via their API. We think our API is easier to use, but our data might be behind NextBus by a few seconds. If your app requires to-the-second bus location info, you can go right to the source. All bus data is copyright University of Maryland - name: map description: >- Data about things on campus, such as buildings, dining halls, and other facilities. - name: majors description: >- Data about the various majors offered on campus. paths: /courses: get: tags: - courses summary: List of courses description: Returns paginated list of courses operationId: getCourses parameters: - $ref: "#/components/parameters/sortParam" - $ref: "#/components/parameters/pageParam" - $ref: "#/components/parameters/perPageParam" - $ref: "#/components/parameters/semesterParam" - $ref: "#/components/parameters/creditsParam" - $ref: "#/components/parameters/deptIdParam" - $ref: "#/components/parameters/genEdParam" responses: "200": description: Successful Operation content: application/json: schema: type: array items: $ref: "#/components/schemas/Course" /courses/list: get: tags: - courses summary: List of minified courses description: Returns list of all course codes and names operationId: getCourseList parameters: - $ref: "#/components/parameters/sortParam" - $ref: "#/components/parameters/pageParam" - $ref: "#/components/parameters/perPageParam" - $ref: "#/components/parameters/semesterParam" responses: "200": description: Successful Operation content: application/json: schema: type: array items: type: object properties: course_id: type: string name: type: string /courses/sections: get: tags: - courses summary: List of sections description: Returns paginated list of sections operationId: getSections parameters: - $ref: "#/components/parameters/sortParam" - $ref: "#/components/parameters/pageParam" - $ref: "#/components/parameters/perPageParam" - $ref: "#/components/parameters/courseIdParam" - $ref: "#/components/parameters/seatsParam" - $ref: "#/components/parameters/openSeatsParam" - $ref: "#/components/parameters/waitlistParam" - $ref: "#/components/parameters/semesterParam" responses: "200": description: Successful Operation content: application/json: schema: type: array items: $ref: "#/components/schemas/Section" /courses/sections/{section_ids}: get: tags: - courses summary: View specific sections description: Returns paginated list of sections operationId: getSectionsByIds parameters: - $ref: "#/components/parameters/sectionIdsParam" - $ref: "#/components/parameters/semesterParam" responses: "200": description: Successful Operation content: application/json: schema: type: array items: $ref: "#/components/schemas/Section" "400": description: Malformed section id content: application/json: schema: $ref: "#/components/schemas/Error" "404": description: Unknown section id content: application/json: schema: $ref: "#/components/schemas/Error" /courses/{course_ids}: get: tags: - courses summary: View specific courses description: Returns info about one or more courses operationId: getCoursesById parameters: - $ref: "#/components/parameters/courseIdsParam" - $ref: "#/components/parameters/semesterParam" responses: "200": description: Successful Operation content: application/json: schema: type: array items: $ref: "#/components/schemas/Course" "400": description: Malformed course id content: application/json: schema: $ref: "#/components/schemas/Error" "404": description: Unknown course id content: application/json: schema: $ref: "#/components/schemas/Error" /courses/{course_ids}/sections: get: tags: - courses summary: View sections for a course description: Returns info about one or more courses operationId: getSectionsForCourse parameters: - $ref: "#/components/parameters/courseIdsParam" - $ref: "#/components/parameters/semesterParam" responses: "200": description: Successful Operation content: application/json: schema: type: array items: $ref: "#/components/schemas/Section" "400": description: Malformed course id content: application/json: schema: $ref: "#/components/schemas/Error" "404": description: Unknown course id content: application/json: schema: $ref: "#/components/schemas/Error" /courses/{course_ids}/sections/{section_ids}: get: tags: - courses summary: View specific sections for a course description: Returns info about one or more courses operationId: getCourseSectionsById parameters: - $ref: "#/components/parameters/courseIdsParam" - $ref: "#/components/parameters/sectionIdsParam" - $ref: "#/components/parameters/semesterParam" responses: "200": description: Successful Operation content: application/json: schema: type: array items: $ref: "#/components/schemas/Section" "400": description: Malformed course id or section id content: application/json: schema: $ref: "#/components/schemas/Error" "404": description: Unknown course id or section id content: application/json: schema: $ref: "#/components/schemas/Error" /courses/semesters: get: tags: - courses summary: List semesters description: Returns list of all available semesters, each in format YYYYMM operationId: getSemesters responses: "200": description: Successful Operation content: application/json: schema: type: array items: type: string example: ["201901", "201905", "201908"] /courses/departments: get: tags: - courses summary: List departments description: Returns list of all available departments operationId: getDepartments responses: "200": description: Successful Operation content: application/json: schema: type: array items: type: string example: ["AAST", "CMSC", "MATH"] /professors: get: tags: - professors summary: List professors description: Returns list of all professors operationId: getProfessors parameters: - $ref: "#/components/parameters/nameParam" - $ref: "#/components/parameters/courseIdParam" responses: "200": description: Successful Operation content: application/json: schema: type: array items: $ref: "#/components/schemas/Professor" "400": description: "Malformed query parameters" content: application/json: schema: $ref: "#/components/schemas/Error" "404": description: "No Professors Found" content: application/json: schema: $ref: "#/components/schemas/Error" /majors/list: get: tags: - majors summary: List majors description: Get a list of all majors operationId: getMajors responses: "200": description: Successful Operation content: application/json: schema: type: array items: $ref: "#/components/schemas/Major" /map/buildings: get: tags: - map summary: List buildings description: Get a list of the available buildings. operationId: getBuildings responses: "200": description: Successful Operation content: application/json: schema: type: array items: $ref: "#/components/schemas/Building" /map/buildings/{building_id}: get: tags: - map summary: Get buildings description: >- Get location data about one or more buildings. Comma separated building numbers are the parameters. operationId: getBuildingById parameters: - in: path name: building_id required: true schema: type: array items: type: string example: ["226"] description: Numeric building ID explode: true responses: "200": description: Successful Operation content: application/json: schema: type: object properties: data: $ref: "#/components/schemas/Building" count: type: number description: Number of buildings returned example: 1 "400": description: Malformed building code content: application/json: schema: $ref: "#/components/schemas/Error" "404": description: Unknown building code content: application/json: schema: $ref: "#/components/schemas/Error" /bus/routes: get: tags: - bus summary: List routes description: Get a list of the available routes. operationId: getRoutes responses: "200": description: Successful Operation content: application/json: schema: type: array items: type: object properties: route_id: type: string title: type: string /bus/routes/{route_ids}: get: tags: - bus summary: View specific routes description: Get route data for one or more routes operationId: getRoutesById parameters: - in: path name: route_ids required: true schema: type: array items: type: string description: Route ids explode: true responses: "200": description: Successful Operation content: application/json: schema: type: object properties: data: $ref: "#/components/schemas/Route" count: type: number description: Number of routes returned example: 1 "400": description: Malformed route code content: application/json: schema: $ref: "#/components/schemas/Error" "404": description: Unknown route code content: application/json: schema: $ref: "#/components/schemas/Error" /bus/stops: get: tags: - bus summary: List stops description: Get a list of the available stops. operationId: getStops responses: "200": description: Successful Operation content: application/json: schema: type: array items: type: object properties: stop_id: type: string title: type: string /bus/stops/{stop_ids}: get: tags: - bus summary: Get specific stops description: Get data for one or more stops operationId: getStopsById parameters: - in: path name: stop_ids required: true schema: type: array items: type: string description: Stop ids explode: true responses: "200": description: Successful Operation content: application/json: schema: type: object properties: data: $ref: "#/components/schemas/Stop" count: type: number description: Number of routes returned example: 1 "400": description: Malformed route code content: application/json: schema: $ref: "#/components/schemas/Error" "404": description: Unknown route code content: application/json: schema: $ref: "#/components/schemas/Error" #/bus/locations: # get: # tags: # - bus # summary: Current bus locations # description: Get bus locations # operationId: getLocations # responses: # "200": # description: Successful Operation # content: # application/json: # schema: # $ref: "#/components/schemas/" /bus/routes/{route_id}/locations: get: tags: - bus summary: Current bus locations by route description: Get bus locations for a route operationId: getLocations parameters: - in: path name: route_id required: true schema: type: string description: Route id explode: true responses: "200": description: Successful Operation content: application/json: schema: type: object description: Bus location object properties: lastTime: type: object properties: time: type: string description: A unix timestamp example: "1624045272049" copyright: type: string "400": description: Malformed route code content: application/json: schema: $ref: "#/components/schemas/Error" "404": description: Unknown route code content: application/json: schema: $ref: "#/components/schemas/Error" /bus/routes/{route_id}/schedules: get: tags: - bus summary: Bus schedules description: Get bus schedules for a route operationId: getSchedules parameters: - in: path name: route_id required: true schema: type: string description: Route id explode: true responses: "200": description: Successful Operation content: application/json: schema: type: array items: $ref: "#/components/schemas/BusSchedule" "400": description: Malformed route code content: application/json: schema: $ref: "#/components/schemas/Error" "404": description: Unknown route code content: application/json: schema: $ref: "#/components/schemas/Error" /bus/routes/{route_id}/arrivals/{stop_id}: get: tags: - bus summary: Get arrivals for a stop for a route description: Get arrivals for a stop for a route operationId: getArrival parameters: - in: path name: route_id required: true schema: type: string description: Route id explode: true - in: path name: stop_id required: true schema: type: string description: Stop id explode: true responses: "200": description: Successful Operation content: application/json: schema: type: object properties: copyright: type: string example: All data copyright University of Maryland 2021. # TODO(don): This is not the correct schema - fix it; move it to schema object at bottom; reference it with $ref predictions: type: object properties: routeTag: type: string example: "104" stopTag: type: string example: regdrgar_d routeTitle: type: string example: 104 College Park Metro agencyTitle: type: string example: University of Maryland dirTitleBecauseNoPredictions: type: string example: College Park Metro message: type: array items: type: object properties: text: type: string priority: type: string example: Normal "400": description: Malformed route id or stop id content: application/json: schema: $ref: "#/components/schemas/Error" "404": description: Unknown route id or stop id content: application/json: schema: $ref: "#/components/schemas/Error" components: schemas: Route: type: object description: Bus route properties: route_id: type: string description: A unique three digit route number example: "701" title: type: string description: String name of the route example: 701 UMB BioPark stops: type: array description: Array of stops on the route items: $ref: "#/components/schemas/Stop" directions: type: array description: Array of directions the bus travels items: description: A direction for a bus route. Many buses only have one direction, ‘loop’ , which has all stops on the route. Otherwise, there are usually two directions, mostly named for the final stop in that direction. type: object properties: direction_id: type: string description: Unique (relative to the route) string titling the direction example: ramsapts title: type: string description: String name of the direction example: Ramsay St Apts stops: type: array description: Names of stops along the route items: type: string paths: description: Lat/Long points to draw the route on a map type: array items: type: array items: type: object properties: lat: type: number format: float long: type: number format: float lat_max: type: number format: float example: 39.2995236 lat_min: type: number format: float example: 39.28301 long_max: type: number format: float example: -76.620848 long_min: type: number format: float example: -76.6320545 Stop: type: object description: Bus stop properties: stop_id: type: string description: Unique string identifier for a stop, should be mostly human-readable example: laplat title: type: string description: Full name of the stop example: La Plata Hall lat: type: number format: float description: Latitude example: -76.94563 long: type: number format: float description: Longitude example: 38.9922185 BusSchedule: type: object description: Each route has multiple schedules, because buses run differently on different days of the week properties: days: type: string description: The days the schedule runs example: f direction: type: string description: Direction id for the route. See Route object. route: type: string description: Route id stops: description: Scheduled stops on the route. type: array items: type: object properties: stop_id: type: string description: Stop id example: laplat name: type: string description: Full stop name example: La Plata Hall trips: description: Scheduled stops for the route, and when busses should be stopping there. type: array items: type: array items: type: object properties: stop_id: type: string description: Stop id. See Stop object arrival_time: type: string description: Arrival time, localized to hh:mm:ss in EST/EDT arrival_time_secs: type: string description: Time in ms from start of the day Course: type: object description: Represents a course on Testudo properties: course_id: type: string example: "MATH140" description: A unique string ID with a four-letter dept_id followed by a three digit course number and an optional letter. semester: type: number example: 202001 description: Numeric representation of the semester, in format YYYYMM name: type: string example: "Calculus I" description: String name of the course. dept_id: type: string example: "MATH" description: Four letter department code department: type: string example: "Mathematics" description: Full name of the department that offers the course. credits: type: string example: "4" description: The number of credits the course is worth. description: type: string example: "Introduction to calculus, including functions, limits, continuity, derivatives and applications of the derivative, sketching of graphs of functions, definite and indefinite integrals, and calculation of area. The course is especially recommended for science, engineering and mathematics majors." description: String description of the course, as it appears on Testudo. grading_method: type: array items: type: string example: ["Regular", "Pass-Fail", "Audit"] description: Array of string grading options available. The possible options are “Regular”, “Pass-Fail”, “Audit”, and “Sat-Fail” gen_ed: type: array items: type: array items: type: string example: [["FSAR", "FSMA"]] description: Strings representing the General Education requirements the course fulfills. Note that this is an array of arrays of strings. The outmost "layer" represents "or", while the inner one represents an and relationship. Additionally, if a gened credit is granted only when taken with another class, this will be represented using a pipe (|) with that class name. For instance, "X, Y or Z (if taken with C)" on Testudo will be returned as [[X, Y], [Z|C]] here. core: type: array items: type: string example: ["MS"] description: Array of strings of CORE requirements filled by a course. relationships: type: object properties: coreqs: type: string nullable: true example: null description: courses that must be taken with this one. prereqs: type: string nullable: true example: "Minimum grade of C- in MATH115." description: Requirements for taking this course. formerly: type: string nullable: true example: null description: Previous course codes that were the same course. restrictions: type: string nullable: true example: null description: Additional restrictions/requirements for taking the course. additional_info: type: string nullable: true example: "Or must have math eligibility of MATH140 or higher; and math eligibility is based on the Math Placement Test. All sections will require the use of a TI graphics calculator. Instructor will use a TI-83, TI-83+, or TI-86 calculator. If purchasing used books additional software may be required." description: Any additional information listed on Testudo also_offered_as: type: string nullable: true example: null description: Other course codes representing the same course, like in the case of cross-listing credit_granted_for: type: string nullable: true example: "MATH120, MATH130, MATH136, MATH140 or MATH220." description: Courses that are equivalent in credit. sections: type: array items: oneOf: - type: string - $ref: "#/components/schemas/Section" example: [ "MATH140-0111", "MATH140-0121", "MATH140-0131", "MATH140-0141", "MATH140-0211", "MATH140-0221", "MATH140-0231", "MATH140-0241", "MATH140-0311", "MATH140-0321", "MATH140-0112", "MATH140-0113", "MATH140-0122", "MATH140-0123", "MATH140-0132", "MATH140-0142", ] description: The sections of this course. Section: type: object description: Represents a single section of a course. properties: course: type: string example: "ENGL101" description: The associated course id section_id: type: string example: "ENGL101-0101" description: A unique section identifier, always the course_id with a four-digit section number appended to it. semester: type: number example: 201501 description: Numeric representation of the semester, in format YYYYMM number: type: string description: The other half of section_id seats: type: string description: The number of seats for the section. meetings: type: array items: $ref: "#/components/schemas/Meeting" description: Array of section meetings. open_seats: type: string description: The number of open seats for the section. waitlist: type: string description: The number of people on the waitlist. instructors: type: array description: An array of professor names for the section items: type: string Meeting: type: object description: A Meeting for a section of a course properties: days: type: string description: The days of the week that a course meets. Will be some combination of M, Tu, W, Th, F in that order. room: type: string description: The room number the meeting is in. building: type: string description: The building the meeting is in. classtype: type: string description: Lecutre, Discussion, Lab, etc. start_time: type: string description: The time the meeting starts, in format (x)y:zw[a|p]m (e.g. 10:45am, or 6:30pm) end_time: type: string description: The time the meeting ends, in format (x)y:zw[a|p]m (e.g. 10:45am, or 6:30pm) Professor: type: object description: Represents a professor properties: name: type: string description: Professor's name on Testudo example: Aaron Bartlett taught: type: array description: An array of courses taught, along with the semester they were taught items: type: object properties: semester: type: integer example: 202001 course: type: string example: ENGL101 Major: type: object description: Represents a major properties: major_id: type: number description: Numeric id of a major. No real meaning here, just an ascending count. example: 19 name: type: string description: The name of the major. example: Behavioral and Community Health college: type: string description: The college the major is under. example: School of Public Health url: type: string description: Home page for the major. example: http://sph.umd.edu/department/bch/ Building: type: object description: Represents a building on campus. properties: name: type: string description: Name of the building example: "Edward St. John Learning and Teaching Center" code: type: string description: Shortened building code. Not all buildings have these. example: "ESJ" id: type: string description: Unique building id example: "226" long: type: number description: Longitude example: -76.941914 lat: type: number description: Latitude example: 38.986699 Error: type: object description: Represents an HTTP error properties: error_code: type: number message: type: string docs: type: string parameters: courseIdsParam: in: path name: course_ids required: true schema: type: array items: type: string description: One or more comma separated course ids, in format DEPTNNN with up to 2 trailing characters. explode: true example: ["ENGL101", "MATH140", "CMSC388F"] sectionIdsParam: in: path name: section_ids required: true schema: type: array items: type: string description: One or more comma separated section ids, of format DEPTNNN-XXXX. explode: true example: ["ENGL101-0101", "MATH140-0201"] sortParam: in: query name: sort schema: type: string description: a comma-separated list of course properties. Defaults to ASCENDING order, use a - (minus) prefix for DESCENDING order. For example, ?sort=course_id,-credits sorts the results ASCENDING by course_id and DESCENDING by credits. example: course_id,-credits pageParam: in: query name: page schema: type: number description: For paginated responses, the page to view. 1-indexed. Defaults to 1 if omitted. example: 3 perPageParam: in: query name: per_page schema: type: number description: Endpoints that return a large amount of items are paginated to 30 items by default. You can use this parameter to set a page size up to 100. example: 3 expandParam: in: query name: expand schema: type: boolean description: Expands sections into full objects example: 3 semesterParam: in: query name: semester schema: type: string description: 6-digit semester ID to search, with optional comparator, separated by a pipe. Valid comparators are eq, leq, lt, gt, geq, neq. example: 202008|leq nameParam: in: query name: name schema: type: string description: Professor's name. example: "Aaron Bartlett" courseIdParam: in: query name: course_id schema: type: string description: 7 or 8 digit course id. See the course object for more info. example: CMSC216 creditsParam: in: query name: credits schema: type: string description: The number of credits to watch, with optional comparator, separated by a pipe. Valid comparators are eq, leq, lt, gt, geq, neq. example: "3|leq" deptIdParam: in: query name: dept_id schema: type: string description: 4 Letter department code to search. example: CMSC genEdParam: in: query name: gen_ed schema: type: string description: Gened requirement to search. example: DSNS seatsParam: in: query name: seats schema: type: string description: Number of total seats in a section, with optional comparator, separated by a pipe. Valid comparators are eq, leq, lt, gt, geq, neq. example: 200 openSeatsParam: in: query name: open_seats schema: type: string description: Number of open seats in a section, with optional comparator, separated by a pipe. Valid comparators are eq, leq, lt, gt, geq, neq. example: 5 waitlistParam: in: query name: waitlist schema: type: string description: Number of people on the waitlist for a class, with optional comparator, separated by a pipe. Valid comparators are eq, leq, lt, gt, geq, neq. example: 10 daysParam: in: query name: days schema: type: string description: The days of the week that a course meets. Will be some combination of M, Tu, W, Th, F in that order. example: MWF roomParam: in: query name: room schema: type: string description: The room a class meeting is in. example: 0120 buildingParam: in: query name: building schema: type: string description: The code for the building the class meeting is in. example: KEY classtypeParam: in: query name: classtype schema: type: string description: Indicates type of meeting. Could be "Lecture", "Discussion", or "Lab" example: Lecture startTimeParam: in: query name: start_time schema: type: string description: Start time of the meeting. example: 9:00am endTimeParam: in: query name: end_time schema: type: string description: End time of the meeting. example: 10:50am