Security overview.
Written to be forwarded.
If you have been sent this by a colleague evaluating Confiri, this page is for you. It lists every system that touches candidate data, what each one receives, what is kept and for how long, and answers the questions a security review actually asks. Where the answer is not yet, it says not yet.
The reasoning behind these choices is on the trust page. Anything unanswered goes to security@confiri.com.
What Confiri does, and what it refuses to do.
Confiri checks that the person joining an interview is a real, live human who matches the identity they applied under, and that the same person comes back each round. It flags; a person on your team decides. It never rejects a candidate on its own, never scores personality or suitability or how truthful answers sound, never infers a protected characteristic, and never keeps a facial image.
Why it belongs in your review. Every interview is a briefing.
Hiring is a channel into your company that most security programmes never look at.
- Interviews hand out information. Over six or eight conversations, your team explains which systems you run, how the company operates, who approves what and who is away next week. Whoever is on the call leaves with it, hired or not. Confiri checks them before that conversation starts, and a person lets them in.
- Volume hides the few who matter. AI lets one person apply everywhere. One enterprise recruiter went from roughly 400,000 to 500,000 applications to 1.6 million in a year (Avature’s chief executive, on TechTarget’s Enterprise Apps Unpacked). No team can look closely at all of them.
- You may be the route, not the target. Attacks often start with a supplier: a software vendor, a managed service or a contractor whose access reaches a bigger customer. A company that thinks nobody would bother attacking it can still be the way in.
- The handover is the weak point. A check at one stage does not stop a different person attending the next. Confiri compares each round with the last.
Subprocessors. Every system that receives data.
Derived from what the application actually calls. Two of these run only when you switch something on, and they are marked.
| Processor | Purpose | What it receives | Region |
|---|---|---|---|
| AWS Rekognition | Liveness detection and face comparison | A short video frame sequence during the check, and the candidate's public LinkedIn photo for comparison, processed in memory; no image is written to storage. After a passed check it keeps a face template (numbers, not an image) in a collection of that candidate's own, to compare them with themselves at their next interview round; deleted 30 days after their last round, or at once if they are declined. | Ireland (eu-west-1) |
| Supabase | Application database and authentication | Candidate name, email, risk scores, signal outcomes and session metadata. No images, no raw biometric data. | London (AWS eu-west-2) |
| Vercel | Application hosting and edge network | Runs the application. Candidate details pass through its servers in memory while a request is handled; nothing is stored there. | London (lhr1) for server code; static files from its global edge |
| EnrichLayer | LinkedIn profile retrieval | The LinkedIn profile URL the candidate supplies. Returns public profile fields and the photo used for face comparison. | United States |
| Anthropic | Writing the plain-English summary the interviewer reads | The outcome of each check and the candidate's name. No images, no IP address, no device fingerprint. Not used to train models. | United States |
| Twilio | SMS verification and carrier lookup | The candidate's phone number and a one-time code. | United States, EU routing where available |
| Resend | Transactional email, and receiving calendar invites | Candidate name, email address and interview time. Where invite ingestion is enabled, the invite itself. | Ireland (eu-west-1) |
| IPinfo | Connection intelligence: VPN, proxy and datacentre detection | The candidate's IP address at the time of the check. | United States |
| Stripe | Billing | Customer billing details only. No candidate data. | United States, EU entity for UK/EU customers |
| Google / MicrosoftOnly when an interviewer connects their calendar | Calendar connection | Read and write access to the connecting interviewer's calendar events, used to find interviews and rewrite the meeting link. | Customer's own tenant |
| Have I Been PwnedOnly when an API key is configured | Breach history as an age-of-address signal | A partial hash of the candidate's email address, never the address. | Australia |
| Have I Been Pwned (Pwned Passwords) | Refusing account passwords already exposed in data breaches | The first five characters of a SHA-1 hash of a new recruiter password, with response padding. Never the password, its full hash or any name or address. | Australia (served through Cloudflare) |
| Gravatar, RDAP, Tor Project | Email reputation, domain age, and Tor exit-node checks | A hash of the email address, the email domain, and the candidate's IP respectively. No names. | Various, public lookup services |
Data inventory. What is held, and for how long.
The first row is the one most reviewers are looking for.
| Data | Why | Retention |
|---|---|---|
| Facial images and video | Liveness and face comparison | Never stored. Processed in memory and discarded within the request. |
| Face template for comparing interview rounds | Confirming the same person attends each round, one to one with themselves only | Numbers held by AWS Rekognition in Ireland, never an image, never searched across candidates. Deleted 30 days after the candidate's last round, or at once if they are declined. Never kept for sales demos. |
| Cached LinkedIn profile photo | So the interview panel can compare it with the person on the call | Deleted 30 minutes after the interview is due to end, or at once if the candidate is declined, and in every case by a daily clean-up. |
| Liveness confidence score, face-match score, face count | The result the interviewer sees | Kept with the session. Numbers only, from which no image can be reconstructed. |
| Candidate name, email, phone | Identifying the session and contacting the candidate | Kept for the account's retention period, then deleted. |
| IP address | VPN, proxy and location-consistency checks | Used during the check and reduced to a verdict. Never included in a shareable status link. |
| Device and browser characteristics | Virtual camera, remote desktop and automation detection | Stored as whitelisted fields only, never a full fingerprint. |
| LinkedIn profile data | Comparing the stated identity to a public profile | Photo cached briefly for comparison, then purged by a scheduled job. |
| Voice recordings | Not collected | Never collected. Confiri does not record audio. |
Security review. The questions you were going to ask.
Is any biometric data retained?
One thing, briefly. No image or video of a candidate is ever written to storage: liveness frames exist only in memory during the check. What persists with the session is a confidence score, a similarity score and a count of faces in frame. Separately, after a passed check, AWS Rekognition keeps a face template (a set of numbers, not an image) in a collection for that candidate alone, so their next interview round can confirm it is the same person. It is compared one to one with that candidate only, never searched across people, disclosed on the consent screen, and deleted 30 days after their last round or at once if they are declined. The LinkedIn photo is cached only for the panel to compare on the call, and deleted after the interview.
Process-and-discard is enforced in the liveness handler; template deletion runs in the nightly retention job and on every decline.
Can Confiri reject a candidate automatically?
No, and it is built so it cannot. Confiri raises flags and produces a score; a person on your team admits or holds every candidate. There is no automated rejection path in the product. This is deliberate for EU AI Act purposes and is why the wording throughout is 'needs review' rather than 'blocked' or 'fraud'.
Does Confiri infer protected characteristics, emotion or suitability?
No. It answers one question: is this a real person, showing up as themselves. It does not score personality, communication style, emotional state, confidence or job fit, and it does not infer age, gender, ethnicity, disability or any other protected characteristic.
How is tenant separation enforced?
Every table is company-scoped by PostgreSQL row-level security, so isolation is enforced by the database rather than by application code remembering to filter. Tenant and billing columns are additionally protected by triggers that reject writes from the authenticated role.
Can the browser influence a verification result?
No. The trust boundary is the server. The verification API never accepts a pass or fail, a confidence value, an IP address or a VPN claim from the client. The IP is resolved server-side from the request, the liveness verdict is fetched from AWS rather than reported by the page, and device data is accepted only against a whitelist.
How are candidates told what is happening?
With an explicit consent checkbox before anything runs, describing the camera check, the LinkedIn comparison and the connection and device checks. A candidate can decline. Declining is visible to the recruiter as a fact, not as a finding against the candidate.
Do you train models on candidate data?
No. Candidate data is never used to train any model, ours or a third party's.
Where does the data live?
The database is in London (AWS eu-west-2). Liveness runs in Ireland (eu-west-1). Where a subprocessor sits outside the UK or EEA it operates under Standard Contractual Clauses. The full list, and exactly what each one receives, is in the table above.
Are you SOC 2 or ISO 27001 certified?
Not yet, and we would rather say so than imply otherwise. Confiri is an early-stage product. The controls described here are real and testable today; the audited attestation is not in place. If certification is a hard requirement for your procurement process, tell us and we will tell you honestly where we are.
Has the platform been penetration tested?
Not by an external firm. An internal security review in September 2026 hardened the trust boundary, row-level security, biometric handling and API key management, and the findings are reflected in what is described here. An independent test has not yet been commissioned.
What happens if Confiri is unavailable before an interview?
The interview goes ahead. Confiri sits in front of the meeting, so if a candidate cannot complete a check they are given a route through and the interviewer is told the check did not run. A verification tool that can cancel your interviews is worse than the problem it solves.
How do we get our data out, or have it deleted?
Ask, and we export or delete. Candidate data is deleted on request without needing a reason, and a scheduled retention job removes expired session data automatically.
Ask us the thing this page did not answer.
A security question from a customer's reviewer goes to the front of the queue. If your process needs a completed SIG, CAIQ or your own questionnaire, send it and we will fill it in rather than pointing you back at this page.