Available on iOS. Android support is in progress.
Enable it
- Ask support to enable ephemeral sessions for your tenant:
sessions.createindata_processing_config.allowed_ephemeral_endpoints, or the tenant in ephemeral mode. - Use a workflow marked
zero_retention_ready. These workflows only containform_fill,document_upload(image identity documents),selfieandterms_acceptancesteps. - Create the session with the
X-Data-Retention: ephemeralheader (or"data_retention": "ephemeral"in the body):
access_token. Nothing changes in how you present LegalTalentFlowView: the SDK detects the mode from the session.
What changes in the flow
- Every step is captured locally; the applicant can go back through the pages until the request is sent.
- Liveness is the passive on-device check on the selfie. The server only runs the 1:1 face match. No capture clips are recorded.
- Images are downscaled (~1600 px JPEG) and EXIF is stripped before sending.
- After the last step the SDK sends one request and shows a “verifying” page. The server budget is 20 seconds.
- A transient failure (
503/504) is retried once with the same bytes; retries are not charged twice. A413is re-encoded smaller and retried.
Receive the result
onSingleSubmitResult fires right before onComplete. Keep what you need immediately: the result exists only in this callback. Afterwards the public session answers a uniform 404, and GET /kyc/sessions/{id} on your backend returns a censored record (hashes, checks, attestation, no personal data).
statusis onlyapprovedorrejected. There is no manual review: anything that would have gone to a reviewer comes backrejectedwith reason codes, and your app decides what to do.reason_codesare stable strings such asface_match_failed,list_match,document_invalid,document_forensics_suspiciousorrule:<rule_type>. Screening results never include list names or matched identities.- By default the applicant sees a neutral “done” page. Set
showsSingleSubmitOutcome: trueto let the SDK show the verdict; reason codes are rendered as applicant-safe sentences and screening hits are never disclosed.
Verify integrity
Send the result andsentImageHashes to your backend and check that:
sentImageHashes(SHA-256 of the exact bytes the SDK sent) matchresult.imageSHA256.result.attestation.signatureverifies againstresult.attestation.public_key_pem(ECDSA_SHA_256). The signature can benullwith anunsigned_reasonin environments without a signing key.
Errors
Errors carry a stableLegalTalentError.singleSubmitCode:
The session is finalized as
rejected after the third failed submission.