Kombo · Capability

Kombo API — Unified LMS API

Kombo API — Unified LMS API. 9 operations. Lead operation: Get course progressions. Self-contained Naftiko capability covering one Kombo business surface.

Run with Naftiko KomboUnified LMS API

What You Can Do

GET
Getlmscourseprogressions — Get course progressions
/v1/lms/course-progressions
POST
Postlmscourseprogressions — Enroll user in course
/v1/lms/course-progressions
POST
Postlmscourseprogressionscourseprogressionidcomplete — Complete course
/v1/lms/course-progressions/{course-progression-id}/complete
GET
Getlmscourses — Get courses
/v1/lms/courses
POST
Postlmscoursesbulk — Upsert courses
/v1/lms/courses/bulk
GET
Getlmscoursesbulktaskid — Get status of “Upsert courses” task
/v1/lms/courses/bulk/{task-id}
POST
Postlmscoursescourseiddeactivate — Deactivate course
/v1/lms/courses/{course-id}/deactivate
GET
Getlmsskills — Get skills
/v1/lms/skills
GET
Getlmsusers — Get users
/v1/lms/users

MCP Tools

get-course-progressions

Get course progressions

read-only idempotent
enroll-user-course

Enroll user in course

complete-course

Complete course

get-courses

Get courses

read-only idempotent
upsert-courses

Upsert courses

get-status-upsert-courses-task

Get status of “Upsert courses” task

read-only idempotent
deactivate-course

Deactivate course

get-skills

Get skills

read-only idempotent
get-users

Get users

read-only idempotent

Capability Spec

kombo-unified-lms-api.yaml Raw ↑
naftiko: 1.0.0-alpha2
info:
  label: Kombo API — Unified LMS API
  description: 'Kombo API — Unified LMS API. 9 operations. Lead operation: Get course progressions. Self-contained Naftiko
    capability covering one Kombo business surface.'
  tags:
  - Kombo
  - Unified LMS API
  created: '2026-05-19'
  modified: '2026-05-19'
binds:
- namespace: env
  keys:
    KOMBO_API_KEY: KOMBO_API_KEY
capability:
  consumes:
  - type: http
    namespace: kombo-unified-lms-api
    baseUri: https://api.kombo.dev/v1
    description: Kombo API — Unified LMS API business capability. Self-contained, no shared references.
    resources:
    - name: lms-course-progressions
      path: /lms/course-progressions
      operations:
      - name: getlmscourseprogressions
        method: GET
        description: Get course progressions
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: X-Integration-Id
          in: header
          type: string
          description: ID of the integration you want to interact with.
          required: true
        - name: cursor
          in: query
          type: string
          description: An optional cursor string used for pagination. This can be retrieved from the `next` property of the
            previous page response.
        - name: page_size
          in: query
          type: string
          description: The number of results to return per page. Maximum is 250.
        - name: updated_after
          in: query
          type: string
          description: Filter the entries based on the modification date in format `YYYY-MM-DDTHH:mm:ss.sssZ`. Returns records
            where either the record itself **OR** its nested data ha
        - name: include_deleted
          in: query
          type: string
          description: By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted
            entries too.
        - name: ignore_unsupported_filters
          in: query
          type: string
          description: When set to `true`, filters targeting fields not supported by this integration will be ignored instead
            of filtering out all results.
        - name: ids
          in: query
          type: string
          description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`.
        - name: remote_ids
          in: query
          type: string
          description: Filter by a comma-separated list of remote IDs.
        - name: user_ids
          in: query
          type: string
          description: Filter by a comma-separated list of user IDs. We will only return progressions that are related to
            _any_ of the users.
        - name: course_ids
          in: query
          type: string
          description: Filter by a comma-separated list of course IDs. We will only return progressions for revisions that
            belong to _any_ of the courses.
      - name: postlmscourseprogressions
        method: POST
        description: Enroll user in course
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: X-Integration-Id
          in: header
          type: string
          description: ID of the integration you want to interact with.
          required: true
        - name: body
          in: body
          type: object
          description: Request body (JSON).
          required: false
    - name: lms-course-progressions-course_progression_id-complete
      path: /lms/course-progressions/{course_progression_id}/complete
      operations:
      - name: postlmscourseprogressionscourseprogressionidcomplete
        method: POST
        description: Complete course
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: X-Integration-Id
          in: header
          type: string
          description: ID of the integration you want to interact with.
          required: true
        - name: course_progression_id
          in: path
          type: string
          description: The ID of the course progression in Kombo or its ID in the remote system by prefixing it with `remote:`
            (e.g., `remote:12312`)
          required: true
        - name: body
          in: body
          type: object
          description: Request body (JSON).
          required: false
    - name: lms-courses
      path: /lms/courses
      operations:
      - name: getlmscourses
        method: GET
        description: Get courses
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: X-Integration-Id
          in: header
          type: string
          description: ID of the integration you want to interact with.
          required: true
        - name: cursor
          in: query
          type: string
          description: An optional cursor string used for pagination. This can be retrieved from the `next` property of the
            previous page response.
        - name: page_size
          in: query
          type: string
          description: The number of results to return per page. Maximum is 250.
        - name: updated_after
          in: query
          type: string
          description: Filter the entries based on the modification date in format `YYYY-MM-DDTHH:mm:ss.sssZ`. Returns records
            where either the record itself **OR** its nested data ha
        - name: include_deleted
          in: query
          type: string
          description: By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted
            entries too.
        - name: ignore_unsupported_filters
          in: query
          type: string
          description: When set to `true`, filters targeting fields not supported by this integration will be ignored instead
            of filtering out all results.
        - name: ids
          in: query
          type: string
          description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`.
        - name: remote_ids
          in: query
          type: string
          description: Filter by a comma-separated list of remote IDs.
    - name: lms-courses-bulk
      path: /lms/courses/bulk
      operations:
      - name: postlmscoursesbulk
        method: POST
        description: Upsert courses
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: X-Integration-Id
          in: header
          type: string
          description: ID of the integration you want to interact with.
          required: true
        - name: body
          in: body
          type: object
          description: Request body (JSON).
          required: false
    - name: lms-courses-bulk-task_id
      path: /lms/courses/bulk/{task_id}
      operations:
      - name: getlmscoursesbulktaskid
        method: GET
        description: Get status of “Upsert courses” task
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: X-Integration-Id
          in: header
          type: string
          description: ID of the integration you want to interact with.
          required: true
        - name: task_id
          in: path
          type: string
          description: GET /lms/courses/bulk/:task_id Parameter
          required: true
    - name: lms-courses-course_id-deactivate
      path: /lms/courses/{course_id}/deactivate
      operations:
      - name: postlmscoursescourseiddeactivate
        method: POST
        description: Deactivate course
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: X-Integration-Id
          in: header
          type: string
          description: ID of the integration you want to interact with.
          required: true
        - name: course_id
          in: path
          type: string
          description: The ID of the course in Kombo or its ID in the remote system by prefixing it with `remote:` (e.g.,
            `remote:12312`)
          required: true
        - name: body
          in: body
          type: object
          description: Request body (JSON).
          required: false
    - name: lms-skills
      path: /lms/skills
      operations:
      - name: getlmsskills
        method: GET
        description: Get skills
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: X-Integration-Id
          in: header
          type: string
          description: ID of the integration you want to interact with.
          required: true
        - name: cursor
          in: query
          type: string
          description: An optional cursor string used for pagination. This can be retrieved from the `next` property of the
            previous page response.
        - name: page_size
          in: query
          type: string
          description: The number of results to return per page. Maximum is 250.
        - name: updated_after
          in: query
          type: string
          description: Filter the entries based on the modification date in format `YYYY-MM-DDTHH:mm:ss.sssZ`. Returns records
            where either the record itself **OR** its nested data ha
        - name: include_deleted
          in: query
          type: string
          description: By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted
            entries too.
        - name: ignore_unsupported_filters
          in: query
          type: string
          description: When set to `true`, filters targeting fields not supported by this integration will be ignored instead
            of filtering out all results.
        - name: ids
          in: query
          type: string
          description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`.
        - name: remote_ids
          in: query
          type: string
          description: Filter by a comma-separated list of remote IDs.
    - name: lms-users
      path: /lms/users
      operations:
      - name: getlmsusers
        method: GET
        description: Get users
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: X-Integration-Id
          in: header
          type: string
          description: ID of the integration you want to interact with.
          required: true
        - name: cursor
          in: query
          type: string
          description: An optional cursor string used for pagination. This can be retrieved from the `next` property of the
            previous page response.
        - name: page_size
          in: query
          type: string
          description: The number of results to return per page. Maximum is 250.
        - name: updated_after
          in: query
          type: string
          description: Filter the entries based on the modification date in format `YYYY-MM-DDTHH:mm:ss.sssZ`. Returns records
            where either the record itself **OR** its nested data ha
        - name: include_deleted
          in: query
          type: string
          description: By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted
            entries too.
        - name: ignore_unsupported_filters
          in: query
          type: string
          description: When set to `true`, filters targeting fields not supported by this integration will be ignored instead
            of filtering out all results.
        - name: ids
          in: query
          type: string
          description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`.
        - name: remote_ids
          in: query
          type: string
          description: Filter by a comma-separated list of remote IDs.
        - name: work_emails
          in: query
          type: string
          description: Filter by a comma-separated list of work emails. We will only return users who have _any_ of the work
            emails. The format of the emails is case-insensitive.
    authentication:
      type: bearer
      token: '{{env.KOMBO_API_KEY}}'
  exposes:
  - type: rest
    namespace: kombo-unified-lms-api-rest
    port: 8080
    description: REST adapter for Kombo API — Unified LMS API. One Spectral-compliant resource per consumed operation, prefixed
      with /v1.
    resources:
    - path: /v1/lms/course-progressions
      name: lms-course-progressions
      description: REST surface for lms-course-progressions.
      operations:
      - method: GET
        name: getlmscourseprogressions
        description: Get course progressions
        call: kombo-unified-lms-api.getlmscourseprogressions
        with:
          X-Integration-Id: rest.X-Integration-Id
          cursor: rest.cursor
          page_size: rest.page_size
          updated_after: rest.updated_after
          include_deleted: rest.include_deleted
          ignore_unsupported_filters: rest.ignore_unsupported_filters
          ids: rest.ids
          remote_ids: rest.remote_ids
          user_ids: rest.user_ids
          course_ids: rest.course_ids
        outputParameters:
        - type: object
          mapping: $.
      - method: POST
        name: postlmscourseprogressions
        description: Enroll user in course
        call: kombo-unified-lms-api.postlmscourseprogressions
        with:
          X-Integration-Id: rest.X-Integration-Id
          body: rest.body
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/lms/course-progressions/{course-progression-id}/complete
      name: lms-course-progressions-course-progression-id-complete
      description: REST surface for lms-course-progressions-course_progression_id-complete.
      operations:
      - method: POST
        name: postlmscourseprogressionscourseprogressionidcomplete
        description: Complete course
        call: kombo-unified-lms-api.postlmscourseprogressionscourseprogressionidcomplete
        with:
          X-Integration-Id: rest.X-Integration-Id
          course_progression_id: rest.course_progression_id
          body: rest.body
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/lms/courses
      name: lms-courses
      description: REST surface for lms-courses.
      operations:
      - method: GET
        name: getlmscourses
        description: Get courses
        call: kombo-unified-lms-api.getlmscourses
        with:
          X-Integration-Id: rest.X-Integration-Id
          cursor: rest.cursor
          page_size: rest.page_size
          updated_after: rest.updated_after
          include_deleted: rest.include_deleted
          ignore_unsupported_filters: rest.ignore_unsupported_filters
          ids: rest.ids
          remote_ids: rest.remote_ids
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/lms/courses/bulk
      name: lms-courses-bulk
      description: REST surface for lms-courses-bulk.
      operations:
      - method: POST
        name: postlmscoursesbulk
        description: Upsert courses
        call: kombo-unified-lms-api.postlmscoursesbulk
        with:
          X-Integration-Id: rest.X-Integration-Id
          body: rest.body
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/lms/courses/bulk/{task-id}
      name: lms-courses-bulk-task-id
      description: REST surface for lms-courses-bulk-task_id.
      operations:
      - method: GET
        name: getlmscoursesbulktaskid
        description: Get status of “Upsert courses” task
        call: kombo-unified-lms-api.getlmscoursesbulktaskid
        with:
          X-Integration-Id: rest.X-Integration-Id
          task_id: rest.task_id
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/lms/courses/{course-id}/deactivate
      name: lms-courses-course-id-deactivate
      description: REST surface for lms-courses-course_id-deactivate.
      operations:
      - method: POST
        name: postlmscoursescourseiddeactivate
        description: Deactivate course
        call: kombo-unified-lms-api.postlmscoursescourseiddeactivate
        with:
          X-Integration-Id: rest.X-Integration-Id
          course_id: rest.course_id
          body: rest.body
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/lms/skills
      name: lms-skills
      description: REST surface for lms-skills.
      operations:
      - method: GET
        name: getlmsskills
        description: Get skills
        call: kombo-unified-lms-api.getlmsskills
        with:
          X-Integration-Id: rest.X-Integration-Id
          cursor: rest.cursor
          page_size: rest.page_size
          updated_after: rest.updated_after
          include_deleted: rest.include_deleted
          ignore_unsupported_filters: rest.ignore_unsupported_filters
          ids: rest.ids
          remote_ids: rest.remote_ids
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/lms/users
      name: lms-users
      description: REST surface for lms-users.
      operations:
      - method: GET
        name: getlmsusers
        description: Get users
        call: kombo-unified-lms-api.getlmsusers
        with:
          X-Integration-Id: rest.X-Integration-Id
          cursor: rest.cursor
          page_size: rest.page_size
          updated_after: rest.updated_after
          include_deleted: rest.include_deleted
          ignore_unsupported_filters: rest.ignore_unsupported_filters
          ids: rest.ids
          remote_ids: rest.remote_ids
          work_emails: rest.work_emails
        outputParameters:
        - type: object
          mapping: $.
  - type: mcp
    namespace: kombo-unified-lms-api-mcp
    port: 9090
    transport: http
    description: MCP adapter for Kombo API — Unified LMS API. One tool per consumed operation, routed inline through this
      capability's consumes block.
    tools:
    - name: get-course-progressions
      description: Get course progressions
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: kombo-unified-lms-api.getlmscourseprogressions
      with:
        X-Integration-Id: tools.X-Integration-Id
        cursor: tools.cursor
        page_size: tools.page_size
        updated_after: tools.updated_after
        include_deleted: tools.include_deleted
        ignore_unsupported_filters: tools.ignore_unsupported_filters
        ids: tools.ids
        remote_ids: tools.remote_ids
        user_ids: tools.user_ids
        course_ids: tools.course_ids
      outputParameters:
      - type: object
        mapping: $.
    - name: enroll-user-course
      description: Enroll user in course
      hints:
        readOnly: false
        destructive: false
        idempotent: false
      call: kombo-unified-lms-api.postlmscourseprogressions
      with:
        X-Integration-Id: tools.X-Integration-Id
        body: tools.body
      outputParameters:
      - type: object
        mapping: $.
    - name: complete-course
      description: Complete course
      hints:
        readOnly: false
        destructive: false
        idempotent: false
      call: kombo-unified-lms-api.postlmscourseprogressionscourseprogressionidcomplete
      with:
        X-Integration-Id: tools.X-Integration-Id
        course_progression_id: tools.course_progression_id
        body: tools.body
      outputParameters:
      - type: object
        mapping: $.
    - name: get-courses
      description: Get courses
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: kombo-unified-lms-api.getlmscourses
      with:
        X-Integration-Id: tools.X-Integration-Id
        cursor: tools.cursor
        page_size: tools.page_size
        updated_after: tools.updated_after
        include_deleted: tools.include_deleted
        ignore_unsupported_filters: tools.ignore_unsupported_filters
        ids: tools.ids
        remote_ids: tools.remote_ids
      outputParameters:
      - type: object
        mapping: $.
    - name: upsert-courses
      description: Upsert courses
      hints:
        readOnly: false
        destructive: false
        idempotent: false
      call: kombo-unified-lms-api.postlmscoursesbulk
      with:
        X-Integration-Id: tools.X-Integration-Id
        body: tools.body
      outputParameters:
      - type: object
        mapping: $.
    - name: get-status-upsert-courses-task
      description: Get status of “Upsert courses” task
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: kombo-unified-lms-api.getlmscoursesbulktaskid
      with:
        X-Integration-Id: tools.X-Integration-Id
        task_id: tools.task_id
      outputParameters:
      - type: object
        mapping: $.
    - name: deactivate-course
      description: Deactivate course
      hints:
        readOnly: false
        destructive: false
        idempotent: false
      call: kombo-unified-lms-api.postlmscoursescourseiddeactivate
      with:
        X-Integration-Id: tools.X-Integration-Id
        course_id: tools.course_id
        body: tools.body
      outputParameters:
      - type: object
        mapping: $.
    - name: get-skills
      description: Get skills
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: kombo-unified-lms-api.getlmsskills
      with:
        X-Integration-Id: tools.X-Integration-Id
        cursor: tools.cursor
        page_size: tools.page_size
        updated_after: tools.updated_after
        include_deleted: tools.include_deleted
        ignore_unsupported_filters: tools.ignore_unsupported_filters
        ids: tools.ids
        remote_ids: tools.remote_ids
      outputParameters:
      - type: object
        mapping: $.
    - name: get-users
      description: Get users
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: kombo-unified-lms-api.getlmsusers
      with:
        X-Integration-Id: tools.X-Integration-Id
        cursor: tools.cursor
        page_size: tools.page_size
        updated_after: tools.updated_after
        include_deleted: tools.include_deleted
        ignore_unsupported_filters: tools.ignore_unsupported_filters
        ids: tools.ids
        remote_ids: tools.remote_ids
        work_emails: tools.work_emails
      outputParameters:
      - type: object
        mapping: $.