curl --request POST \
--url https://api.kombo.dev/v1/lms/course-progressions/{course_progression_id}/complete \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Integration-Id: <x-integration-id>' \
--data '
{
"completed_at": "2024-04-15",
"score": 93
}
'import requests
url = "https://api.kombo.dev/v1/lms/course-progressions/{course_progression_id}/complete"
payload = {
"completed_at": "2024-04-15",
"score": 93
}
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({completed_at: '2024-04-15', score: 93})
};
fetch('https://api.kombo.dev/v1/lms/course-progressions/{course_progression_id}/complete', 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/course-progressions/{course_progression_id}/complete",
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([
'completed_at' => '2024-04-15',
'score' => 93
]),
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/course-progressions/{course_progression_id}/complete"
payload := strings.NewReader("{\n \"completed_at\": \"2024-04-15\",\n \"score\": 93\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/course-progressions/{course_progression_id}/complete")
.header("X-Integration-Id", "<x-integration-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"completed_at\": \"2024-04-15\",\n \"score\": 93\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.kombo.dev/v1/lms/course-progressions/{course_progression_id}/complete")
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 \"completed_at\": \"2024-04-15\",\n \"score\": 93\n}"
response = http.request(request)
puts response.read_body{
"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!"
}
]
}Complete course
Mark a course revision as completed for a user.
curl --request POST \
--url https://api.kombo.dev/v1/lms/course-progressions/{course_progression_id}/complete \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-Integration-Id: <x-integration-id>' \
--data '
{
"completed_at": "2024-04-15",
"score": 93
}
'import requests
url = "https://api.kombo.dev/v1/lms/course-progressions/{course_progression_id}/complete"
payload = {
"completed_at": "2024-04-15",
"score": 93
}
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({completed_at: '2024-04-15', score: 93})
};
fetch('https://api.kombo.dev/v1/lms/course-progressions/{course_progression_id}/complete', 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/course-progressions/{course_progression_id}/complete",
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([
'completed_at' => '2024-04-15',
'score' => 93
]),
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/course-progressions/{course_progression_id}/complete"
payload := strings.NewReader("{\n \"completed_at\": \"2024-04-15\",\n \"score\": 93\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/course-progressions/{course_progression_id}/complete")
.header("X-Integration-Id", "<x-integration-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"completed_at\": \"2024-04-15\",\n \"score\": 93\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.kombo.dev/v1/lms/course-progressions/{course_progression_id}/complete")
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 \"completed_at\": \"2024-04-15\",\n \"score\": 93\n}"
response = http.request(request)
puts response.read_body{
"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!"
}
]
}Supported integrations
Supported integrations
Example Request Body
{
"completed_at": "2024-04-15",
"score": 93
}
Authorizations
Headers
ID of the integration you want to interact with.
Path Parameters
The ID of the course progression in Kombo or its ID in the remote system by prefixing it with remote: (e.g., remote:12312)
Body
POST /lms/course-progressions/:course_progression_id/complete Request body
Date when the user completed the course revision. Defaults to the current date if not provided.
^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$Score the user achieved for the course, as an integer between 0 and 100 (inclusive).
0 <= x <= 100Response
POST /lms/course-progressions/:course_progression_id/complete Positive response
"success"Show child attributes
Show child attributes
{
"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"
}
}
}
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
Show child attributes
Was this page helpful?