Update course
course_updateUpdate a course's settings, from catalog text, slug, price, dates and visibility to tags, instructors, prerequisites, the application form and certificateConfig (completion and certificate rules), and return the updated course object (same shape as course_get). Scalar fields patch: only those you send change, and null clears a nullable one. Lists are replaced whole (subjects, topics, instructors, prerequisites, applicationFields): send the complete list; course_get with includeConfig:true returns the current ones. An invalid value rejects the call and leaves the course unchanged. Saves are recorded in the course's change log; they email no one and fire no webhook. Lessons are not settings: replace them with course_content_set. accessDurationDays applies only to new enrollments; change existing learners' expiry with enrollment_update.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Course id (required). | |
| xp | No | Gamification points awarded (integer). | |
| name | No | Course title shown in the catalog (max 191 chars); cannot be empty. | |
| slug | No | URL slug used in /course/<slug>/..., lowercased with other characters turned into hyphens. Must be unique across all Cubite sites (a taken slug is a 409 error). null clears it, which drops the course from the catalog and search. | |
| level | No | Difficulty label shown in the catalog, e.g. "Beginner". null clears. | |
| price | No | List price in US dollars. null or 0 = free. | |
| banner | No | Wide banner image for the course about page. | |
| topics | No | Topic tag names; created if new. REPLACES the full set (send the complete list, [] clears). | |
| credits | No | Credits/CEUs awarded on completion; feeds transcripts and the credits report. | |
| endDate | No | Course end, ISO 8601. null clears. | |
| discount | No | Sale price that REPLACES `price` when set (US dollars, NOT a percentage and NOT an amount off). Learners are charged `discount` if present, otherwise `price`. null clears the sale. | |
| duration | No | Informational content length in HOURS (integer). Not an access limit. | |
| featured | No | Highlight the course in featured catalog slots. | |
| subjects | No | Subject tag names; created if new. REPLACES the full set (send the complete list, [] clears). | |
| metaTitle | No | SEO meta title (<=60 chars recommended). | |
| startDate | No | Course start, ISO 8601 (e.g. "2026-09-01" or "2026-09-01T09:00:00Z"). null clears. | |
| coverImage | No | Catalog/card image: absolute URL or Cloudinary public id. | |
| introVideo | No | Intro video: a YouTube or Loom URL, or a direct video file URL. | |
| description | No | Catalog description of the course. This is the summary, NOT the lesson content (use course_content_set for that). | |
| instructors | No | Instructor user ids, REPLACING the full set ([] removes all). Each must already be on this site (a site role or site admin), or the call fails. | |
| prerequisites | No | Prerequisite courses whose thresholds a learner must meet before enrolling, REPLACING the full set ([] removes all). Each: {id, minProgressPct?, minAvgGradePct?}. | |
| metaDescription | No | SEO meta description (<=155 chars recommended). | |
| applicationFields | No | Application form questions, REPLACING the whole list: [{text, type, options?, required?}], where text is the question shown, type is "text" (default), "textarea" or "dropdown" (with options [{value, label}]), and required is a boolean. null clears it, leaving a single free-text message box. | |
| certificateConfig | No | Completion and certificate settings as ONE object that REPLACES the stored one: keys you leave out are deleted, and null clears it (no certificate, reading gate off). course_get and course_list do not return it, so send it only when you know every key to keep, as on a course you just created, which holds exactly {readingGate: {enabled: true}}. Keys include readingGate {enabled, wordsPerMinute (default 200), minSeconds (20), maxSeconds (600)}, the minimum reading time before a text unit counts as complete; completionRule {type: "all_content" (default), "quiz_passed" or "progress_pct" with minProgressPct (default 80)}, what completes the course; and the certificate, issued on completion only when statementPrefix is set (codes count up from nextSeq; templateKind "builtin" by default, or "pdf" with templateUrl; validityMonths; ceus). | |
| discussionEnabled | No | Enable the per-course discussion forum. | |
| enrollmentEndDate | No | Enrollment closes, ISO 8601. null clears. | |
| isSyllabusVisible | No | Show the syllabus/outline to visitors who are not enrolled. | |
| accessDurationDays | No | Days of access from enrollment (integer): each NEW enrollment gets expiresAt = enrolledAt + N days, while existing enrollments keep their current expiry. null = unlimited. Distinct from `duration`. | |
| isVisibleInCatalog | No | Show the course in the public catalog (it is listed only if it also has a slug). | |
| enrollmentStartDate | No | Enrollment opens, ISO 8601. null clears. | |
| requiresApplication | No | Require learners to apply and be approved instead of enrolling instantly. |