curl --request POST \
--url https://api.smarterproctoring.com/v1/installs/{installSid}/courseOfferings \
--header 'Content-Type: application/json' \
--header 'token: <api-key>' \
--data '
{
"title": "Fall 2024",
"matchStrings": "Fall 2024,FA24",
"startDate": "1970-01-01T00:00:00.000Z",
"endDate": "1970-01-01T00:00:00.000Z"
}
'import requests
url = "https://api.smarterproctoring.com/v1/installs/{installSid}/courseOfferings"
payload = {
"title": "Fall 2024",
"matchStrings": "Fall 2024,FA24",
"startDate": "1970-01-01T00:00:00.000Z",
"endDate": "1970-01-01T00:00:00.000Z"
}
headers = {
"token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {token: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Fall 2024',
matchStrings: 'Fall 2024,FA24',
startDate: '1970-01-01T00:00:00.000Z',
endDate: '1970-01-01T00:00:00.000Z'
})
};
fetch('https://api.smarterproctoring.com/v1/installs/{installSid}/courseOfferings', 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.smarterproctoring.com/v1/installs/{installSid}/courseOfferings",
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([
'title' => 'Fall 2024',
'matchStrings' => 'Fall 2024,FA24',
'startDate' => '1970-01-01T00:00:00.000Z',
'endDate' => '1970-01-01T00:00:00.000Z'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"token: <api-key>"
],
]);
$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.smarterproctoring.com/v1/installs/{installSid}/courseOfferings"
payload := strings.NewReader("{\n \"title\": \"Fall 2024\",\n \"matchStrings\": \"Fall 2024,FA24\",\n \"startDate\": \"1970-01-01T00:00:00.000Z\",\n \"endDate\": \"1970-01-01T00:00:00.000Z\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("token", "<api-key>")
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.smarterproctoring.com/v1/installs/{installSid}/courseOfferings")
.header("token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"Fall 2024\",\n \"matchStrings\": \"Fall 2024,FA24\",\n \"startDate\": \"1970-01-01T00:00:00.000Z\",\n \"endDate\": \"1970-01-01T00:00:00.000Z\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.smarterproctoring.com/v1/installs/{installSid}/courseOfferings")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"Fall 2024\",\n \"matchStrings\": \"Fall 2024,FA24\",\n \"startDate\": \"1970-01-01T00:00:00.000Z\",\n \"endDate\": \"1970-01-01T00:00:00.000Z\"\n}"
response = http.request(request)
puts response.read_body{
"sid": "<string>",
"lastActivityDate": "<string>",
"title": "<string>",
"matchStrings": [
"<string>"
],
"startDate": "<string>",
"endDate": "<string>",
"createdDate": "<string>",
"editDate": "<string>"
}Create Course Offering
Creates a new course offering (e.g., semester, term, or academic period) under the specified application install.
The matchStrings field is used to automatically match incoming courses from the LMS to this offering based on text patterns.
curl --request POST \
--url https://api.smarterproctoring.com/v1/installs/{installSid}/courseOfferings \
--header 'Content-Type: application/json' \
--header 'token: <api-key>' \
--data '
{
"title": "Fall 2024",
"matchStrings": "Fall 2024,FA24",
"startDate": "1970-01-01T00:00:00.000Z",
"endDate": "1970-01-01T00:00:00.000Z"
}
'import requests
url = "https://api.smarterproctoring.com/v1/installs/{installSid}/courseOfferings"
payload = {
"title": "Fall 2024",
"matchStrings": "Fall 2024,FA24",
"startDate": "1970-01-01T00:00:00.000Z",
"endDate": "1970-01-01T00:00:00.000Z"
}
headers = {
"token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {token: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Fall 2024',
matchStrings: 'Fall 2024,FA24',
startDate: '1970-01-01T00:00:00.000Z',
endDate: '1970-01-01T00:00:00.000Z'
})
};
fetch('https://api.smarterproctoring.com/v1/installs/{installSid}/courseOfferings', 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.smarterproctoring.com/v1/installs/{installSid}/courseOfferings",
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([
'title' => 'Fall 2024',
'matchStrings' => 'Fall 2024,FA24',
'startDate' => '1970-01-01T00:00:00.000Z',
'endDate' => '1970-01-01T00:00:00.000Z'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"token: <api-key>"
],
]);
$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.smarterproctoring.com/v1/installs/{installSid}/courseOfferings"
payload := strings.NewReader("{\n \"title\": \"Fall 2024\",\n \"matchStrings\": \"Fall 2024,FA24\",\n \"startDate\": \"1970-01-01T00:00:00.000Z\",\n \"endDate\": \"1970-01-01T00:00:00.000Z\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("token", "<api-key>")
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.smarterproctoring.com/v1/installs/{installSid}/courseOfferings")
.header("token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"title\": \"Fall 2024\",\n \"matchStrings\": \"Fall 2024,FA24\",\n \"startDate\": \"1970-01-01T00:00:00.000Z\",\n \"endDate\": \"1970-01-01T00:00:00.000Z\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.smarterproctoring.com/v1/installs/{installSid}/courseOfferings")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"Fall 2024\",\n \"matchStrings\": \"Fall 2024,FA24\",\n \"startDate\": \"1970-01-01T00:00:00.000Z\",\n \"endDate\": \"1970-01-01T00:00:00.000Z\"\n}"
response = http.request(request)
puts response.read_body{
"sid": "<string>",
"lastActivityDate": "<string>",
"title": "<string>",
"matchStrings": [
"<string>"
],
"startDate": "<string>",
"endDate": "<string>",
"createdDate": "<string>",
"editDate": "<string>"
}Authorizations
Path Parameters
Unique SID of the application install. Pattern: AI + 32 hex chars.
^AI[a-f0-9]{32}$"AI1234567890abcdef1234567890abcdef"
Body
Payload for creating a new course offering
Human-readable title for the course offering (e.g., semester or term name).
"Fall 2024"
Comma-separated list of text patterns used to automatically match incoming LMS courses to this offering.
"Fall 2024,FA24"
Start Date
.*Z"1970-01-01T00:00:00.000Z"
End Date
.*Z"1970-01-01T00:00:00.000Z"
Response
Successful
Course offering SID
Last activity date
Offering title
Match strings for auto-matching
Start date
End date
Created date
Last modified date
Was this page helpful?
