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" ] } } ]}'
import requests
url = "https://api.kombo.dev/v1/lms/courses/bulk"
payload = { "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"]
}
}
] }
headers = {
"X-Integration-Id": "<x-integration-id>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)
const options = {
method: 'POST',
headers: {
'X-Integration-Id': '<x-integration-id>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
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']
}
}
]
})
};
fetch('https://api.kombo.dev/v1/lms/courses/bulk', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.kombo.dev/v1/lms/courses/bulk",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'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'
]
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"X-Integration-Id: <x-integration-id>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.kombo.dev/v1/lms/courses/bulk"
payload := strings.NewReader("{\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}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Integration-Id", "<x-integration-id>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}
HttpResponse<String> response = Unirest.post("https://api.kombo.dev/v1/lms/courses/bulk")
.header("X-Integration-Id", "<x-integration-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\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}")
.asString();
require 'uri'
require 'net/http'
url = URI("https://api.kombo.dev/v1/lms/courses/bulk")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Integration-Id"] = '<x-integration-id>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\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}"
response = http.request(request)
puts response.read_body
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" ] } } ]}'
import requests
url = "https://api.kombo.dev/v1/lms/courses/bulk"
payload = { "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"]
}
}
] }
headers = {
"X-Integration-Id": "<x-integration-id>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)
const options = {
method: 'POST',
headers: {
'X-Integration-Id': '<x-integration-id>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
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']
}
}
]
})
};
fetch('https://api.kombo.dev/v1/lms/courses/bulk', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.kombo.dev/v1/lms/courses/bulk",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'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'
]
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"X-Integration-Id: <x-integration-id>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.kombo.dev/v1/lms/courses/bulk"
payload := strings.NewReader("{\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}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Integration-Id", "<x-integration-id>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}
HttpResponse<String> response = Unirest.post("https://api.kombo.dev/v1/lms/courses/bulk")
.header("X-Integration-Id", "<x-integration-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\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}")
.asString();
require 'uri'
require 'net/http'
url = URI("https://api.kombo.dev/v1/lms/courses/bulk")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Integration-Id"] = '<x-integration-id>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\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}"
response = http.request(request)
puts response.read_body
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. Learn more in our async endpoints guide.
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.
Show child attributes
Response
POST /lms/courses/bulk Positive response
status
string
required
Allowed value: "success"
data
object
required
Show child attributes
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.
Show child attributes
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Kombo","colors":{"primary":"#14b8a6","light":"#5eead4","dark":"#15B8A6"},"logo":{"light":"https://mintcdn.com/kombo/5G-BTSylUTnMNzUN/logo/light.svg?fit=max\u0026auto=format\u0026n=5G-BTSylUTnMNzUN\u0026q=85\u0026s=e63a5882dfad565ffad086e946e31625","dark":"https://mintcdn.com/kombo/BvlFKneaD6eycZI3/logo/dark.svg?fit=max\u0026auto=format\u0026n=BvlFKneaD6eycZI3\u0026q=85\u0026s=c326174907f14ee7bef0e17d62708eba"},"favicon":"https://mintcdn.com/kombo/2lUmYlLqJZfpPMTz/favicon.svg?fit=max\u0026auto=format\u0026n=2lUmYlLqJZfpPMTz\u0026q=85\u0026s=06bfda04e248fb862b34c4e972d4b1a8","api":{"mdx":{"auth":{"method":"bearer"},"server":"https://api.kombo.dev/v1"}},"navbar":{"links":[{"href":"https://app.kombo.dev","label":"Dashboard"}],"primary":{"type":"button","label":"Get a demo","href":"https://www.kombo.dev/demo"}},"footer":{"socials":{"website":"https://www.kombo.dev/","linkedin":"https://www.linkedin.com/company/kombo-api/about"}},"seo":{"indexing":"all"},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"kombo","hasAudioNarration":false,"actualSubdomain":"kombo","customDomains":["docs.kombo.dev"],"gitSource":{"type":"github","owner":"kombohq","repo":"docs-prod","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af792f6b7c6e32fbd653e25","clientVersion":"0.0.4142","searchFilterCounts":[{"language":"default","tag":"Developer documentation","count":697},{"language":"default","tag":"General","count":337},{"language":"default","tag":"Available Connectors","count":260},{"language":"default","tag":"HRIS","count":241},{"language":"default","tag":"ATS","count":238},{"language":"default","tag":"Features","count":114},{"language":"default","tag":"ATS Assessment \u0026 Background Check","count":90},{"language":"default","tag":"LMS","count":88},{"language":"default","tag":"Guides","count":75},{"language":"default","tag":"General API Reference","count":56}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"styles.css","content":"img[src^=\"https://storage.googleapis.com/kombo-assets/integrations/\"]{background-color:transparent!important}[data-name=\"frame\"] img{max-height:40vh}a[id]{scroll-margin-top:var(--scroll-mt)}"}],"page":{"pagePath":"lms/v1/post-courses-bulk","slug":"/lms/v1/post-courses-bulk","pageMetadata":{"title":"Upsert courses","description":"Create or update multiple courses in the LMS.","openapi":"POST /lms/courses/bulk","href":"/lms/v1/post-courses-bulk"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Create or update multiple courses in the LMS.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,..._provideComponents(),...props.components},{Accordion,CodeBlock,Heading,Info,Note,OptimizedImage}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Note)_missingMdxReference(`Note`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);return _jsxs(_Fragment,{children:[_jsxs(Accordion,{title:`Supported integrations`,icon:`list-check`,id:`supported-integrations`,children:[_jsx(_components.p,{children:`This feature is currently available for the following integrations:`}),_jsxs(`ul`,{children:[_jsxs(`li`,{class:`mint-flex mint-items-center`,children:[_jsx(OptimizedImage,{src:`https://storage.googleapis.com/kombo-assets/integrations/successfactors/icon.svg`,height:`16px`,width:`16px`,class:`mint-m-0 mint-mr-2`}),_jsx(_components.a,{href:`/lms/connectors/successfactors`,children:`SAP SuccessFactors`})]}),_jsxs(`li`,{class:`mint-flex mint-items-center`,children:[_jsx(OptimizedImage,{src:`https://storage.googleapis.com/kombo-assets/integrations/cornerstoneondemand/icon.svg`,height:`16px`,width:`16px`,class:`mint-m-0 mint-mr-2`}),_jsx(_components.a,{href:`/lms/connectors/cornerstoneondemand`,children:`Cornerstone OnDemand`})]}),_jsxs(`li`,{class:`mint-flex mint-items-center`,children:[_jsx(OptimizedImage,{src:`https://storage.googleapis.com/kombo-assets/integrations/workday/icon.svg`,height:`16px`,width:`16px`,class:`mint-m-0 mint-mr-2`}),_jsx(_components.a,{href:`/lms/connectors/workday`,children:`Workday`})]}),_jsxs(`li`,{class:`mint-flex mint-items-center`,children:[_jsx(OptimizedImage,{src:`https://storage.googleapis.com/kombo-assets/integrations/sandbox/icon.svg`,height:`16px`,width:`16px`,class:`mint-m-0 mint-mr-2`}),_jsx(_components.a,{href:`/lms/connectors/sandbox`,children:`Kombo Sandbox`})]}),_jsxs(`li`,{class:`mint-flex mint-items-center`,children:[_jsx(OptimizedImage,{src:`https://storage.googleapis.com/kombo-assets/integrations/360learning/icon.svg`,height:`16px`,width:`16px`,class:`mint-m-0 mint-mr-2`}),_jsx(_components.a,{href:`/lms/connectors/360learning`,children:`360Learning`})]}),_jsxs(`li`,{class:`mint-flex mint-items-center`,children:[_jsx(OptimizedImage,{src:`https://storage.googleapis.com/kombo-assets/integrations/talentlms/icon.svg`,height:`16px`,width:`16px`,class:`mint-m-0 mint-mr-2`}),_jsx(_components.a,{href:`/lms/connectors/talentlms`,children:`TalentLMS`})]}),_jsxs(`li`,{class:`mint-flex mint-items-center`,children:[_jsx(OptimizedImage,{src:`https://storage.googleapis.com/kombo-assets/integrations/docebo/icon.svg`,height:`16px`,width:`16px`,class:`mint-m-0 mint-mr-2`}),_jsx(_components.a,{href:`/lms/connectors/docebo`,children:`Docebo`})]}),_jsxs(`li`,{class:`mint-flex mint-items-center`,children:[_jsx(OptimizedImage,{src:`https://storage.googleapis.com/kombo-assets/integrations/moodle/icon.svg`,height:`16px`,width:`16px`,class:`mint-m-0 mint-mr-2`}),_jsx(_components.a,{href:`/lms/connectors/moodle`,children:`Moodle`})]})]}),_jsx(_components.p,{children:`You’d like to see this feature for another integration? Please reach out!\nWe’re always happy to discuss extending our coverage.`})]}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Note:`}),` This endpoint is asynchronous – it returns a `,_jsx(_components.code,{children:`task_id`}),` immediately and processes the request in the background. Use the corresponding `,_jsx(_components.code,{children:`GET`}),` endpoint to poll for the task status until it reaches `,_jsx(_components.code,{children:`COMPLETED`}),` or `,_jsx(_components.code,{children:`FAILED`}),`. Learn more in our `,_jsx(_components.a,{href:`/lms/guides/async-endpoints`,children:`async endpoints guide`}),`.`]})}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`This endpoint requires the permission `,_jsx(_components.strong,{children:`Upsert courses`}),` to be enabled in `,_jsx(_components.a,{href:`/scopes`,children:`your scope config`}),`.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`example-request-body`,children:`Example Request Body`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`34`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`34`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"items\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"origin_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"course-1\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"course\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"type\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"EXTERNAL\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"title\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Building LMS integrations with Kombo\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"description\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"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.\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"course_url\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://docs.kombo.dev/lms/introduction\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"thumbnail_url\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://kombo.dev/images/courses/lms-integrations-thumbnail.png\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"duration\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`45`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"languages\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"en\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"de-CH\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"origin_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"course-2\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"course\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"type\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"EXTERNAL\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"title\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Introduction to TypeScript\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"description\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Learn one of the most popular programming languages of the recent years quickly and efficiently. Results guaranteed!\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"course_url\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://example.com\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"thumbnail_url\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://example.com/images/thumbnail.jpg\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"duration\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`60`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"languages\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"en-US\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"pl-PL\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Upsert courses","description":"Create or update multiple courses in the LMS.","openapi":"POST /lms/courses/bulk","href":"/lms/v1/post-courses-bulk"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Example Request Body","slug":"example-request-body","depth":3,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/kombo/807f792f5d0ef37a/rb2b.js","/_mintlify/custom/kombo/6fdcec7d895f83f2/auto-expand-response-fields.js"],"dynamicCss":".mint-m-0 {\n margin: 0px\n}\n.mint-mr-2 {\n margin-right: 0.5rem\n}\n.mint-flex {\n display: flex\n}\n.mint-items-center {\n align-items: center\n}","openApiReferenceData":{"operation":{"operationId":"PostLmsCoursesBulk","summary":"Upsert courses","description":"Create or update multiple courses in the LMS.","tags":["Unified LMS API"],"parameters":["acb27bc1-e4b0-4f16-9222-9d789d2fbe65"],"requestBody":"a0931cdc-b416-413c-b4e4-ea82fdfca9de","responses":{"200":"478b0aba-1ce9-4fb9-944e-064dea016ff6","default":"9dda567d-c405-4697-91b6-c62400a6c4ad"},"method":"post","type":"path","servers":["522c385b-353b-4d85-b191-55dc67f92c2b","c787c1ba-169b-47b0-a3e4-ccf8e5cf8da9","916a78c5-e9e2-4b56-b289-4ce6d9d2eb6f"],"security":["9a6602bb-b546-45f4-ae2e-60d216c51331"],"path":"/lms/courses/bulk","baseUrlOptions":["https://api.kombo.dev/v1","https://api.us.kombo.dev/v1","https://api.ca.kombo.dev/v1"],"title":"Upsert courses","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"acb27bc1-e4b0-4f16-9222-9d789d2fbe65":{"in":"header","name":"X-Integration-Id","schema":{"type":"string","isRequired":true,"description":"ID of the integration you want to interact with.","uniqueKey":"","typeLabel":"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":{"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.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].origin_id","typeLabel":"string"},"course":{"type":"object","required":["type","title","course_url"],"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.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].course.type","typeLabel":"string"},"title":{"type":"string","description":"The title of the course revision.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].course.title","typeLabel":"string"},"course_url":{"type":"string","format":"uri","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.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].course.course_url","typeLabel":"string\u003curi>"},"description":{"oneOf":[{"type":"string","description":"A description of the course revision.","uniqueKey":"\\items.items.[INDEX].course.description.oneOf.0","typeLabel":"string"},{"type":"null","description":"A description of the course revision.","uniqueKey":"\\items.items.[INDEX].course.description.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].course.description","typeLabel":"string | null"},"thumbnail_url":{"oneOf":[{"type":"string","description":"URL to the thumbnail image for the course.","uniqueKey":"\\items.items.[INDEX].course.thumbnail_url.oneOf.0","typeLabel":"string"},{"type":"null","description":"URL to the thumbnail image for the course.","uniqueKey":"\\items.items.[INDEX].course.thumbnail_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].course.thumbnail_url","typeLabel":"string | null"},"duration":{"oneOf":[{"type":"integer","format":"int64","exclusiveMinimum":0,"description":"The duration of the course in minutes.","uniqueKey":"\\items.items.[INDEX].course.duration.oneOf.0","typeLabel":"integer\u003cint64>"},{"type":"null","format":"int64","exclusiveMinimum":0,"description":"The duration of the course in minutes.","uniqueKey":"\\items.items.[INDEX].course.duration.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].course.duration","typeLabel":"integer\u003cint64> | null"},"languages":{"oneOf":[{"type":"array","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\").","uniqueKey":"\\items.items.[INDEX].course.languages.oneOf.0.items.[INDEX]","typeLabel":"string"},"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. ","uniqueKey":"\\items.items.[INDEX].course.languages.oneOf.0","typeLabel":"string[]"},{"type":"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. ","uniqueKey":"\\items.items.[INDEX].course.languages.oneOf.1","typeLabel":"null"}],"uniqueKey":"\\items.items.[INDEX].course.languages","typeLabel":"string[] | null"}},"isRequired":true,"uniqueKey":"\\items.items.[INDEX].course","typeLabel":"object"}},"required":["origin_id","course"],"uniqueKey":"\\items.items.[INDEX]","typeLabel":"object"},"description":"Array of courses to create or update.","isRequired":true,"uniqueKey":"\\items","typeLabel":"object[]"}},"required":["items"],"uniqueKey":"","typeLabel":"object"},"examples":{"example1":{"title":"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"]}}]}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"478b0aba-1ce9-4fb9-944e-064dea016ff6":{"description":"POST /lms/courses/bulk Positive response","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","const":"success","isRequired":true,"uniqueKey":"status","typeLabel":"string"},"data":{"type":"object","properties":{"task_id":{"type":"string","description":"The ID of the created task. Poll this to get the status and results.","isRequired":true,"uniqueKey":"data.task_id","typeLabel":"string"}},"required":["task_id"],"isRequired":true,"uniqueKey":"data","typeLabel":"object"},"warnings":{"type":"array","items":{"type":"object","properties":{"message":{"type":"string","isRequired":true,"uniqueKey":"warnings.items.[INDEX].message","typeLabel":"string"}},"required":["message"],"uniqueKey":"warnings.items.[INDEX]","typeLabel":"object"},"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.","isRequired":true,"uniqueKey":"warnings","typeLabel":"object[]"}},"required":["status","data","warnings"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"status":"success","data":{"task_id":"\u003cstring>"},"warnings":[{"message":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"9dda567d-c405-4697-91b6-c62400a6c4ad":{"description":"The standard error response with just the platform error codes.","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["error"],"isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"error":{"type":"object","properties":{"code":{"oneOf":[{"type":"string","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, ...).","isRequired":true,"uniqueKey":"error.code.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"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, ...).","isRequired":true,"uniqueKey":"error.code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring> | null"},"title":{"oneOf":[{"type":"string","description":"A static, human-readable label.","isRequired":true,"uniqueKey":"error.title.oneOf.0","typeLabel":"string"},{"type":"null","description":"A static, human-readable label.","isRequired":true,"uniqueKey":"error.title.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.title","typeLabel":"string | null"},"message":{"type":"string","description":"A dynamic, detailed description of what went wrong in this specific instance.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"log_url":{"oneOf":[{"type":"string","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.","isRequired":true,"uniqueKey":"error.log_url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"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.","isRequired":true,"uniqueKey":"error.log_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.log_url","typeLabel":"string\u003curi> | null"}},"required":["code","title","message","log_url"],"description":"Error details with structured code for programmatic handling.","isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["status","error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Error Response":{"title":"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":{"title":"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}}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"9a6602bb-b546-45f4-ae2e-60d216c51331":{"ApiKey":{"type":"http","scheme":"bearer","description":"Create an API key on the [Secrets](https://app.kombo.dev/secrets) page in the Kombo dashboard.","scopes":[],"schemeName":"ApiKey"}}},"servers":{"522c385b-353b-4d85-b191-55dc67f92c2b":{"url":"https://api.kombo.dev/v1","description":"Kombo EU API"},"c787c1ba-169b-47b0-a3e4-ccf8e5cf8da9":{"url":"https://api.us.kombo.dev/v1","description":"Kombo US API"},"916a78c5-e9e2-4b56-b289-4ce6d9d2eb6f":{"url":"https://api.ca.kombo.dev/v1","description":"Kombo CA API"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"Create an API key on the [Secrets](https://app.kombo.dev/secrets) page in the Kombo dashboard.","scopes":[],"schemeName":"ApiKey"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Create an API key on the [Secrets](https://app.kombo.dev/secrets) page in the Kombo dashboard.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"ApiKey","name":"Authorization"}],"title":"ApiKey"}]},"originalFileLocation":"openapi.json"},"subdomain":"kombo","siteName":"Kombo","title":"Upsert courses - Kombo","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-21T11:26:38.365Z","originalFileLocation":"lms/v1/post-courses-bulk.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Create or update multiple courses in the LMS.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Kombo\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/kombo/wSCKBGtwRd2fRaqL/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/kombo/wSCKBGtwRd2fRaqL/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/kombo/wSCKBGtwRd2fRaqL/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/kombo/wSCKBGtwRd2fRaqL/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/kombo/wSCKBGtwRd2fRaqL/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/kombo/wSCKBGtwRd2fRaqL/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/kombo/wSCKBGtwRd2fRaqL/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/kombo/wSCKBGtwRd2fRaqL/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/kombo/wSCKBGtwRd2fRaqL/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Upsert courses - Kombo\">\u003cmeta data-mint-head property=\"og:description\" content=\"Create or update multiple courses in the LMS.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Kombo\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.kombo.dev/lms/v1/post-courses-bulk\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://kombo.mintlify.site/_mintlify/api/og/v2?division=Courses\u0026amp;title=Upsert+courses\u0026amp;description=Create+or+update+multiple+courses+in+the+LMS.\u0026amp;theme=83755ba323d243afb5964e9b\u0026amp;signature=17b344febccb7d83b8b1c5a7123219d249ac9fa982d8d3b65e53fbaa6a85aa57\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Upsert courses - Kombo\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Create or update multiple courses in the LMS.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://kombo.mintlify.site/_mintlify/api/og/v2?division=Courses\u0026amp;title=Upsert+courses\u0026amp;description=Create+or+update+multiple+courses+in+the+LMS.\u0026amp;theme=83755ba323d243afb5964e9b\u0026amp;signature=17b344febccb7d83b8b1c5a7123219d249ac9fa982d8d3b65e53fbaa6a85aa57\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/kombo/wSCKBGtwRd2fRaqL/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Kombo\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#14b8a6\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.kombo.dev/lms/v1/post-courses-bulk\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/lms/v1/post-courses-bulk.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.kombo.dev/#organization\",\"name\":\"Kombo\",\"url\":\"https://docs.kombo.dev\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/kombo/5G-BTSylUTnMNzUN/logo/light.svg?fit=max\u0026auto=format\u0026n=5G-BTSylUTnMNzUN\u0026q=85\u0026s=e63a5882dfad565ffad086e946e31625\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.kombo.dev#website\",\"name\":\"Kombo\",\"url\":\"https://docs.kombo.dev\",\"publisher\":{\"@id\":\"https://docs.kombo.dev/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.kombo.dev/lms/v1/post-courses-bulk#webpage\",\"url\":\"https://docs.kombo.dev/lms/v1/post-courses-bulk\",\"name\":\"Upsert courses\",\"description\":\"Create or update multiple courses in the LMS.\",\"dateModified\":\"2026-09-21T11:26:38.365Z\",\"isPartOf\":{\"@id\":\"https://docs.kombo.dev#website\"},\"breadcrumb\":{\"@id\":\"https://docs.kombo.dev/lms/v1/post-courses-bulk#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.kombo.dev/lms/v1/post-courses-bulk#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"LMS API Reference\",\"item\":\"https://docs.kombo.dev/lms/v1/get-users\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Courses\",\"item\":\"https://docs.kombo.dev/lms/v1/get-courses\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Upsert courses\",\"item\":\"https://docs.kombo.dev/lms/v1/post-courses-bulk\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.kombo.dev/lms/v1/post-courses-bulk#apireference\",\"headline\":\"Upsert courses\",\"name\":\"Upsert courses\",\"description\":\"Create or update multiple courses in the LMS.\",\"url\":\"https://docs.kombo.dev/lms/v1/post-courses-bulk\",\"mainEntityOfPage\":{\"@id\":\"https://docs.kombo.dev/lms/v1/post-courses-bulk#webpage\"},\"dateModified\":\"2026-09-21T11:26:38.365Z\",\"publisher\":{\"@id\":\"https://docs.kombo.dev/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.kombo.dev#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Kombo\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Kombo\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/lms/v1/post-courses-bulk.md","siteName":"Kombo","nav":{"global":null,"tabs":[{"tab":"Developer documentation","icon":"code","anchors":[{"anchor":"Overview","pages":[{"title":"Overview","href":"/introduction"}]},{"anchor":"HRIS","icon":"users","pages":[{"title":"HRIS","href":"/hris/introduction"}]},{"anchor":"LMS","icon":"graduation-cap","groups":[{"group":"General","icon":"circle-info","pages":[{"title":"Introduction","icon":"book-open","href":"/lms/introduction"},{"group":"Getting started","icon":"signs-post","pages":[{"title":"Overview","icon":"rocket","href":"/lms/getting-started"},{"title":"Sandbox Integrations","icon":"flask","href":"/lms/getting-started/sandbox-integrations"},{"title":"Creating Integrations","icon":"link","href":"/lms/getting-started/create-integrations"},{"title":"Authentication","icon":"key","href":"/lms/getting-started/authentication"},{"title":"Querying the API","icon":"magnifying-glass","href":"/lms/getting-started/querying-api"},{"title":"Fetching Data","icon":"download","href":"/lms/getting-started/fetching-data"}]},{"group":"Implementation guides","icon":"user-magnifying-glass","pages":[{"title":"Setup","icon":"wrench","href":"/lms/implementation-guide/setup"},{"title":"Connection setup","icon":"link","href":"/lms/implementation-guide/connection-setup"},{"title":"Content providers","icon":"book-open-reader","href":"/lms/implementation-guide/content-providers"},{"title":"SSO and identity matching","icon":"id-card","href":"/lms/implementation-guide/sso-and-identity-matching"},{"title":"Talent management","icon":"chart-user","href":"/lms/implementation-guide/talent-management"}]},{"group":"Available Connectors","icon":"plug","pages":[{"title":"Available LMS Connectors","sidebarTitle":"Overview","icon":"grid-2","href":"/lms/connectors"},{"title":"360Learning LMS Integration","sidebarTitle":"360Learning","icon":"https://storage.googleapis.com/kombo-assets/integrations/360learning/icon.svg","href":"/lms/connectors/360learning"},{"title":"Cornerstone OnDemand LMS Integration","sidebarTitle":"Cornerstone OnDemand","icon":"https://storage.googleapis.com/kombo-assets/integrations/cornerstoneondemand/icon.svg","href":"/lms/connectors/cornerstoneondemand"},{"title":"Coursera LMS Integration","sidebarTitle":"Coursera","icon":"https://storage.googleapis.com/kombo-assets/integrations/coursera/icon.svg","href":"/lms/connectors/coursera"},{"title":"Docebo LMS Integration","sidebarTitle":"Docebo","icon":"https://storage.googleapis.com/kombo-assets/integrations/docebo/icon.svg","href":"/lms/connectors/docebo"},{"title":"Kombo Sandbox LMS Integration","sidebarTitle":"Kombo Sandbox","icon":"https://storage.googleapis.com/kombo-assets/integrations/sandbox/icon.svg","href":"/lms/connectors/sandbox"},{"title":"LinkedIn Learning LMS Integration","sidebarTitle":"LinkedIn Learning","icon":"https://storage.googleapis.com/kombo-assets/integrations/linkedinlearning/icon.svg","href":"/lms/connectors/linkedinlearning"},{"title":"Moodle LMS Integration","sidebarTitle":"Moodle","icon":"https://storage.googleapis.com/kombo-assets/integrations/moodle/icon.svg","href":"/lms/connectors/moodle"},{"title":"SAP SuccessFactors LMS Integration","sidebarTitle":"SAP SuccessFactors","icon":"https://storage.googleapis.com/kombo-assets/integrations/successfactors/icon.svg","href":"/lms/connectors/successfactors"},{"title":"TalentLMS LMS Integration","sidebarTitle":"TalentLMS","icon":"https://storage.googleapis.com/kombo-assets/integrations/talentlms/icon.svg","href":"/lms/connectors/talentlms"},{"title":"Udemy Business LMS Integration","sidebarTitle":"Udemy Business","icon":"https://storage.googleapis.com/kombo-assets/integrations/udemy/icon.svg","href":"/lms/connectors/udemy"},{"title":"Workday LMS Integration","sidebarTitle":"Workday","icon":"https://storage.googleapis.com/kombo-assets/integrations/workday/icon.svg","href":"/lms/connectors/workday"}]},{"title":"Important Changes","icon":"bell","href":"/lms/important-changes"}]},{"group":"Features","icon":"cubes","pages":[{"title":"Data Explorer","icon":"table","href":"/lms/features/data-explorer"},{"title":"Setup Flow","icon":"sliders","href":"/lms/features/setup-flow/introduction"},{"title":"Custom Fields","icon":"square-plus","href":"/lms/features/custom-fields"},{"title":"Advanced Mappings","icon":"brackets-curly","href":"/lms/features/advanced-mappings"},{"group":"Remapping","icon":"shuffle","pages":[{"title":"Introduction","icon":"shuffle","href":"/lms/features/remapping/introduction"},{"title":"Remapping simple fields","icon":"sliders","href":"/lms/features/remapping/simple-remapping"},{"title":"Remapping enum fields","icon":"list-check","href":"/lms/features/remapping/enum-remapping"},{"title":"Remapping date fields","icon":"calendar-days","href":"/lms/features/remapping/date-remapping"},{"title":"Remapping address fields","icon":"map","href":"/lms/features/remapping/struct-remapping"},{"title":"Remapping reference fields","icon":"link","href":"/lms/features/remapping/reference-remapping"},{"title":"Remapping array fields","icon":"brackets-curly","href":"/lms/features/remapping/array-remapping"},{"title":"Kombo default fallback","icon":"rotate-left","href":"/lms/features/remapping/kombo-default-fallback"}]},{"title":"Logs","icon":"scroll","href":"/lms/features/logs"},{"title":"Issues","icon":"triangle-exclamation","href":"/lms/features/issues"},{"title":"Issue types","icon":"triangle-exclamation","href":"/lms/features/issue-types"},{"title":"Deletion Policy","icon":"trash","href":"/lms/features/deletion-policy"},{"title":"Passthrough API","icon":"right-left","href":"/lms/features/passthrough-api"},{"title":"Komboman","icon":"terminal","href":"/lms/features/komboman"},{"title":"Extend write endpoints","icon":"wand-magic-sparkles","href":"/lms/features/remote-fields"},{"title":"Scopes","icon":"bullseye","href":"/lms/features/scopes"},{"title":"Audit Logs","icon":"clipboard-list","href":"/lms/features/audit-logs"}]},{"group":"Guides","icon":"book-open","pages":[{"group":"Kombo Connect","icon":"link","pages":[{"title":"Introduction","icon":"link","href":"/lms/guides/connect/introduction"},{"title":"Manual setup","icon":"wrench","href":"/lms/guides/connect/manual-setup"},{"title":"Magic links","icon":"wand-magic-sparkles","href":"/lms/guides/connect/magic-links"},{"title":"Embedded flow","icon":"puzzle-piece","href":"/lms/guides/connect/embedded-flow"},{"title":"Reconnecting an integration","icon":"arrow-rotate-right","href":"/lms/guides/connect/reconnection"}]},{"title":"How Kombo Syncs Data","icon":"arrows-rotate","href":"/lms/guides/sync"},{"title":"Error Handling","icon":"bug-slash","href":"/guides/errors"},{"title":"Concurrency Limiting","icon":"gauge-max","href":"/lms/guides/concurrency-limiting"},{"title":"Async Endpoints","icon":"clock","href":"/lms/guides/async-endpoints"},{"title":"Webhooks","icon":"bolt","href":"/lms/guides/webhooks"},{"title":"Upstream webhooks","icon":"cloud-arrow-down","href":"/lms/guides/upstream-webhooks"},{"title":"Integration States","icon":"traffic-light","href":"/lms/guides/integration-states"},{"title":"Implementing New Tools","icon":"toolbox","href":"/lms/guides/implementing-new-tools"},{"title":"Environments","icon":"building","href":"/lms/guides/environments"},{"title":"Partner Credentials","icon":"handshake","href":"/lms/guides/partner-credentials"},{"title":"Static IPs","icon":"shield-check","href":"/lms/guides/static-ips"},{"group":"Troubleshooting","icon":"bug","pages":[{"title":"How to troubleshoot issues with Kombo","icon":"life-ring","href":"/lms/guides/debugging/introduction"},{"title":"Troubleshoot connection flow problems","icon":"link-slash","href":"/lms/guides/debugging/debug-connection-flow"},{"title":"Investigate failing actions","icon":"bolt","href":"/lms/guides/debugging/investigate-failing-actions"},{"title":"Diagnosing missing or incorrect data","icon":"magnifying-glass","href":"/lms/guides/debugging/debug-data-issues"}]}]},{"group":"LMS API Reference","icon":"book","pages":[{"group":"Users","icon":"users","pages":[{"title":"Get users","openapi":"GET /lms/users","href":"/lms/v1/get-users"}]},{"group":"Skills","icon":"star","pages":[{"title":"Get skills","openapi":"GET /lms/skills","href":"/lms/v1/get-skills"}]},{"group":"Courses","icon":"book-open","pages":[{"title":"Get courses","description":"Get courses","openapi":"GET /lms/courses","href":"/lms/v1/get-courses"},{"title":"Upsert courses","openapi":"POST /lms/courses/bulk","href":"/lms/v1/post-courses-bulk"},{"title":"Get status of “Upsert courses” task","description":"Poll for the status of an existing “Upsert courses” task.","openapi":"GET /lms/courses/bulk/{task_id}","href":"/lms/v1/get-courses-bulk-task-id"},{"title":"Deactivate course","openapi":"POST /lms/courses/{course_id}/deactivate","href":"/lms/v1/post-courses-course-id-deactivate"}]},{"group":"Progress","icon":"chart-line","pages":[{"title":"Get course progressions","openapi":"GET /lms/course-progressions","href":"/lms/v1/get-course-progressions"},{"title":"Enroll user in course","openapi":"POST /lms/course-progressions","href":"/lms/v1/post-course-progressions"},{"title":"Complete course","openapi":"POST /lms/course-progressions/{course_progression_id}/complete","href":"/lms/v1/post-course-progressions-course-progression-id-complete"}]}]},{"group":"General API Reference","pages":[{"group":"Kombo Connect","icon":"link","pages":[{"title":"Create connection link","openapi":"POST /connect/create-link","href":"/lms/v1/post-connect-create-link"},{"title":"Get integration by token","openapi":"GET /connect/integration-by-token/{token}","href":"/lms/v1/get-connect-integration-by-token-token"},{"title":"Activate integration (optional)","openapi":"POST /connect/activate-integration","href":"/lms/v1/post-connect-activate-integration"},{"title":"Create reconnection link","openapi":"POST /integrations/{integration_id}/relink","href":"/lms/v1/post-integrations-integration-id-relink"},{"title":"Create Setup Flow link","openapi":"POST /integrations/{integration_id}/setup-link","href":"/lms/v1/post-integrations-integration-id-setup-link"},{"title":"Get tools","openapi":"GET /tools/{category}","href":"/lms/v1/get-tools-category"}]},{"group":"Integrations","icon":"plug","pages":[{"title":"Get integration details","openapi":"GET /integrations/{integration_id}","href":"/lms/v1/get-integrations-integration-id"},{"title":"Set integration enabled","openapi":"PUT /integrations/{integration_id}/enabled","href":"/lms/v1/put-integrations-integration-id-enabled"},{"title":"Delete integration","openapi":"DELETE /integrations/{integration_id}","href":"/lms/v1/delete-integrations-integration-id"},{"title":"Trigger sync","openapi":"POST /force-sync","href":"/lms/v1/post-force-sync"}]},{"group":"Filtering","icon":"filter","pages":[{"title":"Create provisioning setup link (deprecated)","openapi":"POST /hris/provisioning-groups/{group_id}/setup-links","href":"/lms/v1/post-hris-provisioning-groups-group-id-setup-links"}]},{"group":"Custom Fields","icon":"square-plus","pages":[{"title":"Get custom fields with current mappings","openapi":"GET /integrations/{integration_id}/custom-fields","href":"/lms/v1/get-integrations-integration-id-custom-fields"}]},{"group":"Other","icon":"ellipsis","pages":[{"title":"Check API key","openapi":"GET /check-api-key","href":"/lms/v1/get-check-api-key"},{"title":"Send passthrough request","openapi":"POST /passthrough/{tool}/{api}","href":"/lms/v1/post-passthrough-tool-api"}]}]}]},{"anchor":"ATS","icon":"briefcase","pages":[{"title":"ATS","href":"/ats/introduction"}]},{"anchor":"ATS Assessment \u0026 Background Check","icon":"ballot-check","pages":[{"title":"ATS Assessment \u0026 Background Check","href":"/assessment/introduction"}]},{"anchor":"AI Apply","icon":"browser","pages":[{"title":"AI Apply","href":"/ai-apply/introduction"}]},{"anchor":"Changelog","icon":"book","href":"https://changelog.kombo.dev"},{"anchor":"Status","icon":"wave-pulse","href":"https://status.kombo.dev"}]},{"tab":"Help Center","icon":"life-ring","pages":[{"title":"Help Center","href":"/help-center"}]}]},"basePath":"","title":"Upsert courses - Kombo","buildId":"dpl_G2Qd45vZZ7MkBiGF9yYx8ZsbbKXX","deploymentId":"dpl_G2Qd45vZZ7MkBiGF9yYx8ZsbbKXX","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a74be98ba7","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-NXj-Rqjv.js","utils-m0thOP-_.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-D13EKcfm.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema--XTdfsEb.js","snippetPresets-D3s4lmAH.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-ChURybxL.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-DL8CiXq2.js","shallow-DI2-YB2E.js","getApiPlaygroundDisplay-DxbW7b_y.js","CodeSnippet-CiNYS0pP.js","CodeSnippets-BT87bThu.js","Page-DSpdRuhM.js","getPastedJson-F_g_IrFQ.js","icon-CCIG5BAs.js","MethodPill-DY3E0jwx.js","DuplicateIcon-BN88xnEg.js","createIcon-VCCc5HO5.js","DynamicMarkdown-CaSwclgK.js","SectionHeading-DXV8nWhc.js","axios-vUo_bRtp.js","zoom-image-lightbox-BLUesUNd.js","lightbox-handle-r17bVUz3.js","Markdown-CV32Re6G.js","clsx-5ydLOnhV.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-pFDdfjRe.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BUGO5bPJ.js"]}