Video KYC
Frictionless video onboarding
Realtime video infrastructure
Go beyond basic video calls — 50ms runs realtime sessions on the networks they actually happen on, with per-participant quality, automatic recovery, and signed recordings when a call must stand up as evidence.
Rust + str0m media plane — Web, Android, iOS SDKs — Signed evidence manifest
Easy-to-integrate SDKs and a small, frozen API to help you build high-quality, auditable audio/video experiences into your applications.
Solutions
The same realtime core — 50 ms glass-to-glass, per-participant quality, signed recordings — across KYC, education, telehealth, and more.
Frictionless video onboarding
1-on-1 classes, tutoring, and live lessons
Remote check-ins with a permanent record
Supervised exams and assessments
Identity and documents, checked live
Video support calls, fully auditable
The problem
Live video runs on exactly the networks WebRTC is hardest on: one participant on a phone that will switch from Wi-Fi to cellular mid-session. Generic video tooling treats that as an edge case. The 50ms product contract treats it as the default.
So the media plane is built around it — and everything else is built to keep a running session alive.
Platform
One SFU per room, server-enforced roles, per-participant quality, signed recordings, and recovery that carries a session across network changes.
px-sfu admits peers over HTTP offer/answer, runs one str0m Rtc per peer on one shared UDP socket, and routes packets by index — no per-peer scan in the data path. VP8 and Opus are forwarded; the control data channel is session-scoped.
Three-RID simulcast with keyframe-gated layer switching. Each subscriber's layer follows its own downlink with hysteresis — a flapping network holds its layer, recovery is one level at a time, and a manual intent pins the level. Video degrades first. Audio is never stepped.
Who can publish, who only subscribes, who only watches — enforced by the SFU, not the client. Application data can never change forwarding policy.
The recorder receives a bounded copy of depayloaded frames, journals before muxing, writes WebM (VP8/Opus) plus a deterministic composite, uploads with SHA-256 digests, and commits an Ed25519-signed manifest. It finalizes from Postgres when the last peer leaves and replays after a crash — a required-recording workflow can never silently continue as if recording were healthy.
ICE rejoin with ufrag rotation and server-initiated in-band rejoin, a rejoin grace window for network migration, and UDP → TURN/UDP → TURN/TLS fallback for blocked paths. A full PeerConnection recreation restores media without creating a second logical participant.
How it works
POST /v1/sessions with an API key and an Idempotency-Key. The session is placed on a ready SFU node and returns join material.
Mint single-use join tokens — short-lived Ed25519 JWTs with JWKS discovery and replay protection. Customer on mobile, agent on desktop, monitor anywhere.
The session runs with server-enforced roles, per-participant video quality, and a document-detail mode when you need to inspect something close up. A monitor watches without touching any participant's upstream.
The session ends in WebM evidence with a deterministic composite, SHA-256 digests, and a signed manifest. Durable webhooks and audit events follow.
Developers
The control plane is a frozen OpenAPI contract: every route, parameter, and response shape is versioned, and the server's route table is asserted against the spec by a test, so the contract cannot drift.
Frozen at OpenAPI 1.0.0.
SDKs
The mobile participant is the one on the bad network. The SDKs exist so the join flow, camera handling, and recovery work there without you writing WebRTC.
Join flow, camera/mic publishing, quality intents, reconnect UX. This is what the demo and e2e suites drive in a real browser.
Camera and microphone publishing with front/rear camera switching, the quality intents, and the same session contract.
Same contract as the other SDKs: join, publish, quality intent, reconnect — written for the networks real sessions run on.
Security
Join tokens are short-lived Ed25519 JWTs — five-minute default TTL — with JWKS discovery and single-use replay protection. API keys are bearer-scoped to the control plane.
DTLS-SRTP media, HTTPS signaling, and TURN/TLS fallback for environments that block UDP. Session state lives in Postgres and Valkey behind scoped, least-privilege credentials.
Every finalized manifest is Ed25519-signed and every asset SHA-256 checksummed; signature, sequence, and asset verification all pass before a manifest counts.
Durable transactional webhooks with delivery logs and a dead-letter queue, plus complete per-session QoE and failure diagnostics for post-hoc review.
Control plane, SFU, evidence recorder, and three SDKs — Apache-2.0 licensed.