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

# List courses

`GET /courses`

Returns a paginated list of courses, filtered by either an experience or a company.

Required permissions:
 - `courses:read`

## Query parameters

- `after` string, nullable — Returns the elements in the list that come after the specified cursor.
- `before` string, nullable — Returns the elements in the list that come before the specified cursor.
- `first` integer, nullable — Returns the first _n_ elements from the list.
- `last` integer, nullable — Returns the last _n_ elements from the list.
- `experience_id` string, nullable — The unique identifier of the experience to list courses for.
- `company_id` string, nullable — The unique identifier of the company to list courses for.

## Response `200`

A successful response

- object — The connection type for Course.
  - `data` CourseListItem[], required — A list of nodes.
    - `certificate_after_completion_enabled` boolean, nullable, required — Whether students receive a PDF certificate after completing all lessons in this course. Null if the setting has not been configured.
    - `cover_image` string, nullable, required — The URL of the course cover image shown on preview cards. Null if no cover image has been uploaded.
    - `created_at` string, date-time, required — The datetime the course was created.
    - `description` string, nullable, required — A brief summary of the course content and objectives. Null if no description has been set.
    - `id` string, required — The unique identifier for the course.
    - `language` 'en' | 'es' | 'it' | 'pt' | 'de' | 'fr' | 'pl' | 'ru' | 'nl' | 'ca' | 'tr' | 'sv' | 'uk' | 'no' | 'fi' | 'sk' | 'el' | 'cs' | 'hr' | 'da' | 'ro' | 'bg', required — The available languages for a course
    - `order` string, required — The sort position of this course within its parent experience, as a decimal for flexible ordering.
    - `require_completing_lessons_in_order` boolean, required — Whether students must complete each lesson sequentially before advancing to the next one.
    - `tagline` string, nullable, required — A short marketing tagline displayed beneath the course title. Null if no tagline has been set.
    - `thumbnail` object, nullable, required — The thumbnail image displayed on course cards and previews. Null if no thumbnail has been uploaded.
      - `content_type` string, nullable, required — Uploaded file MIME type, such as image/jpeg, video/mp4, or audio/mpeg.
      - `filename` string, nullable, required — The original filename of the uploaded attachment, including its file extension.
      - `id` string, required — Represents a unique identifier that is Base64 obfuscated. It is often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as `"VXNlci0xMA=="`) or integer (such as `4`) input value will be accepted as an ID.
      - `optimized_url` string, nullable, required — A pre-optimized URL for rendering this attachment on the client. This should be used for displaying attachments in apps.
      - `source_url` string, nullable, required — The original source URL of the attachment, such as a direct link to S3. This should never be displayed on the client and should always be passed through an Imgproxy transformer.
    - `title` string, nullable, required — The display name of the course shown to students. Null if no title has been set.
    - `updated_at` string, date-time, required — The datetime the course was last updated.
    - `visibility` 'visible' | 'hidden', required — The available visibilities for a course. Determines how / whether a course is visible to users.
  - `page_info` PageInfo, required — Information about pagination in a connection.
    - `end_cursor` string, nullable, required — When paginating forwards, the cursor to continue.
    - `has_next_page` boolean, required — When paginating forwards, are there more items?
    - `has_previous_page` boolean, required — When paginating backwards, are there more items?
    - `start_cursor` string, nullable, required — When paginating backwards, the cursor to continue.

## Other responses

- `400` — Bad request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not found
- `422` — Verification required
- `429` — Too many requests
- `500` — Internal server error

---

[API](https://skmtc.net/whop/apis/whop-api.md) · [All operations](https://skmtc.net/whop/apis/whop-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/whop/whop-api/versions/866821546d67/schema)
