Video KYC


vKYC is an abbreviation for Video Know Your Customer. This guide focuses on helping you integrate 100ms in your video KYC workflow. In such a workflow, a customer gets on a call with an agent who does the KYC verification on a video call.

Architectural Workflow


Integration Milestones

Creating the vKYC call template

Estimated Effort - 2 Days

Create a template through dashboard

  1. Roles
    Create both of the following roles with the given settings.

    1. Publish Strategy -
      • Role can share: Audio, Video; No Screenshare


      You can also keep this video off, this helps save bandwidth on the consumer’s side. The downside is the consumer doesn’t see any agent video, but only hears their audio. We recommend keeping this off.

      • Video Quality: 360p
      • Can publish Simulcast?: Enable
      • Video Simulcast Layers: 360p, 180p
    2. Subscribe Strategy -
      • Subscribe to: agent, customer
      • Subscribe Degradation: Enable
    3. Permissions -
      • Mute any peer: Enable
      • Ask any peer to unmute: Enable
      • End current session: Enable
      • Receive preview room state: Enable
      • Maximum number of peers in a room: No limit
  2. Recordings

    • Storage: Configure your cloud storage bucket
    • Room Composite Recording: Enable
    • Enable auto-start on room join: Enable
    • SFU Recording: Disable
  3. Advanced Settings

    • Room-state: Enable
  4. Additional settings to be turned on via API

    • Turn on subscribe degradation for the agent, but with the option to not turn video off. Use the Update Template API. The parameter required "videoAlwaysEnabled": true

Getting the basics right

Estimated Effort - 2 Days

  1. Create a Room via API

  2. Add Authentication and Tokens

  3. Join a Session

    1. On Web
    2. On Android
  4. Render the video

    1. On Web
    2. On Android
  5. End the Session - Two methods

    1. Using Web SDK
    2. Using Android SDK

Building out the workflow necessities

Estimated Effort - 7 Days

  1. Controlling the camera
    1. For Web, implement Switch Camera API.
    2. For Android, implement Camera Controls API.
  2. Capture images
    1. For Web, implement Frame Capture API.
    2. For Android, use Camera Controls API to capture at the high possible resolution.


To transfer the captured images to the agent, use any upload API of your choice. Our recommendation is to not use 100ms’ session store or broadcast methods for this as this can cause loss of data.

  1. For error handling
    1. For Web, handle network (disconnection, reconnection) and autoplay errors.
    2. For Android, handle network errors.
  2. Add cloud storage bucket details on the 100ms Dashboard in the Recordings tab of your template to store your recordings.
  3. Setup and enable Room Composite Browser based recording
    1. Through API
    2. Through Web SDK
    3. Through Android SDK

Setting up analytics

Estimated Effort - 2 Days

  1. Integrate webhooks for receiving callbacks from the server (E.g. peer.leave, peer.join, beam.recording.success, etc.)
  2. Listen to 100ms’ network states for an overall network picture.
  3. Use stats for nerds to get more detailed stats including jitter, latency, frame drop, and more.

Debugging and QA

Estimated Effort - 7 Days

  1. Familiarise yourself with events Inspector on the Dashboard to debug issues promptly.
  2. Test using network throttling to check for performance in low bandwidth conditions.

Frequently Asked Questions

  • How do I transfer the captured image to the agent?

    Refer to the note in Building out the workflow necessities.

  • How do I initiate recording?

    There are two ways to accomplish this.

    1. Recommended method: Use Room Composite Recording with or without the auto-start functionality. This is a browser-based recording happening on a cloud browser. The benefits include lower A/V sync issues and faster time-to-video (p50 is 9 seconds). It does take about 2 seconds for this recording to auto-start. You can enable this through the Recordings tab on the dashboard. Use the following guide to enable this.
    2. SFU Recording method: This is done by composing the individual video tracks post-call. The benefit of using this is that it starts automatically with the room, but there can be potential A/V sync issues, and the time to get the video is longer (p50 is 1 minute 50 seconds for a 3-minute session). Enable this by configuring the recording in the policy itself.
  • How do I track active rooms and user/customer presence in those rooms?

    1. You can use our server-side Active Rooms API to track active rooms.
    2. You can listen to webhook events to track peers, sessions and rooms and push subsequent updates.
  • How do I receive recordings?

    You can listen to webhook events for recording.

  • How does 100ms improve disconnection rates?

    100ms’ SDK handles connection retries under the hood. This retry suite has been built up over browser versions, and devices, and uses a bandwidth estimation system that’s been iterated on for millions of calls. You can listen to these retries by listening to SDK errors.

  • How does 100ms improve A/V sync recording failures?

    We have Room Composite browser-based recording which uses 100ms’ cloud browser system. Browsers natively implement A/V sync correction better than server-side systems because it is recording what it sees.

  • How does 100ms improve permission errors?

    100ms’ preview API and pre-built UI have been optimized with prompts, and readable error codes with actions. Using the same preview screen can help reduce permission errors.

  • How can I debug issues for a particular room?

    Use 100ms’ event inspector to debug detailed room logs with events for join, leave, join failures, subscribe degradations etc. Refer to Setting up analytics and Debugging and QA.

  • How can I track detailed network stats in real-time during call?

    You can listen to 100ms’ network states for an overall network picture and stats for nerds to get more detailed stats including jitter, latency, frame drop etc. Refer to Setting up analytics.

  • How do I know what resolutions and aspect ratios are best for my use-case?

    Based on the client side device, you will have to choose the aspect ratios. This sheet will show calculations for checking how much bitrate is consumed in different resolutions/aspect ratios.

Additional Resources

Have a suggestion? Recommend changes ->

Was this helpful?