University of Maryland College Park courses API

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.

OpenAPI Specification

university-of-maryland-college-park-courses-api-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: umd.io bus courses API
  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
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.
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
components:
  parameters:
    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
    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
    deptIdParam:
      in: query
      name: dept_id
      schema:
        type: string
      description: 4 Letter department code to search.
      example: CMSC
    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
    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
    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
    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
    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
    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
    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
    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
    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
  schemas:
    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)
    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
    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.
    Error:
      type: object
      description: Represents an HTTP error
      properties:
        error_code:
          type: number
        message:
          type: string
        docs:
          type: string
externalDocs:
  description: Github
  url: https://github.com/umdio/umdio