---
title: "Create course"
method: POST
path: "/public/create-course"
tags: ["Course"]
---

# Create course

`POST /public/create-course`

Create a new course (recorded or cohort-based) for your school

Authentication with the "FERMION-API-KEY" header is required to use this endpoint.

Rate limit: Maximum 60 requests in a window of 1m.

## Request body

- object
  - `data` object[], required
    - `data` object, required
      - `title` string, required — Title of the course
      - `shortDescription` string, required — Brief description of the course
      - `longDescription` string, required — Detailed description of the course
      - `goals` string[], required — Array of learning goals/outcomes for the course
      - `thumbnailUrl` string, uri — URL of the course thumbnail image (optional, will use default placeholder if not provided)
      - `enrollmentValidityInHours` integer — Number of hours the enrollment is valid for after purchase (optional)
      - `isSyllabusVisibleOnCourseLandingPage` boolean — Whether the course syllabus should be visible on the landing page (optional)
      - `isCourseItemDiscussionEnabled` boolean — Whether discussions are enabled for course items (optional)
      - `shouldOnlyAllowManualEnrollmentsBySchoolAdmin` boolean — Only admins can enroll students in this course (optional, default: false)
      - `status` 'Draft' | 'Active' | 'Unlisted' — Initial status of the course (defaults to Draft)
      - `courseSpecificData` union, required — Course type specific data
        - object
          - `type` 'CohortBasedCourse', required — Type of course - CohortBasedCourse for scheduled cohorts
          - `cohortStartAt` string, required — Cohort start date
          - `cohortEndAt` string, required — Cohort end date
          - `cohortEnrollmentEndAt` string — Cohort enrollment end date (optional)
        - object
          - `type` 'RecordedCourse', required — Type of course - RecordedCourse for self-paced courses
      - `faqs` object[] — Array of FAQ objects for the course landing page (optional)
        - `questionMarkdown` string, required — Question text in markdown format
        - `answerMarkdown` string, required — Answer text in markdown format
      - `reviews` object[] — Array of review objects for the course landing page (optional)
        - `ratingOutOf10` number, required — Rating out of 10
        - `reviewContent` string, required — Review text content
        - `nameOfReviewer` string, required — Name of the reviewer
        - `titleOfReviewer` string — Job title of the reviewer (optional)
        - `workplaceOfReviewer` string — Workplace/company of the reviewer (optional)
        - `profilePictureUrlOfReviewer` string, uri — URL of the reviewer profile picture (optional)

## Response `200`

API Response Body

- object[]
  - `output` union, required
    - object
      - `status` 'ok', required
      - `data` object, required
        - `fermionDigitalProductId` string, required — Unique identifier of the created course product
        - `slug` string, required — URL-friendly slug for the course, used in subsequent API calls
    - object
      - `status` 'error', required
      - `errorMessage` string, required

---

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