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.
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
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: $.