# Enrollment Terms

{% hint style="warning" %}
**Welcome to Our New API Docs!** This is the new home for all things API (previously at [Canvas LMS REST API Documentation](https://api.instructure.com)).
{% endhint %}

## Enrollment Terms API

API for viewing and managing enrollment terms. For all actions, the specified account must be a root account. To manage enrollment terms, the caller must have permission to manage the account. To view enrollment terms, the caller must have an active teacher enrollment in at least one course.

**An EnrollmentTerm object looks like:**

```js
{
  // The unique identifier for the enrollment term.
  "id": 1,
  // The SIS id of the term. Only included if the user has permission to view SIS
  // information.
  "sis_term_id": "Sp2014",
  // the unique identifier for the SIS import. This field is only included if the
  // user has permission to manage SIS information.
  "sis_import_id": 34,
  // The name of the term.
  "name": "Spring 2014",
  // The datetime of the start of the term.
  "start_at": "2014-01-06T08:00:00-05:00",
  // The datetime of the end of the term.
  "end_at": "2014-05-16T05:00:00-04:00",
  // The state of the term. Can be 'active' or 'deleted'.
  "workflow_state": "active",
  // Term date overrides for specific enrollment types
  "overrides": {"StudentEnrollment":{"start_at":"2014-01-07T08:00:00-05:00","end_at":"2014-05-14T05:00:00-04:0"}},
  // The number of courses in the term (available via include)
  "course_count": 80
}
```

**An EnrollmentTermsList object looks like:**

```js
{
  // a paginated list of all terms in the account
  "enrollment_terms": []
}
```

### [Create enrollment term](#method.terms.create) <a href="#method.terms.create" id="method.terms.create"></a>

[TermsController#create](https://github.com/instructure/canvas-lms/blob/master/app/controllers/terms_controller.rb)

**`POST /api/v1/accounts/:account_id/terms`**

**Scope:** `url:POST|/api/v1/accounts/:account_id/terms`

Create a new enrollment term for the specified account.

**Request Parameters:**

| Parameter                                               | Type       | Description                                                                                                                                                                          |
| ------------------------------------------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `enrollment_term[name]`                                 | `string`   | The name of the term.                                                                                                                                                                |
| `enrollment_term[start_at]`                             | `DateTime` | The day/time the term starts. Accepts times in ISO 8601 format, e.g. 2015-01-10T18:48:00Z.                                                                                           |
| `enrollment_term[end_at]`                               | `DateTime` | The day/time the term ends. Accepts times in ISO 8601 format, e.g. 2015-01-10T18:48:00Z.                                                                                             |
| `enrollment_term[sis_term_id]`                          | `string`   | The unique SIS identifier for the term.                                                                                                                                              |
| `enrollment_term[overrides][enrollment_type][start_at]` | `DateTime` | The day/time the term starts, overridden for the given enrollment type. **enrollment\_type** can be one of StudentEnrollment, TeacherEnrollment, TaEnrollment, or DesignerEnrollment |
| `enrollment_term[overrides][enrollment_type][end_at]`   | `DateTime` | The day/time the term ends, overridden for the given enrollment type. **enrollment\_type** can be one of StudentEnrollment, TeacherEnrollment, TaEnrollment, or DesignerEnrollment   |

Returns an [EnrollmentTerm](#enrollmentterm) object.

### [Update enrollment term](#method.terms.update) <a href="#method.terms.update" id="method.terms.update"></a>

[TermsController#update](https://github.com/instructure/canvas-lms/blob/master/app/controllers/terms_controller.rb)

**`PUT /api/v1/accounts/:account_id/terms/:id`**

**Scope:** `url:PUT|/api/v1/accounts/:account_id/terms/:id`

Update an existing enrollment term for the specified account.

**Request Parameters:**

| Parameter                                               | Type       | Description                                                                                                                                                                          |
| ------------------------------------------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `enrollment_term[name]`                                 | `string`   | The name of the term.                                                                                                                                                                |
| `enrollment_term[start_at]`                             | `DateTime` | The day/time the term starts. Accepts times in ISO 8601 format, e.g. 2015-01-10T18:48:00Z.                                                                                           |
| `enrollment_term[end_at]`                               | `DateTime` | The day/time the term ends. Accepts times in ISO 8601 format, e.g. 2015-01-10T18:48:00Z.                                                                                             |
| `enrollment_term[sis_term_id]`                          | `string`   | The unique SIS identifier for the term.                                                                                                                                              |
| `enrollment_term[overrides][enrollment_type][start_at]` | `DateTime` | The day/time the term starts, overridden for the given enrollment type. **enrollment\_type** can be one of StudentEnrollment, TeacherEnrollment, TaEnrollment, or DesignerEnrollment |
| `enrollment_term[overrides][enrollment_type][end_at]`   | `DateTime` | The day/time the term ends, overridden for the given enrollment type. **enrollment\_type** can be one of StudentEnrollment, TeacherEnrollment, TaEnrollment, or DesignerEnrollment   |
| `override_sis_stickiness`                               | `boolean`  | Default is true. If false, any fields containing “sticky” changes will not be updated. See SIS CSV Format documentation for information on which fields can have SIS stickiness      |

Returns an [EnrollmentTerm](#enrollmentterm) object.

### [Delete enrollment term](#method.terms.destroy) <a href="#method.terms.destroy" id="method.terms.destroy"></a>

[TermsController#destroy](https://github.com/instructure/canvas-lms/blob/master/app/controllers/terms_controller.rb)

**`DELETE /api/v1/accounts/:account_id/terms/:id`**

**Scope:** `url:DELETE|/api/v1/accounts/:account_id/terms/:id`

Delete the specified enrollment term.

Returns an [EnrollmentTerm](#enrollmentterm) object.

### [List enrollment terms](#method.terms_api.index) <a href="#method.terms_api.index" id="method.terms_api.index"></a>

[TermsApiController#index](https://github.com/instructure/canvas-lms/blob/master/app/controllers/terms_api_controller.rb)

**`GET /api/v1/accounts/:account_id/terms`**

**Scope:** `url:GET|/api/v1/accounts/:account_id/terms`

An object with a paginated list of all of the terms in the account.

**Request Parameters:**

| Parameter          | Type     | Description                                                                                                                                                                                                                                                                                 |
| ------------------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `workflow_state[]` | `string` | <p>If set, only returns terms that are in the given state. Defaults to ‘active’.</p><p>Allowed values: <code>active</code>, <code>deleted</code>, <code>all</code></p>                                                                                                                      |
| `include[]`        | `string` | <p>Array of additional information to include.</p><p><br></p><ul><li><p>“overrides”</p><p>term start/end dates overridden for different enrollment types</p></li><li><p>“course\_count”</p><p>the number of courses in each term</p></li></ul><p>Allowed values: <code>overrides</code></p> |
| `term_name`        | `string` | If set, only returns terms that match the given search keyword. Search keyword is matched against term name.                                                                                                                                                                                |

**Example Request:**

```bash
curl -H 'Authorization: Bearer <token>' \
https://<canvas>/api/v1/accounts/1/terms?include[]=overrides
```

**Example Response:**

```js
{
  "enrollment_terms": [
    {
      "id": 1,
      "name": "Fall 20X6"
      "start_at": "2026-08-31T20:00:00Z",
      "end_at": "2026-12-20T20:00:00Z",
      "created_at": "2025-01-02T03:43:11Z",
      "workflow_state": "active",
      "grading_period_group_id": 1,
      "sis_term_id": null,
      "overrides": {
        "StudentEnrollment": {
          "start_at": "2026-09-03T20:00:00Z",
          "end_at": "2026-12-19T20:00:00Z"
        },
        "TeacherEnrollment": {
          "start_at": null,
          "end_at": "2026-12-30T20:00:00Z"
        }
      }
    }
  ]
}
```

Returns an [EnrollmentTermsList](#enrollmenttermslist) object.

### [Retrieve enrollment term](#method.terms_api.show) <a href="#method.terms_api.show" id="method.terms_api.show"></a>

[TermsApiController#show](https://github.com/instructure/canvas-lms/blob/master/app/controllers/terms_api_controller.rb)

**`GET /api/v1/accounts/:account_id/terms/:id`**

**Scope:** `url:GET|/api/v1/accounts/:account_id/terms/:id`

Retrieves the details for an enrollment term in the account. Includes overrides by default.

**Example Request:**

```bash
curl -H 'Authorization: Bearer <token>' \
https://<canvas>/api/v1/accounts/1/terms/2
```

Returns an [EnrollmentTerm](#enrollmentterm) object.

***

This documentation is generated directly from the Canvas LMS source code, available [on Github](https://github.com/instructure/canvas-lms).


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://developerdocs.instructure.com/services/canvas/resources/enrollment_terms.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
