> ## Documentation Index
> Fetch the complete documentation index at: https://docs.whop.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Retrieve course

> Retrieves the details of an existing course.

Required permissions:
 - `courses:read`



## OpenAPI

````yaml /openapi/api-v1-stable.json get /courses/{id}
openapi: 3.1.0
info:
  description: >-
    The Whop REST API. Please see
    https://docs.whop.com/developer/api/getting-started for more details.
  termsOfService: https://whop.com/tos-developer-api/
  title: Whop API
  version: 1.0.0
  x-api-version-date: '2026-08-21'
servers:
  - description: Production Whop API
    url: https://api.whop.com/api/v1
  - description: Sandbox Whop API
    url: https://sandbox-api.whop.com/api/v1
security: []
tags:
  - description: Products
    name: Products
  - description: Payments
    name: Payments
  - description: Refunds
    name: Refunds
  - description: Disputes
    name: Disputes
  - description: Dispute alerts
    name: Dispute alerts
  - description: Resolution center cases
    name: Resolution center cases
  - description: Checkout configurations
    name: Checkout configurations
  - description: Setup intents
    name: Setup intents
  - description: Payment methods
    name: Payment methods
  - description: Invoices
    name: Invoices
  - description: Promo codes
    name: Promo codes
  - description: Card transactions
    name: Card transactions
  - description: Ledger accounts
    name: Ledger accounts
  - description: Withdrawals
    name: Withdrawals
  - description: Payout methods
    name: Payout methods
  - description: Verifications
    name: Verifications
  - description: Identity profiles
    name: Identity profiles
  - description: Payout accounts
    name: Payout accounts
  - description: Topups
    name: Topups
  - description: Companies
    name: Companies
  - description: Authorized users
    name: Authorized users
  - description: Fee markups
    name: Fee markups
  - description: Members
    name: Members
  - description: Memberships
    name: Memberships
  - description: Leads
    name: Leads
  - description: Entries
    name: Entries
  - description: Shipments
    name: Shipments
  - description: Reviews
    name: Reviews
  - description: Company token transactions
    name: Company token transactions
  - description: Affiliates
    name: Affiliates
  - description: Experiences
    name: Experiences
  - description: Forums
    name: Forums
  - description: Forum posts
    name: Forum posts
  - description: Chat channels
    name: Chat channels
  - description: Support channels
    name: Support channels
  - description: Messages
    name: Messages
  - description: Reactions
    name: Reactions
  - description: Dm members
    name: Dm members
  - description: Dm channels
    name: Dm channels
  - description: Notifications
    name: Notifications
  - description: Courses
    name: Courses
  - description: Course chapters
    name: Course chapters
  - description: Course lessons
    name: Course lessons
  - description: Course students
    name: Course students
  - description: Course lesson interactions
    name: Course lesson interactions
  - description: Apps
    name: Apps
  - description: Webhooks
    name: Webhooks
  - description: App builds
    name: App builds
  - description: Access tokens
    name: Access tokens
  - description: Account links
    name: Account links
  - description: Files
    name: Files
  - description: Ai chats
    name: Ai chats
  - description: Bounties
    name: Bounties
  - description: Stats
    name: Stats
  - description: Conversions
    name: Conversions
  - description: Ad reports
    name: Ad reports
paths:
  /courses/{id}:
    get:
      tags:
        - Courses
      summary: Retrieve course
      description: |-
        Retrieves the details of an existing course.

        Required permissions:
         - `courses:read`
      operationId: retrieveCourse
      parameters:
        - description: The unique identifier of the course to retrieve.
          in: path
          name: id
          required: true
          schema:
            example: cors_xxxxxxxxxxxxx
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Course'
          description: A successful response
        '400':
          content:
            application/json:
              example:
                error:
                  code: parameter_missing
                  message: 'Missing required parameter: amount.'
                  param: amount
                  type: invalid_request_error
              schema:
                properties:
                  error:
                    properties:
                      code:
                        description: >-
                          A short string indicating the specific error code,
                          e.g. 'parameter_missing', 'parameter_invalid',
                          'invalid_json'
                        type:
                          - string
                          - 'null'
                      message:
                        type: string
                      param:
                        description: The parameter that caused the error, if applicable
                        type:
                          - string
                          - 'null'
                      type:
                        type: string
                    required:
                      - type
                      - message
                    type: object
                required:
                  - error
                type: object
          description: Bad request
        '401':
          content:
            application/json:
              example:
                error:
                  message: Invalid or missing API key
                  type: unauthorized
              schema:
                properties:
                  error:
                    properties:
                      code:
                        description: >-
                          A short string indicating the specific error code,
                          e.g. 'parameter_missing', 'parameter_invalid',
                          'invalid_json'
                        type:
                          - string
                          - 'null'
                      message:
                        type: string
                      param:
                        description: The parameter that caused the error, if applicable
                        type:
                          - string
                          - 'null'
                      type:
                        type: string
                    required:
                      - type
                      - message
                    type: object
                required:
                  - error
                type: object
          description: Unauthorized
        '403':
          content:
            application/json:
              example:
                error:
                  message: You do not have permission to access this resource
                  type: forbidden
              schema:
                properties:
                  error:
                    properties:
                      code:
                        description: >-
                          A short string indicating the specific error code,
                          e.g. 'parameter_missing', 'parameter_invalid',
                          'invalid_json'
                        type:
                          - string
                          - 'null'
                      message:
                        type: string
                      param:
                        description: The parameter that caused the error, if applicable
                        type:
                          - string
                          - 'null'
                      type:
                        type: string
                    required:
                      - type
                      - message
                    type: object
                required:
                  - error
                type: object
          description: Forbidden
        '404':
          content:
            application/json:
              example:
                error:
                  message: Resource not found
                  type: not_found
              schema:
                properties:
                  error:
                    properties:
                      code:
                        description: >-
                          A short string indicating the specific error code,
                          e.g. 'parameter_missing', 'parameter_invalid',
                          'invalid_json'
                        type:
                          - string
                          - 'null'
                      message:
                        type: string
                      param:
                        description: The parameter that caused the error, if applicable
                        type:
                          - string
                          - 'null'
                      type:
                        type: string
                    required:
                      - type
                      - message
                    type: object
                required:
                  - error
                type: object
          description: Not found
        '422':
          content:
            application/json:
              example:
                error: null
              schema:
                properties:
                  error:
                    properties:
                      code:
                        description: >-
                          A short string indicating the specific error code,
                          e.g. 'parameter_missing', 'parameter_invalid',
                          'invalid_json'
                        type:
                          - string
                          - 'null'
                      message:
                        type: string
                      param:
                        description: The parameter that caused the error, if applicable
                        type:
                          - string
                          - 'null'
                      type:
                        type: string
                    required:
                      - type
                      - message
                    type: object
                required:
                  - error
                type: object
          description: Verification required
        '429':
          content:
            application/json:
              example:
                error: null
              schema:
                properties:
                  error:
                    properties:
                      code:
                        description: >-
                          A short string indicating the specific error code,
                          e.g. 'parameter_missing', 'parameter_invalid',
                          'invalid_json'
                        type:
                          - string
                          - 'null'
                      message:
                        type: string
                      param:
                        description: The parameter that caused the error, if applicable
                        type:
                          - string
                          - 'null'
                      type:
                        type: string
                    required:
                      - type
                      - message
                    type: object
                required:
                  - error
                type: object
          description: Too many requests
        '500':
          content:
            application/json:
              example:
                error:
                  message: An unexpected error occurred
                  type: internal_server_error
              schema:
                properties:
                  error:
                    properties:
                      code:
                        description: >-
                          A short string indicating the specific error code,
                          e.g. 'parameter_missing', 'parameter_invalid',
                          'invalid_json'
                        type:
                          - string
                          - 'null'
                      message:
                        type: string
                      param:
                        description: The parameter that caused the error, if applicable
                        type:
                          - string
                          - 'null'
                      type:
                        type: string
                    required:
                      - type
                      - message
                    type: object
                required:
                  - error
                type: object
          description: Internal server error
      security:
        - bearerAuth:
            - courses:read
      x-codeSamples:
        - lang: JavaScript
          source: |-
            import Whop from '@whop/sdk';

            const client = new Whop({
              apiKey: process.env['WHOP_API_KEY'], // This is the default and can be omitted
            });

            const course = await client.courses.retrieve('cors_xxxxxxxxxxxxx');

            console.log(course.id);
components:
  schemas:
    Course:
      description: >-
        A structured learning module containing chapters and lessons, belonging
        to an experience.
      properties:
        certificate_after_completion_enabled:
          description: >-
            Whether students receive a PDF certificate after completing all
            lessons in this course. Null if the setting has not been configured.
          type:
            - boolean
            - 'null'
        chapters:
          description: >-
            An ordered list of all chapters in this course, sorted by their
            display position.
          items:
            description: >-
              A grouping of related lessons within a course, used to organize
              content into sections.
            properties:
              id:
                description: The unique identifier for the chapter.
                example: chap_xxxxxxxxxxxxx
                type: string
              lessons:
                description: >-
                  An ordered list of lessons in this chapter, sorted by display
                  position. Hidden lessons are excluded for non-admin users.
                items:
                  description: >-
                    An individual learning unit within a chapter, which can
                    contain text, video, PDF, or assessment content.
                  properties:
                    id:
                      description: The unique identifier for the lesson.
                      example: lesn_xxxxxxxxxxxxx
                      type: string
                    lesson_type:
                      $ref: '#/components/schemas/LessonTypes'
                      description: >-
                        The content format of this lesson. One of: text, video,
                        pdf, multi, quiz, knowledge_check.
                    order:
                      description: >-
                        The sort position of this lesson within its parent
                        chapter, starting from zero.
                      example: 42
                      type: integer
                    thumbnail:
                      description: >-
                        The thumbnail image displayed on lesson cards and
                        previews. Null if no thumbnail has been uploaded.
                      properties:
                        url:
                          description: >-
                            A pre-optimized URL for rendering this attachment on
                            the client. This should be used for displaying
                            attachments in apps.
                          example: https://media.whop.com/abc123/optimized.jpg
                          type:
                            - string
                            - 'null'
                      required:
                        - url
                      type:
                        - object
                        - 'null'
                    title:
                      description: >-
                        The display name of the lesson shown to students.
                        Maximum 120 characters.
                      example: Understanding Candlestick Patterns
                      type: string
                    video_asset:
                      description: >-
                        The Mux video asset for video-type lessons, used for
                        streaming playback. Null if this lesson has no hosted
                        video.
                      properties:
                        duration_seconds:
                          description: The duration of the video in seconds
                          example: 42
                          type:
                            - integer
                            - 'null'
                        signed_playback_id:
                          description: The signed playback ID of the Mux asset
                          type:
                            - string
                            - 'null'
                        signed_thumbnail_playback_token:
                          description: The signed thumbnail playback token of the Mux asset
                          type:
                            - string
                            - 'null'
                      required:
                        - signed_playback_id
                        - signed_thumbnail_playback_token
                        - duration_seconds
                      type:
                        - object
                        - 'null'
                  required:
                    - id
                    - lesson_type
                    - title
                    - order
                    - video_asset
                    - thumbnail
                  type: object
                type: array
              order:
                description: >-
                  The sort position of this chapter within its parent course,
                  starting from zero.
                example: 42
                type: integer
              title:
                description: >-
                  The display name of the chapter shown to students. Maximum 150
                  characters.
                example: Getting Started
                type: string
            required:
              - id
              - title
              - order
              - lessons
            type: object
          type: array
        chapters_count:
          description: >-
            The total number of chapters in this course, including chapters
            whose lessons are all hidden from the current user.
          example: 42
          type: integer
        completed_lessons_count:
          description: >-
            The number of lessons in this course that the current user has
            marked as completed. Zero when the request is not made on behalf of
            a user.
          example: 42
          type: integer
        cover_image:
          description: >-
            The URL of the course cover image shown on preview cards. Null if no
            cover image has been uploaded.
          example: https://assets.whop.com/images/course-cover.jpg
          type:
            - string
            - 'null'
        created_at:
          description: The datetime the course was created.
          example: '2023-12-01T05:00:00.401Z'
          format: date-time
          type: string
        description:
          description: >-
            A brief summary of the course content and objectives. Null if no
            description has been set.
          example: Learn advanced trading strategies from industry experts.
          type:
            - string
            - 'null'
        id:
          description: The unique identifier for the course.
          example: cors_xxxxxxxxxxxxx
          type: string
        language:
          $ref: '#/components/schemas/Languages'
          description: >-
            The spoken language of the video content, used to generate accurate
            closed captions. One of: en, es, it, pt, de, fr, pl, ru, nl, ca, tr,
            sv, uk, no, fi, sk, el, cs, hr, da, ro, bg.
        latest_lesson_created_at:
          description: >-
            The creation timestamp of the most recently added lesson visible to
            the current user. Null if the course has no lessons.
          example: '2023-12-01T05:00:00.401Z'
          format: date-time
          type:
            - string
            - 'null'
        lesson_unlock_days:
          description: >-
            The distinct drip schedules, in days after the course start, of
            lessons visible to the current user. Combine with startedAt to work
            out which have unlocked. Empty when the user has not started the
            course or no lesson is on a schedule.
          items:
            description: >-
              Represents non-fractional signed whole numeric values. Int can
              represent values between -(2^31) and 2^31 - 1.
            example: 42
            type: integer
          type: array
        order:
          description: >-
            The sort position of this course within its parent experience, as a
            decimal for flexible ordering.
          example: '123.45'
          type: string
        require_completing_lessons_in_order:
          description: >-
            Whether students must complete each lesson sequentially before
            advancing to the next one.
          type: boolean
        resume_lesson:
          description: >-
            The lesson the current user should continue from: their first
            incomplete lesson, or the first lesson when they have finished the
            course, have not started it, or can edit it. Null if the course has
            no lessons.
          properties:
            id:
              description: The unique identifier for the lesson.
              example: lesn_xxxxxxxxxxxxx
              type: string
          required:
            - id
          type:
            - object
            - 'null'
        started_at:
          description: >-
            The earliest time the current user is known to have started this
            course. Null if they have not started it. Drip unlock schedules are
            measured from this point.
          example: '2023-12-01T05:00:00.401Z'
          format: date-time
          type:
            - string
            - 'null'
        tagline:
          description: >-
            A short marketing tagline displayed beneath the course title. Null
            if no tagline has been set.
          example: Master the fundamentals in 30 days
          type:
            - string
            - 'null'
        thumbnail:
          description: >-
            The thumbnail image displayed on course cards and previews. Null if
            no thumbnail has been uploaded.
          properties:
            content_type:
              description: >-
                Uploaded file MIME type, such as image/jpeg, video/mp4, or
                audio/mpeg.
              example: image/jpeg
              type:
                - string
                - 'null'
            filename:
              description: >-
                The original filename of the uploaded attachment, including its
                file extension.
              example: document.pdf
              type:
                - string
                - 'null'
            id:
              description: >-
                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.
              type: string
            optimized_url:
              description: >-
                A pre-optimized URL for rendering this attachment on the client.
                This should be used for displaying attachments in apps.
              example: https://media.whop.com/abc123/optimized.jpg
              type:
                - string
                - 'null'
            source_url:
              description: >-
                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.
              example: https://media.whop.com/abc123/original.jpg
              type:
                - string
                - 'null'
          required:
            - id
            - filename
            - content_type
            - optimized_url
            - source_url
          type:
            - object
            - 'null'
        title:
          description: >-
            The display name of the course shown to students. Null if no title
            has been set.
          example: Introduction to Technical Analysis
          type:
            - string
            - 'null'
        total_duration_seconds:
          description: >-
            The combined duration in seconds of every hosted video across the
            lessons visible to the current user.
          example: 42
          type: integer
        total_lessons_count:
          description: The number of lessons in this course visible to the current user.
          example: 42
          type: integer
        updated_at:
          description: The datetime the course was last updated.
          example: '2023-12-01T05:00:00.401Z'
          format: date-time
          type: string
        visibility:
          $ref: '#/components/schemas/CourseVisibilities'
          description: >-
            The visibility setting that controls whether this course appears to
            students. One of: visible, hidden.
      required:
        - id
        - title
        - tagline
        - cover_image
        - thumbnail
        - description
        - language
        - certificate_after_completion_enabled
        - require_completing_lessons_in_order
        - order
        - visibility
        - created_at
        - updated_at
        - chapters_count
        - total_lessons_count
        - completed_lessons_count
        - total_duration_seconds
        - latest_lesson_created_at
        - started_at
        - lesson_unlock_days
        - resume_lesson
        - chapters
      type: object
    LessonTypes:
      description: The available types for a lesson
      enum:
        - text
        - video
        - pdf
        - multi
        - quiz
        - knowledge_check
      type: string
    Languages:
      description: The available languages for a course
      enum:
        - en
        - es
        - it
        - pt
        - de
        - fr
        - pl
        - ru
        - nl
        - ca
        - tr
        - sv
        - uk
        - 'no'
        - fi
        - sk
        - el
        - cs
        - hr
        - da
        - ro
        - bg
      type: string
    CourseVisibilities:
      description: >-
        The available visibilities for a course. Determines how / whether a
        course is visible to users.
      enum:
        - visible
        - hidden
      type: string
  securitySchemes:
    bearerAuth:
      bearerFormat: auth-scheme
      description: >-
        An Account API key, account-scoped JWT, App API key, or user OAuth
        token. Prepend the key or token with `Bearer`, for example `Bearer
        ***************************`.
      scheme: bearer
      type: http

````