[]
Banner for Deciphering the UIUC courses API

Deciphering the UIUC courses API

2023-04-16
Funnily enough, the university with the 5th best CS program has a wonky course API.
Last updated on 

So, the University of Illinois Urbana-Champaign1 has an API for course information. It exists as a part of something called the “Course Information Suite”, or CIS for short. As far as I can tell, the documentation is out of date, or at the very least fails to accurately describe how to utilize the API. This post details what I’ve deciphered about the API and how you can use it.


Table of Contents


The Problem(s)

The gist of the issue seems to be that, at some point, they decided to consolidate the API but failed to update the documentation alongside it. The CIS documentation is split up into three sections2:

Each of these describe endpoints attached to the courses.illinois.edu URL.

Now, the key error in the documentation is this:

…the /cisapi endpoint does not work.

Play with it as much as you like, you will consistently find yourself with an HTML 404 page response. So… how do you get course data, then? The obvious answer is “the Data Explorer App, duh”… which is essentially the response I received when I got in touch with the University’s head software engineer—a tad discouraging, to say the least4.

You see, the Data Explorer App documentation is a lot sparser that the CIS API documentation. It doesn’t have the detailed description of endpoints (/schedule/year, schedule/courses, etc) that the CIS API documentation does. It semed that, through the aforementioned consolidation, we no longer had access to a number of useful endpoints.

However, if you’ve done your due diligence, you’ll notice that by searching Github you can find how people have used the /cisapp/explorer endpoints. And, if you’re like me, you’ll come to a sinking realization:

…all the /cisapi/schedule endpoints work if you make them match the /cisapp/explorer format.

The Solution

Once I figured out that this was the main error in the documentation, I threw together a tool that can take any example URL from the documentation of the /cisapi/schedule endpoints, and make it a working /cisapp/explorer/schedule endpoint. And, due to the flexibility of the /schedule/courses endpoint, the need for functioning /gened, /term, /subjects endpoints(which don’t work with the Data Explorer) was negated. You can access the tool below:


A few dead-simple utilities that fix/modify/convert the URLs for UIUC's Course Information Suite API. (Web source code) (Module source code)

The moral of the story, then, is that if you want to build a project that uses the UIUC CIS API, you can simply reference the /cisapi documentation to your heart’s content, and use the above tool to get the corresponding /cisapp/explorer URL when you need it. That way, you get all the detail out of the /cisapi documentation, and all the actually-working functionality of the /cisapp/explorer endpoints.

GenEds

…and if you’d like to use the schedule/courses endpoint to find courses that match a particular gened requirement, you can use the following codes5:

NameCode
Composition ICOMP1
Advanced Composition1CLL
Humanities and the Arts: (Both)HUM
Humanities and the Arts: Literature & the Arts1LA
Humanities and the Arts: Historical & Philosophical Perspectives1HP
Natural Sciences and Technology: (Both)NAT
Natural Sciences and Technology: Life Science1LS
Natural Sciences and Technology: Physical Science1PS
Quantitative Reasoning I1QR1
Quantitative Reasoning II1QR2
Social and Behavioral Sciences: (Both)SBS
Social and Behavioral Sciences: Social Science1SS
Social and Behavioral Sciences: Behavioral Science1BSC
Cultural Studies: (Both)CS
Cultural Studies: Western/Comparative Cultures1WCC
Cultural Studies: Non-Western Cultures1NW
Cultural Studies: US Minority Cultures1US

The XML Schema

Another issue with the documentation is that the link to the XML schema is broken. Thankfully, I was able to gain access to it during my correspondence with the head software engineer. I’ve hosted it on Github, and a link to download it can be found found under the tool I mentioned earlier, at mirth.cc/cisurls-web/cisapi.xsd.

Conclusion

This was by no means a comprehensive explanation of the UIUC CIS API. Frankly, the only place you could get that would be from the minds behind it, and I doubt they have the time or energy to exhaustively elaborate on how this stuff works. At the very least, I hope this post helps clear some of the fog around the API and make it easier to understand and utilize for tinkering students. All of this is stuff I’ve figured out by getting my hands dirty, and it is entirely possible that I’ve written here some misconception or mistake. Please take everything with a grain of salt, and if you have any questions, feel free to reach out to me by email.

Footnotes

  1. Yes, the Urbana-Champaign campus specifically. While the core registration system may overlap somewhat between the three universities in the system, a lot of the specifics, like the CIS API, are unique to their respective universities. Last I checked, UIC has some sort of equivalent. It seems to be better documented, which is funny, because of all the universities in the system to have a good API, you would think it’d be UIUC, #5 CS program in the nation. But no, the good API belongs to its northerly sister-school known for medicine.

  2. If the documentation gets updated in the future and fixes the issues mentioned here, you can view the what the documentation looked like around the time this post was written at web.archive.org.

  3. This is the portion of the Course Information Suite that I’ve interacted the least with. Genuinely, no real idea what’s going on here or what it’s used for.

  4. To be clear, I bear no ill will. I’m sure he’s got a lot more serious things on his plate than to answer one student’s complaints and misunderstandings of what is a rather functional API, all things considered. His correspondence was crucial in furthering my understanding.

  5. Which I figured out by manually paging through all the options in the banner registration system.