---
title: "Publish Lesson"
method: POST
path: "/courses/lessons/{id}/publish"
tags: ["Courses::Lesson"]
---

# Publish Lesson

`POST /courses/lessons/{id}/publish`

## Request

- Base URL: `https://myworkspace.myclickfunnels.com/api/v2`
- URL: `https://myworkspace.myclickfunnels.com/api/v2/courses/lessons/{id}/publish`
- Auth: one of:
  - HTTP bearer
  - OAuth 2
    - Authorization code: `https://accounts.myclickfunnels.com/oauth/authorize`
    - Token URL: `https://accounts.myclickfunnels.com/oauth/token`
- TypeScript: <https://skmtc.dev/myclickfunnels/apis/clickfunnels-api/docs/courses/lessons/:id/publish/post.ts> (a function with typed inputs; its response is checked against the schema)

Makes a single lesson live by setting `published_at`. Pass an optional future `published_at` to schedule it; omit it to publish now. A past `published_at` is rejected. A lesson's `published_at` is not writable via `updateCoursesLessons`, so this is the way to publish or schedule an individual lesson.
See [Publishing](https://accounts.myclickfunnels.com/.well-known/courses/skill.md#publishing) in the [Courses Skill](https://accounts.myclickfunnels.com/.well-known/courses/skill.md) for the other publish paths.

## Path parameters

- `id` string, required

## Request body

- object
  - `published_at` string, date-time: Optional ISO 8601 datetime at which the lesson should become live. Must be now or in the future — a past datetime is rejected. Omit to publish immediately.

## Response `200`

OK

- CoursesLessonAttributes: Lessons
  - `id` integer: ID
  - `public_id` string, nullable: Public ID
  - `title` string: Title
  - `body` string, nullable: Description
  - `section_id` integer, nullable: Parent module
  - `published_at` string, date-time, nullable: Schedule for
  - `current_path` string, nullable: Current Path
  - `sort_order` integer, nullable: Builder display order of the lesson within its section (section_id). Scoped per section, starting at 0.
  - `created_at` string, date-time, nullable: Added
  - `updated_at` string, date-time, nullable: Updated
  - `image` object, nullable: Attached image; null when unset.
    - `id` integer: Image ID
    - `public_id` string: Image public ID
    - `name` string, nullable: Image name
    - `url` string, nullable: Image file URL.
  - `video` object, nullable: Attached video; null when unset.
    - `id` integer: Video ID
    - `public_id` string: Video public ID
    - `name` string, nullable: Video name
    - `url` string, nullable: Signed MP4 URL, expires one hour after this response; null until the video has a processed file.

## Other responses

- `401`: Unauthorized
- `404`: Not Found
- `422`: Unprocessable Entity

## Changes

- **2026-11-03** `511d88b30aea`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/myclickfunnels/apis/clickfunnels-api/changes/courses/lessons/:id/publish/post.md)

---

[API](https://skmtc.dev/myclickfunnels/apis/clickfunnels-api.md) - [All operations](https://skmtc.dev/myclickfunnels/apis/clickfunnels-api/llms.txt) - [OpenAPI document](https://skmtc.dev/myclickfunnels/apis/clickfunnels-api/revisions/511d88b30aea?raw)
