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