Skip to main content
CourseGrid

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

GET/api/v1/terms

List terms

Every term with at least one section on file, newest first.

Responses: 200 Terms on file. · 429 Rate limit exceeded. Retry after the window named in Retry-After. · 500 An internal error occurred.
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."
  }
}
GET/api/v1/courses

Search 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.

ParamInTypeRequiredDescription
subjectquerystringnoSubject code, e.g. 'CS'. Case-insensitive.
termquerystring, default "2267"noTerm code to filter section counts by. Defaults to the current default term.
qquerystringnoFree-text search across course title, subject, and number.
numberquerystringnoCourse number, or a number prefix (e.g. '4' matches 400-level courses).
pagequeryinteger, default 1no1-indexed page number. Default 1.
pageSizequeryinteger, default 50, max 200noResults per page, 1-200. Default 50.
Responses: 200 A page of matching courses. · 400 A query parameter failed validation. · 429 Rate limit exceeded. Retry after the window named in Retry-After. · 500 An internal error occurred.
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."
  }
}
GET/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).

ParamInTypeRequiredDescription
slugpathstringyesThe 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.
termquerystringnoTerm code. Defaults to the newest term with sections on file.
Responses: 200 The course and its sections. · 308 The slug was not in canonical form; retry the request at the URL in Location. · 400 A query parameter failed validation. · 404 No course exists for this slug. · 429 Rate limit exceeded. Retry after the window named in Retry-After. · 500 An internal error occurred.
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."
  }
}
GET/api/v1/openapi.json

This document

The OpenAPI 3.1 document describing every endpoint under /api/v1.

Responses: 200 The OpenAPI 3.1 document. · 429 Rate limit exceeded. Retry after the window named in Retry-After.

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.