openapi: 3.1.0
info:
title: Kombo AI Apply Unified LMS API API
version: 1.0.0
description: Endpoints for AI-powered job application features.
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: Unified LMS API
description: Unified endpoints to access all the LMS concepts you might need.
paths:
/lms/users:
get:
operationId: GetLmsUsers
summary: Get users
description: 'Get users
Retrieve all users from the LMS system. Users are learners who can enroll in and complete courses.
Top level filters use AND, while individual filters use OR if they accept multiple arguments. That means filters will be resolved like this: `(id IN ids) AND (remote_id IN remote_ids)`'
tags:
- Unified LMS API
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
- name: cursor
in: query
required: false
description: An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response.
schema:
$ref: '#/components/schemas/GetLmsUsersParameterCursor'
- name: page_size
in: query
required: false
description: The number of results to return per page. Maximum is 250.
schema:
$ref: '#/components/schemas/GetLmsUsersParameterPageSize'
- name: updated_after
in: query
required: false
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 has been updated since this timestamp, even if the record''s own `changed_at` field remains unchanged.
If you want to track entry deletion, also set the `include_deleted=true` query parameter, because otherwise, deleted entries will be hidden.
For more details, see [Understanding changed_at vs updated_after Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior).
For this endpoint, only changes to the returned record itself are considered.'
schema:
$ref: '#/components/schemas/GetLmsUsersParameterUpdatedAfter'
- name: include_deleted
in: query
required: false
description: By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted entries too.
schema:
$ref: '#/components/schemas/GetLmsUsersParameterIncludeDeleted'
- name: ignore_unsupported_filters
in: query
required: false
description: When set to `true`, filters targeting fields not supported by this integration will be ignored instead of filtering out all results.
schema:
$ref: '#/components/schemas/GetLmsUsersParameterIgnoreUnsupportedFilters'
- name: ids
in: query
required: false
description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`.
schema:
$ref: '#/components/schemas/GetLmsUsersParameterIds'
- name: remote_ids
in: query
required: false
description: Filter by a comma-separated list of remote IDs.
schema:
$ref: '#/components/schemas/GetLmsUsersParameterRemoteIds'
- name: work_emails
in: query
required: false
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.
schema:
$ref: '#/components/schemas/GetLmsUsersParameterWorkEmails'
responses:
'200':
description: GET /lms/users Positive response
content:
application/json:
schema:
$ref: '#/components/schemas/GetLmsUsersPositiveResponse'
examples:
example1:
value:
status: success
data:
next: eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0=
results:
- id: 26vafvWSRmbhNcxJYqjCzuJg
remote_id: '32'
first_name: Sarah
last_name: Johnson
work_email: sarah.johnson@example.com
status: ACTIVE
remote_created_at: '2022-08-07T14:01:29.196Z'
remote_deleted_at: null
changed_at: '2022-08-07T14:01:29.196Z'
remote_data: null
custom_fields: null
integration_fields: []
default:
$ref: '#/components/responses/ErrorResponseGeneral'
/lms/course-progressions:
get:
operationId: GetLmsCourseProgressions
summary: Get course progressions
description: 'Get course progressions
Retrieve all course progressions from the LMS system. Course progressions track users enrollment and completion status in courses.
Top level filters use AND, while individual filters use OR if they accept multiple arguments. That means filters will be resolved like this: `(id IN ids) AND (remote_id IN remote_ids)`'
tags:
- Unified LMS API
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
- name: cursor
in: query
required: false
description: An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response.
schema:
$ref: '#/components/schemas/GetLmsCourseProgressionsParameterCursor'
- name: page_size
in: query
required: false
description: The number of results to return per page. Maximum is 250.
schema:
$ref: '#/components/schemas/GetLmsCourseProgressionsParameterPageSize'
- name: updated_after
in: query
required: false
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 has been updated since this timestamp, even if the record''s own `changed_at` field remains unchanged.
If you want to track entry deletion, also set the `include_deleted=true` query parameter, because otherwise, deleted entries will be hidden.
For more details, see [Understanding changed_at vs updated_after Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior).
For this endpoint, `updated_after` matches when the returned record changed, or when related data changed as described below.
| Path | Added/Removed | Linked Record |
| --- | --- | --- |
| `user` | ✗ No | ✗ No |
| `course_revision` | ✗ No | ✗ No |
_**Added/Removed**: Whether adding or removing entries from this list triggers an update (n/a for single records). **Linked Record**: Whether changes to the linked record itself trigger an update._'
schema:
$ref: '#/components/schemas/GetLmsCourseProgressionsParameterUpdatedAfter'
- name: include_deleted
in: query
required: false
description: By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted entries too.
schema:
$ref: '#/components/schemas/GetLmsCourseProgressionsParameterIncludeDeleted'
- name: ignore_unsupported_filters
in: query
required: false
description: When set to `true`, filters targeting fields not supported by this integration will be ignored instead of filtering out all results.
schema:
$ref: '#/components/schemas/GetLmsCourseProgressionsParameterIgnoreUnsupportedFilters'
- name: ids
in: query
required: false
description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`.
schema:
$ref: '#/components/schemas/GetLmsCourseProgressionsParameterIds'
- name: remote_ids
in: query
required: false
description: Filter by a comma-separated list of remote IDs.
schema:
$ref: '#/components/schemas/GetLmsCourseProgressionsParameterRemoteIds'
- name: user_ids
in: query
required: false
description: Filter by a comma-separated list of user IDs. We will only return progressions that are related to _any_ of the users.
schema:
$ref: '#/components/schemas/GetLmsCourseProgressionsParameterUserIds'
- name: course_ids
in: query
required: false
description: Filter by a comma-separated list of course IDs. We will only return progressions for revisions that belong to _any_ of the courses.
schema:
$ref: '#/components/schemas/GetLmsCourseProgressionsParameterCourseIds'
responses:
'200':
description: GET /lms/course-progressions Positive response
content:
application/json:
schema:
$ref: '#/components/schemas/GetLmsCourseProgressionsPositiveResponse'
examples:
example1:
value:
status: success
data:
next: eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0=
results:
- 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'
default:
$ref: '#/components/responses/ErrorResponseGeneral'
post:
operationId: PostLmsCourseProgressions
summary: Enroll user in course
description: "Enroll a user in a course revision.\n\n\n This endpoint requires the permission **Create and manage course progressions** to be enabled in [your scope config](/scopes).\n\n\n### Example Request Body\n\n```json\n{\n \"user_id\": \"7xPdr68N8kG9EzLwjsN9xyz\",\n \"course_revision_id\": \"3KMdr68N8kG9EzLwjsN9aoz\"\n}\n```"
tags:
- Unified LMS API
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'
/lms/course-progressions/{course_progression_id}/complete:
post:
operationId: PostLmsCourseProgressionsCourseProgressionIdComplete
summary: Complete course
description: "Mark a course revision as completed for a user.\n\n\n This endpoint requires the permission **Create and manage course progressions** to be enabled in [your scope config](/scopes).\n\n\n### Example Request Body\n\n```json\n{\n \"completed_at\": \"2024-04-15\",\n \"score\": 93\n}\n```"
tags:
- Unified LMS API
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
- name: course_progression_id
in: path
required: true
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`)
schema:
$ref: '#/components/schemas/PostLmsCourseProgressionsCourseProgressionIdCompleteParameterCourseProgressionId'
examples:
example1:
value: 26vafvWSRmbhNcxJYqjCzuJg
requestBody:
description: POST /lms/course-progressions/:course_progression_id/complete Request body
content:
application/json:
schema:
$ref: '#/components/schemas/PostLmsCourseProgressionsCourseProgressionIdCompleteRequestBody'
examples:
example1:
value:
completed_at: '2024-04-15'
score: 93
responses:
'200':
description: POST /lms/course-progressions/:course_progression_id/complete Positive response
content:
application/json:
schema:
$ref: '#/components/schemas/PostLmsCourseProgressionsCourseProgressionIdCompletePositiveResponse'
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'
/lms/courses:
get:
operationId: GetLmsCourses
summary: Get courses
description: 'Get courses
Retrieve all courses available in the LMS. Courses are structured learning programs that users can enroll in and complete.
Top level filters use AND, while individual filters use OR if they accept multiple arguments. That means filters will be resolved like this: `(id IN ids) AND (remote_id IN remote_ids)`'
tags:
- Unified LMS API
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
- name: cursor
in: query
required: false
description: An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response.
schema:
$ref: '#/components/schemas/GetLmsCoursesParameterCursor'
- name: page_size
in: query
required: false
description: The number of results to return per page. Maximum is 250.
schema:
$ref: '#/components/schemas/GetLmsCoursesParameterPageSize'
- name: updated_after
in: query
required: false
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 has been updated since this timestamp, even if the record''s own `changed_at` field remains unchanged.
If you want to track entry deletion, also set the `include_deleted=true` query parameter, because otherwise, deleted entries will be hidden.
For more details, see [Understanding changed_at vs updated_after Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior).
For this endpoint, `updated_after` matches when the returned record changed, or when related data changed as described below.
| Path | Added/Removed | Linked Record |
| --- | --- | --- |
| `provider` | ✗ No | ✗ No |
| `revisions` | ✓ Yes | ✓ Yes |
| `revisions` → `skill_assignments` | ✗ No | ✗ No |
_**Added/Removed**: Whether adding or removing entries from this list triggers an update (n/a for single records). **Linked Record**: Whether changes to the linked record itself trigger an update._'
schema:
$ref: '#/components/schemas/GetLmsCoursesParameterUpdatedAfter'
- name: include_deleted
in: query
required: false
description: By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted entries too.
schema:
$ref: '#/components/schemas/GetLmsCoursesParameterIncludeDeleted'
- name: ignore_unsupported_filters
in: query
required: false
description: When set to `true`, filters targeting fields not supported by this integration will be ignored instead of filtering out all results.
schema:
$ref: '#/components/schemas/GetLmsCoursesParameterIgnoreUnsupportedFilters'
- name: ids
in: query
required: false
description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`.
schema:
$ref: '#/components/schemas/GetLmsCoursesParameterIds'
- name: remote_ids
in: query
required: false
description: Filter by a comma-separated list of remote IDs.
schema:
$ref: '#/components/schemas/GetLmsCoursesParameterRemoteIds'
responses:
'200':
description: GET /lms/courses Positive response
content:
application/json:
schema:
$ref: '#/components/schemas/GetLmsCoursesPositiveResponse'
examples:
example1:
value:
status: success
data:
next: eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0=
results:
- id: 26vafvWSRmbhNcxJYqjCzuJg
remote_id: '32'
provider_id: 7xPdr68N8kG9EzLwjsN9xyz
origin_id: course-123
remote_created_at: '2022-08-07T14:01:29.196Z'
remote_deleted_at: null
changed_at: '2022-08-07T14:01:29.196Z'
remote_data: null
custom_fields: null
integration_fields: []
provider:
id: 7xPdr68N8kG9EzLwjsN9xyz
remote_id: provider-12345
name: Kombo Academy
revisions:
- id: 3KMdr68N8kG9EzLwjsN9aoz
remote_id: revision-12345
course_id: 26vafvWSRmbhNcxJYqjCzuJg
title: Building LMS integrations with Kombo
description: Learn how to build and integrate Learning Management System (LMS) integrations with Kombo. This course covers the unified LMS API, course management, user enrollment, progress tracking, and best practices for building robust LMS connectors.
remote_url: https://learning.acme.com/courses/building-integrations/v1
status: ACTIVE
remote_created_at: '2022-08-07T14:01:29.196Z'
remote_deleted_at: null
changed_at: '2022-08-07T14:01:29.196Z'
remote_data: null
custom_fields: null
integration_fields: []
skill_assignments:
- skill:
id: 4EeSSSd9Fr8iiW9mPKmjEVWK
remote_id: skill-123
name: LMS Integration
default:
$ref: '#/components/responses/ErrorResponseGeneral'
/lms/courses/bulk:
post:
operationId: PostLmsCoursesBulk
summary: Upsert courses
description: "Create or update multiple courses in the LMS.\n\n\n **Note:** This endpoint is asynchronous – it returns a `task_id` immediately and processes the request in the background. Use the corresponding `GET` endpoint to poll for the task status until it reaches `COMPLETED` or `FAILED`. Learn more in our [async endpoints guide](/lms/guides/async-endpoints).\n\n\n\n This endpoint requires the permission **Upsert courses** to be enabled in [your scope config](/scopes).\n\n\n### Example Request Body\n\n```json\n{\n \"items\": [\n {\n \"origin_id\": \"course-1\",\n \"course\": {\n \"type\": \"EXTERNAL\",\n \"title\": \"Building LMS integrations with Kombo\",\n \"description\": \"Learn how to build and integrate Learning Management System (LMS) integrations with Kombo. This course covers the unified LMS API, course management, user enrollment, progress tracking, and best practices for building robust LMS connectors.\",\n \"course_url\": \"https://docs.kombo.dev/lms/introduction\",\n \"thumbnail_url\": \"https://kombo.dev/images/courses/lms-integrations-thumbnail.png\",\n \"duration\": 45,\n \"languages\": [\n \"en\",\n \"de-CH\"\n ]\n }\n },\n {\n \"origin_id\": \"course-2\",\n \"course\": {\n \"type\": \"EXTERNAL\",\n \"title\": \"Introduction to TypeScript\",\n \"description\": \"Learn one of the most popular programming languages of the recent years quickly and efficiently. Results guaranteed!\",\n \"course_url\": \"https://example.com\",\n \"thumbnail_url\": \"https://example.com/images/thumbnail.jpg\",\n \"duration\": 60,\n \"languages\": [\n \"en-US\",\n \"pl-PL\"\n ]\n }\n }\n ]\n}\n```"
tags:
- Unified LMS API
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/courses/bulk Request body
content:
application/json:
schema:
$ref: '#/components/schemas/PostLmsCoursesBulkRequestBody'
examples:
example1:
value:
items:
- origin_id: course-1
course:
type: EXTERNAL
title: Building LMS integrations with Kombo
description: Learn how to build and integrate Learning Management System (LMS) integrations with Kombo. This course covers the unified LMS API, course management, user enrollment, progress tracking, and best practices for building robust LMS connectors.
course_url: https://docs.kombo.dev/lms/introduction
thumbnail_url: https://kombo.dev/images/courses/lms-integrations-thumbnail.png
duration: 45
languages:
- en
- de-CH
- origin_id: course-2
course:
type: EXTERNAL
title: Introduction to TypeScript
description: Learn one of the most popular programming languages of the recent years quickly and efficiently. Results guaranteed!
course_url: https://example.com
thumbnail_url: https://example.com/images/thumbnail.jpg
duration: 60
languages:
- en-US
- pl-PL
responses:
'200':
description: POST /lms/courses/bulk Positive response
content:
application/json:
schema:
$ref: '#/components/schemas/PostLmsCoursesBulkPositiveResponse'
default:
$ref: '#/components/responses/ErrorResponseGeneral'
/lms/courses/bulk/{task_id}:
get:
operationId: GetLmsCoursesBulkTaskId
summary: Get status of “Upsert courses” task
description: "Poll for the status of an existing “Upsert courses” task.\n\n\nThis endpoint returns the current status of a task. Poll it at regular intervals until the task reaches a terminal status. Learn more in our [async endpoints guide](/lms/guides/async-endpoints). The possible statuses are:\n - `PENDING` – The task is still being processed.\n - `COMPLETED` – The task finished successfully. The `data` field contains the results.\n - `FAILED` – The task encountered an error. Check the `error` field for details.\n"
tags:
- Unified LMS API
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
- name: task_id
in: path
required: true
description: GET /lms/courses/bulk/:task_id Parameter
schema:
$ref: '#/components/schemas/GetLmsCoursesBulkTaskIdParameterTaskId'
responses:
'200':
description: GET /lms/courses/bulk/:task_id Positive response
content:
application/json:
schema:
$ref: '#/components/schemas/GetLmsCoursesBulkTaskIdPositiveResponse'
default:
$ref: '#/components/responses/ErrorResponseGeneral'
/lms/courses/{course_id}/deactivate:
post:
operationId: PostLmsCoursesCourseIdDeactivate
summary: Deactivate course
description: "Deactivate a course in the LMS.\n\nDeactivates a course, making it unavailable for new enrollments while preserving existing progress records.\n\n\n This endpoint requires the permission **Upsert courses** to be enabled in [your scope config](/scopes).\n"
tags:
- Unified LMS API
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
- name: course_id
in: path
required: true
description: The ID of the course in Kombo or its ID in the remote system by prefixing it with `remote:` (e.g., `remote:12312`)
schema:
$ref: '#/components/schemas/PostLmsCoursesCourseIdDeactivateParameterCourseId'
examples:
example1:
value: 26vafvWSRmbhNcxJYqjCzuJg
requestBody:
description: POST /lms/courses/:course_id/deactivate Request body
content:
application/json:
schema:
$ref: '#/components/schemas/PostLmsCoursesCourseIdDeactivateRequestBody'
examples:
example1:
value: {}
responses:
'200':
description: POST /lms/courses/:course_id/deactivate Positive response
content:
application/json:
schema:
$ref: '#/components/schemas/PostLmsCoursesCourseIdDeactivatePositiveResponse'
examples:
example1:
value:
status: success
data:
id: 26vafvWSRmbhNcxJYqjCzuJg
remote_id: '32'
provider_id: 7xPdr68N8kG9EzLwjsN9xyz
origin_id: course-123
remote_created_at: '2022-08-07T14:01:29.196Z'
remote_deleted_at: null
changed_at: '2022-08-07T14:01:29.196Z'
remote_data: null
custom_fields: null
integration_fields: []
provider:
id: 7xPdr68N8kG9EzLwjsN9xyz
remote_id: provider-12345
name: Kombo Academy
revisions:
- id: 3KMdr68N8kG9EzLwjsN9aoz
remote_id: revision-12345
course_id: 26vafvWSRmbhNcxJYqjCzuJg
title: Building LMS integrations with Kombo
description: Learn how to build and integrate Learning Management System (LMS) integrations with Kombo. This course covers the unified LMS API, course management, user enrollment, progress tracking, and best practices for building robust LMS connectors.
remote_url: https://learning.acme.com/courses/building-integrations/v1
status: ACTIVE
remote_created_at: '2022-08-07T14:01:29.196Z'
remote_deleted_at: null
changed_at: '2022-08-07T14:01:29.196Z'
remote_data: null
custom_fields: null
integration_fields: []
skill_assignments:
- skill:
id: 4EeSSSd9Fr8iiW9mPKmjEVWK
remote_id: skill-123
name: LMS Integration
warnings:
- message: This is an example warning!
default:
$ref: '#/components/responses/ErrorResponseGeneral'
/lms/skills:
get:
operationId: GetLmsSkills
summary: Get skills
description: 'Get skills
Retrieve all skills available in the LMS system. Skills represent competencies or abilities that users can acquire or demonstrate through courses.
Top level filters use AND, while individual filters use OR if they accept multiple arguments. That means filters will be resolved like this: `(id IN ids) AND (remote_id IN remote_ids)`'
tags:
- Unified LMS API
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
- name: cursor
in: query
required: false
description: An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response.
schema:
$ref: '#/components/schemas/GetLmsSkillsParameterCursor'
- name: page_size
in: query
required: false
description: The number of results to return per page. Maximum is 250.
schema:
$ref: '#/components/schemas/GetLmsSkillsParameterPageSize'
- name: updated_after
in: query
required: false
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 has been updated since this timestamp, even if the record''s own `changed_at` field remains unchanged.
If you want to track entry deletion, also set the `include_deleted=true` query parameter, because otherwise, deleted entries will be hidden.
For more details, see [Understanding changed_at vs updated_after Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior).
For this endpoint, only changes to the returned record itself are considered.'
schema:
$ref: '#/components/schemas/GetLmsSkillsParameterUpdatedAfter'
- name: include_deleted
in: query
required: false
description: By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted entries too.
schema:
$ref: '#/components/schemas/GetLmsSkillsParameterIncludeDeleted'
- name: ignore_unsupported_filters
in: query
required: false
description: When set to `true`, filters targeting fields not supported by this integration will be ignored instead of filtering out all results.
schema:
$ref: '#/components/schemas/GetLmsSkillsParameterIgnoreUnsupportedFilters'
- name: ids
in: query
required: false
description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`.
schema:
$ref: '#/components/schemas/GetLmsSkillsParameterIds'
- name: remote_ids
in: query
required: false
description: Filter by a comma-separated list of remote IDs.
schema:
$ref: '#/components/schemas/GetLmsSkillsParameterRemoteIds'
responses:
'200':
description: GET /lms/skills Positive response
content:
application/json:
schema:
$ref: '#/components/schemas/GetLmsSkillsPositiveResponse'
examples:
example1:
value:
status: success
data:
next: eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0=
results:
- id: 26vafvWSRmbhNcxJYqjCzuJg
remote_id: skill-12345
name: LMS Integration
remote_created_at: '2022-08-07T14:01:29.196Z'
remote_deleted_at: null
changed_at: '2022-08-07T14:01:29.196Z'
remote_data: null
custom_fields: null
integration_fields: []
default:
$ref: '#/components/responses/ErrorResponseGeneral'
components:
schemas:
GetLmsCoursesParameterIgnoreUnsupportedFilters:
type: string
enum:
- 'true'
- 'false'
default: 'false'
description: When set to `true`, filters targeting fields not supported by this integration will be ignored instead of filtering out all results.
GetLmsCourseProgressionsParameterCursor:
type: string
description: An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response.
GetLmsCoursesBulkTaskIdPositiveResponse:
type: object
properties:
status:
type: string
const: success
data:
discriminator:
propertyName: status
anyOf:
- type: object
properties:
task_id:
type: string
created_at:
type: string
description: An ISO 8601 timestamp of when the task was created.
status:
type: string
const: PENDING
description: Indicates the task is still being processed.
completed_at:
type: 'null'
description: Always `null` while the task is pending.
required:
- task_id
- created_at
- status
- completed_at
- type: object
properties:
task_id:
type: string
created_at:
type: string
description: An ISO 8601 timestamp of when the task was created.
status:
type: string
const: COMPLETED
description: Indicates the task has finished successfully.
data:
type: array
items:
discriminator:
propertyName: status
anyOf:
- type: object
properties:
origin_id:
type: string
description: A unique identifier for this item in the batch, used to correlate results.
status:
type: string
const: SUCCEEDED
data:
type: object
properties:
id:
type: string
description: The Kombo ID of the course.
required:
- id
required:
- origin_id
- status
- data
- type: object
properties:
origin_id:
type: string
description: A unique identifier for this item in the batch, used to correlate results.
status:
type: string
const: FAILED
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
- INTEGRATION.PERMISSION_MISSING
- INTEGRATION.AUTHENTICATION_INVALID
- INTEGRATION.QA_FAILED
- INTEGRATION.SETUP_SYNC_PENDING
- INTEGRATION.SETUP_INCOMPLETE
- INTEGRATION.INACTIVE
- INTEGRATION.MODEL_NOT_AVAILABLE
- INTEGRATION.MODEL_DISABLED
- INTEGRATION.ACTION_NOT_AVAILABLE
- INTEGRATION.ACTION_DISABLED
- REMOTE.SERVICE_UNAVAILABLE
- REMOTE.RATE_LIMIT_EXCEEDED
- REMOTE.INPUT_INVALID
- REMOTE.UNKNOWN_HTTP_ERROR
- HRIS.EMPLOYEE_ALREADY_EXISTS
- ATS.JOB_CLOSED
- ATS.APPLICATION_ALREADY_EXISTS
- LMS.COURSE_UPDATE_NOT_SUPPORTED
- AI_APPLY.JOB_FEED_IMPORT_ALREADY_RUNNING
- AI_APPLY.JOB_FEED_IMPORT_TIMED_OUT
title:
type:
- string
- 'null'
message:
type: string
log_url:
type:
- string
- 'null'
required:
- code
- title
- message
- log_url
required:
- origin_id
- status
- error
description: The results of the completed task, containing one entry per item in the original request.
completed_at:
description: An ISO 8601 timestamp of when the task was completed.
type: string
format: date-time
externalDocs:
url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
required:
- task_id
- created_at
- status
- data
- completed_at
- type: object
properties:
task_id:
type: string
created_at:
type: string
description: An ISO 8601 timestamp of when the task was created.
status:
type: string
const: FAILED
description: Indicates the task failed before it could process all items.
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
- INTEGRATION.PERMISSION_MISSING
- INTEGRATION.AUTHENTICATION_INVALID
- INTEGRATION.QA_FAILED
- INTEGRATION.SETUP_SYNC_PENDING
- INTEGRATION.SETUP_INCOMPLETE
- INTEGRATION.INACTIVE
- INTEGRATION.MODEL_NOT_AVAILABLE
- INTEGRATION.MODEL_DISABLED
- INTEGRATION.ACTION_NOT_AVAILABLE
- INTEGRATION.ACTION_DISABLED
- REMOTE.SERVICE_UNAVAILABLE
- REMOTE.RATE_LIMIT_EXCEEDED
- REMOTE.INPUT_INVALID
- REMOTE.UNKNOWN_HTTP_ERROR
- HRIS.EMPLOYEE_ALREADY_EXISTS
- ATS.JOB_CLOSED
- ATS.APPLICATION_ALREADY_EXISTS
- LMS.COURSE_UPDATE_NOT_SUPPORTED
- AI_APPLY.JOB_FEED_IMPORT_ALREADY_RUNNING
- AI_APPLY.JOB_FEED_IMPORT_TIMED_OUT
title:
type:
- string
- 'null'
message:
type: string
log_url:
type:
- string
- 'null'
required:
- code
- title
- message
- log_url
description: Details about why the task failed.
completed_at:
description: An ISO 8601 timestamp of when the task failed.
type: string
format: date-time
externalDocs:
url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
required:
- task_id
- created_at
- status
- error
- completed_at
required:
- status
- data
GetLmsCoursesParameterIncludeDeleted:
type: string
enum:
- 'true'
- 'false'
default: 'false'
description: By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted entries too.
GetLmsCoursesBulkTaskIdParameterTaskId:
type: string
GetLmsCoursesParameterIds:
type: string
description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`.
GetLmsSkillsParameterIncludeDeleted:
type: string
enum:
- 'true'
- 'false'
default: 'false'
description: By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted entries too.
PostLmsCoursesCourseIdDeactivatePositiveResponse:
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.
provider_id:
type:
- string
- 'null'
description: The Kombo ID of the course provider of this course, if applicable.
origin_id:
type:
- string
- 'null'
description: A stable identifier you provided when creating this course. Can be used to identify and update the course in subsequent requests.
remote_created_at:
description: The date and time the object was created in the remote system.
type:
- string
- 'null'
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
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_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.'
custom_fields:
type:
- object
- 'null'
additionalProperties: true
description: A key-value store of fields not covered by the schema. [Read more](/custom-fields)
integration_fields:
type: array
items:
type: object
properties:
id:
type: string
description: The globally unique ID of this object.
key:
type: string
description: The key of the field in the remote system.
type:
type: string
enum:
- DEFAULT
- CUSTOM
description: '- `DEFAULT`: static fields in the remote system.
- `CUSTOM`: fields that are created/editable by the user.'
value:
type: 'null'
description: The field's value.
label:
type:
- string
- 'null'
description: The label of the field. (not always available)
required:
- id
- key
- type
- label
description: An array of selected passthrough integration fields. [Read more](/integration-fields)
examples:
- - id: 5NVFhMpB9Ah6by44tzNjZLyE
key: firstName
type: DEFAULT
value: Frank
label: First Name
- id: 8nuajYpoRd5GnxEQaaWKUDYQ
key: customTshirtSize
type: CUSTOM
value: XL
label: T-Shirt Size
provider:
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.
name:
type:
- string
- 'null'
description: The name of the provider.
required:
- id
- remote_id
- name
examples:
- id: 26vafvWSRmbhNcxJYqjCzuJg
remote_id: provider-12345
name: Kombo Academy
revisions:
type: array
items:
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.
course_id:
type:
- string
- 'null'
description: The Kombo ID of the course this revision belongs to. The ID can be used to retrieve the course from the `get courses` endpoint.
title:
type:
- string
- 'null'
description: The title of the course revision.
description:
type:
- string
- 'null'
description: A description of the course revision.
remote_url:
type:
- string
- 'null'
description: URL to the course overview page within the LMS itself.
status:
type:
- string
- 'null'
enum:
- ACTIVE
- INACTIVE
description: The status of this revision (ACTIVE or INACTIVE).
remote_created_at:
description: The date and time the object was created in the remote system.
type:
- string
- 'null'
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
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_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.'
custom_fields:
type:
- object
- 'null'
additionalProperties: true
description: A key-value store of fields not covered by the schema. [Read more](/custom-fields)
integration_fields:
type: array
items:
type: object
properties:
id:
type: string
description: The globally unique ID of this object.
key:
type: string
description: The key of the field in the remote system.
type:
type: string
enum:
- DEFAULT
- CUSTOM
description: '- `DEFAULT`: static fields in the remote system.
- `CUSTOM`: fields that are created/editable by the user.'
value:
type: 'null'
description: The field's value.
label:
type:
- string
- 'null'
description: The label of the field. (not always available)
required:
- id
- key
- type
- label
description: An array of selected passthrough integration fields. [Read more](/integration-fields)
examples:
- - id: 5NVFhMpB9Ah6by44tzNjZLyE
key: firstName
type: DEFAULT
value: Frank
label: First Name
- id: 8nuajYpoRd5GnxEQaaWKUDYQ
key: customTshirtSize
type: CUSTOM
value: XL
label: T-Shirt Size
skill_assignments:
type: array
items:
type: object
properties:
skill:
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
- 'null'
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.
name:
type:
- string
- 'null'
description: The name of the skill.
required:
- id
- remote_id
- name
examples:
- id: 26vafvWSRmbhNcxJYqjCzuJg
remote_id: skill-12345
name: LMS Integration
required:
- skill
required:
- id
- remote_id
- course_id
- title
- description
- remote_url
- status
- remote_created_at
- remote_deleted_at
- changed_at
- remote_data
- custom_fields
- integration_fields
- skill_assignments
examples:
- id: 3KMdr68N8kG9EzLwjsN9aoz
remote_id: revision-12345
course_id: 26vafvWSRmbhNcxJYqjCzuJg
title: Building LMS integrations with Kombo
description: Learn how to build and integrate Learning Management System (LMS) integrations with Kombo. This course covers the unified LMS API, course management, user enrollment, progress tracking, and best practices for building robust LMS connectors.
remote_url: https://learning.acme.com/courses/building-integrations/v1
status: ACTIVE
remote_created_at: '2022-08-07T14:01:29.196Z'
remote_deleted_at: null
changed_at: '2022-08-07T14:01:29.196Z'
remote_data: null
custom_fields: null
integration_fields: []
skill_assignments:
- skill:
id: 4EeSSSd9Fr8iiW9mPKmjEVWK
remote_id: skill-123
name: LMS Integration
required:
- id
- remote_id
- provider_id
- origin_id
- remote_created_at
- remote_deleted_at
- changed_at
- remote_data
- custom_fields
- integration_fields
- provider
- revisions
examples:
- id: 26vafvWSRmbhNcxJYqjCzuJg
remote_id: '32'
provider_id: 7xPdr68N8kG9EzLwjsN9xyz
origin_id: course-123
remote_created_at: '2022-08-07T14:01:29.196Z'
remote_deleted_at: null
changed_at: '2022-08-07T14:01:29.196Z'
remote_data: null
custom_fields: null
integration_fields: []
provider:
id: 7xPdr68N8kG9EzLwjsN9xyz
remote_id: provider-12345
name: Kombo Academy
revisions:
- id: 3KMdr68N8kG9EzLwjsN9aoz
remote_id: revision-12345
course_id: 26vafvWSRmbhNcxJYqjCzuJg
title: Building LMS integrations with Kombo
description: Learn how to build and integrate Learning Management System (LMS) integrations with Kombo. This course covers the unified LMS API, course management, user enrollment, progress tracking, and best practices for building robust LMS connectors.
remote_url: https://learning.acme.com/courses/building-integrations/v1
status: ACTIVE
remote_created_at: '2022-08-07T14:01:29.196Z'
remote_deleted_at: null
changed_at: '2022-08-07T14:01:29.196Z'
remote_data: null
custom_fields: null
integration_fields: []
skill_assignments:
- skill:
id: 4EeSSSd9Fr8iiW9mPKmjEVWK
remote_id: skill-123
name: LMS Integration
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
GetLmsSkillsParameterUpdatedAfter:
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 has been updated since this timestamp, even if the record''s own `changed_at` field remains unchanged.
If you want to track entry deletion, also set the `include_deleted=true` query parameter, because otherwise, deleted entries will be hidden.
For more details, see [Understanding changed_at vs updated_after Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior).
For this endpoint, only changes to the returned record itself are considered.'
type: string
format: date-time
pattern: ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$
externalDocs:
url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
GetLmsCoursesPositiveResponse:
type: object
properties:
status:
type: string
const: success
data:
type: object
properties:
next:
type:
- string
- 'null'
description: Cursor string that can be passed to the `cursor` query parameter to get the next page. If this is `null`, then there are no more pages.
results:
type: array
items:
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.
provider_id:
type:
- string
- 'null'
description: The Kombo ID of the course provider of this course, if applicable.
origin_id:
type:
- string
- 'null'
description: A stable identifier you provided when creating this course. Can be used to identify and update the course in subsequent requests.
remote_created_at:
description: The date and time the object was created in the remote system.
type:
- string
- 'null'
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
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_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.'
custom_fields:
type:
- object
- 'null'
additionalProperties: true
description: A key-value store of fields not covered by the schema. [Read more](/custom-fields)
integration_fields:
type: array
items:
type: object
properties:
id:
type: string
description: The globally unique ID of this object.
key:
type: string
description: The key of the field in the remote system.
type:
type: string
enum:
- DEFAULT
- CUSTOM
description: '- `DEFAULT`: static fields in the remote system.
- `CUSTOM`: fields that are created/editable by the user.'
value:
type: 'null'
description: The field's value.
label:
type:
- string
- 'null'
description: The label of the field. (not always available)
required:
- id
- key
- type
- label
description: An array of selected passthrough integration fields. [Read more](/integration-fields)
examples:
- - id: 5NVFhMpB9Ah6by44tzNjZLyE
key: firstName
type: DEFAULT
value: Frank
label: First Name
- id: 8nuajYpoRd5GnxEQaaWKUDYQ
key: customTshirtSize
type: CUSTOM
value: XL
label: T-Shirt Size
provider:
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.
name:
type:
- string
- 'null'
description: The name of the provider.
required:
- id
- remote_id
- name
examples:
- id: 26vafvWSRmbhNcxJYqjCzuJg
remote_id: provider-12345
name: Kombo Academy
revisions:
type: array
items:
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.
course_id:
type:
- string
- 'null'
description: The Kombo ID of the course this revision belongs to. The ID can be used to retrieve the course from the `get courses` endpoint.
title:
type:
- string
- 'null'
description: The title of the course revision.
description:
type:
- string
- 'null'
description: A description of the course revision.
remote_url:
type:
- string
- 'null'
description: URL to the course overview page within the LMS itself.
status:
type:
- string
- 'null'
enum:
- ACTIVE
- INACTIVE
description: The status of this revision (ACTIVE or INACTIVE).
remote_created_at:
description: The date and time the object was created in the remote system.
type:
- string
- 'null'
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
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_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.'
custom_fields:
type:
- object
- 'null'
additionalProperties: true
description: A key-value store of fields not covered by the schema. [Read more](/custom-fields)
integration_fields:
type: array
items:
type: object
properties:
id:
type: string
description: The globally unique ID of this object.
key:
type: string
description: The key of the field in the remote system.
type:
type: string
enum:
- DEFAULT
- CUSTOM
description: '- `DEFAULT`: static fields in the remote system.
- `CUSTOM`: fields that are created/editable by the user.'
value:
type: 'null'
description: The field's value.
label:
type:
- string
- 'null'
description: The label of the field. (not always available)
required:
- id
- key
- type
- label
description: An array of selected passthrough integration fields. [Read more](/integration-fields)
examples:
- - id: 5NVFhMpB9Ah6by44tzNjZLyE
key: firstName
type: DEFAULT
value: Frank
label: First Name
- id: 8nuajYpoRd5GnxEQaaWKUDYQ
key: customTshirtSize
type: CUSTOM
value: XL
label: T-Shirt Size
skill_assignments:
type: array
items:
type: object
properties:
skill:
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
- 'null'
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.
name:
type:
- string
- 'null'
description: The name of the skill.
required:
- id
- remote_id
- name
examples:
- id: 26vafvWSRmbhNcxJYqjCzuJg
remote_id: skill-12345
name: LMS Integration
required:
- skill
required:
- id
- remote_id
- course_id
- title
- description
- remote_url
- status
- remote_created_at
- remote_deleted_at
- changed_at
- remote_data
- custom_fields
- integration_fields
- skill_assignments
examples:
- id: 3KMdr68N8kG9EzLwjsN9aoz
remote_id: revision-12345
course_id: 26vafvWSRmbhNcxJYqjCzuJg
title: Building LMS integrations with Kombo
description: Learn how to build and integrate Learning Management System (LMS) integrations with Kombo. This course covers the unified LMS API, course management, user enrollment, progress tracking, and best practices for building robust LMS connectors.
remote_url: https://learning.acme.com/courses/building-integrations/v1
status: ACTIVE
remote_created_at: '2022-08-07T14:01:29.196Z'
remote_deleted_at: null
changed_at: '2022-08-07T14:01:29.196Z'
remote_data: null
custom_fields: null
integration_fields: []
skill_assignments:
- skill:
id: 4EeSSSd9Fr8iiW9mPKmjEVWK
remote_id: skill-123
name: LMS Integration
required:
- id
- remote_id
- provider_id
- origin_id
- remote_created_at
- remote_deleted_at
- changed_at
- remote_data
- custom_fields
- integration_fields
- provider
- revisions
examples:
- id: 26vafvWSRmbhNcxJYqjCzuJg
remote_id: '32'
provider_id: 7xPdr68N8kG9EzLwjsN9xyz
origin_id: course-123
remote_created_at: '2022-08-07T14:01:29.196Z'
remote_deleted_at: null
changed_at: '2022-08-07T14:01:29.196Z'
remote_data: null
custom_fields: null
integration_fields: []
provider:
id: 7xPdr68N8kG9EzLwjsN9xyz
remote_id: provider-12345
name: Kombo Academy
revisions:
- id: 3KMdr68N8kG9EzLwjsN9aoz
remote_id: revision-12345
course_id: 26vafvWSRmbhNcxJYqjCzuJg
title: Building LMS integrations with Kombo
description: Learn how to build and integrate Learning Management System (LMS) integrations with Kombo. This course covers the unified LMS API, course management, user enrollment, progress tracking, and best practices for building robust LMS connectors.
remote_url: https://learning.acme.com/courses/building-integrations/v1
status: ACTIVE
remote_created_at: '2022-08-07T14:01:29.196Z'
remote_deleted_at: null
changed_at: '2022-08-07T14:01:29.196Z'
remote_data: null
custom_fields: null
integration_fields: []
skill_assignments:
- skill:
id: 4EeSSSd9Fr8iiW9mPKmjEVWK
remote_id: skill-123
name: LMS Integration
required:
- next
- results
examples:
- next: eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0=
results:
- id: 26vafvWSRmbhNcxJYqjCzuJg
remote_id: '32'
provider_id: 7xPdr68N8kG9EzLwjsN9xyz
origin_id: course-123
remote_created_at: '2022-08-07T14:01:29.196Z'
remote_deleted_at: null
changed_at: '2022-08-07T14:01:29.196Z'
remote_data: null
custom_fields: null
integration_fields: []
provider:
id: 7xPdr68N8kG9EzLwjsN9xyz
remote_id: provider-12345
name: Kombo Academy
revisions:
- id: 3KMdr68N8kG9EzLwjsN9aoz
remote_id: revision-12345
course_id: 26vafvWSRmbhNcxJYqjCzuJg
title: Building LMS integrations with Kombo
description: Learn how to build and integrate Learning Management System (LMS) integrations with Kombo. This course covers the unified LMS API, course management, user enrollment, progress tracking, and best practices for building robust LMS connectors.
remote_url: https://learning.acme.com/courses/building-integrations/v1
status: ACTIVE
remote_created_at: '2022-08-07T14:01:29.196Z'
remote_deleted_at: null
changed_at: '2022-08-07T14:01:29.196Z'
remote_data: null
custom_fields: null
integration_fields: []
skill_assignments:
- skill:
id: 4EeSSSd9Fr8iiW9mPKmjEVWK
remote_id: skill-123
name: LMS Integration
required:
- status
- data
PostLmsCourseProgressionsCourseProgressionIdCompletePositiveResponse:
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
GetLmsCourseProgressionsParameterIncludeDeleted:
type: string
enum:
- 'true'
- 'false'
default: 'false'
description: By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted entries too.
PostLmsCoursesCourseIdDeactivateRequestBody:
type: object
properties: {}
GetLmsCourseProgressionsParameterUpdatedAfter:
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 has been updated since this timestamp, even if the record''s own `changed_at` field remains unchanged.
If you want to track entry deletion, also set the `include_deleted=true` query parameter, because otherwise, deleted entries will be hidden.
For more details, see [Understanding changed_at vs updated_after Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior).
For this endpoint, `updated_after` matches when the returned record changed, or when related data changed as described below.
| Path | Added/Removed | Linked Record |
| --- | --- | --- |
| `user` | ✗ No | ✗ No |
| `course_revision` | ✗ No | ✗ No |
_**Added/Removed**: Whether adding or removing entries from this list triggers an update (n/a for single records). **Linked Record**: Whether changes to the linked record itself trigger an update._'
type: string
format: date-time
pattern: ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$
externalDocs:
url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
GetLmsCoursesParameterCursor:
type: string
description: An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response.
PostLmsCoursesBulkRequestBody:
type: object
properties:
items:
type: array
items:
type: object
properties:
origin_id:
type: string
description: A unique identifier for this item in the batch, used to correlate results and as a stable identifier for matching existing courses.
course:
discriminator:
propertyName: type
oneOf:
- type: object
properties:
type:
type: string
const: EXTERNAL
description: '`EXTERNAL` indicates that the content is not sent to the LMS, but the `course_url` links to the content in your system.'
title:
type: string
description: The title of the course revision.
description:
type:
- string
- 'null'
description: A description of the course revision.
course_url:
type: string
description: URL to the course page. For content providers, this should be a deeplink into your product that allows users to access the course directly.
thumbnail_url:
type:
- string
- 'null'
description: URL to the thumbnail image for the course.
duration:
type:
- integer
- 'null'
format: int64
exclusiveMinimum: 0
description: The duration of the course in minutes.
languages:
type:
- array
- 'null'
items:
type: string
pattern: ^[a-z]{2,3}(-[A-Z]{2})?$
description: IETF language tag (BCP 47) in the format "ll-CC" (e.g., "en-US", "de-DE") or "ll" (e.g., "en", "de").
description: 'A array containing the supported languages for the course content. If only one language is accepted by remote tool we default to the first one. '
required:
- type
- title
- course_url
required:
- origin_id
- course
description: Array of courses to create or update.
required:
- items
GetLmsCourseProgressionsPositiveResponse:
type: object
properties:
status:
type: string
const: success
data:
type: object
properties:
next:
type:
- string
- 'null'
description: Cursor string that can be passed to the `cursor` query parameter to get the next page. If this is `null`, then there are no more pages.
results:
type: array
items:
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'
required:
- next
- results
examples:
- next: eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0=
results:
- 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'
required:
- status
- data
GetLmsCourseProgressionsParameterCourseIds:
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.
GetLmsUsersParameterPageSize:
type: integer
format: int64
minimum: 1
maximum: 250
default: 100
description: The number of results to return per page. Maximum is 250.
GetLmsCourseProgressionsParameterRemoteIds:
type: string
description: Filter by a comma-separated list of remote IDs.
GetLmsCoursesParameterRemoteIds:
type: string
description: Filter by a comma-separated list of remote IDs.
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
GetLmsCourseProgressionsParameterPageSize:
type: integer
format: int64
minimum: 1
maximum: 250
default: 100
description: The number of results to return per page. Maximum is 250.
GetLmsUsersPositiveResponse:
type: object
properties:
status:
type: string
const: success
data:
type: object
properties:
next:
type:
- string
- 'null'
description: Cursor string that can be passed to the `cursor` query parameter to get the next page. If this is `null`, then there are no more pages.
results:
type: array
items:
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.
status:
type:
- string
- 'null'
enum:
- ACTIVE
- INACTIVE
description: Current status of the user in the LMS.
remote_created_at:
description: The date and time the object was created in the remote system.
type:
- string
- 'null'
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
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_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.'
custom_fields:
type:
- object
- 'null'
additionalProperties: true
description: A key-value store of fields not covered by the schema. [Read more](/custom-fields)
integration_fields:
type: array
items:
type: object
properties:
id:
type: string
description: The globally unique ID of this object.
key:
type: string
description: The key of the field in the remote system.
type:
type: string
enum:
- DEFAULT
- CUSTOM
description: '- `DEFAULT`: static fields in the remote system.
- `CUSTOM`: fields that are created/editable by the user.'
value:
type: 'null'
description: The field's value.
label:
type:
- string
- 'null'
description: The label of the field. (not always available)
required:
- id
- key
- type
- label
description: An array of selected passthrough integration fields. [Read more](/integration-fields)
examples:
- - id: 5NVFhMpB9Ah6by44tzNjZLyE
key: firstName
type: DEFAULT
value: Frank
label: First Name
- id: 8nuajYpoRd5GnxEQaaWKUDYQ
key: customTshirtSize
type: CUSTOM
value: XL
label: T-Shirt Size
required:
- id
- remote_id
- first_name
- last_name
- work_email
- status
- remote_created_at
- remote_deleted_at
- changed_at
- remote_data
- custom_fields
- integration_fields
examples:
- id: 26vafvWSRmbhNcxJYqjCzuJg
remote_id: '32'
first_name: Sarah
last_name: Johnson
work_email: sarah.johnson@example.com
status: ACTIVE
remote_created_at: '2022-08-07T14:01:29.196Z'
remote_deleted_at: null
changed_at: '2022-08-07T14:01:29.196Z'
remote_data: null
custom_fields: null
integration_fields: []
required:
- next
- results
examples:
- next: eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0=
results:
- id: 26vafvWSRmbhNcxJYqjCzuJg
remote_id: '32'
first_name: Sarah
last_name: Johnson
work_email: sarah.johnson@example.com
status: ACTIVE
remote_created_at: '2022-08-07T14:01:29.196Z'
remote_deleted_at: null
changed_at: '2022-08-07T14:01:29.196Z'
remote_data: null
custom_fields: null
integration_fields: []
required:
- status
- data
PostLmsCoursesBulkPositiveResponse:
type: object
properties:
status:
type: string
const: success
data:
type: object
properties:
task_id:
type: string
description: The ID of the created task. Poll this to get the status and results.
required:
- task_id
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
PostLmsCoursesCourseIdDeactivateParameterCourseId:
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`)
GetLmsUsersParameterIgnoreUnsupportedFilters:
type: string
enum:
- 'true'
- 'false'
default: 'false'
description: When set to `true`, filters targeting fields not supported by this integration will be ignored instead of filtering out all results.
GetLmsSkillsParameterIgnoreUnsupportedFilters:
type: string
enum:
- 'true'
- 'false'
default: 'false'
description: When set to `true`, filters targeting fields not supported by this integration will be ignored instead of filtering out all results.
GetLmsCourseProgressionsParameterUserIds:
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.
GetLmsSkillsPositiveResponse:
type: object
properties:
status:
type: string
const: success
data:
type: object
properties:
next:
type:
- string
- 'null'
description: Cursor string that can be passed to the `cursor` query parameter to get the next page. If this is `null`, then there are no more pages.
results:
type: array
items:
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
- 'null'
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.
name:
type:
- string
- 'null'
description: The name of the skill.
remote_created_at:
description: The date and time the object was created in the remote system.
type:
- string
- 'null'
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
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_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.'
custom_fields:
type:
- object
- 'null'
additionalProperties: true
description: A key-value store of fields not covered by the schema. [Read more](/custom-fields)
integration_fields:
type: array
items:
type: object
properties:
id:
type: string
description: The globally unique ID of this object.
key:
type: string
description: The key of the field in the remote system.
type:
type: string
enum:
- DEFAULT
- CUSTOM
description: '- `DEFAULT`: static fields in the remote system.
- `CUSTOM`: fields that are created/editable by the user.'
value:
type: 'null'
description: The field's value.
label:
type:
- string
- 'null'
description: The label of the field. (not always available)
required:
- id
- key
- type
- label
description: An array of selected passthrough integration fields. [Read more](/integration-fields)
examples:
- - id: 5NVFhMpB9Ah6by44tzNjZLyE
key: firstName
type: DEFAULT
value: Frank
label: First Name
- id: 8nuajYpoRd5GnxEQaaWKUDYQ
key: customTshirtSize
type: CUSTOM
value: XL
label: T-Shirt Size
required:
- id
- remote_id
- name
- remote_created_at
- remote_deleted_at
- changed_at
- remote_data
- custom_fields
- integration_fields
examples:
- id: 26vafvWSRmbhNcxJYqjCzuJg
remote_id: skill-12345
name: LMS Integration
remote_created_at: '2022-08-07T14:01:29.196Z'
remote_deleted_at: null
changed_at: '2022-08-07T14:01:29.196Z'
remote_data: null
custom_fields: null
integration_fields: []
required:
- next
- results
examples:
- next: eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0=
results:
- id: 26vafvWSRmbhNcxJYqjCzuJg
remote_id: skill-12345
name: LMS Integration
remote_created_at: '2022-08-07T14:01:29.196Z'
remote_deleted_at: null
changed_at: '2022-08-07T14:01:29.196Z'
remote_data: null
custom_fields: null
integration_fields: []
required:
- status
- data
GetLmsUsersParameterUpdatedAfter:
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 has been updated since this timestamp, even if the record''s own `changed_at` field remains unchanged.
If you want to track entry deletion, also set the `include_deleted=true` query parameter, because otherwise, deleted entries will be hidden.
For more details, see [Understanding changed_at vs updated_after Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior).
For this endpoint, only changes to the returned record itself are considered.'
type: string
format: date-time
pattern: ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$
externalDocs:
url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
GetLmsSkillsParameterRemoteIds:
type: string
description: Filter by a comma-separated list of remote IDs.
PostLmsCourseProgressionsCourseProgressionIdCompleteParameterCourseProgressionId:
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`)
PostLmsCourseProgressionsCourseProgressionIdCompleteRequestBody:
type: object
properties:
completed_at:
description: Date when the user completed the course revision. Defaults to the current date if not provided.
type:
- string
- 'null'
format: date-time
pattern: ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$
externalDocs:
url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
score:
type:
- integer
- 'null'
format: int64
minimum: 0
maximum: 100
description: Score the user achieved for the course, as an integer between 0 and 100 (inclusive).
GetLmsCoursesParameterUpdatedAfter:
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 has been updated since this timestamp, even if the record''s own `changed_at` field remains unchanged.
If you want to track entry deletion, also set the `include_deleted=true` query parameter, because otherwise, deleted entries will be hidden.
For more details, see [Understanding changed_at vs updated_after Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior).
For this endpoint, `updated_after` matches when the returned record changed, or when related data changed as described below.
| Path | Added/Removed | Linked Record |
| --- | --- | --- |
| `provider` | ✗ No | ✗ No |
| `revisions` | ✓ Yes | ✓ Yes |
| `revisions` → `skill_assignments` | ✗ No | ✗ No |
_**Added/Removed**: Whether adding or removing entries from this list triggers an update (n/a for single records). **Linked Record**: Whether changes to the linked record itself trigger an update._'
type: string
format: date-time
pattern: ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$
externalDocs:
url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
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
GetLmsUsersParameterCursor:
type: string
description: An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response.
GetLmsUsersParameterWorkEmails:
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.
GetLmsUsersParameterIncludeDeleted:
type: string
enum:
- 'true'
- 'false'
default: 'false'
description: By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted entries too.
GetLmsSkillsParameterPageSize:
type: integer
format: int64
minimum: 1
maximum: 250
default: 100
description: The number of results to return per page. Maximum is 250.
GetLmsUsersParameterRemoteIds:
type: string
description: Filter by a comma-separated list of remote IDs.
GetLmsSkillsParameterCursor:
type: string
description: An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response.
GetLmsCoursesParameterPageSize:
type: integer
format: int64
minimum: 1
maximum: 250
default: 100
description: The number of results to return per page. Maximum is 250.
GetLmsSkillsParameterIds:
type: string
description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`.
GetLmsCourseProgressionsParameterIgnoreUnsupportedFilters:
type: string
enum:
- 'true'
- 'false'
default: 'false'
description: When set to `true`, filters targeting fields not supported by this integration will be ignored instead of filtering out all results.
GetLmsUsersParameterIds:
type: string
description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`.
GetLmsCourseProgressionsParameterIds:
type: string
description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`.
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.