Browser support & platform requirements

Prev Next

This page describes which browsers, operating systems, and WebView environments are supported by Veriff's web-based verification flow, and which Web Platform APIs are required for it to function correctly.


HTTPS required

All camera, media, and real-time communication APIs used by Veriff are restricted by browsers to secure contexts. The verification URL must be served over HTTPS. Plain HTTP is not supported (except localhost for development and testing).


Supported browsers

The verification flow requires navigator.mediaDevices.getUserMedia, mediaDevices, and enumerateDevices to be available in the end-user's browser. Browsers that do not support these APIs are shown an error at session start. The tables below list browsers and versions where Veriff is known to work reliably.

Desktop

Browser Minimum version Notes
Chrome 80
Edge (Chromium) 80 Chromium-based; same baseline as Chrome
Firefox ESR (140+)
Safari 14 (macOS)
Brave Current Chromium-based; same baseline as Chrome

Legacy Microsoft Edge (EdgeHTML engine) and Internet Explorer are not supported.

Mobile

Browser Minimum version Notes
Chrome for Android 80
Safari on iOS 15
Samsung Internet 21 End-users may need to manually grant camera permissions through the Samsung-specific permissions flow
Chrome on iOS 15 Uses the iOS WebKit engine, subject to the same API constraints as Safari on iOS
Firefox for Android ESR (140+)


All browsers on iOS (Chrome, Firefox, Edge, Opera, etc.) use Apple's WebKit rendering engine. They are subject to the same platform API availability as Safari on iOS, not their desktop counterparts.



Operating system requirements

Platform Minimum version
iOS 15
Android 10 (API level 29)
macOS Driven by browser support above
Windows Driven by browser support above



Unsupported browsers

The following browsers and environments are detected at session start. End-users will be shown an error screen directing them to switch to a supported browser before verification can proceed.

Browser / Environment Reason
DuckDuckGo (Android) No camera or microphone access
MIUI Browser (Xiaomi devices) Camera permission request hangs indefinitely
UC Browser Camera API throws an error instead of prompting for permission
Vivo Browser Broken camera API implementation
Facebook and Messenger in-app browser (Android) Missing camera APIs
Yahoo Japan app browser (Android) Missing camera APIs
iOS browsers that are not Safari or WKWebView Missing camera APIs. end-users are directed to open the link in Safari
Any browser missing getUserMedia, mediaDevices, or enumerateDevices Core camera APIs unavailable. end-users are shown an "outdated browser" message
Opera (desktop) Not supported
Internet Explorer (all versions) Not supported
Legacy Edge (EdgeHTML engine) Missing camera APIs

If camera access is blocked in Samsung Internet, a dedicated guidance screen is shown to help end-users grant the permission manually.


WebView environments

Environment Support Notes
Android WebView (Chrome-based) Supported Android 10+ required. On Android 10+, WebView is a separate component that auto-updates via Google Play, independent of the OS version.
Chrome Custom Tabs (Android) Supported
WKWebView (iOS) Supported
SFSafariViewController (iOS) Supported
UIWebView (iOS) Not supported Deprecated by Apple; missing camera APIs
Facebook / Messenger in-app browser (Android) Not supported Missing camera APIs

For WebView integration guides, see the WebView integration guide.


Required browser APIs

These APIs must be available for the verification flow to start. If any are missing, the end-user will see an error screen.

API Purpose
navigator.mediaDevices.getUserMedia Camera and microphone access
navigator.mediaDevices.enumerateDevices Camera device selection
WebAssembly On-device ML for face detection and barcode scanning (barcode scanning is only required for document specimens that include a barcode)
Web Workers Off-main-thread processing
WebSockets Real-time session communication
Canvas 2D API Photo capture and image processing
MediaRecorder Video recording (only when video is required by the session)
RTCPeerConnection (WebRTC) Live video streaming, legacy path (only when video is required by the session)

All required APIs are supported in every browser and OS version listed in the Supported browsers section above.


Optional APIs

These APIs are detected at runtime. When unavailable, the application falls back gracefully and the verification flow continues, but with a different code path.

API Purpose Where it is unavailable
WebGL / WebGL2 GPU-accelerated face detection Falls back to CPU processing automatically
ImageCapture Optimised photo capture from camera Falls back to Canvas 2D capture. Not available in Firefox; Safari 18.4+ only
OffscreenCanvas Off-main-thread image processing Falls back to main-thread processing. Safari 17+ only
Accelerometer / Gyroscope (Generic Sensor API) Motion-based fraud signals Chrome and Chromium-based Android browsers only. Not available in Firefox or Safari / iOS.
Permissions API Camera permission status pre-check Falls back to requesting permission directly


Accelerometer / Gyroscope: Veriff uses the Generic Sensor API (window.Accelerometer, window.Gyroscope), not the older DeviceMotion / DeviceOrientation events. These are two distinct browser APIs and are not interchangeable.



Known WebView limitations

These are platform-level constraints that affect WebView environments.

Camera device labels are anonymised until permission is granted. On Android, navigator.mediaDevices.enumerateDevices() returns devices with empty labels until camera permission has been explicitly granted.

window.close() is a no-op in most WebViews. When a verification session ends, the Veriff flow attempts to close the page. In WebViews that did not programmatically open the page, window.close() is ignored by the browser. Use the session FINISHED event to handle navigation in your native layer.

localStorage must not be blocked. The Veriff flow wraps all storage calls defensively, so the session will not crash if storage is unavailable, but certain session features will degrade silently.

window.open() must be delegated to the system browser. When the verification flow opens an external URL (for example, to hand off to a third-party service), it calls window.open(). In most WebViews this call is silently ignored or opens inside the WebView itself, which may break the target service. Intercept the call in your native layer and forward the URL to the device's default browser, or open it in a Chrome Custom Tab (Android) or SFSafariViewController (iOS).


Connection requirements

Requirement Details
Protocol HTTPS required
WebSocket Port 443 (WSS) must not be blocked by firewalls or corporate proxies
WebRTC STUN/TURN traffic required when video streaming is enabled; UDP port 3478 or TCP 443 fallback. Contact support for firewall allowlist details.



Changelog

Date Description
May 6, 2026 Document published