View as Markdown

CandidateLaunch

POST/v2/candidate/launch
Base URL
https://us1.proctorapi.com
Available Regions10 regions
Creates a Candidate URL.
application/json

Body

The Candidate request to create a Candidate URL.

pre_auth
string
Url used to pre-authenticate Candidate on MobileExam application.
launch_url
stringRequired
Must contain a valid absolute URL, that fully launches to the exam start page with no additional authentication. The "launch_url" value should be included in the "exam_start" regex pattern, alongside any of the redirects.
exam_start
stringRequired
Regular expression to match the exam start page. Any pages before this will be considered pre-exam pages and will be ignored. This is the URL that the Candidate is on before they begin the exam. The "launch_url" value should be included in the "exam_start" regex pattern, alongside any of the redirects.
exam_take
stringRequired

Must be a regular expression to match the in-exam page URLs (the URL of the exam), and any redirects. In cases where there are questions on multiple pages, this is important. Anything else visited that does not match this or the exam_end parameter will be considered leaving the exam and the session will be considered complete.

In case URLs don't reflect the exam state (Single-page applications), the postMessage method can be used, to communicate the exam_take state to the Proctorio extension via:

window.top.postMessage( ["exam_state_change", "exam_take"], "https://getproctorio.com" );

When using the postMessage method the "exam_take" should have a "post_message_nofication" value.

exam_end
stringRequired

Must be a regular expression to match the exam end page (the URL the Candidate is taken to once the exam has been completed) and any possible redirect. This triggers the end of the proctoring session and considers that the exam has been submitted. Anything else visited that does not match this or the exam_take parameter will be considered leaving the exam and the proctoring session will end but the attempt won't be considered as gracefully submitted.

In case URLs don't reflect the exam state (Single-page applications), the postMessage method can be used, to communicate the exam_end state to the Proctorio extension via:

window.top.postMessage( ["exam_state_change", "exam_end"], "https://getproctorio.com" );

When using the postMessage method the "exam_end" should have a "post_message_nofication" value.

expire
integer(int32)
Number of seconds before the Candidate URL is no longer valid. The default value for this parameter is 18000 seconds. If a value is not passed, the default value will be applied. Must be an integer value.
Minimum value is 1, Maximum value is 18000.
exam_settings
objectRequired
Show 30 exam_settings attributesHide exam_settings attributes
record_video
boolean
Requires the Candidate to have a webcam and will record the video for the entire duration of the exam.
record_audio
boolean
Requires the Candidate to have a microphone and will record audio for the entire exam duration of the exam.
record_screen
boolean
Will capture and record the full desktop screen for the entire duration of the exam.
record_web_traffic
boolean
Will capture screenshots and URLs of any websites visited during the exam.
record_desk
integer(int32)

0 - Setting is turned off.

1 - Requires the Candidate to perform a desk scan at periodic intervals during the exam, first scan is at the start of the exam. Subsequent scans are triggered at periodic intervals, typically between 30 to 45 minutes after the previous one. Requires the following settings to be set to true: record_video, verify_video.

2 - Requires the Candidate to perform a desk scan at the start of the exam. Requires the following settings to be set to true: record_video, verify_video.

Values are 0, 1, 2.
verify_video
boolean
Will ensure that the webcam is working and it is not virtualized or broken. Requires the following settings to be set to true: record_video.
verify_audio
boolean
Will ensure that the microphone is working and it is not virtualized or muted. Requires the following settings to be set to true: record_audio.
verify_desktop
boolean
Will ensure that the desktop recording is working and is being properly recorded. Requires the following settings to be set to true: record_screen.
verify_id
integer(int32)

0 - Setting is turned off.

1 - Requires the Candidate to present photo identification prior to starting the exam which will be automatically scanned.

2 - Requires the Candidate to present photo identification prior to starting the exam. The ID is then reviewed and verified by a Proctorio agent before they are allowed into the exam. Requires the following settings to be set to true: record_video, verify_video.

Values are 0, 1, 2.
verify_signature
boolean
Requires the Candidate to sign an agreement before exam start.
full_screen
integer(int32)

0 - Setting is turned off.

1 - Forces the exam in fullscreen, preventing access to other applications and websites. Navigating away from the exam page for more than 15 seconds (cumulatively) results in removal from the exam. Requires the following settings to be set to true: close_tabs, one_screen. Requires that tabs has value 1.

2 - Forces the exam in fullscreen, preventing access to other applications and websites. Navigating away from the exam page for more than 30 seconds (cumulatively) results in removal from the exam. Requires the following settings to be set to true: close_tabs, one_screen. Requires that tabs has value 1.

3 - Forces the exam in fullscreen, preventing access to other applications and websites. Navigating away from the exam page results in instant removal from the exam. Requires the following settings to be set to true: close_tabs, one_screen. Requires that tabs has value 1.

Values are 0, 1, 2, 3.
disable_clipboard
boolean
Disables copy/paste functionality.
tabs
integer(int32)

0 - Setting is turned off.

1 - Disables new tabs or windows during the exam.

2 - Disables new tabs or windows during the exam except links embedded in the exam page.

Values are 0, 1, 2.
close_tabs
boolean
Forces all other tabs and windows to be closed before the exam starts.
one_screen
boolean
Forces the Candidate to disable all but one monitor before starting the exam and prevents them from connecting additional monitors during the exam.
disable_printing
boolean
Disables printing exam content to prevent exam distribution.
block_downloads
boolean
Prevents the Candidate from downloading files through the browser.
clear_cache
boolean
Empties system temporary files after the exam is submitted.
disable_right_click
boolean
Disables right click functionalities.
calculator
integer(int32)

0 - Setting is turned off.

1 - Provides the Candidate with an on-screen calculator with basic functions.

2 - Provides the Candidate with an on-screen calculator with scientific functions.

3 - Provides the Candidate with an on-screen calculator with graphing functions.

Values are 0, 1, 2, 3.
whiteboard
boolean
Provides the Candidate with a scratch pad and drawing tools on-screen.
disable_extensions
boolean
Will prevent the Candidate from using other browser extensions during the exam except for allowlisted ones.
live_proctor
boolean
This setting will allow a Proctor to monitor the Candidate during the exam and allow immediate intervention. Also, the full recording and report will be available via the Proctorio Review Center. Requires the following settings to be set to true: record_video, verify_video.
mobile
boolean
Allows exam to be taken on mobile device, using MobileExam application. Requires use of pre_auth in launch request. Not compatible with verify_id: 2 setting
advanced_program_detection
boolean
Prevents use of other applications during exam. Requires use of the Secure Companion application.
advanced_hardware_detection
boolean
Logs hardware changes during exam in the Review Center. Requires use of the Secure Companion application.
advanced_vm_detection
boolean
Prevents use of virtual machine to take exam. Requires use of the Secure Companion application.
allowed_macos_apps
array[string]
List maximum of 10 allowed applications that can remain open when advanced_program_detection is used. Applications are identified by bundle ID on MacOS.
allowed_windows_apps
array[object]
List maximum of 10 allowed applications that can remain open when advanced_program_detection is used. Applications are identified by binary_name, product_name and company_name on Windows.
Show 3 allowed_windows_apps attributesHide allowed_windows_apps attributes
binary_name
string
The binary name of the application.
product_name
string
The product name of the application.
company_name
string
The company name of the application.
strict_apps_validation
integer(int32)

Sets the strictness level for validating allowed applications when advanced_program_detection, allowed_macos_apps and allowed_windows_apps are used.

0 - Setting is turned off.

1 - Default validation.

Values are 0, 1.
record_desk_option
integer(int32)
Values are 0, 1, 2.
redirect_url
string
The redirect_url parameter is optional. If provided, the Candidate will be redirected to this URL after successfully submitting the exam. Also, it will allow the Candidate to be redirected to that URL when they click the "Okay" button within the "Attempt End" message if the Candidate ended the attempt ungracefully.
redirect_settings
object
Show 2 redirect_settings attributesHide redirect_settings attributes
graceful_submission_url
string
After graceful/successful submission of the exam Candidate will be redirected to graceful_submission_url.
ungraceful_submission_url
string
After ungraceful exam end, Candidate will be redirected to ungraceful_submission_url when they click the "Okay" button within the "Attempt End" message.
attempt_id
string
The unique identifier for a specific attempt of the Candidate. Must contain an alphanumeric (hyphens also acceptable) value. The "attempt_id" value should be reused when generating a new Candidate URL, for the Candidate that is resuming the same attempt on the learning platform.
Format should match: ^[a-zA-Z0-9-]*$.
domain
string

The "domain" parameter is optional. By utilizing "domain", the exam pages as well as the Reviewer Center will load with your desired domain.

The URL will no longer point to the https://getproctorio.com page. Instead, the Candidates/Reviewers will be directed to the new route you provided in the parameter, example: https://yourdomain.com.

This allows the utilization of additional cross-origin security mechanisms, which use the SameSite cookies or X-Frame-Options: SAMEORIGIN header. It will also provide the ability to prevent data loss in session or local storage related to storage partitioning browser functionality.

The https://getproctorio.com page has the following functionalities: Check if a Candidate/Reviewer has the supported browser installed. Check if a Candidate/Reviewer has the Proctorio extension installed. To keep these functionalities, a link to https://getproctorio.com with content describing the purpose of getproctorio.com is necessary on the institution's page.

display_name
string
Only to be used when "roster_url" and "user_id" do not contain Candidates name. The "display_name" information is NOT saved, and will not be available in the Review Center for Reviewer or for Proctor. It is used only for the Live ID verification and Exam Agreement on the Candidate side.
extension_allowlist_url
string

Extension Allowlist endpoint URL. Http Method: GET. The response should be a JSON stringified array. For example: '[extensionID1,extensionID2]'.

The extension_allowlist_url can be used for Candidates that have force enabled extensions in the browser by institution. These extensions can't be disabled manually by Candidate.

The 'extensionID' value should correspond to ID of the extension that will be allowed to remain active during Proctored attempt.

break_settings
object
Show 5 break_settings attributesHide break_settings attributes
number
objectRequired
Defines the number of breaks allowed.
Minimum value is 1, Maximum value is 10.
duration
objectRequired
Defines the duration of the break.
Minimum value is 1, Maximum value is 30.
cumulative
boolean
Indicates if the duration of the break is shared between breaks (true) or defined per break (false).
on_time_exceeded
integer(int32)

Action to take if the break time is exceeded.

0 - Break time can be exceeded.

1 - If time of the break is exceeded Candidate will be removed from the exam

Values are 0, 1.
desk_scan_after_break
boolean
Indicates if a desk scan is required after the break.
branding
object
Show 3 branding attributesHide branding attributes
primary_color
string
The hex color code specifies the primary color for some user-interface controls. The value must be a six-digit code, without the #. Allows a learning platform to align its own color scheme with Proctorio colors and emphasize its brand in the header. Must be a string value.
Format should match: ^[a-zA-Z0-9]*$.
secondary_color
string
The hex color code specifies the secondary color for some user-interface controls. The value must be a six-digit code, without the #. Allows a learning platform to align its own color scheme with Proctorio colors and emphasize its brand. Must be a string value.
Format should match: ^[a-zA-Z0-9]*$.
logo_url
string
Custom logo endpoint URL. Http Method: GET. The response should be an image. CORS safe. Height of the logo will be 32px, width is flexible.
post_auth
string
Post_auth requires pre_auth. It is used after pre-auth, once the Candidate is already logged into the platform. This parameter defines the point at which it is expect prechecks to start. After the prechecks are completed, the Candidate is sent to the launch_url.
pre_auth_bypass
boolean
The pre_auth_bypass is optional. When used and set to true, it allows bypassing pre-authentication for Candidate on MobileExam application.
user_id
stringRequired
Must contain an alphanumeric (hyphens also acceptable) value, unique to this specific user.
Format should match: ^[a-zA-Z0-9-]*$.
exam_tag
string
This is the exam ID tag and will be added to the end of the URL. The exam_tag can't contain spacing and it can't contain NON-ASCII characters. If used, then Proctorio factors it into the response. If it is not used, a URL will be generated without the hash and needs to be added by the learning platform prior to usage. Proctorio recommends using the roster_url when the exam_tag is not provided.
Format should match: ^(?!goodbye$|support$|update$|setup$|invalid$).*.
section_id
string

Represents a course ID or a section ID value. This parameter is optional. It provides a more granular sorting of the exams.

That means that exams that have the same "exam_tag" but different "section_id", will be treated like different exams.

The "section_id" parameter is dependent upon the "roster_url" parameter, and it can't be used without it.

roster_url
string

Roster endpoint URL. Http Method: GET. The response should be a JSON stringified array. For example: '[["id1","name1"],["id2","name2"]]'

The "id" value should correspond to the "userId" parameter, be unique to the Candidate, and non-repeatable within the roster.

The roster endpoint is validated by Proctorio, so that means that if an invalid endpoint is provided or if "userId" doesn't match any "id" value inside the array, the attempts will be marked as "Unmatched" in the Review Center.

The roster_url is only fetched by the end user accessing the Review Center or the Exam Agreement page, client-side, not by Proctorio directly. That means that it can be secured with the session for that particular user. This is intentional, and as such there is no need for the PII to be passed to Proctorio at any point, whether that be a Candidate Launch request or a Reviewer Launch request.

Responses

200application/json

Indicates success and returns a Candidate URL.

400application/json

Indicates bad request.

401application/json

Indicates unauthorized response.

2154 - Account not active.

2155 - Incorrect region.

2655 - Invalid api_key.

POST/v2/candidate/launch
curl --request POST \
  --url https://us1.proctorapi.com/v2/candidate/launch \
  --header 'Content-Type: application/json' \
  --header 'api_key: $API_KEY' \
  --data '{"launch_url":"https://example.com/exam","exam_start":"https://example.com/exam","exam_take":"https://example.com/exam","exam_end":"https://example.com/exam","exam_settings":{"record_video":true,"record_audio":false,"record_screen":false,"verify_video":false},"user_id":"example-id-123"}'
import requests

url = "https://us1.proctorapi.com/v2/candidate/launch"

payload = {
    "launch_url": "https://example.com/exam",
    "exam_start": "https://example.com/exam",
    "exam_take": "https://example.com/exam",
    "exam_end": "https://example.com/exam",
    "exam_settings": {
        "record_video": True,
        "record_audio": False,
        "record_screen": False,
        "verify_video": False
    },
    "user_id": "example-id-123"
}
headers = {
    "api_key": "$API_KEY",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
const fetch = require('node-fetch');

const url = 'https://us1.proctorapi.com/v2/candidate/launch';
const options = {
  method: 'POST',
  headers: {api_key: '$API_KEY', 'Content-Type': 'application/json'},
  body: '{"launch_url":"https://example.com/exam","exam_start":"https://example.com/exam","exam_take":"https://example.com/exam","exam_end":"https://example.com/exam","exam_settings":{"record_video":true,"record_audio":false,"record_screen":false,"verify_video":false},"user_id":"example-id-123"}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
    Method = HttpMethod.Post,
    RequestUri = new Uri("https://us1.proctorapi.com/v2/candidate/launch"),
    Headers =
    {
        { "api_key", "$API_KEY" },
    },
    Content = new StringContent("{\"launch_url\":\"https://example.com/exam\",\"exam_start\":\"https://example.com/exam\",\"exam_take\":\"https://example.com/exam\",\"exam_end\":\"https://example.com/exam\",\"exam_settings\":{\"record_video\":true,\"record_audio\":false,\"record_screen\":false,\"verify_video\":false},\"user_id\":\"example-id-123\"}")
    {
        Headers =
        {
            ContentType = new MediaTypeHeaderValue("application/json")
        }
    }
};
using (var response = await client.SendAsync(request))
{
    response.EnsureSuccessStatusCode();
    var body = await response.Content.ReadAsStringAsync();
    Console.WriteLine(body);
}
Request examples
{
  "launch_url": "https://example.com/exam",
  "exam_start": "https://example.com/exam",
  "exam_take": "https://example.com/exam",
  "exam_end": "https://example.com/exam",
  "exam_settings": {
    "record_video": true,
    "record_audio": false,
    "record_screen": false,
    "verify_video": false
  },
  "user_id": "example-id-123"
}