Drop in a sub-2-second face match for returning users. Skip the password reset. Skip the SMS delay. Skip the magic-link bounce. $0.10 per re-auth, 500 verifications free every month.
Stop losing returning users at sign-in. Two seconds. They're back.
Password resets drop ~30% of returning users; Short Message Service (SMS)
codes can take up to 90 seconds. A selfie against the user's enrolled
portrait completes in roughly two seconds — drop-in callback contract for any
existing OAuth / OpenID Connect flow. $0.10 per re-auth. 500 verifications
free every month.
How it works
From sign-up to verified user in four steps.
Step 01
Create the workflow
Pick the checks you want — ID, liveness, face match, sanctions, address, age, phone, email, custom questions. Drag them into a flow in the dashboard, or post the same flow to our API. Branch on conditions, run A/B tests, no code required.
Step 02
Integrate
Embed natively with our Web, iOS, Android, React Native, or Flutter SDK. Redirect to a hosted page. Or just send your user a link — by email, SMS, WhatsApp, anywhere. Pick what fits your stack.
Step 03
User goes through the flow
Didit hosts the camera, the lighting cues, the mobile hand-off, and accessibility. While the user is in the flow, we score 200+ fraud signals in real time and verify every field against authoritative data sources. Result in under two seconds.
Step 04
You receive the results
Real-time signed webhooks keep your database in sync the moment a user is approved, declined, or sent to review. Poll the API on demand. Or open the console to inspect every session, every signal, and manage cases your way.
Replace password · Skip SMS · Drop magic link
Six capabilities. $0.10 per re-auth.
One Sessions API call, one signed verdict, drop-in callback contract. Pair with Device & IP Analysis to skip the selfie entirely on known-good sessions.
Open a Sessions API call, redirect the user to the hosted Uniform Resource Locator (URL), capture one passive frame. Liveness + Face Match 1:1 + the signed webhook return inside the same two seconds. No app install, no Software Development Kit (SDK), no carrier path.
Hosted UI on a unique session URL — no app, no SDK.
02 · vs password / SMS / magic link
Lower friction. No phishing. Cheaper than SMS.
Passwords get phished, forgotten, and reset (a $1-$3 support ticket each time). Short Message Service (SMS) one-time-password is phishable, carrier-dependent, and SIM-swap-vulnerable. Magic links bounce in spam filters. A selfie against the enrolled portrait is phishing-resistant, instant, and flat-priced.
Password resets typically drop ~30% of returning users mid-flow; SMS codes can take 5-90 seconds end-to-end. A selfie re-auth completes in roughly two seconds, with no message to wait for and nothing to remember. Net: a measurable lift in returning-user sign-in conversion.
Bind a Reusable Credential to every enrolled user. The next Didit-powered surface that needs the same re-auth consumes the credential at zero cost. The user holds the proof; your application verifies the signature. Network effect compounds across every customer that ships Reusable Credentials.
User holds the proof. Your app verifies the signature.
05 · Adaptive step-up
Skip the selfie on known device + known IP.
Pair with Device & IP Analysis (bundled into the 200+ fraud-signal stack). A returning user on a known device and known Internet Protocol (IP) skips the selfie entirely. Brand-new device or new IP triggers passive; Tor / Virtual Private Network (VPN) exit on a brand-new device escalates to Active 3D. Same flow, smart triggers.
200+ fraud signals on every session — no extra cost.
06 · Public pricing
$0.10 per re-auth. Flat. Worldwide.
Public price, no minimum, no contract. United States Tier-1 SMS one-time-password costs $0.05-$0.30 per send and you pay even when the user never receives the code. A password reset costs $1-$3 per support ticket. A selfie re-auth is a flat $0.10 with 500 verifications free every month, forever.
200OKstatus Approved · In Review · Declined · Not Finished
Verify X-Signature-V2 on the signed webhook first.docs →
Agent-ready integration
Replace password / SMS / magic link in one prompt.
Paste into Claude Code, Cursor, Codex, Devin, Aider, or Replit Agent. Fill in your stack. The agent provisions Didit, swaps the existing returning-user callback, and ships in a weekend.
didit-integration-prompt.md
You are integrating Didit's selfie-only re-authentication into <my_stack>. Replace password, SMS one-time-password, or magic-link on returning-user surfaces with a sub-2-second face match against the enrolled portrait. Phishing-resistant, no carrier dependency, no SIM-swap surface, no email-delivery delay.
1. Enrol the user's portrait ONCE at sign-up (standard Know Your Customer (KYC) session).
2. On every returning-user sign-in, open a re-auth session that runs Passive Liveness + Face Match 1:1 against the stored portrait. ~2 seconds end-to-end.
Pricing (public):
- Selfie re-auth: $0.10 per authentication (Sessions API)
- First 500 verifications free every month, forever
PRE-REQUISITES
- Production API key from https://business.didit.me (sandbox key in 60s, no card).
- Webhook endpoint with Hash-based Message Authentication Code (HMAC) SHA-256 verification using the X-Signature-V2 header.
- The user has previously enrolled via a Didit KYC session (the portrait captured during the liveness step is stored automatically, bound to vendor_data).
- A workflow_id from the Workflow Builder. The workflow MUST contain LIVENESS, and the session is opened with workflow_type = "biometric_authentication".
STEP 1 — Open a re-auth session
POST https://verification.didit.me/v3/session/
Headers:
x-api-key: <your api key>
Content-Type: application/json
Body:
{
"workflow_id": "<your biometric_authentication workflow>",
"workflow_type": "biometric_authentication",
"vendor_data": "<the same user id used at enrolment>",
"callback": "https://<your-app>/reauth/callback",
"metadata": {
"purpose": "returning_user_signin",
"device_id": "<optional, your device fingerprint>",
"from_ip": "<optional, the request IP>"
},
"portrait_image": "<base64 JPEG of the user's enrolment selfie, ≤ 1 MB — REQUIRED when the workflow has FACE_MATCH active; OMIT for liveness-only mode>"
}
Response: 201 Created with the hosted session_url. Redirect the user. The hosted UI opens the front camera, captures one passive frame, runs Liveness + Face Match 1:1 against the user's enrolled portrait, returns the verdict in sub-2-seconds.
STEP 2 — Read the signed verdict on the webhook
Body (excerpted for a passing re-auth):
{
"session_id": "<uuid>",
"vendor_data": "<your user id>",
"status": "Approved",
"liveness": {
"status": "Approved",
"method": "PASSIVE",
"score": 96
},
"face": {
"status": "Approved",
"similarity_score": 0.96
}
}
Verify X-Signature-V2 BEFORE trusting the body — HMAC SHA-256 of the raw bytes with your webhook secret.
Session status enum (exact case): Approved | Declined | In Review | Resubmitted | Expired | Not Finished | Kyc Expired | Abandoned.
STEP 3 — Branch your sign-in logic on the verdict
Approved → mint your session token, sign the user in.
Declined → block sign-in; fall back to a higher-friction recovery (support contact / full KYC re-do).
In Review → hold; route to your operations queue.
Not Finished → user abandoned the capture; safe to re-prompt or fall back to a backup factor.
STEP 4 — Adaptive step-up (recommended)
Pair the selfie with Device & IP Analysis (bundled into the 200+ fraud-signal stack at no extra cost). Adaptive rules to consider:
Known device + known Internet Protocol (IP) → skip the selfie, mint a session token.
Known device + new IP → run the selfie (passive).
New device + new IP → run the selfie (passive).
Tor / Virtual Private Network (VPN) exit +
new device → escalate to ACTIVE_3D method (motion challenge).
Implement the branching in your application or in the Workflow Builder via per-session overrides.
CONSTRAINTS
- Base URL for /v3/* endpoints is verification.didit.me (NOT apx.didit.me).
- Feature enum is UPPERCASE: LIVENESS, FACE_MATCH, IP_ANALYSIS, ID_VERIFICATION, AML, AGE_ESTIMATION.
- Method enum is UPPERCASE: PASSIVE, FLASHING, ACTIVE_3D.
- Auth header is x-api-key (lowercase, hyphenated).
- Webhook signature header is X-Signature-V2 (NOT X-Signature).
- Status casing matches exactly: Approved, Declined, In Review, Expired, Not Finished, Resubmitted, Kyc Expired, Abandoned.
- The face template is irreversible (a one-way hash). The user can request deletion via the standard data-subject-request path.
PRO TIPS
- Bind a Reusable Credential to each enrolled user. The next Didit-powered surface that needs the same gate consumes the credential at zero cost.
- Keep a fallback factor (password, magic link, support recovery) for users who cannot complete the selfie — accessibility, device camera failure, religious head covering, etc.
Read the docs:
- https://docs.didit.me/core-technology/biometric-auth/overview
- https://docs.didit.me/sessions-api/create-session
- https://docs.didit.me/integration/webhooks
Start free at https://business.didit.me — sandbox key in 60 seconds, 500 verifications free every month, no credit card.
Open a new country in one click. We do the hard work.
We open the local subsidiaries, secure the licenses, run the penetration tests, earn the certifications, and align with every new regulation. To ship verifications in a new country, flip a toggle. 220+ countries live, audited and pen-tested every quarter — the only identity provider an EU member-state government has formally called safer than in-person verification.
End-to-end re-auth — selfie capture to signed verdict on entry-level Android.
$0.00
Per re-auth, flat. Below US SMS one-time-password and the $1+ password-reset support ticket.
0
Passwords to phish, codes to phish, SIMs to swap, links to bounce.
0
Free verifications every month, forever.
Three tiers, one price list
Start free. Pay per usage. Scale to Enterprise.
500 free verifications every month, forever. Pay-as-you-go for production. Custom contracts, data residency, and SLAs (Service Level Agreements) on Enterprise.
Free
Free
$0 / month. No credit card required.
Free KYC bundle (ID Verification + Passive Liveness + Face Match + Device & IP Analysis) — 500 / month, every month
Blocklisted Users
Duplicate Detection
200+ fraud signals on every session
Reusable KYC across the Didit network
Case Management Platform
Workflow Builder
Public docs, sandbox, SDKs, MCP (Model Context Protocol) server