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

# List published courses

`GET /v2/published-courses/`

List the organization's published courses (live and unpublished by default).

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

## Query parameters

- `filter[domain]` string, nullable — Opaque domain id. Returns only published courses on that domain. Unknown ids match nothing.
- `filter[course]` string, nullable — Opaque course id. Returns only published courses for that course. Unknown ids match nothing.
- `filter[live]` boolean, nullable — Filter by published (live) state. Omit to return both live and unpublished rows.
- `include` string, nullable — Comma-separated related resources to include. Supported: course, domain.
- `page[size]` integer — Maximum number of records to return.
- `page[cursor]` string, nullable — Opaque cursor from the previous page's links.next.

## Response `200`

OK

- PaginatedListResponsePublishedCourseResource
  - `data` PublishedCourseResource[], required — The resources on this page, in cursor order.
    - `type` string — Always "published-courses".
    - `id` string, required — Opaque published-course ID. Use in URL paths.
    - `attributes` PublishedCourseAttributes, required — Attributes of a published-course resource object.
      - `external_id` string, required — Stable UUID5 for cross-system correlation.
      - `slug` string, required — URL path of the course on the domain. Unique per domain.
      - `live` boolean, required — Whether the course is currently published (live) on the domain.
      - `is_hidden` boolean, required — Hidden from the catalog; visible only to associated groups.
      - `visible_on_catalog` boolean, required — Whether the course shows on the domain catalog.
      - `open_access` boolean, required — Allow anonymous access (no registration). Disables per-user analytics when true.
      - `strict_enforce_group_visibility` boolean, required — Block access for students the course is not visible to.
      - `visibility_override_type` 'GROUP' | 'CATEGORY', required — Which visibility mode the course uses: GROUP or CATEGORY.
      - `access_period_starts_at` string, date-time, nullable — Start of the registration/enrollment window, or null.
      - `access_period_ends_at` string, date-time, nullable — End of the registration/enrollment window, or null.
      - `restrict_access_start_end_dates` boolean, required — Enforce the access window above.
      - `allow_self_service_reenroll` boolean, required — Let students re-enroll immediately on completion.
      - `unique_progress_per_enrollment` boolean, required — New progress record on each re-enroll.
      - `require_all_prerequisites` boolean, required — Require all prerequisites before enrolling.
      - `created_at` string, date-time, required — Creation timestamp.
      - `modified_at` string, date-time, required — Latest update timestamp.
    - `relationships` object, nullable — Related course and domain linkages.
    - `links` object, nullable — Self link.
  - `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

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not Found
- `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)
