The facial images a proctored exam captures, and the face template derived from them to match a candidate, are biometric data under India’s DPDP Act, GDPR Article 9, and Illinois BIPA. Before the first frame is captured you need explicit, purpose-specific consent. You also need a retention period you have chosen, a way to honour deletion requests, and a documented list of sub-processors. This page explains what each law asks of an institution running proctored exams, and how the ProctorLink architecture is built to support those obligations. It is guidance, not legal advice: your regulator and counsel decide what applies to you.
Schedule a DemoA proctored exam does more than take a photo. To tell whether the person on camera is the registered candidate, ProctorLink derives a face template from each keyframe and matches it against a reference photo. That template, a mathematical representation of a face used to identify a specific person, is what the law treats as biometric data, and it is held to a higher standard than an ordinary photograph. The ProctorLink API reference states the position plainly: facial images are biometric data under India’s DPDP Act, GDPR Article 9, and similar laws, and you must obtain the candidate’s explicit consent before starting a session.
Because the classification attaches at the moment of capture, you cannot treat a frame as ordinary data and reclassify it later. The reference photo, every captured keyframe, and the match scores in the report are all biometric from the start. For what those frames can and cannot actually establish, read what browser-based proctoring can and cannot detect, and for how the match becomes a verdict, read how to design an exam integrity score.
Three regimes cover most proctoring deployments. They overlap but are not identical, and which ones apply depends on where your candidates sit the exam, not where your servers are. A single exam with candidates in India, the EU, and Illinois has to satisfy all three at once, so scope your consent language and retention policy to the strictest regime that touches your cohort.
| Law | Who it covers | How it classifies face data | What it requires |
|---|---|---|---|
| India DPDP Act | Candidates in India | Face data is personal data processed only on a lawful basis, normally consent. | Consent before processing, purpose limitation, and honouring erasure requests. |
| GDPR Article 9 | Candidates in the EU/EEA | Biometric data for uniquely identifying a person is a special category. | Processing is prohibited unless an Article 9(2) condition applies, usually explicit consent. |
| Illinois BIPA | Candidates in Illinois, US | A face template is a biometric identifier. | Informed written consent, a published retention and destruction schedule, and limits on disclosure. Statutory damages per violation. |
BIPA is the one that most often surprises institutions: it carries a private right of action and statutory damages assessed per violation, which is why it drives the bulk of biometric-privacy litigation in the United States. If any candidate sits from Illinois, informed written consent and a published retention schedule are not optional.
Every one of these laws treats consent as the usual lawful basis for processing biometric data, and all of them want it before capture, not after. The trap is to lean on the browser’s camera permission prompt as if it were consent. It is not. A candidate clicking Allow grants the browser camera access; it records nothing about whether they understood what is collected, why, and for how long. That understanding is what consent means, and it is yours to obtain and to log.
In practice this means a consent step in your own flow, before you call start() on the SDK. Capture, and the face template, only begin once start() runs, so the consent gate sits cleanly in front of it.
// Legal consent is yours to collect and record, before capture begins.
// The camera permission prompt is not consent — it only grants access.
if (!candidate.hasGivenBiometricConsent) {
return showConsentScreen(); // explain what, why, how long; record the answer
}
const session = ProctorLink.createSession({ jwt, sessionId });
await session.start(); // first frame — and the face template — only after consentKeep a record of the consent you collected, tied to the same attempt. If a candidate declines, do not start the session. For how a session is minted and run end to end, see proctoring SDK vs API vs LMS plugin.
The cheapest biometric data to govern is the data you never collected. Two choices at integration time cut how much personal data leaves the candidate’s browser. First, the external_user_id you send when minting a session is opaque to ProctorLink, so pass an internal identifier you already hold rather than a name or an email. The report then ties back to a candidate through your records, not through identifying data sitting in ours.
// On your backend. Keep candidate identity out of ProctorLink
// by sending an opaque ID you already hold, never a name or email.
POST /v1/sessions
access-token: <YOUR_ACCESS_TOKEN>
secret-token: <YOUR_SECRET_TOKEN>
content-type: application/json
{
"external_user_id": "user-9f3c1a", // your internal ID, opaque to us
"exam_id": "math-101-final",
"attempt_id": "attempt-789",
"allowed_origins": ["https://exams.yourcompany.com"]
}Second, the capture model is already minimal. ProctorLink records keyframes on an interval, one per minute by default, rather than a continuous video or audio stream, and those frames upload directly from the browser to object storage instead of passing through the API. You are storing periodic stills needed for identity checks, not hours of footage. That is a smaller, more defensible biometric footprint to retain and, when the time comes, to delete.
If you do supply a reference photo at mint, verify it then and there. An unusable photo, one with no clear single face, silently disables identity matching for the whole attempt, which leaves you holding a stored face template that is never actually used. Setting verify_reference_face rejects it at mint so nothing unusable is kept.
// If you supply a reference photo, verify it at mint.
// An unusable photo silently disables identity matching otherwise,
// so you store a face template that is never used.
{
"external_user_id": "user-9f3c1a",
"attempt_id": "attempt-789",
"reference_image_base64": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQ...",
"verify_reference_face": true // 400 if no single clear face; nothing stored
}Collecting biometric data lawfully is the start; what you do with it afterwards is the rest. Three obligations sit with you as the institution running the exam, and the architecture is built to support each. Retention is configurable, and ProctorLink supports deletion on request, but the period you choose and the deletion requests you honour are decisions you own, scoped to your regulator and your appeals window.
| Obligation | What you must do | How the architecture supports it |
|---|---|---|
| Explicit pre-capture consent | Collect and record consent before the first frame. | Capture does not begin until you call start(); run your consent gate before it. |
| Data minimisation | Send as little personal data as the exam needs. | external_user_id is opaque; keyframes (one per minute) replace continuous video; no audio or video stream. |
| Set a retention period | Choose and document how long frames and templates are kept. | Retention is configurable. Specifics are set with sales, not asserted here. |
| Honour deletion requests | Act on a candidate's erasure request. | ProctorLink supports deletion on request; route the specifics through sales. |
| Document sub-processors | Record who processes the data on your behalf. | Frames upload direct to object storage; request the current sub-processor list and a DPA from sales. |
One detail worth knowing for data handling: when you fetch the report, each evidence frame’s image_url is a short-lived signed URL, not a permanent link. Fetch or copy the image promptly rather than storing the URL, and treat the images you pull down as biometric data inside your own retention policy. For the specific retention options, a data processing agreement, and the current sub-processor list, talk to sales. This page does not assert certifications or a named data-residency region, because those are commitments that belong in a contract, confirmed in writing, not on a knowledge page.
Compliance is also about how you describe a result. Face analysis is probabilistic, so the report records frames where no face was detected, not “the candidate left the room”, and a low similarity score is a signal for review, not proof of impersonation. When you communicate a flagged session to a candidate or an exam board, mirror that language. An institution that overstates what the system knows invites both an unfair outcome and a challenge it cannot defend.
This restraint is the same reason the integrity verdict is built from what face analysis measured and weighted deliberately so ordinary browser activity cannot manufacture a flag. A candidate always has the right to contest a decision made about them, and your evidence has to survive that. Keep the frames, the match scores, and the reasons; present them as evidence for human review rather than as a verdict the machine handed down.
start().external_user_id and resolve it to a candidate in your own records.The compliance picture and the technical design reinforce each other. Consent before start() gives you a lawful basis. An opaque external_user_id, keyframes instead of continuous video, and direct-to-storage uploads keep the biometric footprint small. A chosen retention period and deletion on request close the lifecycle. And describing findings as measured signals, reviewed by a human, keeps an outcome defensible if a candidate contests it.
For how these obligations play out in one jurisdiction in practice, including DPDP, read online exam proctoring in India. Across published deployments, ProctorLink has supported more than one million proctored exam sessions (methodology note below). Full cohort sizes and outcomes are on the case studies page.
Institutions evaluating proctoring tools often look for independent feedback outside vendor case studies. ProctorLink is listed on G2, where Moodle administrators and training teams share verified product reviews.
Read ProctorLink reviews on G2 →Deployment statistics and product behaviour described in this guide link to the sources below.
Want to see exactly what a session captures and stores before you write your consent and retention policy? Sign up at app.proctorlink.com to get your API keys, run a session, and read the report end to end.
Create an account at app.proctorlink.com to get your SDK credentials and run a live session.
Install @proctorlink/sdk, the thin loader that mounts the enclave and captures keyframes.
Talk through consent, retention, a DPA, and the sub-processor list in a 30-minute walkthrough.
Per-session and subscription models for custom applications and LMS exams.
What the frames can and cannot establish, and why the tiering exists.
How a server-side score turns measured signals into a defensible verdict.
How these obligations, including DPDP, play out for Indian institutions.
Back to the knowledge hub for the full SDK and proctoring series.
Online proctoring supervises remote exams via webcam and microphone inside your LMS, logging rule violations with timestamps so reviewers judge flagged cases, not every session.
AI proctoring uses machine learning to automatically detect suspicious exam behaviour such as multiple faces, tab switching, and absence from the camera.
A comparison of leading Moodle proctoring plugins for universities that need native LMS integration, AI monitoring, and institution-owned data.
How university exam offices choose online proctoring software for entrance grids, finals, and multi-faculty calendars, including stakeholder RFPs and centre-vs-online cost tradeoffs.
How certification bodies and training providers use online proctoring for identity proofing, item-bank protection, and defensible, audit-ready credentialing exams.
A side-by-side comparison of AI proctoring and live human proctoring for cost, scale, accuracy, and exam security.
Practical steps to reduce cheating in Moodle quizzes using proctoring settings, question banks, timing controls, and AI monitoring.
Feature-by-feature comparison of Moodle proctoring plugins covering integration, AI detection, pricing, and data storage.
A guide to online exam proctoring for Indian universities and certification providers, including compliance, pricing in INR, and local case studies.
How to choose between a proctoring LMS plugin, a browser SDK, and a REST API when adding proctoring to software you already own, with a decision guide and code examples.
A step-by-step guide to adding exam proctoring to a web app you own: mint a session on your backend, run the browser SDK, and read a server-side integrity report, with code from the API reference.
What browser-based proctoring can detect (tab switches, clipboard, faces, identity) and what it cannot (phones, a second monitor, a virtual machine), and why the tiering exists.
A step-by-step guide to adding exam proctoring to a React app: mint a session on your backend, wrap the browser SDK in a useEffect hook, handle StrictMode and token expiry, and read a server-side integrity report.
A step-by-step guide to adding exam proctoring to an Angular app: mint a session on your backend, hold the browser SDK in an injectable service, start it in ngOnInit and tear it down in ngOnDestroy, handle NgZone and token expiry, and read a server-side integrity report.
How LTI 1.3 connects a proctoring tool to your LMS: the OpenID Connect launch handshake, why it replaces LTI 1.1 shared secrets, how it compares to a Moodle plugin and the browser SDK, and how to read the same server-side integrity report.
A step-by-step guide to adding exam proctoring to an assessment platform you built: map your users, exams, and attempts to a session, mint it on your backend, run the browser SDK in your exam runner, and route the server-side integrity report into your own review workflow.
Why the ProctorLink SDK mounts a cross-origin iframe enclave instead of running in your page: the camera permission binds to the enclave origin and persists across sites, the session token stays out of host-page JavaScript, and the integrity score is computed server-side.
How a proctored exam survives a tab close, a refresh, and a network drop without fragmenting into several reports: resume by a stable attempt_id, an offline-tolerant event queue, token-expired handling, and tearing down an SPA route change without ending the attempt.
How to design a defensible exam integrity score: a server-side number from 0 to 100 with itemised, weighted penalties, where face analysis drives the verdict, browser events stay pooled and capped as reviewer context, and the score triages for human review rather than failing a candidate automatically.
Consent before capture, a small biometric footprint, a retention period you chose, and findings described as measured signals. See exactly what a session collects before you write your policy.