Detect face swaps, reenactment, and AI-generated video in selfies and live verification sessions
Deepfake Detection
Deepfake detection answers one question: is the face in this image or video real footage of a real person, or was it generated or manipulated?
It is the front line of video-KYC fraud defence. Face-swap tooling is now consumer-grade — an attacker can join a verification call wearing someone else's face in real time, or submit a pre-rendered selfie video of a person who never sat for one.
What it catches
| Attack | Description |
|---|---|
| Face swap | The attacker's face is replaced with the victim's, frame by frame, in live or recorded video. |
| Reenactment / puppeting | A single photo of the victim is animated to blink, nod, and speak. |
| Fully synthetic faces | A person who does not exist, generated end-to-end. |
| Replay of generated media | A deepfaked clip played back to the camera or injected into the video stream. |
How it runs
Deepfake analysis runs automatically on:
- Selfie images submitted during onboarding (paired with Liveness).
- Video sessions — every video-KYC recording is sampled across its full duration, not just a single frame, so a swap that flickers in for part of the call is still caught.
The check returns an aggregate verdict plus temporal markers: timestamped points in the video where manipulation signals spiked, so a reviewer can scrub straight to the suspicious moment.
{
"check": "deepfake",
"verdict": "fail",
"confidence": 0.94,
"markers": [
{ "t": 41.2, "signal": "face_boundary_inconsistency" },
{ "t": 63.8, "signal": "texture_anomaly" }
]
}
Gating with Goal Rules
Thresholds are yours to set per agent. A typical policy:
{
"id": "no_deepfake",
"severity": "hard_stop",
"check": "deepfake_confidence_below",
"params": {
"threshold": 0.2,
"on_fail_message": "Verification could not be completed."
},
"on_deny": {
"message": "Deepfake signals above ceiling.",
"max_retries": 0,
"remediate_type": ""
}
}
When a deepfake verdict trips a hard_stop rule, it lands in the case's hard-stop list alongside the other failed checks — here a flagged session where the deepfake, synthetic-face, and liveness verdicts all fired, together with cross-document mismatches the same fraudulent session produced:
Hard stops panel from a flagged case — cross-document matches on name and date of birth failing across PAN, Aadhaar, session log and video, liveness screening flagging deepfake, synthetic face and liveness, and a missing consent statement
Never expose why a session failed a deepfake check to the end user — a specific error message is a training signal for the attacker. Keep on_deny messages generic; the detailed verdict stays in the case record for your reviewers.
Works best combined
Deepfake detection is strongest alongside its sibling checks — an attacker who beats one rarely beats all four:
- Liveness — is a real person present at all?
- Face Match & Likeness — is it the right person, and the same person throughout?
- Lip-Sync & AV Integrity — does the voice actually come from that face?