Purdue University Subjects API

The Subjects API from Purdue University — 2 operation(s) for subjects.

Documentation

Specifications

Schemas & Data

Other Resources

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/purdue-subjects-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

purdue-subjects-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Purdue.io Course Catalog Buildings Subjects API
  description: 'A community-built, public OData v4 REST API exposing Purdue University''s course catalog data, including Campuses, Buildings, Rooms, Terms, Courses, Classes, Sections, Meetings, Subjects and Instructors. This OpenAPI 3.0 description was converted faithfully from the live OData v4 $metadata (EDMX 4.0) document at https://api.purdue.io/odata/$metadata and verified against live responses. Entities are queryable via standard OData system query options. Note: the live service disables the $top option (limit 0); use $skip with server-driven paging instead.'
  version: '4.0'
  contact:
    name: Purdue.io
    url: https://github.com/Purdue-io/PurdueApi
  license:
    name: MIT
    url: https://github.com/Purdue-io/PurdueApi/blob/master/LICENSE
servers:
- url: https://api.purdue.io/odata
  description: Purdue.io OData production service
tags:
- name: Subjects
paths:
  /Subjects:
    get:
      tags:
      - Subjects
      operationId: listSubjects
      summary: List subjects
      parameters:
      - $ref: '#/components/parameters/filter'
      - $ref: '#/components/parameters/select'
      - $ref: '#/components/parameters/expand'
      - $ref: '#/components/parameters/orderby'
      - $ref: '#/components/parameters/skip'
      - $ref: '#/components/parameters/count'
      responses:
        '200':
          description: A collection of subjects.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubjectCollection'
  /Subjects({Id}):
    get:
      tags:
      - Subjects
      operationId: getSubject
      summary: Get a subject by Id
      parameters:
      - $ref: '#/components/parameters/keyId'
      - $ref: '#/components/parameters/select'
      - $ref: '#/components/parameters/expand'
      responses:
        '200':
          description: A single subject.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Subject'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  schemas:
    Campus:
      type: object
      properties:
        Id:
          type: string
          format: uuid
        Code:
          type: string
          nullable: true
        Name:
          type: string
          nullable: true
        ZipCode:
          type: string
          nullable: true
        Buildings:
          type: array
          items:
            $ref: '#/components/schemas/Building'
        Classes:
          type: array
          items:
            $ref: '#/components/schemas/Class'
      required:
      - Id
    Section:
      type: object
      properties:
        Id:
          type: string
          format: uuid
        Crn:
          type: string
          nullable: true
        ClassId:
          type: string
          format: uuid
          nullable: true
        Type:
          type: string
          nullable: true
        StartDate:
          type: string
          format: date
          nullable: true
        EndDate:
          type: string
          format: date
          nullable: true
        Class:
          $ref: '#/components/schemas/Class'
        Meetings:
          type: array
          items:
            $ref: '#/components/schemas/Meeting'
      required:
      - Id
    Subject:
      type: object
      properties:
        Id:
          type: string
          format: uuid
        Name:
          type: string
          nullable: true
        Abbreviation:
          type: string
          nullable: true
        Courses:
          type: array
          items:
            $ref: '#/components/schemas/Course'
      required:
      - Id
    SubjectCollection:
      type: object
      properties:
        '@odata.context':
          type: string
        '@odata.count':
          type: integer
        value:
          type: array
          items:
            $ref: '#/components/schemas/Subject'
    Class:
      type: object
      properties:
        Id:
          type: string
          format: uuid
        CourseId:
          type: string
          format: uuid
          nullable: true
        TermId:
          type: string
          format: uuid
          nullable: true
        CampusId:
          type: string
          format: uuid
          nullable: true
        Course:
          $ref: '#/components/schemas/Course'
        Term:
          $ref: '#/components/schemas/Term'
        Campus:
          $ref: '#/components/schemas/Campus'
        Sections:
          type: array
          items:
            $ref: '#/components/schemas/Section'
      required:
      - Id
    Building:
      type: object
      properties:
        Id:
          type: string
          format: uuid
        CampusId:
          type: string
          format: uuid
          nullable: true
        Name:
          type: string
          nullable: true
        ShortCode:
          type: string
          nullable: true
        Campus:
          $ref: '#/components/schemas/Campus'
        Rooms:
          type: array
          items:
            $ref: '#/components/schemas/Room'
      required:
      - Id
    Room:
      type: object
      properties:
        Id:
          type: string
          format: uuid
        Number:
          type: string
          nullable: true
        BuildingId:
          type: string
          format: uuid
          nullable: true
        Building:
          $ref: '#/components/schemas/Building'
      required:
      - Id
    DaysOfWeek:
      description: Flags enumeration of meeting days (Edm enum, IsFlags=true, byte underlying type). Values may be combined as a comma-separated string.
      type: string
      enum:
      - None
      - Monday
      - Tuesday
      - Wednesday
      - Thursday
      - Friday
      - Saturday
      - Sunday
    Meeting:
      type: object
      properties:
        Id:
          type: string
          format: uuid
        SectionId:
          type: string
          format: uuid
          nullable: true
        Type:
          type: string
          nullable: true
        StartDate:
          type: string
          format: date
          nullable: true
        EndDate:
          type: string
          format: date
          nullable: true
        DaysOfWeek:
          $ref: '#/components/schemas/DaysOfWeek'
        StartTime:
          type: string
          description: OData Edm.TimeOfDay value (HH:mm:ss.fffffff).
          nullable: true
        Duration:
          type: string
          description: OData Edm.Duration value (ISO 8601 duration).
        RoomId:
          type: string
          format: uuid
          nullable: true
        Section:
          $ref: '#/components/schemas/Section'
        Instructors:
          type: array
          items:
            $ref: '#/components/schemas/Instructor'
        Room:
          $ref: '#/components/schemas/Room'
      required:
      - Id
      - DaysOfWeek
      - Duration
    ODataError:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
            message:
              type: string
    Course:
      type: object
      properties:
        Id:
          type: string
          format: uuid
        Number:
          type: string
          nullable: true
        SubjectId:
          type: string
          format: uuid
          nullable: true
        Title:
          type: string
          nullable: true
        CreditHours:
          type: number
          format: double
        Description:
          type: string
          nullable: true
        Subject:
          $ref: '#/components/schemas/Subject'
        Classes:
          type: array
          items:
            $ref: '#/components/schemas/Class'
      required:
      - Id
      - CreditHours
    Instructor:
      type: object
      properties:
        Id:
          type: string
          format: uuid
        Name:
          type: string
          nullable: true
        Email:
          type: string
          nullable: true
        Meetings:
          type: array
          items:
            $ref: '#/components/schemas/Meeting'
      required:
      - Id
    Term:
      type: object
      properties:
        Id:
          type: string
          format: uuid
        Code:
          type: string
          nullable: true
        Name:
          type: string
          nullable: true
        StartDate:
          type: string
          format: date
          nullable: true
        EndDate:
          type: string
          format: date
          nullable: true
        Classes:
          type: array
          items:
            $ref: '#/components/schemas/Class'
      required:
      - Id
  parameters:
    skip:
      name: $skip
      in: query
      required: false
      description: OData $skip count for server-driven paging.
      schema:
        type: integer
        minimum: 0
    keyId:
      name: Id
      in: path
      required: true
      description: The GUID key of the entity.
      schema:
        type: string
        format: uuid
    orderby:
      name: $orderby
      in: query
      required: false
      description: OData $orderby expression for sorting the entities returned.
      schema:
        type: string
    expand:
      name: $expand
      in: query
      required: false
      description: OData $expand comma-separated list of related entities to include.
      schema:
        type: string
    count:
      name: $count
      in: query
      required: false
      description: When true, requests the total count of matching entities.
      schema:
        type: boolean
    select:
      name: $select
      in: query
      required: false
      description: OData $select comma-separated list of properties to return.
      schema:
        type: string
    filter:
      name: $filter
      in: query
      required: false
      description: OData $filter expression for restricting the entities returned.
      schema:
        type: string
  responses:
    NotFound:
      description: The requested entity was not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ODataError'