Hosted UI vs direct API
Zyphe supports two ways to collect document and biometric evidence:
- Hosted / WebView flow — Zyphe’s verification UI captures the user (recommended default).
- Direct API upload — your app captures images/video and your backend submits them to the step-completion APIs.
Both paths still use flows, verification requests, webhooks, and the same result model. They differ in who owns capture UX and which frontend-side protections you get for free.
Comparison
| Hosted UI / WebView | Direct API upload | |
|---|---|---|
| User experience | Zyphe screens (iframe, redirect, or mobile WebView) | Your own camera / upload UI |
| Session creation | Backend creates VR + opens session URL | Backend creates VR, then calls step endpoints |
| Document capture aids | Document-in-frame guidance, quality feedback in Zyphe UI | You implement framing, blur/glare UX, retries |
| Device / client signals | Collected by the hosted frontend where applicable | Partially reduced or absent vs hosted path |
| Liveness | Full hosted active liveness challenge UX out of the box | You must implement challenge consumption and asset upload; see below |
| Engineering effort | Low–medium | High |
| App release coupling | Low (UI updates on Zyphe side) | High (your capture code) |
| Best for | Almost all production KYC/KYB onboarding | Specialized pipelines, existing capture stacks, constrained environments |
Liveness constraints
The hosted flow walks the user through active liveness (challenge + capture) when the flow is configured for it.
If you complete liveness only through the API:
- Call liveness-challenge for the verification request.
- Inspect the returned mode (
ACTIVEvsPASSIVE). - Upload exactly the assets required (calibration image; for active, video + movement images).
Passive liveness (selfie-only, no head-movement challenge) is controlled by organization configuration and is not something every tenant can toggle alone. Active liveness via pure API is only viable if you fully implement the challenge protocol; most teams that need active liveness should use the hosted / WebView path instead of re-building the challenge UI.
If your policy requires active liveness and you are not prepared to implement the full challenge + multi-asset upload flow, do not choose pure API capture. Use Backend API integration + Mobile WebView or the Browser SDK.
Decision guide
Choose hosted UI / WebView if…
- You want production KYC quickly with the least client code
- You need active liveness and anti-spoof UX without building it yourself
- You integrate mobile (there is no native SDK)
- You want capture and flow improvements without app store releases
- You are fine opening
verify.zyphe.comin a WebView, iframe, or redirect
Choose direct API upload if…
- You already own a document-capture pipeline and accept re-validating quality yourself
- You only need document checks (and understand liveness limitations above)
- Your environment cannot embed a WebView but can send images from a secure backend
- You have engineering capacity to call next-step, document selection, process document, and process liveness in order
Choose public link if…
- You need zero mobile/web engineering and can send users a Zyphe URL
See also Choosing an integration method.
Direct API outline (advanced)
High-level sequence when you own capture:
POST /sdk/flow/{flowId}/vr/create?sandbox=…— create the verification requestGET …/vr/next-step— discover the next step type- Complete steps in order, for example:
- document selection →
process-dv-selection - document images →
process-dv-document - liveness →
liveness-challengethenprocess-dv-liveness
- document selection →
- Consume webhooks; export media via Export API if needed
Schemas and paths: OpenAPI. Node helpers: Complete verification steps.