CourseGrid Public API
Read-only. No API key. No account.
Overview
Read-only. No API key, no account, no cost. Every response is a JSON object with a top-level `data` (or `error`) field plus a `meta` envelope carrying the API version, an import-freshness verdict, and this disclaimer:
CourseGrid is independent and not affiliated with, endorsed by, or sponsored by San Diego State University or the California State University system. Data may be outdated; confirm on the official SDSU portal before registering. CourseGrid performs no enrollment actions.
Responses are cached and rate-limited; a 429 carries `X-RateLimit-*` and `Retry-After` headers. CORS is open for GET and OPTIONS from any origin.
Machine-readable spec: /api/v1/openapi.json (OpenAPI 3.1.0).
Endpoints
/api/v1/termsList terms
Every term with at least one section on file, newest first.
Example 200 response
{
"data": [
{
"code": "2267",
"label": "Fall 2026",
"startsAt": "2026-08-24T00:00:00.000Z",
"endsAt": "2026-12-12T00:00:00.000Z",
"sectionCount": 6002,
"isDefault": true
}
],
"meta": {
"version": "v1",
"freshness": {
"verdict": "fresh",
"lastImportAt": "2026-08-25T09:03:00.000Z"
},
"docs": "https://coursegrid.io/docs/api",
"source": "San Diego State University public class search",
"disclaimer": "CourseGrid is independent and not affiliated with, endorsed by, or sponsored by San Diego State University or the California State University system. Data may be outdated; confirm on the official SDSU portal before registering. CourseGrid performs no enrollment actions."
}
}/api/v1/coursesSearch courses
Courses matching the given filters, paginated. Without `subject`, `q` searches across title/subject/number, or all courses in `term` if no other filters are given.
| Param | In | Type | Required | Description |
|---|---|---|---|---|
subject | query | string | no | Subject code, e.g. 'CS'. Case-insensitive. |
term | query | string, default "2267" | no | Term code to filter section counts by. Defaults to the current default term. |
q | query | string | no | Free-text search across course title, subject, and number. |
number | query | string | no | Course number, or a number prefix (e.g. '4' matches 400-level courses). |
page | query | integer, default 1 | no | 1-indexed page number. Default 1. |
pageSize | query | integer, default 50, max 200 | no | Results per page, 1-200. Default 50. |
Example 200 response
{
"data": [
{
"id": "CS-460",
"subject": "CS",
"number": "460",
"code": "CS 460",
"title": "Software Engineering",
"units": "3",
"prerequisites": {
"text": "CS 310 with a grade of C or better",
"confidence": "high"
},
"requirements": [],
"url": "https://coursegrid.io/course/CS-460",
"sectionCount": 3
}
],
"page": 1,
"pageSize": 50,
"total": 1,
"hasMore": false,
"meta": {
"version": "v1",
"freshness": {
"verdict": "fresh",
"lastImportAt": "2026-08-25T09:03:00.000Z"
},
"docs": "https://coursegrid.io/docs/api",
"source": "San Diego State University public class search",
"disclaimer": "CourseGrid is independent and not affiliated with, endorsed by, or sponsored by San Diego State University or the California State University system. Data may be outdated; confirm on the official SDSU portal before registering. CourseGrid performs no enrollment actions."
}
}/api/v1/courses/{slug}Get one course
One course and its sections for the given term (defaults to the newest term with sections on file).
| Param | In | Type | Required | Description |
|---|---|---|---|---|
slug | path | string | yes | The canonical course slug: subject and number joined with a dash, e.g. 'CS-460' or 'E-E-101'. A non-canonical spelling (e.g. 'cs460') 308-redirects to the canonical URL rather than 404ing. |
term | query | string | no | Term code. Defaults to the newest term with sections on file. |
Example 200 response
{
"data": {
"id": "CS-460",
"subject": "CS",
"number": "460",
"code": "CS 460",
"title": "Software Engineering",
"units": "3",
"prerequisites": {
"text": "CS 310 with a grade of C or better",
"confidence": "high"
},
"requirements": [],
"url": "https://coursegrid.io/course/CS-460",
"sectionCount": 3,
"sections": [
{
"id": "sec-1",
"classNumber": "12345",
"sectionCode": "01",
"status": "OPEN",
"statusLabel": "Open",
"modality": "IN_PERSON",
"modalityLabel": "In person",
"room": "PG 242",
"capacity": 35,
"enrolled": 28,
"waitlist": 0,
"openSeats": 7,
"meetings": [
{
"days": "MW",
"daysLabel": "Mon, Wed",
"startMin": 540,
"endMin": 590,
"startTime": "9:00 AM",
"endTime": "9:50 AM",
"building": "PSFA",
"room": "310",
"location": "PSFA 310"
}
],
"instructors": [
"A. Nguyen"
]
}
]
},
"meta": {
"version": "v1",
"freshness": {
"verdict": "fresh",
"lastImportAt": "2026-08-25T09:03:00.000Z"
},
"docs": "https://coursegrid.io/docs/api",
"source": "San Diego State University public class search",
"disclaimer": "CourseGrid is independent and not affiliated with, endorsed by, or sponsored by San Diego State University or the California State University system. Data may be outdated; confirm on the official SDSU portal before registering. CourseGrid performs no enrollment actions."
}
}/api/v1/openapi.jsonThis document
The OpenAPI 3.1 document describing every endpoint under /api/v1.
No SDSU or CSU affiliation
CourseGrid is independent and not affiliated with, endorsed by, or sponsored by San Diego State University or the California State University system. Data may be outdated; confirm on the official SDSU portal before registering. CourseGrid performs no enrollment actions.