---
title: "Retrieve course"
method: GET
path: "/courses/{id}"
tags: ["Courses"]
---

# Retrieve course

`GET /courses/{id}`

Retrieves the details of an existing course.

Required permissions:
 - `courses:read`

## Path parameters

- `id` string, required

## Response `200`

A successful response

- Course — A structured learning module containing chapters and lessons, belonging to an experience.
  - `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.
  - `chapters` object[], required — An ordered list of all chapters in this course, sorted by their display position.
    - `id` string, required — The unique identifier for the chapter.
    - `lessons` object[], required — An ordered list of lessons in this chapter, sorted by display position. Hidden lessons are excluded for non-admin users.
      - `id` string, required — The unique identifier for the lesson.
      - `lesson_type` 'text' | 'video' | 'pdf' | 'multi' | 'quiz' | 'knowledge_check', required — The available types for a lesson
      - `order` integer, required — The sort position of this lesson within its parent chapter, starting from zero.
      - `thumbnail` object, nullable, required — The thumbnail image displayed on lesson cards and previews. Null if no thumbnail has been uploaded.
        - `url` string, nullable, required — A pre-optimized URL for rendering this attachment on the client. This should be used for displaying attachments in apps.
      - `title` string, required — The display name of the lesson shown to students. Maximum 120 characters.
      - `video_asset` object, nullable, required — The Mux video asset for video-type lessons, used for streaming playback. Null if this lesson has no hosted video.
        - `duration_seconds` integer, nullable, required — The duration of the video in seconds
        - `signed_playback_id` string, nullable, required — The signed playback ID of the Mux asset
        - `signed_thumbnail_playback_token` string, nullable, required — The signed thumbnail playback token of the Mux asset
    - `order` integer, required — The sort position of this chapter within its parent course, starting from zero.
    - `title` string, required — The display name of the chapter shown to students. Maximum 150 characters.
  - `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.

## 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/db0883548bc5/schema)
