> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kombo.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Enroll user in course

> Enroll a user in a course revision.

<Accordion title="Supported integrations" icon="list-check">
  This feature is currently available for the following integrations:

  <ul>
    <li class="flex items-center"><img src="https://storage.googleapis.com/kombo-assets/integrations/successfactors/icon.svg" height="16px" width="16px" class="m-0 mr-2" /><a href="/lms/connectors/successfactors">SAP SuccessFactors</a></li>
    <li class="flex items-center"><img src="https://storage.googleapis.com/kombo-assets/integrations/cornerstoneondemand/icon.svg" height="16px" width="16px" class="m-0 mr-2" /><a href="/lms/connectors/cornerstoneondemand">Cornerstone OnDemand</a></li>
    <li class="flex items-center"><img src="https://storage.googleapis.com/kombo-assets/integrations/workday/icon.svg" height="16px" width="16px" class="m-0 mr-2" /><a href="/lms/connectors/workday">Workday</a></li>
    <li class="flex items-center"><img src="https://storage.googleapis.com/kombo-assets/integrations/sandbox/icon.svg" height="16px" width="16px" class="m-0 mr-2" /><a href="/lms/connectors/sandbox">Kombo Sandbox</a></li>
    <li class="flex items-center"><img src="https://storage.googleapis.com/kombo-assets/integrations/360learning/icon.svg" height="16px" width="16px" class="m-0 mr-2" /><a href="/lms/connectors/360learning">360Learning</a></li>
    <li class="flex items-center"><img src="https://storage.googleapis.com/kombo-assets/integrations/talentlms/icon.svg" height="16px" width="16px" class="m-0 mr-2" /><a href="/lms/connectors/talentlms">TalentLMS</a></li>
    <li class="flex items-center"><img src="https://storage.googleapis.com/kombo-assets/integrations/moodle/icon.svg" height="16px" width="16px" class="m-0 mr-2" /><a href="/lms/connectors/moodle">Moodle</a></li>
  </ul>

  You'd like to see this feature for another integration? Please reach out!
  We're always happy to discuss extending our coverage.
</Accordion>

<Note>
  This endpoint requires the permission **Create and manage course progressions** to be enabled in [your scope config](/scopes).
</Note>

### Example Request Body

```json theme={null}
{
  "user_id": "7xPdr68N8kG9EzLwjsN9xyz",
  "course_revision_id": "3KMdr68N8kG9EzLwjsN9aoz"
}
```


## OpenAPI

````yaml POST /lms/course-progressions
openapi: 3.1.0
info:
  title: Kombo API
  version: 1.0.0
servers:
  - url: https://api.kombo.dev/v1
    description: Kombo EU API
  - url: https://api.us.kombo.dev/v1
    description: Kombo US API
security:
  - ApiKey: []
tags:
  - name: General
  - name: Kombo Connect
    description: >-
      Endpoints for Kombo Connect, our end-user-facing flow for setting up new
      integrations.
  - name: Unified HRIS API
    description: Unified endpoints to access all the HR concepts you might need.
  - name: Unified ATS API
    description: Unified endpoints to access all the ATS concepts you might need.
  - name: Unified ATS (Assessment & Background Check) API
    description: >-
      Unified endpoints to operate Assessments and Background Checks for many
      applicant tracking systems.
  - name: Unified LMS API
    description: Unified endpoints to access all the LMS concepts you might need.
  - name: AI Apply
    description: Endpoints for AI-powered job application features.
  - name: Custom Endpoints
    description: Custom integration-specific endpoints.
paths:
  /lms/course-progressions:
    post:
      tags:
        - Unified LMS API
      summary: Enroll user in course
      description: >-
        Enroll a user in a course revision.


        <Accordion title="Supported integrations" icon="list-check">

        This feature is currently available for the following integrations:


        <ul>

        <li class="flex items-center"><img
          src="https://storage.googleapis.com/kombo-assets/integrations/successfactors/icon.svg"
          height="16px"
          width="16px"
          class="m-0 mr-2"
        /><a href="/lms/connectors/successfactors">SAP SuccessFactors</a></li>

        <li class="flex items-center"><img
          src="https://storage.googleapis.com/kombo-assets/integrations/cornerstoneondemand/icon.svg"
          height="16px"
          width="16px"
          class="m-0 mr-2"
        /><a href="/lms/connectors/cornerstoneondemand">Cornerstone
        OnDemand</a></li>

        <li class="flex items-center"><img
          src="https://storage.googleapis.com/kombo-assets/integrations/workday/icon.svg"
          height="16px"
          width="16px"
          class="m-0 mr-2"
        /><a href="/lms/connectors/workday">Workday</a></li>

        <li class="flex items-center"><img
          src="https://storage.googleapis.com/kombo-assets/integrations/sandbox/icon.svg"
          height="16px"
          width="16px"
          class="m-0 mr-2"
        /><a href="/lms/connectors/sandbox">Kombo Sandbox</a></li>

        <li class="flex items-center"><img
          src="https://storage.googleapis.com/kombo-assets/integrations/360learning/icon.svg"
          height="16px"
          width="16px"
          class="m-0 mr-2"
        /><a href="/lms/connectors/360learning">360Learning</a></li>

        <li class="flex items-center"><img
          src="https://storage.googleapis.com/kombo-assets/integrations/talentlms/icon.svg"
          height="16px"
          width="16px"
          class="m-0 mr-2"
        /><a href="/lms/connectors/talentlms">TalentLMS</a></li>

        <li class="flex items-center"><img
          src="https://storage.googleapis.com/kombo-assets/integrations/moodle/icon.svg"
          height="16px"
          width="16px"
          class="m-0 mr-2"
        /><a href="/lms/connectors/moodle">Moodle</a></li>

        </ul>


        You'd like to see this feature for another integration? Please reach
        out!

        We're always happy to discuss extending our coverage.

        </Accordion>



        <Note>
          This endpoint requires the permission **Create and manage course progressions** to be enabled in [your scope config](/scopes).
        </Note>


        ### Example Request Body


        ```json

        {
          "user_id": "7xPdr68N8kG9EzLwjsN9xyz",
          "course_revision_id": "3KMdr68N8kG9EzLwjsN9aoz"
        }

        ```
      operationId: PostLmsCourseProgressions
      parameters:
        - in: header
          name: X-Integration-Id
          schema:
            type: string
          description: ID of the integration you want to interact with.
          example: bombohr:HWUTwvyx2wLoSUHphiWVrp28
          required: true
      requestBody:
        description: POST /lms/course-progressions Request body
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostLmsCourseProgressionsRequestBody'
            examples:
              example1:
                value:
                  user_id: 7xPdr68N8kG9EzLwjsN9xyz
                  course_revision_id: 3KMdr68N8kG9EzLwjsN9aoz
      responses:
        '200':
          description: POST /lms/course-progressions Positive response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostLmsCourseProgressionsPositiveResponse'
              examples:
                example1:
                  value:
                    status: success
                    data:
                      id: 26vafvWSRmbhNcxJYqjCzuJg
                      remote_id: progress-12345
                      user_id: 7xPdr68N8kG9EzLwjsN9xyz
                      course_revision_id: 3KMdr68N8kG9EzLwjsN9aoz
                      status: COMPLETED
                      enrolled_at: '2022-08-07T14:01:29.196Z'
                      completed_at: '2022-08-07T14:01:29.196Z'
                      changed_at: '2022-08-07T14:01:29.196Z'
                      remote_deleted_at: null
                      remote_data: null
                      user:
                        id: 26vafvWSRmbhNcxJYqjCzuJg
                        remote_id: '32'
                        first_name: Sarah
                        last_name: Johnson
                        work_email: sarah.johnson@example.com
                      course_revision:
                        id: 3KMdr68N8kG9EzLwjsN9aoz
                        remote_id: revision-12345
                        title: Building LMS integrations with Kombo
                        course:
                          id: 26vafvWSRmbhNcxJYqjCzuJg
                          remote_id: '32'
                    warnings:
                      - message: This is an example warning!
        default:
          $ref: '#/components/responses/ErrorResponseGeneral'
components:
  schemas:
    PostLmsCourseProgressionsRequestBody:
      type: object
      properties:
        user_id:
          type: string
          description: >-
            The ID of the user in Kombo or their ID in the remote system by
            prefixing it with `remote:` (e.g., `remote:12312`)
        course_revision_id:
          type: string
          description: >-
            The ID of the revision in Kombo or its ID in the remote system by
            prefixing it with `remote:` (e.g., `remote:12312`)
      required:
        - user_id
        - course_revision_id
    PostLmsCourseProgressionsPositiveResponse:
      type: object
      properties:
        status:
          type: string
          const: success
        data:
          type: object
          properties:
            id:
              type: string
              description: >-
                The globally unique ID of this object generated by Kombo. We
                recommend using this as a stable primary key for syncing.
            remote_id:
              type: string
              description: >-
                The raw ID of the object in the remote system. We don't
                recommend using this as a primary key on your side as it might
                sometimes be compromised of multiple identifiers if a system
                doesn't provide a clear primary key.
            user_id:
              type: string
              description: >-
                The Kombo ID of the user this progression relates to. The ID can
                be used to retrieve the user from the `get users` endpoint.
            course_revision_id:
              type: string
              description: >-
                The Kombo ID of the revision this progression relates to. The ID
                can be used to retrieve the revision from the `get courses`
                endpoint.
            status:
              type:
                - string
                - 'null'
              enum:
                - ENROLLED
                - IN_PROGRESS
                - COMPLETED
                - DROPPED
              description: Current status of the learner in this course revision.
            enrolled_at:
              description: Date when the user enrolled in the course revision.
              type:
                - string
                - 'null'
              format: date-time
              externalDocs:
                url: >-
                  https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
            completed_at:
              description: Date when the user completed the course revision.
              type:
                - string
                - 'null'
              format: date-time
              externalDocs:
                url: >-
                  https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
            changed_at:
              description: >-
                The timestamp when this specific record was last modified. This
                field only updates when properties directly on this record
                change, NOT when related or nested models change. For filtering
                that considers nested data changes, use the `updated_after`
                parameter which will return records when either the record
                itself OR its related models have been updated.
              type: string
              format: date-time
              externalDocs:
                url: >-
                  https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
            remote_deleted_at:
              description: >-
                The date and time the object was deleted in the remote system.
                Objects are automatically marked as deleted when Kombo can't
                retrieve them from the remote system anymore. Kombo will also
                anonymize entries 14 days after they disappear.
              type:
                - string
                - 'null'
              format: date-time
              externalDocs:
                url: >-
                  https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
            remote_data:
              type:
                - object
                - 'null'
              additionalProperties: true
              description: >-
                Includes the data fetched from the remote system.

                Please be aware that including this in you scope config might
                violate other

                scopes that are set.


                Remote data always has the endpoint path that we got the data
                from as the

                top level key. For example, it could look like: `{ "/companies":
                { ... }}`


                This is not available on all plans. Reach out to Kombo if you
                need it.
            user:
              type: object
              properties:
                id:
                  type: string
                  description: >-
                    The globally unique ID of this object generated by Kombo. We
                    recommend using this as a stable primary key for syncing.
                remote_id:
                  type: string
                  description: >-
                    The raw ID of the object in the remote system. We don't
                    recommend using this as a primary key on your side as it
                    might sometimes be compromised of multiple identifiers if a
                    system doesn't provide a clear primary key.
                first_name:
                  type:
                    - string
                    - 'null'
                  description: The user's first name.
                last_name:
                  type:
                    - string
                    - 'null'
                  description: The user's last name.
                work_email:
                  type:
                    - string
                    - 'null'
                  description: The user's work email address.
              required:
                - id
                - remote_id
                - first_name
                - last_name
                - work_email
              examples:
                - id: 26vafvWSRmbhNcxJYqjCzuJg
                  remote_id: '32'
                  first_name: Sarah
                  last_name: Johnson
                  work_email: sarah.johnson@example.com
            course_revision:
              type: object
              properties:
                id:
                  type: string
                  description: >-
                    The globally unique ID of this object generated by Kombo. We
                    recommend using this as a stable primary key for syncing.
                remote_id:
                  type: string
                  description: >-
                    The raw ID of the object in the remote system. We don't
                    recommend using this as a primary key on your side as it
                    might sometimes be compromised of multiple identifiers if a
                    system doesn't provide a clear primary key.
                title:
                  type:
                    - string
                    - 'null'
                  description: The title of the course revision.
                course:
                  type:
                    - object
                    - 'null'
                  properties:
                    id:
                      type: string
                      description: >-
                        The globally unique ID of this object generated by
                        Kombo. We recommend using this as a stable primary key
                        for syncing.
                    remote_id:
                      type: string
                      description: >-
                        The raw ID of the object in the remote system. We don't
                        recommend using this as a primary key on your side as it
                        might sometimes be compromised of multiple identifiers
                        if a system doesn't provide a clear primary key.
                  required:
                    - id
                    - remote_id
              required:
                - id
                - remote_id
                - title
                - course
          required:
            - id
            - remote_id
            - user_id
            - course_revision_id
            - status
            - enrolled_at
            - completed_at
            - changed_at
            - remote_deleted_at
            - remote_data
            - user
            - course_revision
          examples:
            - id: 26vafvWSRmbhNcxJYqjCzuJg
              remote_id: progress-12345
              user_id: 7xPdr68N8kG9EzLwjsN9xyz
              course_revision_id: 3KMdr68N8kG9EzLwjsN9aoz
              status: COMPLETED
              enrolled_at: '2022-08-07T14:01:29.196Z'
              completed_at: '2022-08-07T14:01:29.196Z'
              changed_at: '2022-08-07T14:01:29.196Z'
              remote_deleted_at: null
              remote_data: null
              user:
                id: 26vafvWSRmbhNcxJYqjCzuJg
                remote_id: '32'
                first_name: Sarah
                last_name: Johnson
                work_email: sarah.johnson@example.com
              course_revision:
                id: 3KMdr68N8kG9EzLwjsN9aoz
                remote_id: revision-12345
                title: Building LMS integrations with Kombo
                course:
                  id: 26vafvWSRmbhNcxJYqjCzuJg
                  remote_id: '32'
        warnings:
          type: array
          items:
            type: object
            properties:
              message:
                type: string
            required:
              - message
          description: >-
            These are the interaction warnings that are shown in the dashboard.
            They are meant to provide debug information to you. We recommend
            logging them to the console.
      required:
        - status
        - data
        - warnings
  responses:
    ErrorResponseGeneral:
      description: The standard error response with just the platform error codes.
      content:
        application/json:
          schema:
            type: object
            properties:
              status:
                type: string
                enum:
                  - error
              error:
                type: object
                properties:
                  code:
                    type:
                      - string
                      - 'null'
                    enum:
                      - PLATFORM.RATE_LIMIT_EXCEEDED
                      - PLATFORM.CONCURRENCY_LIMIT_EXCEEDED
                      - PLATFORM.INTEGRATION_NOT_FOUND
                      - PLATFORM.INPUT_INVALID
                      - PLATFORM.UNKNOWN_ERROR
                      - PLATFORM.IP_NOT_WHITELISTED
                      - PLATFORM.AUTHENTICATION_INVALID
                      - PLATFORM.TASK_TIMED_OUT
                    example: PLATFORM.RATE_LIMIT_EXCEEDED
                    description: >-
                      Some errors include an error code that can be used to
                      identify their cause. See the [Error Handling
                      Docs](https://docs.kombo.dev/guides/errors) for more
                      information. For your error handling logic please use the
                      error `code` instead of other properties (e.g. message,
                      http status code, ...).
                  title:
                    type:
                      - string
                      - 'null'
                    description: A static, human-readable label.
                  message:
                    type: string
                    description: >-
                      A dynamic, detailed description of what went wrong in this
                      specific instance.
                  log_url:
                    type:
                      - string
                      - 'null'
                    format: uri
                    description: >-
                      The log page in the Kombo UI lists every interaction with
                      full details. If you need assistance, share that link with
                      our support team.
                required:
                  - code
                  - title
                  - message
                  - log_url
                description: Error details with structured code for programmatic handling.
            required:
              - status
              - error
          examples:
            Error Response:
              description: >-
                When building error handling logic, always use the `code` field
                to identify specific error types programmatically. See the
                complete list of error codes in the
                [docs](https://docs.kombo.dev/guides/errors).
              value:
                status: error
                error:
                  code: INTEGRATION.MODEL_NOT_AVAILABLE
                  title: >-
                    This data model isn't supported for the selected
                    integration.
                  message: >-
                    The "employees" model is not yet available for Greenhouse.
                    Please reach out to Kombo if you need this functionality.
                  log_url: https://app.kombo.dev/my-prod/logs?interactionId=123456
            Minimal Error Response:
              description: >-
                The "message" is always required while other fields can also be
                `null`. See the [docs](https://docs.kombo.dev/guides/errors) for
                more information.
              value:
                status: error
                error:
                  code: null
                  title: null
                  message: The message is always in the response.
                  log_url: null
  securitySchemes:
    ApiKey:
      type: http
      scheme: bearer
      description: >-
        Create an API key on the [Secrets](https://app.kombo.dev/secrets) page
        in the Kombo dashboard.

````