# Endpoint proctoring overview

Endpoint proctoring verifies candidate identity, runs pre-exam checks, monitors a desktop Chrome exam session, and reports evidence back to your platform. Your platform owns the exam, the grade, and any decision to stop or invalidate an attempt.

## Integration path

Endpoint proctoring integrates through [LTI 1.3 Proctoring Services](/docs/proctoring/lti-1-3). Your platform launches proctored attempts over LTI 1.3 and receives the full lifecycle: OIDC launch, candidate check-in, Start Assessment post-back, End Assessment receiver, ACS flags, AGS score evidence, outbound webhooks, and fallback disarm.

## What Endpoint does

| Capability | Current support |
|---|---|
| Government ID capture, liveness selfie, and name match | Yes, unless policy skips identity verification. |
| Room scan | Yes: four still frames plus room-scan video, unless policy skips it. |
| Pre-exam system checks | Yes: camera, screen share, extension heartbeat, and a test violation. |
| Attempt recording | Camera recording. Screen upload to partner S3 requires explicit enablement. |
| Browser monitoring | Yes, through the Endpoint Chrome extension on registered exam hosts. |
| AI webcam frame analysis | Yes, during the attempt, capped per session. |
| Partner webhooks | Yes: `violation.detected`, `recording.uploaded`, and `exam.completed`. |
| Live human proctors supplied by Endpoint | No. |
| Mobile browser proctoring | No. Candidates need desktop Chrome. |
| Automatic exam termination | Disabled by default by `ENDPOINT_EXAM_TERMINATION_ENABLED=false`. Endpoint flags; your platform decides. |

## Candidate lifecycle

```
scheduled -> check_in -> ready -> staging -> in_progress -> completed -> finalized
                                      |
                                      `-> stopping -> completed
```

| Status | Meaning |
|---|---|
| `scheduled` | Session exists; candidate has not started. |
| `check_in` | Candidate is completing consent, extension setup, identity, and room scan. |
| `ready` | Check-in passed; candidate has not entered staging. |
| `staging` | Pre-exam system checks are running. |
| `in_progress` | Exam monitoring is active. |
| `stopping` | Candidate ended locally; Endpoint is waiting for `LtiEndAssessment`. |
| `completed` | Attempt ended; score and recording finalization are in progress or done. |
| `finalized` | Partner/platform lifecycle marker after completion. Recording resolution is tracked separately. |
| `cancelled` | Session was cancelled before a completed attempt. |
| `terminated` | Reserved; not reachable in a default deployment. |

The candidate entry URL is `/proctoring/candidate/start/:token`. It is a bearer URL, not a single-use URL. It can be reopened during check-in and staging, and it stops working once the session reaches `in_progress`, `completed`, `finalized`, or `cancelled`.

## Candidate flow

1. Endpoint creates a session from an LTI launch.
2. The candidate opens the check-in URL in desktop Chrome.
3. The candidate installs or enables the Endpoint extension for the registered exam host.
4. The candidate accepts the recording notice and exam rules.
5. If required, the candidate completes ID capture, liveness, and room scan. Identity and room scan each allow three attempts before manual review is required.
6. If required, pre-exam checks verify camera, screen sharing, extension heartbeat, and the violation pipeline. The test violation is deleted before the real exam starts.
7. The exam runs. Camera and screen recording start, browser monitoring arms, and webcam frame analysis runs periodically.
8. Your platform sends `LtiEndAssessment` when the attempt ends. Endpoint calculates the compliance score, resolves recordings, and sends completion evidence.

Endpoint does not terminate exams in the default deployment. Code paths that would end an assessment require explicit enablement with `ENDPOINT_EXAM_TERMINATION_ENABLED=true`.

Accepted ID types are `passport`, `driver_license`, `military_id`, `national_id`, `state_id`, and `residence_card`.

## What the browser monitors

The extension arms only on exam hosts registered for your account or LTI registration. Current normalized violation types include:

| Area | Types |
|---|---|
| Focus and navigation | `tab_switch`, `window_blur`, `alt_tab_attempt`, `navigation_attempt`, `navigation_blocked`, `navigation_violation` |
| Clipboard and interaction | `copy_attempt`, `cut_attempt`, `paste_attempt`, `excessive_selection`, `right_click`, `drag_attempt`, `form_submission_blocked` |
| Capture and developer tools | `print_attempt`, `print_shortcut`, `screenshot_attempt`, `screen_capture_attempt`, `devtools_detected`, `devtools_shortcut`, `console_accessed` |
| Device and permissions | `multiple_displays_detected`, `camera_access_denied`, `screen_share_denied`, `screen_share_muted`, `screen_share_stopped` |
| Page tampering | `iframe_injection`, `suspicious_dom_injection`, `spoofed_end_signal` |

AI webcam analysis can emit `no_person_visible`, `multiple_people`, `phone_visible`, `ai_detected_violation`, `looking_away`, `suspicious_object`, `improper_lighting`, and `background_activity`.

Severity is always one of `low`, `medium`, `high`, or `critical`. New `type` values can be added, so receivers should branch on severity and handle unknown types generically.

## What your platform gets back

| Evidence | How you receive it |
|---|---|
| Live violations | `violation.detected` webhook. LTI Proctoring Services sessions also send ACS `flag` calls. |
| Completion summary | `exam.completed` webhook after the session is `completed` and no recording upload is pending. |
| Compliance score | `exam.completed`; LTI Proctoring Services sessions also post AGS score evidence. |
| Violation list | `exam.completed`. |
| Recordings | `recording.uploaded` and `exam.completed`, depending on storage state. |

`exam.completed` includes deliverable recordings: `partner_s3` and `local_only`. Failed uploads appear in `recording_errors`. Skipped recordings are omitted. Camera upload to partner S3 happens when S3 is configured; screen upload requires explicit enablement.

The compliance score starts at 100 and deducts 5 for `low`, 10 for `medium`, 20 for `high`, and 40 for `critical`, floored at 0. It is an evidence signal, not a grade.

## Candidate requirements

- Desktop or laptop Chrome.
- Endpoint Chrome extension installed and granted permission for the exam host.
- Working webcam. Audio is captured with the camera recording.
- Ability to share the full screen.
- Government photo ID unless identity verification is skipped.

## Related

- [LTI 1.3 Proctoring Services](/docs/proctoring/lti-1-3)
- [Proctoring settings](/docs/proctoring/proctoring-settings)
- [Webhooks and events](/docs/proctoring/webhooks-and-events)

_Last verified: 2026-09-03 against main._
