---
title: "Update a course. Roles: admin."
method: PUT
path: "/api/courses/{contentId}"
tags: ["Courses"]
---

# Update a course. Roles: admin.

`PUT /api/courses/{contentId}`

## Path parameters

- `contentId` integer, required

## Request body

- CourseRequest
  - `title` string, required
  - `subTitle` string
  - `membershipId` integer
  - `detail` string
  - `isPublished` boolean
  - `thumbnailImageUuid` string, uuid
  - `keywords` string
  - `properties` object
  - `assetIds` integer[]
  - `tagIds` integer[]
  - `certificatesEnabled` boolean
  - `certificateUuid` string, uuid
  - `allowSelfEnroll` boolean, required
  - `allowSelfEnrollReset` boolean, required
  - `allowAdminEnroll` boolean, required
  - `enrollmentNotificationsEnabled` boolean, required
  - `completionNotificationsEnabled` boolean, required
  - `courseEmailCompletionBody` string
  - `externalReferenceId` string
  - `credits` number
  - `creditsRepeatable` boolean, required
  - `termIntervalCode` 'DAY' | 'WEEK' | 'MONTH' | 'YEAR'
  - `termIntervalCount` integer
  - `earlyRenewalDays` integer

## Response `200`

OK

- CourseResponseCourseFull
  - `success` boolean
  - `error` string
  - `content` CourseFull
    - `audit` Audit
      - `createdTime` string, date-time
      - `modifiedTime` string, date-time
      - `modifiedBy` string
    - `alternateLocales` object
      - `empty` boolean
    - `contentId` integer
    - `contentType` string
    - `membershipId` integer
    - `detail` string
    - `previewing` boolean
    - `subTitle` string
    - `thumbnailImageUuid` string, uuid
    - `title` string
    - `keywords` string
    - `body` string
    - `properties` object
    - `externalPluginId` integer
    - `externalId` string
    - `externalReferenceId` string
    - `certificateUuid` string, uuid
    - `credits` number
    - `courseEmailCompletionBody` string
    - `termIntervalCode` 'DAY' | 'WEEK' | 'MONTH' | 'YEAR'
    - `termIntervalCount` integer
    - `earlyRenewalDays` integer
    - `tags` TagFull[]
      - `audit` Audit
        - `createdTime` string, date-time
        - `modifiedTime` string, date-time
        - `modifiedBy` string
      - `alternateLocales` object
        - `empty` boolean
      - `tagId` integer
      - `title` string
      - `color` string
      - `category` string
      - `membershipId` integer
      - `priority` integer
      - `tagGroup` string
      - `locale` string
    - `assets` AssetFull[]
      - `audit` Audit
        - `createdTime` string, date-time
        - `modifiedTime` string, date-time
        - `modifiedBy` string
      - `alternateLocales` object
      - `assetId` integer
      - `token` string, uuid
      - `membershipId` integer
      - `assetType` string
      - `title` string
      - `detail` string
      - `status` string
      - `numPages` integer
      - `sourceUrl` string
      - `url` string
      - `thumbnailImageUuid` string, uuid
      - `vendor` 'ABUSE_PREVENTION_SYSTEMS' | 'CLASSMARKER' | 'GAMEPLAN' | 'I9_SPORTS' | 'NCGA' | 'SAFESPORT' | 'ULTIMATE' | 'ULTIMATE_SKILLS'
      - `properties` object
      - `assetUserMembership` AssetUserMembershipCore
        - `audit` Audit
          - `createdTime` string, date-time
          - `modifiedTime` string, date-time
          - `modifiedBy` string
        - `assetUserMembershipId` integer
        - `assetId` integer
        - `userMembershipId` integer
        - `startTime` string, date-time
        - `completeTime` string, date-time
        - `firstCompleteTime` string, date-time
        - `expireDate` string, date
        - `expired` boolean
        - `active` boolean
        - `progress` integer
        - `status` 'NOT_STARTED' | 'IN_PROGRESS' | 'COMPLETED'
        - `token` string
        - `creditsEarned` number
        - `dateStarted` string
        - `dateCompleted` string
      - `dependentAssetUserMemberships` AssetUserMembershipCore[]
        - `audit` Audit
          - `createdTime` string, date-time
          - `modifiedTime` string, date-time
          - `modifiedBy` string
        - `assetUserMembershipId` integer
        - `assetId` integer
        - `userMembershipId` integer
        - `startTime` string, date-time
        - `completeTime` string, date-time
        - `firstCompleteTime` string, date-time
        - `expireDate` string, date
        - `expired` boolean
        - `active` boolean
        - `progress` integer
        - `status` 'NOT_STARTED' | 'IN_PROGRESS' | 'COMPLETED'
        - `token` string
        - `creditsEarned` number
        - `dateStarted` string
        - `dateCompleted` string
      - `locale` string
    - `products` ProductCore[]
      - `audit` Audit
        - `createdTime` string, date-time
        - `modifiedTime` string, date-time
        - `modifiedBy` string
      - `productId` integer
      - `membershipId` integer
      - `name` string
      - `detail` string
      - `currency` 'AED' | 'ARS' | 'AUD' | 'CAD' | 'CHF' | 'CLP' | 'CNY' | 'EUR' | 'GBP' | 'INR' | 'JPY' | 'KRW' | 'MYR' | 'NZD' | 'PKR' | 'SGD' | 'USD' | 'ZAR'
      - `price` integer
      - `imageUuid` string, uuid
      - `typeCode` 'CERT' | 'COURSE' | 'EVENT'
      - `salesStartTime` string, date-time
      - `salesEndTime` string, date-time
      - `eventCheckInStartTime` string, date-time
      - `eventCheckInEndTime` string, date-time
      - `availableForSale` boolean
      - `availableForCheckIn` boolean
      - `active` boolean
      - `recurring` boolean
      - `recurringInterval` 'DAY' | 'WEEK' | 'MONTH' | 'YEAR'
      - `recurringIntervalCount` integer
      - `allowProrate` boolean
      - `taxEnabled` boolean
      - `taxCode` string
      - `enrollmentScopeCode` 'ENROLL' | 'ENROLL_AND_RENEW' | 'RENEW'
      - `audiencePromo` AudiencePromo
        - `contentId` integer
        - `actionText` string
        - `localizedValues` AudiencePromoLocaleValues
          - `actionText` string
      - `previewing` boolean
      - `programScopeCode` 'ENROLL' | 'ENROLL_AND_RENEW' | 'RENEW'
    - `locale` string
    - `certificatesEnabled` boolean
    - `allowAdminEnroll` boolean
    - `allowSelfEnroll` boolean
    - `allowSelfEnrollReset` boolean
    - `enrollmentNotificationsEnabled` boolean
    - `completionNotificationsEnabled` boolean
    - `creditsRepeatable` boolean
    - `isPublished` boolean

## Other responses

- `400` — Bad request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not found
- `500` — Internal server error

## Changes

- **2026-09-02** `870f28ba2607` — 5 info
  - added the optional property `error/errorId` to the response with the `400` status
  - added the optional property `error/errorId` to the response with the `401` status
  - added the optional property `error/errorId` to the response with the `403` status
  - added the optional property `error/errorId` to the response with the `404` status
  - …1 more

[Change history](https://skmtc.dev/mobilecoach/apis/untitled-api/changes/api/courses/:contentId/put.md)

---

[API](https://skmtc.dev/mobilecoach/apis/untitled-api.md) · [All operations](https://skmtc.dev/mobilecoach/apis/untitled-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/mobilecoach/untitled-api/revisions/870f28ba2607/schema)
