API Details

The API enables access to Class Roster data.

Common Questions

Is the old Course and Time Roster XML still available?

Yes. The Course and Time Roster XML is available and refreshed through Fall 2015.

Are descriptions available for any course?

No. Course descriptions and additional Courses of Study information are only being made available for classes visible on the roster.

How can I link to the current search or a subject page?

Class Roster provides fixed inbound URLs for this purpose. To link to the current roster for your subject code, use /browse/inbound/subject/subjectCode . To target a search form to the current roster, use /search/inbound/?q=searchTerm

What is the source of the response from the search/classes method?

For all rosters prior to Fall 2025: at the root level of the class element, all properties prefixed with "catalog" are sourced from the legacy Courses of Study repository. The course description element is special and is named "description".
For Fall 2025 and later rosters: all elements are refreshed from the new catalog source. Elements prefixed with "catalog", which previously came from the legacy repository, will still be present, even if empty, for compatibility purposes. Note that the deprecated elements may eventually be removed from output.
All search/classes results contain a top-level meta object. Results for pre-Fall 2025 rosters contain a catalogDttm element indicating the last refresh date of the Courses of Study data; that element is not relevant to, and intentionally absent from, all later rosters.

What is the enrollGroup element?

The enrollGroup element in the search/classes method response is a Class Roster construct to simplify the complex nature of enrollment options. An enrollGroup matches to an "Enrollment Information" box on the web. To maintain data integrity, each class section can have one or more meeting patterns. Each meeting pattern can have one or more instructors. Select class sections may be repeated across in several enrollGroup elements if permitted.

Are there API usage limits?

API usage should be limited to no more than 1 request per second.

Is "Schedule Print" respected for the API?

Yes. Schedule print is respected on the API just as on the browsable web version.

Changes for Fall 2025 and Beyond

As noted in the Common Questions section above, the source of class data has changed as of the Fall 2025 roster. API results are affected. In summary:

  • Rosters prior to Fall 2025 are considered to be "legacy"; all others are standard.
  • Various data elements have been deprecated in the new rosters. They shall remain present (and null or otherwise empty) for now on legacy rosters for compatibility but may be removed in the future.
  • New elements which have been introduced to support data on new rosters may also be present (and null or otherwise empty) on legacy rosters.
  • Only the /search/classes route is affected. Data and policy not addressed in this section should be assumed to remain unchanged.
  • If you have any questions or concerns about API data, please contact coursenroll@cornell.edu.

Details below.

Course attributes

A crseAttrs element appears at the top level of each class. In legacy results, this will be an empty array; in standard, it may contain one or more course attributes. Each attribute has several descriptive properties; e.g.,

 {
   "crseAttr": "0012",
   "crseAttrValue": "CHPH-AG",
   "descr": "AG-Chemistry/Physics",
   "descrformal": "AG-Chemistry/Physics",
   "attrDescr": "Distribution Requirements",
   "attrDescrShort": "DistReq"
 }
 

A new crseAttrValueGroups element is now present on all rosters at the top level of each class to act as a convenient supplement to crseAttrs. In legacy results, it is present as an empty array; in standard, it may contain one or more summaries of a set of course attributes. Each object identifies the attribute type (attrDescr) and contains a string (crseAttrValues) representing containing the collected and parenthetically-grouped crseAttrValues of the attribute. E.g., three course attributes within the Distribution Requirements category may be represented thusly:

 {
   "attrDescr": "Distribution Requirements",
   "crseAttrValues": "(CHPH-AG, OPHLS-AG), (SCT-IL)"
 }
 

Permission and enrollment priority

The catalogPermission element will remain in legacy results; in standard, its data will instead be present in the new catalogEnrollmentPriority element. No change to content is expected. Both elements will be present on all rosters; the legacy element will be empty in standard results and vice versa.

Corequisites and prerequisites

The legacy catalogPrereqCoreq element will remain in legacy results; in standard, it is being split up and replaced by separate elements, catalogPrereq and catalogCoreq. All elements will be present on all rosters; the legacy element will be empty in standard results and vice versa.

Last terms offered

A new lastTermsOffered element is present on all rosters at the top level of each class. In standard results only, the value is a string containing a comma-separated list of the last terms in which the class was offered in descending order. Terms are represented by a combined year and short term code. Up to four terms may be cited. E.g., "2025SP, 2024FA, 2024SP, 2023FA".

Deprecated elements

Elements no longer containing data in standard results:
catalogAttribute, catalogBreadth, catalogComeets, catalogComments, catalogCourseSubfield, catalogCredits, catalogCrosslisted, catalogCrosslistings, catalogDistr, catalogGradeOption, catalogLang, catalogLocation, catalogName, catalogNextOffered, catalogSatisfiesReq, catalogWhenOffered.
They will continue to contain data in legacy results; in standard, they will be present but empty until further notice.

Legacy catalog datetime

All results continue to contain a top-level meta element containing a small number of roster-specific properties. The catalogDttm element within has indicated the last update to the legacy catalog used by the respective roster. In legacy results this element remains present with an ISO 8601 date (with offset); in standard, the element is no longer present.

Usage

Base URL structure

All API requests follow this pattern:

https://classes.cornell.edu/api/version/method.responseFormat?parameters

API version

Current version: 2.0

Available methods

Note:

  • All methods use GET requests only.
  • The roster-code value, a required parameter for most methods, is the combination of the uppercased short term description -- FA (Fall), WI (Winter), SP (Spring), or SU (Summer) -- and the last two digits of the year. E.g., Fall 2025 is FA25.
config/rosters

Returns all available rosters.

Parameters: None

config/acadCareers

Returns available academic careers for a roster.

Required parameters:

  • roster=roster-code
config/acadGroups

Returns available academic groups for a roster.

Required parameters:

  • roster=roster-code
config/classLevels

Returns available class levels for a roster.

Required parameters:

  • roster=roster-code
config/subjects

Returns available subjects for a roster.

Required parameters:

  • roster=roster-code
search/classes

Returns scheduled classes, including Course of Study details.

Required parameters:

  • roster=roster-code - Always required.
  • subject=subject - Required unless at least one of the following is specified: explStudies[], distrReqs[], classAttr, instructMode[], or instructor.
  • classAttr=class-attribute-code - Required if classAttrValues[] is specified.

Optional parameters:

  • acadCareer[]=academic-career
  • acadGroup[]=academic-group
  • classAttrValues[]=class-attribute-value
  • classLevels[]=class-level
  • distrReqs[]=distribution-requirements-code
  • explStudies[]=exploratory-studies-code
  • instructMode[]=instruction-mode
  • instructor=NetID
  • q=searchTerm

Rules for multiple values:

  • Parameters with the [] suffix accept multiple values. Specify multiple values by repeating the parameter (e.g., acadCareer[]=UG&acadCareer[]=GR).
  • Conjunction logic may be modified for some properties by supplying a corresponding -type parameter:
    • classAttrValues-type=type
    • distrReqs-type=type
    • explStudies-type=type
    type may be any (only one value in each category needs to match to return a class) or all (require that all values match).
    The default behavior is equivalent to supplying any.

Rules for string matching:

  • String-matching logic may be modified for some properties by supplying a corresponding -str parameter:
    • classAttr-str=type
    • classAttrValues-str=type
    • distrReqs-str=type
    • explStudies-str=type
    type may be substr (the value will match as either an exact string or as a substring) or exact (require an exact match).
    The default behavior is equivalent to supplying substr.

Response formats

Specify the desired response format using the file extension:

  • xml - XML format.
  • json - JSON format.

Examples

  • All available rosters (method config/rosters)

    Responses: XML or JSON

  • All subjects in Fall 2025 (method config/subjects)
    • roster=FA25

    Responses: XML or JSON

  • All academic groups in Fall 2025 (method config/acadGroups)
    • roster=FA25

    Responses: XML or JSON

  • All mathematics (MATH) classes in Fall 2025 (method search/classes)
    • roster=FA25
    • subject=MATH

    Responses: XML or JSON

  • All graduate, 6000-level philosophy (PHIL) classes in Fall 2025 (method search/classes)
    • roster=FA25
    • subject=PHIL
    • acadCareer[]=GR
    • classLevels[]=6000

    Responses: XML or JSON

  • All AEM classes in Fall 2025 with the exploratory studies code "CU-CEL" (method search/classes)
    • roster=FA25
    • subject=AEM
    • explStudies[]=CU-CEL

    Responses: XML or JSON

  • All undergraduate philosophy classes in Fall 2025 with all distribution requirements codes specified (method search/classes)
    • roster=FA25
    • subject=PHIL
    • acadCareer[]=UG
    • distrReqs[]=HST-AS
    • distrReqs[]=HA-AG
    • distrReqs-type=all

    Responses: XML or JSON