Course Builder Build and above
The Course Builder is a full course authoring experience, embedded in your product. Use it when your customers, partners, or admins need to build their own training and that creation should happen inside your platform. The example below loads a sample course into the builder so you can see how the authoring experience looks in context.
It's common for partner enablement tools, platforms that let other companies create their own training, and any product where people are creating content. If course authoring needs to feel like a native feature of your product, this is the embeddable that gets you there quickly.
Classic
Classic is the original screen-by-screen editor. Everything else on this page is the course builder. The same POST /v1/headless/embed/course edit embed loads either one. options.legacy is the API switch. The live demo header toggles that same flag.
| Course Builder | Classic | |
|---|---|---|
options.legacy | false | omit or true |
| Authoring UI | Block layouts and start/finish covers. flow: "ai" with no courseId opens the create-course agent over an empty Course Builder course. | Original screen-by-screen course editor. |
courseId | Omit it to lazy-create a blank Course Builder course. A supplied id with omitted legacy auto-routes by Course.legacy. Explicit legacy: false still requires a Builder 2 course. | Omit it to lazy-create a Classic stub. A supplied id with omitted legacy auto-routes by Course.legacy. Explicit legacy: true still requires a Classic course. |
On edit with a supplied courseId, omitted options.legacy routes to the builder that course was created for. An explicit legacy that does not match the course is still rejected. Lazy-create (no courseId) still uses the flag to stamp the new course. Player (view) embeds do not apply this gate.
API Endpoint
/v1/headless/embed/courseBody parameters
| Field | Type | Example | Description | Demo Value |
|---|---|---|---|---|
action | string | edit | — | — |
identifier | string | your-user-id | — | — |
clientIdentifier | string | your-tenant-id | — | — |
themeId | number | | Custom theme ID to apply to the embeddable. | |
options.flow | previewaigeneratetransformconvert | ai | Initial creation flow. "preview" locks preview-only chrome on whichever builder `legacy` selects. "ai" with legacy=false opens the create-course agent over an empty Course Builder course. | |
options.back | eventhiddennative | event | Back button behaviour. | |
options.translations | boolean | false | Enable translation features. | |
options.googleDrive | boolean | true | Enable Google Drive import. | |
options.oneDrive | boolean | true | Enable OneDrive import. | |
options.loom | boolean | false | Enable Loom video recording. | |
options.feedback | boolean | true | Enable course feedback screen. | |
options.publishing | boolean | false | Enable publish controls. | |
options.narrations | boolean | false | Enable AI narrations. | |
options.ai | boolean | true | Enable AI-powered features. | |
options.legacy | boolean | true | Selects Classic (omit or true) or the course builder (false) when lazy-creating. The live demo header is the same control. On edit with a supplied courseId, omit this flag to auto-route by Course.legacy; an explicit value must still match that course. |
Emitted Events
How to listen to events| Type | Event | Description | Notes |
|---|---|---|---|
session | ready | Fires when the course builder is mounted and ready. | |
session | error | Fires when an error occurs in the builder. | |
session | expired | Fires when the session expires. | |
course | updated | Fires when a course is updated. | |
back | — | Fires when the Back button is clicked. |