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

# Publish Section

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

## Request

- Base URL: `https://myworkspace.myclickfunnels.com/api/v2`
- URL: `https://myworkspace.myclickfunnels.com/api/v2/courses/sections/{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/sections/:id/publish/post.ts> (a function with typed inputs; its response is checked against the schema)

Makes a single section live by setting `published_at`, and cascade-publishes its lessons individually so per-lesson side effects fire. The response is the canonical section resource. If section or lesson validation fails, the entire request returns `422` without changing any publish timestamps. Pass an optional future `published_at` to schedule it; omit it to publish now. A past `published_at` is rejected. This is the default publish (`auto_enroll: false`) — to also grant existing enrollees access and notify them, use `createCoursesSectionsPublishActions` with `auto_enroll` instead. The root section cannot be published directly.
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 publish paths.

## Path parameters

- `id` string, required

## Request body

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

## Response `200`

OK

- CoursesSectionAttributes: Modules
  - `id` integer: ID
  - `public_id` string, nullable: Public ID
  - `course_id` integer: Course ID
  - `title` string: Title
  - `published_at` string, date-time, nullable: Published at
  - `description` string, nullable: Description
  - `days_till_drip_access` integer, nullable: Days until drip access
  - `blocker_section_id` integer, nullable: Blocker section
  - `blocker_lesson_id` integer, nullable: Blocker lesson
  - `current_path` string, nullable: Current Path
  - `is_hidden_from_non_members` boolean, nullable: Current Path
  - `upgrade_url` string, nullable: Upgrade URL
  - `parent_id` string, nullable: Parent ID is pointing to the parent section. If it's `nil` then it's the <b>root</b> section.
  - `sort_order` integer, nullable: Builder display order within the parent module. Scoped per parent, so it is not globally unique across the sections list (the root section and each parent's first child both start at 0).
  - `created_at` string, date-time, nullable: Created at
  - `updated_at` string, date-time, nullable: Updated at

## 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/sections/: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)
