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 identifer (e.g. uri) as the inst parameter in the endpoints below.

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.

GET/api/institutions

Schools that have course data loaded, with course counts.

Returns: { institutions: [{ identifier, name, courses }] }

Example
curl "https://coursequest.org/api/institutions"
Try it
GET/api/catalog/filters

Available subjects, careers, and terms for a school — useful for building queries or dropdowns.

ParamDescription
instschool identifier (the official .edu domain minus .edu; e.g. uri)

Returns: { subjects: string[], careers: string[], terms: [{ term, year }] }

Example
curl "https://coursequest.org/api/catalog/filters?inst=uri"
Try it
GET/api/catalog

Current (non-cancelled) sections for a school, with filtering and pagination. This is the main data endpoint.

ParamDescription
instschool identifier (default: uri)
termterm name (default: Fall)
yearterm year (default: 2026)
qfree text over subject / number / title / class# / instructor
subjectexact subject code, e.g. BIO
careercareer code, e.g. UGRD or GRAD
open1 (or true) to return only open sections
dayscomma list of weekdays, 0=Sun … 6=Sat; matches sections meeting on any of them
page1-based page number (default: 1)
pageSizeresults per page, max 100 (default: 25)
formatjson (default), text, or markdown; overrides the Accept header

Returns: { total, page, pageSize, pages, results[] } — each result includes a `url` linking to its course page

Example
curl "https://coursequest.org/api/catalog?inst=uri&q=biology"
Try it

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"