Interfolio Courses API

Retrieve details of Courses (Prefixes, Courses Taught, Attachments).

Operations 12

GET /api.php/courseprefixes Retrieves course prefixes #
POST /api.php/courseprefixes Creates a course prefix #
GET /api.php/courses Retrieves courses #
POST /api.php/courses Creates courses #
GET /api.php/coursestaught Retrieves details regarding the course catalog #
POST /api.php/coursestaught Creates courses taught #
DELETE /api.php/coursestaught Deletes courses taught in bulk by termid or userid #
GET /api.php/coursestaught/{coursestaughtid} Retrieves details regarding a single item in the course catalog #
PUT /api.php/coursestaught/{coursestaughtid} Updates an individual course taught by the unique coursestaughtid of the item #
DELETE /api.php/coursestaught/{coursestaughtid} Deletes an individual coursestaught by the unique coursestaughtid of the item #
GET /api.php/coursestaught/{coursestaughtid}/attachments Retrieves details regarding the attachments of courses taught #
POST /api.php/coursestaught/{coursestaughtid}/attachments Add an attachment to courses taught activities #

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/interfolio:interfolio-courses-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 form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

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

OpenAPI Specification

interfolio-courses-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Interfolio Courses API
  version: 1.0.0
  x-logo:
    url: /images/logo_faculty180_intf.png
  description: 'Operations tagged Courses across 2 of this provider''s published API definitions: faculty180-swagger.json, interfolio-faculty180-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://faculty180.interfolio.com
tags:
- name: Courses
  description: Retrieve details of Courses (Prefixes, Courses Taught, Attachments).
paths:
  /api.php/courseprefixes:
    get:
      tags:
      - Courses
      summary: Retrieves course prefixes
      description: 'Description


        Retrieves course prefixes. A count of prefixes will be returned if no parameters are specified.


        Example URL(s)


        https://faculty180.interfolio.com/api.php/courseprefixes


        https://faculty180.interfolio.com/api.php/courseprefixes?data=detailed'
      operationId: coursePrefix
      parameters:
      - name: unitid
        in: query
        description: "Multiple values can be sent as a comma separated list.,\n  *  When defined, filters for course with given course prefix.\n  *  When undefined, all prefixes are returned."
        schema:
          type: integer
      - name: data
        in: query
        description: "Determines the extent of data that will be returned.\n  *  **Count:** Returns count of number of prefixes found. \n  *  **Summary:** Returns an array of strings containing a listing of all prefixes.\n  *  **Detailed:** Returns an array of values for all prefixes: prefix, prefix name, unit assigned to."
        schema:
          type: string
          enum:
          - count
          - summary
          - detailed
          default: count
      - $ref: '#/components/parameters/q'
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      responses:
        '200':
          description: A list of course prefixes
          content:
            application/json:
              example:
              - prefix: BIS
                name: Business Information Systems
                unitassigned: 4
        default:
          description: an "unexpected" error
    post:
      tags:
      - Courses
      summary: Creates a course prefix
      description: 'Description


        Create a course prefix.


        Example URL(s)


        https://faculty180.interfolio.com/api.php/courseprefixes'
      operationId: courseprefixesPost
      responses:
        '200':
          description: Course Prefix inserted successfully.
        '400':
          description: "Possible errors include:\n  *  Unable to parse request data.\n  *  Required field <field> not provided.\n  *  Prefix <prefix> already exists.\n  *  Invalid <unit> provided."
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/courseprefixesPost'
        required: true
    servers:
    - url: https://faculty180.interfolio.com
  /api.php/courses:
    get:
      tags:
      - Courses
      summary: Retrieves courses
      description: 'Description


        Retrieves courses. A count of courses will be returned if no parameters are specified.


        Example URL(s)


        https://faculty180.interfolio.com/api.php/courses


        https://faculty180.interfolio.com/api.php/courses?data=detailed&extra=title,description'
      operationId: coursesG
      parameters:
      - name: prefixes
        in: query
        description: "Multiple values can be sent as a comma separated list.\n  *  When defined, filters for course with given course prefix.\n  *  When undefined, all prefixes are returned."
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
      - name: extra
        in: query
        description: "Multiple values can be sent as a comma separated list.\n  *  When included, additional details are indexed and included in the returned array."
        schema:
          type: array
          items:
            type: string
            enum:
            - title
            - description
            - credithours
            - lecturehours
            - labhours
            - extrahours
            - extrahourslabel
            - courselevel
            - cipcode
      - name: data
        in: query
        description: "Determines the extent of data that will be returned.\n  *  **Count:** Returns count of number of courses found. \n  *  **Summary:** Returns an array of strings containing a subset of values for all courses.\n  *  **Detailed:** Returns an array of values for all courses: course prefix, course number, course designation, course title, description."
        schema:
          type: string
          enum:
          - count
          - summary
          - detailed
          default: count
      - $ref: '#/components/parameters/q'
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      responses:
        '200':
          description: A list of courses
          content:
            application/json:
              example:
              - prefix: BIS
                number: '330'
                designation: A
                title: Collaborative Technologies & Knowledge Management
                description: Focusing on collaboration and group processes (cooperation, communication, coordination and coproduction).
        default:
          description: an "unexpected" error
    post:
      tags:
      - Courses
      summary: Creates courses
      description: 'Description


        Create a course.


        Example URL(s)


        https://faculty180.interfolio.com/api.php/courses'
      operationId: coursesPost
      responses:
        '200':
          description: Course inserted successfully.
        '400':
          description: "Possible errors include:\n  *  Unable to parse request data.\n  *  Required field <field> not provided.\n  *  Field <field> must be numeric.\n  *  Prefix <prefix> does not exist.\n  *  Course already exists for course <prefix> <coursenumber>.\n  *  Course level must be of: Undergraduate, Graduate, Professional."
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/coursesPost'
        required: true
    servers:
    - url: https://faculty180.interfolio.com
  /api.php/coursestaught:
    get:
      tags:
      - Courses
      summary: Retrieves details regarding the course catalog
      description: 'Description


        Retrieves courses taught. A count of courses taught will be returned if no parameters are specified.


        Example URL(s)


        https://faculty180.interfolio.com/api.php/coursestaught


        https://faculty180.interfolio.com/api.php/coursestaught?data=detailed&termid=2015/02'
      operationId: coursesTaught
      parameters:
      - name: termid
        in: query
        description: "Value should match the termid of terms.\n  *  When defined, filter courses that were taught during the specified term.\n  *  When undefined, courses are not filtered by term."
        schema:
          type: string
      - name: userlist
        in: query
        description: "Multiple values can be sent as a comma separated list.\n  *  Values should match the userid of users.\n  *  When defined, filter returned courses by the specified users.\n  *  When undefined, courses are not filtered by users"
        style: form
        explode: false
        schema:
          type: array
          items:
            type: string
      - name: data
        in: query
        description: "Determines the extent of data that will be returned.\n  *  **Count:** Returns count of number of courses taught found. \n  *  **Summary:** Returns an array containing a subset of values for all courses taught.\n  *  **Detailed:** Returns an array of values for all courses taught."
        schema:
          type: string
          enum:
          - count
          - summary
          - detailed
          default: count
      - $ref: '#/components/parameters/q'
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      responses:
        '200':
          description: Retrieves details regarding the course catalog.
          content:
            application/json:
              example:
              - coursestaughtid: 150
                userid: m123456
                coursename: Bank Management
                studentcredithours: '26'
                enrollment: 13
                teachingload: '2'
                credithours: '2'
                weight: '1'
                instructionmode: Day Time Classes before 16:30
                termid: 2015/02
                coursenumber: '325'
                courseprefix: AA
                section: '1'
                designation: A
        default:
          description: an "unexpected" error
    post:
      tags:
      - Courses
      summary: Creates courses taught
      description: 'Description


        Create a taught course.


        Example URL(s)


        https://faculty180.interfolio.com/api.php/coursestaught'
      operationId: coursestaughtPost
      responses:
        '200':
          description: Coursestaught inserted successfully.
        '400':
          description: "Possible errors include:\n  *  Unable to parse request data.\n  *  Required field <field> not provided.\n  *  Field <field> must be numeric.\n  *  Field <field> must be string.\n  *  Course <courseprefix> <coursenumber> <coursedesignation> does not exist.\n  *  TermID <termid> does not exist.\n  *  Course Taught already exists for userid: <userid> , courseprefix: <courseprefix>, coursenumber: <coursenumber>, coursedesignation: <coursedesignation>, section: <section>, termid: <termid>\n  *  Activity classification errors include:\n  *  Activity classification '<classificationid>' is not a valid classification.\n  *  Activity classification of '<classificationid>' does not accept the value of <values[n]>.\n  *  Activity classification cannot be locked by invalid faculty id of '<lockedby>'."
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/coursestaughtPost'
        required: true
    delete:
      tags:
      - Courses
      summary: Deletes courses taught in bulk by termid or userid
      description: 'Description


        Either termid, userlist, or both must be defined for this endpoint

        * When deleting a course within a group

        * If the course being deleted is the parent of the group

        * And the number of courses grouped is > 2

        * Then a new course is picked to become the parent of the group, and the activity classifications and file attachments associated with the course being deleted will be reassigned to the new parent course.

        * And the number of courses grouped is Example URL(s)


        https://faculty180.interfolio.com/api.php/coursestaught'
      operationId: deletecoursestaught
      parameters:
      - name: termids
        in: query
        description: "Multiple values can be sent as a comma separated list.\n  *  Value should match the termid of terms.\n  *  When defined, courses taught are deleted by termid.\n  *  When undefined, courses are not filtered by term."
        schema:
          type: string
      - name: userlist
        in: query
        description: "Multiple values can be sent as a comma separated list.\n  *  Value should match the termid of terms.\n  *  When defined, courses taught will be deleted for users in this list.\n  *  When undefined, courses taught deletions are not limited by users"
        schema:
          type: string
      responses:
        '200':
          description: Success response is an empty response with an HTTP status of 204
        default:
          description: "If there are errors, nothing will be deleted. Possible errors with an HTTP status of 404 include:\n  *  TermID(s) do not exist: <termid1>, <termid2>, <termidn>\n  *  UserID(s) do not exist: <userid1>, <userid2>, <useridn>"
    servers:
    - url: https://faculty180.interfolio.com
  /api.php/coursestaught/{coursestaughtid}:
    get:
      tags:
      - Courses
      summary: Retrieves details regarding a single item in the course catalog
      description: 'Description


        Retrieves a single course taught. A count of the course taught will be returned if no parameters are specified.


        Example URL(s)


        https://faculty180.interfolio.com/api.php/coursestaught/150


        https://faculty180.interfolio.com/api.php/coursestaught/150?data=detailed&termid=2015/02'
      operationId: coursestaughtid
      parameters:
      - name: coursestaughtid
        in: path
        description: Specify a coursestaughtid to retrieve details.
        required: true
        schema:
          type: string
      - name: termid
        in: query
        description: "Value should match the termid of terms.\n  *  When defined, filter courses that were taught during the specified term.\n  *  When undefined, courses are not filtered by term."
        schema:
          type: string
      - name: userlist
        in: query
        description: "Multiple values can be sent as a comma separated list.\n  *  Values should match the userid of users.\n  *  When defined, filter returned courses by the specified users. \n  *  When undefined, courses are not filtered by users."
        schema:
          type: string
      - name: data
        in: query
        description: "Determines the extent of data that will be returned.\n  *  **Count:** Returns value of 1 if desired resource exists or 0 otherwise. \n  *  **Summary:** Returns an array containing a subset of values for all courses taught.\n  *  **Detailed:** Returns an array of values for all courses taught."
        schema:
          type: string
          enum:
          - count
          - summary
          - detailed
          default: count
      - $ref: '#/components/parameters/q'
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      responses:
        '200':
          description: A specific course taught.
          content:
            application/json:
              example:
              - coursestaughtid: 150
                userid: m123456
                coursename: Bank Management
                studentcredithours: '26'
                enrollment: 13
                teachingload: '2'
                credithours: '2'
                weight: '1'
                instructionmode: Day Time Classes before 16:30
                termid: 2015/02
                coursenumber: '325'
                courseprefix: AA
                section: '1'
                designation: A
        default:
          description: an "unexpected" error
    put:
      tags:
      - Courses
      summary: Updates an individual course taught by the unique coursestaughtid of the item
      description: 'Description


        Update a taught course.


        Example URL(s)


        https://faculty180.interfolio.com/api.php/coursestaught/150'
      operationId: coursestaughtidPut
      parameters:
      - name: coursestaughtid
        in: path
        description: Specify a coursestaughtid to update
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: Coursestaught successfully updated.
        '400':
          description: "Possible errors include:\n  *  Unable to parse request data.\n  *  Field <field> must be numeric.\n  *  Field <field> must be string.\n  *  Userid <userid> does not exist.\n  *  TermID <termid> does not exist.\n  *  Course Taught already exists for userid: <userid>, courseprefix: <courseprefix> , coursenumber: <coursenumber>, coursedesignation: <coursedesignation>, section: <section>, termid: <termid>.\n  *  Activity classification errors include:\n  *  Activity classification '<classificationid>' is not a valid classification. \n  *  Activity classification of '<classificationid>' does not accept the value of <values[n]>. \n  *  Activity classification cannot be locked by invalid faculty id of '<lockedby>'."
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/coursestaughtPut'
        required: true
    delete:
      tags:
      - Courses
      summary: Deletes an individual coursestaught by the unique coursestaughtid of the item
      description: 'Description


        Delete a taught course.


        Example URL(s)


        https://faculty180.interfolio.com/api.php/coursestaught/150'
      operationId: deleteApiPhpCoursestaughtByCoursestaughtid
      parameters:
      - name: coursestaughtid
        in: path
        description: Specify a coursestaughtid to delete
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: Success response is an empty response with an HTTP status of 204
        default:
          description: "Possible errors include:\n  *  Coursestaughtid <coursestaughtid> does not exist.\n  *  Coursestaughtid <coursestaughtid> must be an integer.\n  *  Error deleting coursestaughtid <coursestaughtid>."
      x-operation-id-source: normalized
      x-operation-id-original: deletecoursestaught
    servers:
    - url: https://faculty180.interfolio.com
  /api.php/coursestaught/{coursestaughtid}/attachments:
    get:
      tags:
      - Courses
      summary: Retrieves details regarding the attachments of courses taught
      description: 'Description


        Retrieves a single course taught. A count of the attachments will be returned if no parameters are specified.


        Example URL(s)


        https://faculty180.interfolio.com/api.php/coursestaught/150/attachments


        https://faculty180.interfolio.com/api.php/coursestaught/150/attachments'
      operationId: coursestaughtidattachments
      parameters:
      - name: coursestaughtid
        in: path
        description: Specify a coursestaughtid to retrieve an attachment
        required: true
        schema:
          type: integer
      - name: data
        in: query
        description: "Determines the extent of data that will be returned.\n  *  **Count:** Returns count of number of attachments found. \n  *  **Summary:** Returns an array of attachmentids for the taught course.\n  *  **Detailed:** Returns an array of attachments for the taught course."
        schema:
          type: string
          enum:
          - count
          - summary
          - detailed
          default: count
      - $ref: '#/components/parameters/q'
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      responses:
        '200':
          description: Retrieves details regarding the course catalog
          content:
            application/json:
              example:
              - attachmentid: 125
                mimetype: application/vnd.openxmlformats-officedocument.wordprocessingml.document
                filename: Syllabus BIS 330
                filesize: 1000
        default:
          description: an "unexpected" error
          content:
            application/json:
              example:
              - cheese: 111
    post:
      tags:
      - Courses
      summary: Add an attachment to courses taught activities
      description: 'Description


        Create an attachment for a taught course.


        Add attachments to courses taught activities by either sending the file to be attached or the attachment id from an existing attachment. Only one attachment can be made in a single POST request. When sending a file, the file should be sent using form name ''file''. The form name ''body'' should represent the JSON request for the file. If uploading a file and an attachmentid is included in the body JSON data, the attachmentid is ignored.


        Example URL(s)


        https://faculty180.interfolio.com/api.php/coursestaught/150/attachments'
      operationId: coursesidattachmentsPOST
      responses:
        '200':
          description: Attachment Successfully uploaded
        '400':
          description: "Possible errors include:\n  *  Unable to parse request data.\n  *  File should be uploaded with the proper form name (file).\n  *  Courses taught record does not exist. \n  *  Attachment does not exist."
      requestBody:
        content:
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/coursestaughtattachmentsPost'
        required: true
    servers:
    - url: https://faculty180.interfolio.com
components:
  schemas:
    coursesPost:
      required:
      - prefix
      - coursenumber
      - credithours
      - coursetitle
      - courselevel
      properties:
        prefix:
          type: string
        coursenumber:
          type: string
        coursedesignation:
          type: string
        coursetitle:
          type: string
        credithours:
          type: integer
        lecturehours:
          type: integer
        labhours:
          type: integer
        extrahours:
          type: integer
        extrahourslabel:
          type: string
        courselevel:
          type: string
        description:
          type: string
        weight:
          type: integer
      type: object
    coursestaughtPut:
      properties:
        userid:
          type: string
        coursename:
          type: string
        section:
          type: string
        termid:
          type: string
        enrollment:
          type: integer
        teachingload:
          type: number
          format: float
        weight:
          type: number
          format: float
        activityclassifications:
          type: array
          items:
            properties:
              classificationid:
                type: integer
              values:
                type: array
                items:
                  type: integer
                collectionFormat: csv
              lockedby:
                type: string
            type: object
      type: object
    coursestaughtattachmentsPost:
      required:
      - attachmentid
      properties:
        attachmentid:
          type: integer
        locked:
          type: integer
        type:
          type: string
      type: object
    courseprefixesPost:
      required:
      - prefixabbrv
      - name
      - unitid
      properties:
        prefixabbrv:
          type: string
        name:
          type: string
        unitid:
          type: string
      type: object
    coursestaughtPost:
      required:
      - userid
      - courseprefix
      - coursename
      - coursenumber
      - coursedesignation
      - section
      - termid
      - enrollment
      properties:
        userid:
          type: string
        courseprefix:
          type: string
        coursename:
          type: string
        coursenumber:
          type: string
        coursedesignation:
          type: string
        section:
          type: string
        termid:
          type: string
        enrollment:
          type: integer
        teachingload:
          type: number
          format: float
        credithours:
          type: number
          format: float
        weight:
          type: number
          format: float
        activityclassifications:
          type: array
          items:
            properties:
              classificationid:
                type: integer
              values:
                type: array
                items:
                  type: integer
                collectionFormat: csv
              lockedby:
                type: string
            type: object
      type: object
  parameters:
    q:
      name: q
      in: query
      description: Search term. Use '*' as wildcard.
      schema:
        type: string
    limit:
      name: limit
      in: query
      description: Limit query to specified number of records.
      schema:
        type: integer
    offset:
      name: offset
      in: query
      description: Used to offset queries that are segmented into chunks with limit.
      schema:
        type: integer
x-refined-from:
- faculty180-swagger.json
- interfolio-faculty180-openapi.yml