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 crseAttrValue
s
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.
Methods
The current API version is 2.0. All methods are GET only with XML and JSON response formats available. The URL for each method is constructed as https://<HOST>/api/<VERSION>/<method>.<responseFormat>?parameters
config/rosters - Available rosters.
No parameters
config/acadCareers - Available academic careers for a roster.
Requires roster=<slug>
config/acadGroups - Available academic groups for a roster.
Requires roster=<slug>
config/classLevels - Available class levels for a roster.
Requires roster=<slug>
config/subjects - Available subjects for roster.
Requires roster=<slug>
search/classes - Scheduled classes, including Course of Study details.
Requires roster=<slug> and subject=<subject>
Optionally acadGroup[]=<academic-group>, acadCareer[]=<academic-career>, classLevels[]=<class-level>, explStudies[]=<exploratory-studies-code>, distrReqs[]=<distribution-requirements-code>, instructMode[]=<instruction-mode>, q=<searchTerm>
Specify multiple explStudies and distrReqs values by repeating the key. Within each category, only one code in the list needs to be matched in order to return the class, though you may require that all be matched by specifying explStudies-type=all or distrReqs-type=all.
Examples
- All available rosters (method config/rosters)
- All subjects in Fall 2025 (method config/subjects)
- All academic groups in Fall 2025 (method config/acadGroups)
- All mathematics (MATH) classes in Fall 2025 (method search/classes)
- All graduate, 6000-level philosophy (PHIL) classes in Fall 2025 (method search/classes)
- All AEM classes in Fall 2025 with the exploratory studies code "CU-CEL" (method search/classes)
- All undergraduate philosophy classes in Fall 2025 with all distribution requirements codes specified (method search/classes)
Learn More
- API Details
- Archived Rosters
- FAQ
- Last Updated
- Using Scheduler
- Using Syllabi (Faculty)
- Using Syllabi (Students)