Bulk Provision Data
curl --request POST \
--url https://api.smarterproctoring.com/v2/installs/{installSid}/provision \
--header 'Content-Type: application/json' \
--header 'token: <api-key>' \
--data '
{
"course": {
"ids": {
"sid": "<string>",
"api": "<string>",
"lms": "<string>",
"external": "<string>"
},
"title": "<string>",
"code": "<string>"
},
"enrollment": "<unknown>"
}
'import requests
url = "https://api.smarterproctoring.com/v2/installs/{installSid}/provision"
payload = {
"course": {
"ids": {
"sid": "<string>",
"api": "<string>",
"lms": "<string>",
"external": "<string>"
},
"title": "<string>",
"code": "<string>"
},
"enrollment": "<unknown>"
}
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({
course: {
ids: {sid: '<string>', api: '<string>', lms: '<string>', external: '<string>'},
title: '<string>',
code: '<string>'
},
enrollment: '<unknown>'
})
};
fetch('https://api.smarterproctoring.com/v2/installs/{installSid}/provision', 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/v2/installs/{installSid}/provision",
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([
'course' => [
'ids' => [
'sid' => '<string>',
'api' => '<string>',
'lms' => '<string>',
'external' => '<string>'
],
'title' => '<string>',
'code' => '<string>'
],
'enrollment' => '<unknown>'
]),
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/v2/installs/{installSid}/provision"
payload := strings.NewReader("{\n \"course\": {\n \"ids\": {\n \"sid\": \"<string>\",\n \"api\": \"<string>\",\n \"lms\": \"<string>\",\n \"external\": \"<string>\"\n },\n \"title\": \"<string>\",\n \"code\": \"<string>\"\n },\n \"enrollment\": \"<unknown>\"\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/v2/installs/{installSid}/provision")
.header("token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"course\": {\n \"ids\": {\n \"sid\": \"<string>\",\n \"api\": \"<string>\",\n \"lms\": \"<string>\",\n \"external\": \"<string>\"\n },\n \"title\": \"<string>\",\n \"code\": \"<string>\"\n },\n \"enrollment\": \"<unknown>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.smarterproctoring.com/v2/installs/{installSid}/provision")
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 \"course\": {\n \"ids\": {\n \"sid\": \"<string>\",\n \"api\": \"<string>\",\n \"lms\": \"<string>\",\n \"external\": \"<string>\"\n },\n \"title\": \"<string>\",\n \"code\": \"<string>\"\n },\n \"enrollment\": \"<unknown>\"\n}"
response = http.request(request)
puts response.read_body"<string>"Batch Provision
Provisions multiple types of data (e.g., courses, exams, enrollments) in a single bulk operation for the specified install.
POST
/
v2
/
installs
/
{installSid}
/
provision
Bulk Provision Data
curl --request POST \
--url https://api.smarterproctoring.com/v2/installs/{installSid}/provision \
--header 'Content-Type: application/json' \
--header 'token: <api-key>' \
--data '
{
"course": {
"ids": {
"sid": "<string>",
"api": "<string>",
"lms": "<string>",
"external": "<string>"
},
"title": "<string>",
"code": "<string>"
},
"enrollment": "<unknown>"
}
'import requests
url = "https://api.smarterproctoring.com/v2/installs/{installSid}/provision"
payload = {
"course": {
"ids": {
"sid": "<string>",
"api": "<string>",
"lms": "<string>",
"external": "<string>"
},
"title": "<string>",
"code": "<string>"
},
"enrollment": "<unknown>"
}
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({
course: {
ids: {sid: '<string>', api: '<string>', lms: '<string>', external: '<string>'},
title: '<string>',
code: '<string>'
},
enrollment: '<unknown>'
})
};
fetch('https://api.smarterproctoring.com/v2/installs/{installSid}/provision', 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/v2/installs/{installSid}/provision",
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([
'course' => [
'ids' => [
'sid' => '<string>',
'api' => '<string>',
'lms' => '<string>',
'external' => '<string>'
],
'title' => '<string>',
'code' => '<string>'
],
'enrollment' => '<unknown>'
]),
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/v2/installs/{installSid}/provision"
payload := strings.NewReader("{\n \"course\": {\n \"ids\": {\n \"sid\": \"<string>\",\n \"api\": \"<string>\",\n \"lms\": \"<string>\",\n \"external\": \"<string>\"\n },\n \"title\": \"<string>\",\n \"code\": \"<string>\"\n },\n \"enrollment\": \"<unknown>\"\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/v2/installs/{installSid}/provision")
.header("token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"course\": {\n \"ids\": {\n \"sid\": \"<string>\",\n \"api\": \"<string>\",\n \"lms\": \"<string>\",\n \"external\": \"<string>\"\n },\n \"title\": \"<string>\",\n \"code\": \"<string>\"\n },\n \"enrollment\": \"<unknown>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.smarterproctoring.com/v2/installs/{installSid}/provision")
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 \"course\": {\n \"ids\": {\n \"sid\": \"<string>\",\n \"api\": \"<string>\",\n \"lms\": \"<string>\",\n \"external\": \"<string>\"\n },\n \"title\": \"<string>\",\n \"code\": \"<string>\"\n },\n \"enrollment\": \"<unknown>\"\n}"
response = http.request(request)
puts response.read_body"<string>"Batch Provision Endpoint
The Batch Provision endpoint provides a powerful and efficient way to create multiple proctoring resources in a single API call. This streamlined approach allows Learning Management Systems (LMS) and assessment platforms to provision large volumes of data with SmarterProctoring while minimizing network overhead and simplifying integration workflows.Overview
With the Batch Provision endpoint, you can simultaneously provision and manage:- Courses: Create course information including metadata, instructors, and configuration
- Users: Provision students, instructors, and administrators with appropriate roles and permissions
- Exams: Set up assessment details with specific proctoring requirements and settings
Implementation Guidance
When implementing the Batch Provision endpoint, consider structuring your requests to group related resources together and include all necessary reference identifiers to establish proper relationships between entities.Response Features
In addition to confirmation of provisioned resources, the response includes:- SSO Links: Secure Single Sign-On (SSO) links for users that can be used to provide direct access to the SmarterProctoring platform without requiring additional authentication steps
Sample Request Payloads
Create Course and Exam
Create Course and Exam
Create a course and exam if they do not already exist.
{
"course": {
"ids": {
"api": "sample"
},
"title": "Sample Course",
"code": "sample"
},
"exam": {
"ids": {
"external": "exam-1"
},
"title": "Sample Exam",
"description": "This is just a sample exam.",
"type": "online",
"practice": false,
"limitedScope": false,
"deliverySystem": "",
"configuration": {
"ids": {
"api": "config-1"
},
"type": "primary",
"url": "https://validurl.com",
"access": {
"open": "2025-02-16T17:00:00Z",
"close": "2025-02-20T17:00:00Z"
},
"scheduling": {
"open": "",
"close": ""
},
"duration": 60,
"password": "a8wlquoaois",
"attempts": 1,
"notes": {
"student": "student notes",
"proctor": "proctor notes"
},
"proctorTypes": {
"TS6d6011935f4646848ea4f7a29b4f61a5": {
"options": {
"recordScreen": {},
"recordWebcam": {},
"recordAudio": {},
"forceFullScreen": {},
"onlyOneScreen": {},
"disableNewTabs": {},
"closeOpenTabs": {},
"disablePrinting": {},
"disableClipboard": {},
"disableRightClick": {},
"verifyId": {},
"roomScan": {}
}
}
},
"permittedItems": {
"bathroomBreak": {
"notes": "Porta-potty is out back."
},
"calculator": {
"notes": "TI-85"
},
"dictionary": {
"notes": "Only Nish dictionaries"
},
"earplugs": {
"notes": "Things will get loud!"
},
"formulaSheet": {
"notes": ""
},
"notes": {
"notes": "handwritten only, nothing in print"
},
"textbook": {
"notes": "Just the book \"Cultural Toolbox\" by Anton Treuer"
},
"websites": {
"notes": ""
}
}
}
}
Enroll Student Only
Enroll Student Only
Enroll a student into an existing course, and ensure a signon link is returned so the user can access the system.
{
"course": {
"ids": {
"sid": "CU8b2d9c5ef3e8471ab6cf19509beac183"
}
},
"user": {
"ids": {
"api": "john-doe-123"
},
"firstName": "John",
"lastName": "Doe",
"email": "john.doe@smarterservices.com",
"currencyCode": "USD",
"timeZone": "America/New_York"
},
"enrollment": {
"role": "learner"
},
"signon": {
"integrationSid": "IIf5a9128504e251fad9e4a38dc0813f74"
}
}
Request Parameters
The Batch Provision endpoint accepts a JSON payload containing the following parameters:Authorizations
Path Parameters
Install Sid
Pattern:
^AI[a-f0-9]{32}$Body
application/json
Course data
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Enrollment object is optional but can only exist if user is provided.
Exam schema ensuring required and optional fields meet validation criteria.
Show child attributes
Show child attributes
Optional signon object.. If provided, integrationSid must be present. This will return the signon information to redirect the user to.
Show child attributes
Show child attributes
Response
default - application/json
Successful
The response is of type string.
Was this page helpful?
