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:
GET /ImportantDates — 1 request, fetches term metadata.
GET /Courses/{termId} — 4 requests, one per term in our window (previous-2, previous-1, current, next).
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.
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 theClassSchedulesendpoint 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):20 */2 * * */app/uw hourly30 05 * * */app/uw vacuumSo the API is called once every 2 hours, on the :20 mark — 12 runs per day total.
Endpoints hit per
hourlyrunAll against
https://openapi.data.uwaterloo.ca/v3:GET /ImportantDates— 1 request, fetches term metadata.GET /Courses/{termId}— 4 requests, one per term in our window (previous-2, previous-1, current, next).GET /ClassSchedules/{termId}/{subject}/{catalogNumber}— the bulk of the load: roughlyunique_courses × 4 termsrequests,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
ClassSchedulesdominates: typically several thousand calls per runWhy an elevated limit helps
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.