Skip to main content
POST
/
lms
/
courses
/
bulk
Upsert courses
curl --request POST \
  --url https://api.kombo.dev/v1/lms/courses/bulk \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --header 'X-Integration-Id: <x-integration-id>' \
  --data '
{
  "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"
        ]
      }
    }
  ]
}
'
{ "status": "<string>", "data": { "task_id": "<string>" }, "warnings": [ { "message": "<string>" } ] }
This feature is currently available for the following integrations:You’d like to see this feature for another integration? Please reach out! We’re always happy to discuss extending our coverage.
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.
Idempotency: Sending the same request body for the same integration will return the existing task rather than creating a duplicate. This makes it safe to retry requests without risking duplicate processing.
This endpoint requires the permission Upsert courses to be enabled in your scope config.

Example Request Body

{
  "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"
        ]
      }
    }
  ]
}

Authorizations

Authorization
string
header
required

Create an API key on the Secrets page in the Kombo dashboard.

Headers

X-Integration-Id
string
required

ID of the integration you want to interact with.

Body

application/json

POST /lms/courses/bulk Request body

items
object[]
required

Array of courses to create or update.

Response

POST /lms/courses/bulk Positive response

status
string
required
Allowed value: "success"
data
object
required
warnings
object[]
required

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.