For developers
Developer docs
CourseQuest is a project created by researchers: a free, fast university course catalog and weekly-schedule planner. It aggregates public course search data into a searchable catalog of courses and sections, including meeting days/times, rooms, instructors, seat availability, credits, and open/closed status. The web interface includes calendar export for various formats (e..g., iCal / Google / Outlook).
Use of the API is subject to our API Terms.
Not a human? See the machine-readable guide at /llms.txt.
Data model
Institution (school) → Subject → Course → Section. Each section exposes its current snapshot (status, schedule, room, seats, instructor, units) and is refreshed by periodic scrapes; prior snapshots are retained as history. Sections that disappear from a complete scrape are marked cancelled rather than deleted.
Supported schools
The set of schools grows over time. Rather than listing them here, fetch the live list:
Use a school's identifier (e.g. uri) as the inst parameter in the endpoints below. The identifiers are derived from the school's domain name, without the domain suffix. For example, the identifier for mit.edu is mit.
API reference
All endpoints are GET, need no authentication, send the CORS header Access-Control-Allow-Origin: *, and return JSON by default. Catalog search also supports format=text for plaintext and format=markdown (or the Accept: text/markdown request header) for Markdown.
/api/institutionsSchools that have course data loaded, with course counts.
Returns: { institutions: [{ identifier, name, courses }] }
/api/catalog/filtersAvailable subjects, careers, and terms for a school — useful for building queries or dropdowns.
| Param | Description |
|---|---|
| inst | school identifier (the official .edu domain minus .edu; e.g. uri) |
Returns: { subjects: string[], careers: string[], terms: [{ term, year }] }
/api/catalogCurrent (non-cancelled) sections for a school, with filtering and pagination. This is the main data endpoint.
| Param | Description |
|---|---|
| inst | school identifier (default: uri) |
| term | term name (default: Fall) |
| year | term year (default: 2026) |
| q | free text over subject / number / title / class# / instructor |
| subject | exact subject code, e.g. BIO |
| career | career code, e.g. UGRD or GRAD |
| open | 1 (or true) to return only open sections |
| days | comma list of weekdays, 0=Sun … 6=Sat; matches sections meeting on any of them |
| page | 1-based page number (default: 1) |
| pageSize | results per page, max 100 (default: 25) |
| format | json (default), text, or markdown; overrides the Accept header |
Returns: { total, page, pageSize, pages, results[] } — each result includes a `url` linking to its course page
More examples
curl -H "Accept: text/markdown" "https://coursequest.org/api/catalog?inst=uri&subject=BIO"
curl "https://coursequest.org/api/catalog?inst=uri&subject=BIO&open=1&format=markdown"
curl "https://coursequest.org/api/catalog?inst=uri&q=calculus&days=1,3,5"
curl "https://coursequest.org/api/institutions?format=text"