Discover/utoronto API
live

utoronto APIutoronto.ca ↗

Access U of T academic calendars, course timetables, and researcher profiles via 9 endpoints covering St. George, Mississauga, and Scarborough campuses.

Endpoint health
verified 2h ago
list_subject_areas
search_courses
get_course
search_programs
list_timetable_divisions
9/9 passing latest checkself-healing
Endpoints
9
Updated
2h ago

What is the utoronto API?

The University of Toronto API exposes 9 endpoints covering academic calendar data across three campuses, current course timetables, and the Discover Research faculty directory. With search_courses you can query courses by keyword or subject area and get back prerequisites, corequisites, exclusion rules, breadth requirements, and distribution tags. The same API surfaces program listings, section-level timetable data, and full researcher profiles including degrees, publications, and ORCID identifiers.

This call costs1 credit / call— charged only on success
Try it
Which campus calendar to read.
→ api.parse.bot/scraper/d8196962-a57c-4b65-9e08-70dc525a9712/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/d8196962-a57c-4b65-9e08-70dc525a9712/list_subject_areas?campus=st_george' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

Typed, relational, agent-ready

A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.

  • Fully typed · autocompletes
  • Objects link to objects
  • Typed errors & pagination

Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:

uv add parse-sdk
uv run parse init
uv run parse add --marketplace utoronto-ca-api

uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.

"""Walkthrough: University of Toronto academic data — courses, experts, publications."""
from parse_apis.utoronto_ca_api import UofT, Campus, Division, InputNotFound

client = UofT()

# Search for computer science courses on the St. George campus.
for course in client.courses.search(campus=Campus.ST_GEORGE, keyword="CSC", limit=5):
    print(course.course_code, course.title, course.hours)

# Drill into full detail for the first hit.
hit = client.courses.search(campus=Campus.ST_GEORGE, keyword="CSC108", limit=1).first()
if hit is not None:
    detail = client.courses.get(course_code=hit.course_code)
    print(detail.title, detail.prerequisite, detail.breadth_requirement)

# Search experts in a department, then navigate to full profile and publications.
expert_summary = client.expert_summaries.search(
    department="Faculty of Arts and Science, Department of Computer Science",
    limit=1,
).first()

if expert_summary is not None:
    expert = expert_summary.details()
    print(expert.name, expert.title, expert.email)

    # Walk the expert's publications via the sub-resource.
    for pub in expert.publications.list(limit=3):
        print(pub.year, pub.title, pub.journal)

# Search current timetable offerings for Arts & Science.
for offering in client.course_offerings.search(
    division=Division.ARTSC, keyword="CSC108", limit=3
):
    for section in offering.sections:
        print(offering.course_code, section.section, section.current_enrolment, "/", section.max_enrolment)

# Point-lookup an expert by id — handle not-found gracefully.
try:
    expert = client.experts.get(expert_id="999999999")
except InputNotFound:
    print("expert not found")

print("exercised: courses.search / courses.get / expert_summaries.search / details / publications.list / course_offerings.search / experts.get")
All endpoints · 9 totalmissing one? ·

Lists the calendar subject areas (program areas / calendar sections, i.e. the departments and units the calendar is organised by) for one campus calendar, read from the calendar's course search filter. Returns one row per subject area with the exact value accepted by search_courses.subject_area and search_programs.subject_area, plus its calendar section page URL. For the Mississauga campus the calendar also exposes an academic department list, returned in departments (empty for other campuses). One request; not paginated.

Input
ParamTypeDescription
campusstringWhich campus calendar to read.
Response
{
  "type": "object",
  "fields": {
    "campus": "campus key echoed back",
    "campus_name": "human-readable campus name",
    "departments": "array of department names (Mississauga calendar only, else empty)",
    "calendar_url": "base URL of the campus academic calendar",
    "subject_areas": "array of {subject_area (filter value), label, source_url}"
  },
  "sample": {
    "data": {
      "campus": "utm",
      "campus_name": "Mississauga",
      "departments": [
        "Anthropology",
        "Biology"
      ],
      "calendar_url": "https://utm.calendar.utoronto.ca",
      "subject_areas": [
        {
          "label": "Anthropology",
          "source_url": "https://utm.calendar.utoronto.ca/section/Anthropology",
          "subject_area": "Anthropology"
        }
      ]
    },
    "status": "success"
  }
}

About the utoronto API

Academic Calendar Coverage

The list_subject_areas endpoint returns every subject area filter value recognised by a given campus calendar — St. George (Arts & Science), Mississauga, or Scarborough. Those subject_area values feed directly into search_courses and search_programs. search_courses returns up to 30 courses per page with fields including course_code, title, description, hours, prerequisite, corequisite, exclusion, recommended_preparation, and breadth/distribution requirement tags. get_course resolves a single course code to its full calendar entry; the campus is inferred automatically from the code's final digit (1 = St. George, 5 = Mississauga, 3 = Scarborough). The Mississauga calendar additionally accepts a department filter on both course and program searches.

Programs of Study

search_programs searches all program types — specialists, majors, minors, focuses, certificates, and combined degrees — and returns program_code, name, level, subject_area, description, and enrolment and completion requirement text. The level input is matched case-insensitively by prefix against the calendar's own level labels, so passing Specialist or Minor narrows results without needing an exact string. total_pages and has_more on both course and program responses let you page through large result sets reliably.

Timetable Builder

list_timetable_divisions returns the currently searchable academic sessions (sessions[*].code and sessions[*].label) and all faculty/division codes. Feed a division code into search_course_offerings to retrieve current offerings: each row carries course_code, section_code, term indicator, campus, instructor names, department, faculty, and the linked session labels. You can narrow by keyword, session, department, and instructor surname. Results page at 20 offerings per page with a total count in the response.

Researcher Profiles and Publications

search_experts queries the Discover Research directory by free-text query or by exact faculty_and_department label, returning up to 100 profiles per page with expert_id, name, title, positions, and faculty_and_department. get_expert expands a single profile to include bio, email, orcid, degrees (with field of study, institution, and year), websites, languages, and classification labels. list_expert_publications pages through an expert's linked works with title, type, year, journal, doi, issn, authors, and co-author expert_id references for graph traversal.

Reliability & maintenanceVerified

The utoronto API is a managed, monitored endpoint for utoronto.ca — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when utoronto.ca changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.

This isn't an official utoronto.ca API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.

Last verified
2h ago
Latest check
9/9 endpoints passing
Maintenance
Monitored & self-healing
Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Build a course prerequisite checker using get_course prerequisite and corequisite fields for a given course code.
  • Aggregate current instructor assignments across a division using search_course_offerings filtered by instructor surname.
  • Map program requirements for all Computer Science majors and specialists at St. George using search_programs with subject_area.
  • Construct a faculty research-interest graph by combining search_experts keyword results with get_expert classification labels and positions.
  • Export a researcher's full publication list with DOIs and co-author links using list_expert_publications paged responses.
  • Compare course offerings across sessions for a single department by iterating search_course_offerings over each session code from list_timetable_divisions.
  • Identify all subject areas available on the Scarborough calendar for a course catalog mirror using list_subject_areas with the Scarborough campus key.
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo2005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min
Team$300/mo20,000300 req/min
Company$1,000/mo100,000500 req/min

Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.

Frequently asked questions
Does the University of Toronto have an official public developer API?+
Not a general-purpose one. The university publishes some open data at https://opendata.utoronto.ca, but it does not cover the academic calendar, Timetable Builder, or Discover Research directory in a queryable API form. This API surfaces data from those three sources.
How does `get_course` know which campus calendar to use?+
The campus is inferred automatically from the last digit of the course code: 1 maps to St. George, 5 to Mississauga, and 3 to Scarborough. You do not need to pass a campus parameter — just supply the full course code as returned by search_courses or search_course_offerings.
Does the `department` filter work on all three campuses in `search_courses`?+
No. The department parameter is honoured only by the Mississauga campus calendar; it is ignored for St. George and Scarborough queries. For those two campuses, use subject_area values from list_subject_areas to narrow results.
Does the API cover graduate (SGS) course calendars or graduate programs?+
Not currently. The calendar endpoints cover the three undergraduate calendars (St. George Arts & Science, Mississauga, Scarborough). Graduate School of Graduate Studies programs and courses are not included. You can fork this API on Parse and revise it to add an endpoint targeting the SGS calendar.
Can I retrieve historical timetable data or past academic sessions?+
The timetable endpoints reflect what the Timetable Builder currently exposes, which is limited to the sessions listed by list_timetable_divisions. Historical sessions are not surfaced. You can fork this API on Parse and revise it to archive session data over time if longitudinal records are needed.
Page content last updated . Spec covers 9 endpoints from utoronto.ca.
Related APIs in EducationSee all →
su.se API
Search and explore Stockholm University's complete course catalog to find specific courses, browse academic programs, check class schedules, and discover available subjects. Get detailed information about any course offering to plan your studies and manage your academic schedule.
profiles.ucl.ac.uk API
Search for UCL researchers by keywords, department, and field of research to discover expert profiles and their specializations. Find the right academic contacts and learn about their research interests to support collaborations or academic inquiries.
senecapolytechnic.ca API
Search and explore Seneca Polytechnic's programs and courses to find detailed information about admissions requirements, costs, credentials, and learning pathways. Discover which programs match your interests by browsing by credential type or program category, and get complete course listings for any program you're considering.
timeshighereducation.com API
Access Times Higher Education data including global university rankings across dozens of subject areas, detailed university profiles with scoring breakdowns, academic job listings, and site-wide search for articles and university pages.
ucas.com API
Search and explore UK university courses, apprenticeships, and scholarships all in one place, while discovering detailed information about education providers and their offerings. Find the perfect educational path by filtering courses and apprenticeships by your preferences and accessing comprehensive provider details to inform your decisions.
opportunities.bidsandtenders.com API
Search and filter public bid opportunities by keywords, status, organization, publish date, and bid type, then retrieve comprehensive details including descriptions, key dates, meetings, and related documents for any listing. Access a complete view of available tender opportunities with sorting and pagination to easily find the bids most relevant to your business.
gradschools.com API
Search graduate programs across multiple categories and discover articles about funding, financial aid, and admissions to help guide your grad school journey. Find specific program information and detailed resources all in one place to support your application and enrollment decisions.
hotcoursesabroad.com API
Access data from hotcoursesabroad.com.