> 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-articulated-courses.md).

# Export articulated courses

Use this endpoint to export transfer credit decisions, one row per articulation: the courses a student brought in, the courses your institution awarded for them, and the review status. Filter with `review_status` (`new`, `pending`, or `completed`), `modified_start_date` and `modified_end_date`, or `created_start_date` and `created_end_date` (all `YYYY-MM-DD`, compared with the UTC date, inclusive). More than 5,000 matching rows run as a background export you download with [`GET /get_export_url/`](/stellic-partner-api/exports/poll-an-async-export-and-fetch-its-presigned-url.md).

## GET /exports/articulated\_courses

>

```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/articulated_courses":{"get":{"tags":["Exports"],"parameters":[{"name":"review_status","in":"query","required":false,"description":"Keep only articulations with this review status. Omit to include every status. Any other value returns 400.","schema":{"type":"string","enum":["new","pending","completed"]}},{"name":"modified_start_date","in":"query","required":false,"description":"`YYYY-MM-DD`. Keep articulations whose `modified` timestamp falls on or after this UTC calendar date. Inclusive; can be sent without `modified_end_date`. `modified` does not move for every change: automatic review completion, and some status and lock changes, leave it unchanged.","schema":{"type":"string","format":"date"}},{"name":"modified_end_date","in":"query","required":false,"description":"`YYYY-MM-DD`. Keep articulations whose `modified` timestamp falls on or before this UTC calendar date. Inclusive; can be sent without `modified_start_date`.","schema":{"type":"string","format":"date"}},{"name":"created_start_date","in":"query","required":false,"description":"`YYYY-MM-DD`. Keep articulations created on or after this UTC calendar date. Inclusive. Articulations that predate the creation timestamp have no creation date and are excluded by any `created_*` filter.","schema":{"type":"string","format":"date"}},{"name":"created_end_date","in":"query","required":false,"description":"`YYYY-MM-DD`. Keep articulations created on or before this UTC calendar date. Inclusive. Articulations that predate the creation timestamp have no creation date and are excluded by any `created_*` filter.","schema":{"type":"string","format":"date"}},{"name":"output_format","in":"query","required":false,"description":"Format of the exported file. Defaults to `csv`; `json` returns the same rows as a JSON array of objects keyed by the column headers, on both the inline and background paths. 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`). If omitted, delivery auto-selects by volume: in the response at 5,000 matching articulations or fewer (counted after the filters above), in the background above that.","schema":{"type":"string","enum":["http_file","http_response","s3"]}}],"responses":{"200":{"description":"Articulations returned inline as a CSV or JSON file attachment (5,000 matching articulations or fewer), or a JSON envelope with a `file_name` to poll on `GET /get_export_url/` for background delivery.","content":{"application/json":{"schema":{"oneOf":[{"type":"array","items":{"type":"object"}},{"type":"object"}]}},"text/csv":{"schema":{"type":"string","format":"csv","description":"One row per articulation. `articulation_id` is not stable: reprocessing a student's transfer credit (for example after an equivalency rule is republished) deletes unlocked articulations and creates new ones with new IDs, and removed articulations no longer appear, so reconcile with a full export from time to time instead of relying on `modified` alone. `modified` is UTC. The `incoming_*` and `awarded_*` columns list one value per course separated by `|`, in the same order."}}}},"400":{"description":"Bad Request - unknown `review_status`, a date filter that is not `YYYY-MM-DD`, or an unsupported `output_format` / `delivery_channel`. Filter errors are checked before the export runs and carry an object with a `message`; format and channel errors carry a plain string.","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Unauthorized - the bearer token is missing, invalid, or not valid for this institution.","content":{"application/json":{"schema":{"type":"object"}}}},"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

* `articulation_id`, then `student_username`, `student_first_name`, and `student_last_name` (blank when no student is attached).
* `source_institution`, `source_institution_id`: the school the courses came from.
* `review_status`, `locked`, and `is_edited` (`Yes` once someone changes the courses or tags by hand).
* `incoming_course_codes`, `incoming_course_titles`, `incoming_course_terms`, `incoming_units`, `incoming_grades`.
* `awarded_course_codes`, `awarded_course_titles`, `awarded_course_levels`, `awarded_units`, `awarded_grades`.
* `notes`, and `modified` (UTC).

The `incoming_*` columns, and the `awarded_*` columns, list one value per course separated by `|`, in the same order; an awarded course's several levels are joined with `/`.

#### Notes

{% hint style="warning" %}
**`articulation_id` changes when an articulation is rebuilt.** Reprocessing a student's transfer credit, for example after an equivalency rule is republished, deletes unlocked articulations and creates new ones with new IDs. Removed articulations don't appear in later exports, so reconcile with a full export from time to time instead of relying on `modified` alone.
{% endhint %}

* **`modified` doesn't move for every change.** Automatic review completion, and some status and lock changes, leave it unchanged.
* **`created_*` filters leave out older articulations**, which have no creation date. Archived and test students are included.
* **A title or code that contains `|` or `/` breaks the column alignment.**

#### Related APIs

* [`GET /exports/equivalency_rules`](/stellic-partner-api/exports/export-equivalency-rules.md) for the rules behind these articulations.
* [`POST /transfers/transcript/upload/`](/stellic-partner-api/transfers/upload-an-official-transcript-for-a-student.md) to upload a transcript.
* [`GET /exports/{property}`](/stellic-partner-api/exports/bulk-export-dispatcher.md) for formats, delivery, and errors.
