---
title: "List courses"
method: GET
path: "/v2/courses/"
tags: ["Courses"]
---

# List courses

`GET /v2/courses/`

List non-deleted, non-draft courses for the authenticated organization.

**Required OAuth scope:** `courses:read`

## Query parameters

- `filter[title]` string, nullable — Case-insensitive partial match on course title.

## Response `200`

OK

- PaginatedListResponseCourseResource
  - `data` CourseResource[], required — The resources on this page, in cursor order.
    - `type` string — Always "courses".
    - `id` string, required — Opaque course ID. Use in URL paths.
    - `attributes` CourseAttributes, required — Attributes of a course resource object.
      - `external_id` string, required — Stable UUID5 for cross-system correlation.
      - `title` string, required — Course title.
      - `short_description` string, required — Short description shown on course tiles.
      - `long_description_html` string, required — Long description as HTML content.
      - `enforce_sequential_navigation` boolean, required — If true, students must complete the current lesson before accessing the next.
      - `lesson_count` integer, required — Total number of lessons in the course.
      - `is_published` boolean, required — True if the course is published on at least one live domain.
      - `promo_image_url` string, required — Promo image URL, or "" if no image is set.
      - `average_rating` number, nullable — Average of all student ratings on the org's active rating scale, or null when no ratings exist.
      - `created_at` string, date-time, required — Course creation timestamp.
      - `modified_at` string, date-time, required — Latest update timestamp — max of the course's updated_at and any lesson's updated_at.
    - `links` object, nullable — Self and related links.
  - `meta` object, nullable — Pagination metadata, e.g. {"page_size": 25}.
  - `links` object, nullable — Pagination links, e.g. {"self": "...", "next": "...", "prev": null}.
  - `has_more` boolean, required — Whether additional pages exist after this one.
  - `next_cursor` string, nullable — Opaque cursor to pass as ``page[cursor]`` for the next page; null on the last page.
  - `included` object[], nullable — Related resources requested via ?include=. Absent when no include was requested.

## Other responses

- `401` — Unauthorized
- `403` — Forbidden
- `422` — Unprocessable Entity

---

[API](https://skmtc.net/skilljar/apis/skilljar-api-v2.md) · [All operations](https://skmtc.net/skilljar/apis/skilljar-api-v2/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/skilljar/skilljar-api-v2/revisions/f8025de20169/schema)
