> For the complete documentation index, see [llms.txt](https://docs.stellic.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.stellic.com/stellic-partner-api/exports/export-course-planning-counts.md).

# Export course planning counts

Use this endpoint to see how many students plan or are registered for some courses in each term, for example to estimate demand. Pass `course_codes` as a comma-separated list (`NURSING 629,NURSING 619`). Each row is one course and term, with `PLANNED_STUDENTS` and `REGISTERED_STUDENTS` counted from students' default plans; archived students aren't counted. The file always comes back in the response.

## GET /exports/course\_planning\_counts

>

```json
{"openapi":"3.0.0","info":{"title":"Stellic for Developers","version":"1.0"},"tags":[{"name":"Exports","description":"Institution-wide datasets as CSV or JSON. Small datasets come back inline; large ones run in the background and return a `file_name` you poll with `GET /get_export_url/` for a download link."}],"servers":[{"url":"https://{institution}.stellic.com/partnerapi/v1","variables":{"institution":{"default":"{institution}","description":"Your institution's Stellic subdomain: the part before `.stellic.com` in the URL you use to sign in. It becomes the host in every request, as in `https://{institution}.stellic.com/partnerapi/v1/...`. Replace the `{institution}` placeholder with your subdomain before sending."}}}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Personal Access Token issued by your Stellic integration partner. Send it as `Authorization: Bearer <token>` on every request. One token per institution; do not share across environments."}}},"paths":{"/exports/course_planning_counts":{"get":{"tags":["Exports"],"parameters":[{"name":"course_codes","in":"query","required":true,"description":"Comma-separated list of course codes to export planning counts for.\nExample: `NURSING 629,NURSING 619`\n","schema":{"type":"string"}},{"name":"start_date","in":"query","required":false,"description":"ISO 8601 date (`YYYY-MM-DD`). When provided, only include terms whose classes end on or after this date; terms with no class dates are left out. Can be combined with `end_date` or used alone. Without `start_date` and `end_date`, the export covers the current UTC calendar year onward.\n","schema":{"type":"string","format":"date"}},{"name":"end_date","in":"query","required":false,"description":"ISO 8601 date (`YYYY-MM-DD`). When provided, only include terms whose classes begin on or before this date; terms with no class dates are left out. Can be combined with `start_date` or used alone.\n","schema":{"type":"string","format":"date"}},{"name":"output_format","in":"query","required":false,"description":"Format of the exported file. `csv` (default) or `json`. If you omit it and send the header `Accept: application/json` (exactly that value), the export is produced as `json`; an explicit `output_format` always wins.","schema":{"type":"string","enum":["csv","json"],"default":"csv"}},{"name":"delivery_channel","in":"query","required":false,"description":"`http_file` returns the file in the response, `http_response` returns the same content without the attachment header, and `s3` runs the export in the background (poll `GET /get_export_url/` with the returned `data.file_name`). Omit it and the file always comes back in the response.","schema":{"type":"string","enum":["http_file","http_response","s3"]}}],"responses":{"200":{"description":"Success. CSV by default, or a JSON array of column-keyed objects when `output_format=json`, with every value a string (`[]` when nothing matches). Returned in the response as a file attachment by default.","content":{"application/json":{"schema":{"oneOf":[{"type":"array","items":{"type":"object"}},{"type":"object"}]}},"text/csv":{"schema":{"type":"string"}}}},"400":{"description":"Bad Request. A missing or blank `course_codes` returns `{\"errors\": [{\"message\": \"The parameter 'course_codes' is required for course_planning_counts export.\"}]}`; a `start_date` or `end_date` that isn't `YYYY-MM-DD` returns `{\"errors\": [{\"message\": \"Invalid date format. Use YYYY-MM-DD.\"}]}`. An unsupported `output_format` or `delivery_channel` returns `{\"errors\": [\"Output format provided is currently not supported\"]}` or `{\"errors\": [\"Delivery channel provided is currently not supported\"]}`."},"401":{"description":"Unauthorized. The bearer token is missing, expired, or not valid for this institution."},"403":{"description":"Your IP address isn't on the allowlist for this endpoint. Contact Stellic to add it; the response includes the `client_ip` Stellic saw.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"client_ip":{"type":"string"}}}}}}}}}}}
```

#### Columns

* `COURSE_CODE`, `COURSE_NAME`, `TERM` (the semester name), `YEAR`.
* `ACADEMIC_YEAR`: for example `2025-2026`, based on which semester starts your academic year.
* `FACULTY_STAFF`: the instructors on any section of the course that term, on any campus, joined with `,` .
* `PLANNED_STUDENTS`: plan entries not marked registered. `REGISTERED_STUDENTS`: plan entries marked registered in Stellic.

In JSON, every value is a string.

#### Notes

* **Without `start_date` and `end_date`, the export covers this calendar year onward.** With either date, it covers terms whose class dates overlap the range, and terms with no class dates are left out.
* **Codes must match exactly, including case.** A course or term with no plan entries has no row.
* **A `course_codes` value with no codes in it returns an empty file**, not an error, for example `course_codes=,`.

#### Related APIs

* [`GET /exports/sections_counting_for_reqs`](/stellic-partner-api/exports/async-export-sections-counting-for-requirements.md) for which sections count toward requirements.
* [`GET /exports/{property}`](/stellic-partner-api/exports/bulk-export-dispatcher.md) for formats, delivery, and errors.
