Johns Hopkins University Classes API

Course and section lookup and advanced search.

Documentation

Specifications

Schemas & Data

Other Resources

OpenAPI Specification

johns-hopkins-university-classes-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Self-Service Public Course Search API (SIS) Classes API
  description: Returns, in JSON format, a list of courses available through the Johns Hopkins University Public Course Search (https://sis.jhu.edu/classes). Results can be filtered by school, department, course number, section number, and academic term, or via a custom advanced-search query string. All requests require an API key supplied as the `key` query parameter. Endpoints, parameters and the response data dictionary are derived from the official SIS Web API Help page at https://sis.jhu.edu/api/help.
  version: 1.0.0
  contact:
    name: SIS Development Team, Johns Hopkins University
    url: https://sis.jhu.edu/api/help
servers:
- url: https://sis.jhu.edu/api
  description: SIS Public Course Search API
security:
- apiKey: []
tags:
- name: Classes
  description: Course and section lookup and advanced search.
paths:
  /classes/{courseNumber}:
    get:
      tags:
      - Classes
      operationId: getCoursesByNumber
      summary: Get offered occurrences of a course number
      description: Returns all offered occurrences of a course number across available academic terms. At least the first 3 characters of the course number must be supplied; partial values return all matching courses. Supplying a full course number plus section number returns section detail.
      parameters:
      - $ref: '#/components/parameters/key'
      - name: courseNumber
        in: path
        required: true
        description: Course number or partial course number (minimum 3 characters). May include section number (e.g. AS.xxx.yyy.zz) to retrieve section detail.
        schema:
          type: string
      responses:
        '200':
          description: Matching course records.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Course'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /classes/{courseNumber}/{term}:
    get:
      tags:
      - Classes
      operationId: getCoursesByNumberAndTerm
      summary: Get occurrences of a course number in a term
      description: Returns all offered occurrences of a course number in the specified academic term. The literal value `current` may be used as the term to return the current academic term.
      parameters:
      - $ref: '#/components/parameters/key'
      - name: courseNumber
        in: path
        required: true
        schema:
          type: string
      - name: term
        in: path
        required: true
        description: Academic term name (e.g. "Fall 2013") or "current".
        schema:
          type: string
      responses:
        '200':
          description: Matching course records.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Course'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /classes/{school}/{department}/{term}:
    get:
      tags:
      - Classes
      operationId: getCoursesBySchoolDepartmentTerm
      summary: Get classes for a school, department, and term
      description: Returns all classes for the specified school and department in the specified term. The literal value `current` may be used as the term.
      parameters:
      - $ref: '#/components/parameters/key'
      - name: school
        in: path
        required: true
        schema:
          type: string
      - name: department
        in: path
        required: true
        schema:
          type: string
      - name: term
        in: path
        required: true
        description: Academic term name or "current".
        schema:
          type: string
      responses:
        '200':
          description: Matching course records.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Course'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /classes:
    get:
      tags:
      - Classes
      operationId: advancedSearch
      summary: Advanced course search
      description: Performs an advanced search using query-string criteria. Multi-select criteria (School, Location, Term, Department) may be supplied more than once. Values must be URL encoded.
      parameters:
      - $ref: '#/components/parameters/key'
      - name: Area
        in: query
        schema:
          type: string
      - name: Building
        in: query
        schema:
          type: string
      - name: CourseNumber
        in: query
        description: Course number or first 3+ characters.
        schema:
          type: string
      - name: CourseTitle
        in: query
        schema:
          type: string
      - name: Credits
        in: query
        description: Number of credits with two decimals (e.g. 3.00).
        schema:
          type: string
      - name: DaysOfWeek
        in: query
        description: '"All|N" or "Any|N" where N is the sum of day ranks (Mon=1, Tue=2, Wed=4, Thu=8, Fri=16, Sat=32, Sun=64).'
        schema:
          type: string
      - name: Department
        in: query
        description: Department name (multi-select; encode "/" as "_").
        schema:
          type: string
      - name: Instructor
        in: query
        schema:
          type: string
      - name: Level
        in: query
        schema:
          type: string
      - name: Location
        in: query
        description: Campus location (multi-select).
        schema:
          type: string
      - name: School
        in: query
        description: School name (multi-select).
        schema:
          type: string
      - name: StartTimeEndTime
        in: query
        description: Start and end time separated by pipe (e.g. 09:00|10:15).
        schema:
          type: string
      - name: Status
        in: query
        schema:
          type: string
      - name: Term
        in: query
        description: Academic term name (multi-select).
        schema:
          type: string
      - name: TimeOfDay
        in: query
        schema:
          type: string
          enum:
          - morning
          - afternoon
          - evening
          - other
      - name: WritingIntensive
        in: query
        schema:
          type: string
          enum:
          - true
          - false
      responses:
        '200':
          description: Matching course records.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Course'
        '401':
          $ref: '#/components/responses/Unauthorized'
components:
  schemas:
    SectionDetail:
      type: object
      description: Section detail information returned when a full section is requested.
      properties:
        CoRequisites:
          type: array
          items:
            type: object
            properties:
              Description:
                type: string
              Expression:
                type: string
              TermName:
                type: string
        Credits:
          type: string
        CreditType:
          type: string
        Departments:
          type: string
        DepartmentID:
          type: string
          description: Department IDs, primary department first.
        Description:
          type: string
        EvaluationUrls:
          type: array
          items:
            type: object
            properties:
              URL:
                type: string
              ValidFrom:
                type: string
              ValidTo:
                type: string
        Fees:
          type: array
          items:
            type: object
            properties:
              Amount:
                type: string
              FeeType:
                type: string
        Meetings:
          type: array
          items:
            type: object
            properties:
              Building:
                type: string
              Dates:
                type: string
              DOW:
                type: string
              Location:
                type: string
              Room:
                type: string
              Times:
                type: string
        PosTags:
          type: array
          items:
            type: object
            properties:
              Tag:
                type: string
        Prerequisites:
          type: array
          items:
            type: object
            properties:
              Description:
                type: string
              Expression:
                type: string
              IsNegative:
                type: string
        WebNotes:
          type: string
        Instructors:
          type: array
          items:
            type: object
            properties:
              HopkinsID:
                type: string
        Equivalencies:
          type: array
          items:
            type: object
            properties:
              CourseName:
                type: string
              ValidFrom:
                type: string
              ValidTo:
                type: string
    Course:
      type: object
      description: A course offering record from the Public Course Search.
      properties:
        AllDepartments:
          type: string
          description: All departments assigned to the course, separated by ^.
        Areas:
          type: string
          description: All areas assigned to the course, separated by ^.
        Building:
          type: string
          description: All buildings where the course is held, separated by ^.
        CoursePrefix:
          type: string
        Credits:
          type: string
        Department:
          type: string
          description: Department that offers the course.
        DOW:
          type: string
          description: Numeric representation of the days of week (Mon=1, Tue=2, Wed=4, Thu=8, Fri=16, Sat=32, Sun=64).
        DOWSort:
          type: string
          description: DOW value plus time in military format, for sorting.
        HasBio:
          type: string
          description: Indicates if instructors have Bio information to display.
        InstructionMethod:
          type: string
        Instructors:
          type: string
          description: Names of instructors, separated by comma.
        InstructorsFullName:
          type: string
        IsWritingIntensive:
          type: string
          description: Indicates if the course is writing intensive (Yes/No).
        Level:
          type: string
        Location:
          type: string
        MaxSeats:
          type: string
        Meetings:
          type: string
          description: Comma separated list of days and times (e.g. M 3:30PM - 5:20PM).
        OfferingName:
          type: string
          description: Offering name (e.g. NR.110.305).
        OpenSeats:
          type: string
        Repeatable:
          type: string
        SchoolName:
          type: string
        SeatsAvailable:
          type: string
          description: Available seats out of maximum (e.g. 7/65).
        SectionCoReqNotes:
          type: string
        SectionCoRequisites:
          type: string
        SectionName:
          type: string
          description: Section name (e.g. 0101).
        SectionRegRestrictions:
          type: string
        Status:
          type: string
          description: Section status (e.g. Open).
        SectionDetails:
          $ref: '#/components/schemas/SectionDetail'
        SubDepartment:
          type: string
        Term:
          type: string
        Term_IDR:
          type: string
        Term_JSS:
          type: string
        TermStartDate:
          type: string
        TimeOfDay:
          type: string
        Title:
          type: string
        Waitlisted:
          type: string
  responses:
    Unauthorized:
      description: API key missing or invalid.
      content:
        text/plain:
          schema:
            type: string
          example: 'Unable to authenticate: API Key parameter is missing in URL'
  parameters:
    key:
      name: key
      in: query
      required: true
      description: API key issued after registration at https://sis.jhu.edu/api/help.
      schema:
        type: string
  securitySchemes:
    apiKey:
      type: apiKey
      in: query
      name: key