Skip to content

Getting a Higher Rate Limit - UWFlow Importer #241

@jerryzhou196

Description

@jerryzhou196

Request: Elevated rate limit for UW Flow importer

Who we are

UW Flow is a student-built course discovery and review platform serving 30,000+ daily active users across the
University of Waterloo undergraduate population. Course catalog, schedule, and term data are sourced directly from the UW Open Data API v3.

What we're requesting

A dedicated API key (or rate-limit uplift on our existing UW_API_KEY_V3) that allows our importer to complete a full sync without being throttled. Today we routinely hit HTTP 429 on the ClassSchedules endpoint and rely on exponential backoff to recover, which extends sync time and risks stale data for end users.

Our usage profile

Schedule

The importer is a Go service running in a single container, driven by crond. It executes two jobs (times in UTC):

Cron Command Purpose
20 */2 * * * /app/uw hourly Refresh terms, courses, class schedules
30 05 * * * /app/uw vacuum Daily DB cleanup (no API calls)

So the API is called once every 2 hours, on the :20 mark — 12 runs per day total.

Endpoints hit per hourly run

All against https://openapi.data.uwaterloo.ca/v3:

  1. GET /ImportantDates — 1 request, fetches term metadata.
  2. GET /Courses/{termId} — 4 requests, one per term in our window (previous-2, previous-1, current, next).
  3. GET /ClassSchedules/{termId}/{subject}/{catalogNumber}the bulk of the load: roughly unique_courses × 4 terms requests,
    currently several thousand per run. These are issued sequentially with a 150 ms delay between requests; 404s are tolerated, 429s are retried
    with exponential backoff (up to 5 attempts).

Volume estimate

  • ~12 runs/day × ~(1 + 4 + N_classSchedules) requests
  • ClassSchedules dominates: typically several thousand calls per run

Why an elevated limit helps

  • Faster, more reliable syncs → fresher data for 30k+ students checking sections during peak enrollment windows.
  • Fewer retries → less wasted load on your side from our backoff loops.
  • Predictable behavior we can document for our open-source contributors.

Contact

Happy to share our source (the importer lives at [flow/importer/uw (https://github.com/UWFlow/uwflow/tree/main/flow/importer/uw) in our public repo) or adjust our request pattern (batching, off-peak windows, etc.) to fit your constraints. Please let us know what you need from us.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions