openapi: 3.0.0 servers: - description: "PlanetTerp API" url: https://planetterp.com/api/v1 info: description: | Welcome to [PlanetTerp](https://planetterp.com)'s API. This API provides access to data relating to courses, professors, and grade data at UMD. Base URL: https://planetterp.com/api/v1 The API does not require any authentication, but please be respectful and don't hammer it with too many requests without a pause. We have a [Python wrapper](https://github.com/planetterp/PlanetTerp-API-Python-Wrapper), and we've also written an [example program](https://gist.github.com/tybug/3fcebc8a2b63d471270bda86f0756cdf) in python if you want a step by step walkthrough. If you want a more general UMD API, check out [umd.io](https://umd.io). For support, please email us at the email above. The course and professor data on this website was obtained using a combination of [umd.io](https://umd.io) and UMD's [Schedule of Classes](https://app.testudo.umd.edu/soc/). The grade data is from [IRPA](https://www.irpa.umd.edu) and obtained through a [PIA](https://www.umd.edu/administration/public-information-request) request. version: "v1" title: PlanetTerp API contact: email: admin@planetterp.com tags: - name: Courses description: >- This set of endpoints lets you get data about a course or courses, including professors that have taught it and reviews for the course. - name: Professors description: >- This set of endpoints lets you get data about a professor or professors, including courses they've taught and reviews for them. - name: Grades description: >- This endpoint lets you get data about grades, limited to either a course, professor, semester, section, or combination thereof. - name: Search description: >- This endpoint lets you programmatically search PlanetTerp. It returns the same results as if you had used the search bar on PlanetTerp. paths: /course: get: operationId: Get a course tags: - Courses description: Gets the specified courses parameters: - in: query name: name description: "Show the given course." required: true example: MATH140 schema: type: string - in: query name: reviews description: "Show reviews for the course (reviews for professors that taught the course and have this course listed as the one being reviewed)." required: false schema: type: boolean default: false responses: '200': description: "Returns course matching query" content: application/json: schema: $ref: '#/components/schemas/Course' '400': description: "bad input parameter" /courses: get: operationId: Get courses tags: - Courses description: Get all courses, in alphabetical order parameters: - in: query name: department description: "Only get courses in a department. Must be four characters. Default: all departments" required: false example: MATH schema: type: string - in: query name: reviews description: "Show reviews for the course (reviews for professors that taught the course and have this course listed as the one being reviewed)." required: false schema: type: boolean default: false - $ref: "#/components/parameters/limit-100-100" - $ref: "#/components/parameters/offset" responses: '200': description: "Returns courses matching query" content: application/json: schema: type: array items: $ref: '#/components/schemas/Course' '400': description: "bad input parameter" /professor: get: operationId: Get a professor tags: - Professors description: | Get the specified professor. parameters: - in: query name: name description: "Show the given professor." required: true example: "Jon Snow" schema: type: string - in: query name: reviews description: "Show reviews for the professor." required: false example: true schema: type: boolean default: false responses: '200': description: "Returns professor matching query" content: application/json: schema: $ref: '#/components/schemas/Professor' '400': description: "bad input parameter" /professors: get: operationId: Get all professors tags: - Professors description: Get all professors, in alphabetical order parameters: - in: query name: type description: "Show only reviews for professors or teaching assistants. Default: show both." required: false schema: type: string enum: [professor, ta] - in: query name: reviews description: "Show reviews for the professors." required: false example: true schema: type: boolean default: false - $ref: "#/components/parameters/limit-100-100" - $ref: "#/components/parameters/offset" responses: '200': description: "Returns professors matching query" content: application/json: schema: type: array items: $ref: '#/components/schemas/Professor' '400': description: "bad input parameter" /grades: get: operationId: Get grades tags: - Grades description: | Get grades for a course, a professor, or both. If by course, returns all of the grades available by section. parameters: - in: query name: course description: "Show only grades for the given course." required: false schema: type: string example: "MATH140" - in: query name: professor description: "Show only grades for the given professor." required: false example: "Jon Snow" schema: type: string example: "Jon Snow" - in: query name: semester description: "Show only grades for the given semester. Semester should be provided as the year followed by the semester code. `01` means Spring and `08` means Fall. For example, `202001` means Spring 2020. Default: all semesters" required: false example: "202001" schema: type: string example: "202001" - in: query name: section description: "Show only grades for the given section. Default: all sections" required: false example: "0101" schema: type: string example: "0101" responses: '200': description: "Returns grades matching query" content: application/json: schema: type: array items: $ref: '#/components/schemas/Grades' '400': description: "bad input parameter" /search: get: operationId: Search tags: - Search description: Search both professors and courses with a query string. This will match professors and courses which have the query string as a substring of their name. parameters: - in: query name: query description: "The query to search for" required: true schema: type: string example: "CMSC13" - $ref: "#/components/parameters/limit-30-100" - $ref: "#/components/parameters/offset" responses: '200': description: "Returns professors and courses matching the query" content: application/json: schema: type: array items: $ref: '#/components/schemas/Search_Result' '400': description: "bad input parameter" components: schemas: Course: type: object required: - department - course_number - title - description - credits - professors properties: department: type: string example: MATH course_number: type: string example: 140 title: type: string example: 'Calculus I' 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.' credits: type: integer example: 3 average_gpa: type: number example: 3.127 professors: type: array items: type: string example: ["Jon Snow", "Tyrion Lannister"] Professor: required: - name - slug - type - courses - average_rating properties: name: type: string example: 'Jon Snow' slug: type: string example: 'snow' type: type: string enum: [professor, ta] example: 'professor' courses: type: array items: type: string example: 'MATH140' average_rating: type: number example: 4.125 type: object Grades: required: - course - professor - semester - section - A+ - A - A- - B+ - B - B- - C+ - C - C- - D+ - D - D- - F - W - Other properties: course: type: string example: 'MATH140' professor: type: string example: 'Jon Snow' semester: type: string example: '202001' section: type: string example: '0101' A+: type: integer example: 1 A: type: integer example: 1 A-: type: integer example: 1 B+: type: integer example: 1 B: type: integer example: 1 B-: type: integer example: 1 C+: type: integer example: 1 C: type: integer example: 1 C-: type: integer example: 1 D+: type: integer example: 1 D: type: integer example: 1 D-: type: integer example: 1 F: type: integer example: 1 W: type: integer example: 1 Other: type: integer example: 1 type: object Search_Result: required: - name - slug - type properties: name: type: string example: 'CMSC131' slug: type: string example: 'CMSC131' type: type: string enum: [professor, course] example: 'course' type: object parameters: limit-30-100: in: query name: limit description: "Maximum number of records to return." required: false example: 1 schema: type: integer minimum: 1 maximum: 100 default: 30 limit-100-100: in: query name: limit description: "Maximum number of records to return." required: false example: 1 schema: type: integer minimum: 1 maximum: 100 default: 100 offset: in: query name: offset description: "Number of records to skip for pagination." required: false schema: type: integer minimum: 0 default: 0