umd.io API

umd.io is a student-run open-source REST API for University of Maryland data. It is not an official university service. The v1 API exposes endpoints for courses, course sections, semesters, departments, professors, campus bus routes/stops/arrivals, campus map buildings, and majors. Responses are JSON and require no authentication.

OpenAPI Specification

university-of-maryland-college-park-umdio.yaml Raw ↑
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: [email protected]
  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 (

# --- truncated at 32 KB (38 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/university-of-maryland-college-park/refs/heads/main/openapi/university-of-maryland-college-park-umdio.yaml