Overview
The ProctorU Record+ V2 API allows institutions to fully manage online exam delivery, student accommodations, and reservation workflows through API calls. Record+ V2 provides a complete set of endpoints for secure exam administration, flexible student management, and seamless integration with institutional systems.
Swagger Documentation:
Demo: https://demo.proctoru.com/api-docs/v2/index.html
Staging: https://staging.proctoru.com/api-docs/v2/index.html
Production: https://go.proctoru.com/api-docs/v2/index.html
Prerequisites
Note: The following items are configured by the Meazure Learning Implementation Team during onboarding.
- Institution Setup – An Institution must be created in the ProctorU application.
- Department Configuration – A Department will be created by the Implementation Team or Institution Administrator. The department service line must be set to Auto with Professional Review.
- API Token – The Institution will receive an API Token required for authenticating all API requests.
Integration Workflow
The Record+ V2 API supports the following workflow:
- Authentication – Use the API token to authorize requests
- Institution Identification – Retrieve institution UUID and name
- Global Accommodations – Fetch predefined accommodations available across institutions
- User Management – Create, update, fetch, and delete users
- Test-taker Accommodations – Add, update, or delete accommodations for individual users
- Exam Management – Create, update, and fetch exams within the institution
- Reservations (Grants) – Create, schedule, retrieve, and consume exam reservations for students
Authentication
Include the API token in the header of every request:
Authorization-Token: your-api-token-here
API Endpoints
Get Institution Info
Endpoint: GET /api/v2/whoami?institution_uuid={institution_uuid}
Returns the Institution UUID and name for the authenticated token.
Sample Response:
{
"institution": {
"uuid": "ba3a3c9e-1dc6-461e-a30d-f9a9f9a891f9",
"name": "Test Institution"
}
}
User Management
Create User
Endpoint: POST /api/v2/users
Creates a new user and enrolls them in the institution.
Required Parameters:
| Parameter | Description |
|---|---|
| User's email address | |
| first_name | User's first name |
| last_name | User's last name |
| timezone | User's timezone (e.g., America/Chicago) |
| external_id | Institution's unique ID for the user |
| roles | Array of role objects (e.g., "student") |
Optional Parameters:
| Parameter | Description |
|---|---|
| country | User's country code |
| phone | User's phone number |
| address | User's street address |
| city | User's city |
| state_or_province | User's state code |
| postal_code | User's ZIP or postal code |
| user_password | Password for the user account |
Sample Request:
{
"email": "student@example.com",
"first_name": "Jane",
"last_name": "Doe",
"timezone": "America/Chicago",
"external_id": "12345",
"roles": [{ "role": "student" }],
"user_password": "SecurePass@123"
}
Update User
Endpoint: PUT /api/v2/email/users/{email}
Updates an existing user's details. Email cannot be changed — it is the identifier in the URL path.
Fetch User Information
Endpoint: GET /api/v2/email/users/{email}
Returns user information for the specified email address.
Delete User
Endpoint: DELETE /api/v2/email/users/{email}
Deletes the user associated with the specified email address.
User Accommodations
Step 1 – Get Global Accommodations
Endpoint: GET /api/v2/accommodations
Returns a list of all predefined global accommodations available across institutions. Use the returned IDs when assigning accommodations to students.
Sample Response:
{
"accommodations": [
{ "id": 50474, "description": "Additional exam time (proctor will refer to time on LMS/Test driver)" },
{ "id": 50478, "description": "Food permitted" },
{ "id": 50473, "description": "Human assistant during exam (such as scribe or reader)" },
{ "id": 50475, "description": "Permitted background noise such as a radio or television" }
]
}
Step 2 – Manage Student Accommodations
Endpoint: PUT /api/v2/email/users/{email}/accommodations
Creates, updates, or deletes accommodations for an individual student. Submitting this endpoint replaces the student's existing accommodations.
| Parameter | Description | Notes |
|---|---|---|
| global | Array of global accommodation IDs | Use IDs from Step 1 |
| custom | Array of custom accommodation strings | Free text descriptions |
Sample Request:
{
"accommodations": {
"global": [50472, 50479],
"custom": ["Additional time for reading", "Custom accommodation"]
}
}
Response:
{ "success": true }
Exam Management
Get Departments
Endpoint: GET /api/v2/departments
Returns all departments for the institution. Use the department_id when creating exams.
Create Exam
Endpoint: POST /api/v2/institutions/{institution_uuid}/exams
Creates a new exam and its iterations within a department.
Required Parameters:
| Parameter | Description |
|---|---|
| name | Exam name displayed in the ProctorU platform |
| exam_url | URL where the test taker is redirected after pre-checks |
| duration | Maximum exam time in minutes |
| department_id | Department ID (from Get Departments) |
| external_id | External exam identifier (groups test takers under a single exam) |
Optional Parameters:
| Parameter | Description |
|---|---|
| active | Exam active status ("Y" or "N") |
| active_date | Exam availability start date |
| end_date | Exam availability end date |
| preset | Security sensitivity: low, medium, or high
|
| whitelist_urls | URLs allowed during the exam (can specify which open at start) |
| permitted_resources_list | Predefined allowed resources |
| other_resources | Custom resource descriptions (free text) |
| test_delivery | Object with time_limit and online_proctor settings |
| enable_password_injection | Boolean to enable automatic password injection |
| exam_password | Password used with password injection |
| term | Object with id and name for term/semester |
| instructors | Array of objects with first_name and last_name
|
Response:
{ "message": "success" }
Update Exam
Endpoint: PUT /api/v2/external/institutions/{institution_uuid}/exams/{external_id}
Updates an existing exam using its external ID. Accepts the same parameters as Create Exam.
Response:
{ "message": "success" }
Reservations (Grants)
Create Grant
Endpoint: POST /api/v2/email/users/{email}/grants
Creates a reservation for a student. The grant is created in pending status.
Required Parameter:
| Parameter | Description |
|---|---|
| external_id | External exam identifier (must match an existing exam) |
Optional Parameters:
| Parameter | Description | Notes |
|---|---|---|
| test_delivery | Test delivery configuration | Includes client_id, security_options, tags, and meta |
| duration_modifier | Additional time in minutes | Added to the base exam duration |
| security_options | Per-reservation security settings | Overrides exam-level settings for this reservation |
Sample Response:
{
"grant_uuid": "d74eb2ac-9e9f-4553-af11-9c7c5966542a",
"status": "pending"
}
Schedule Grant (Get Start URL)
Endpoint: PUT /api/v2/email/users/{email}/grants/{grant_uuid}/start_url
Schedules an existing pending grant and returns the test taker's start URL.
- If the client uses a unique exam URL/password/duration per user, pass those in the request body.
- If the client uses a common exam URL/password/duration for all users, send the request with no body.
Sample Request Body (per-user details):
{
"testtaker_exam_url": "https://exam.example.com/take",
"testtaker_exam_password": "secret-exam-pw",
"testtaker_exam_duration": 90
}
Sample Response:
{
"url": "https://proctoru.com/students/fulfillments/{fulfillment_id}/auto?login_token=...",
"status": "scheduled"
}
Get Grants for Student
Endpoint: GET /api/v2/email/users/{email}/grants
Returns all grants for a student. Filter by status using the status query parameter.
| Status Filter | Behavior |
|---|---|
| (not provided) | Returns scheduled grants only |
all |
Returns grants with all statuses |
Allowed status values: pending, scheduled, running, incomplete, cancelled, fulfilled
Consume Grant (Fulfill Reservation)
Endpoint: PUT /api/v2/email/users/{email}/grants/{grant_uuid}/consume
Marks an existing scheduled or running grant as fulfilled, completing the reservation.
Response:
{ "status": "fulfilled" }
Grant Status Lifecycle
| Status | Description |
|---|---|
| pending | Grant created but not yet scheduled |
| scheduled | Grant scheduled with a start URL generated |
| running | Exam session is currently active |
| incomplete | Session was not completed |
| cancelled | Grant was cancelled |
| fulfilled | Exam session completed successfully |
Cancellation Policy: Cancellations are not allowed for Record+ reservations.
Security Presets
| Preset | Description |
|---|---|
| low | Basic monitoring |
| medium | Enhanced monitoring |
| high | Maximum security measures |
Support Resources
- API Documentation:
- For onboarding and configuration questions, contact the Meazure Learning Implementation Team