Easily estimate vital signs from video
The VitalLens API estimates vital signs such as heart rate, HRV, and respiratory rate from video of the face and upper body. Click any icon below to jump straight to that section of the docs.
Try the API in Your Browser
You can now test the VitalLens API right in your browser using our JavaScript client. See how it estimates vital signs from your webcam.
API Plans
Choose the plan that suits your needs. Monthly plans can be cancelled anytime.
Using VitalLens API for research or studies? Apply for an educational discount.
For high-volume or custom use cases, get in touch for an Enterprise plan.
For General Wellness Only
The VitalLens API provides estimates of vital signs for general wellness and informational purposes only. It is not a medical device and is not intended for the diagnosis, prevention, monitoring, treatment, or alleviation of any disease or condition.
This service is not a substitute for professional medical advice. Please review our Terms of Service.
Frequently asked questions
For a deeper technical dive, see our explainer article: Understanding Remote Photoplethysmography .
The API provides an estimate of the pulse and respiratory waveforms at the same sampling rate as the video. From these, HR, HRV, and RR are derived.
We currently support SDNN, RMSSD, and LF/HF metrics for HRV. Future releases may include additional vital signs such as blood oxygen (SpO2) and blood pressure (BP).
We conducted a study on a large, diverse test benchmark including 422 unique individuals (including data from Vital Videos, UBFC-rPPG, and UBFC-Phys) showing a mean absolute error for HR at 1.57 bpm, for RR at 1.08 bpm, and for HRV-SDNN at 10.18 ms.
Lower confidences indicate less accuracy, which can be improved with high-quality videos.
- Real-time Analysis: Use our JavaScript client (or the
/stream endpoint) to estimate vitals live from a webcam feed or video stream.- Ex-post Analysis: Use our Python client (or the
/file endpoint) to analyze pre-recorded video files uploaded for processing.Regardless of the method, usage is always calculated based on the total number of frames processed.
{
'vital_signs': {
'heart_rate': {
'value': Estimated value as float scalar,
'unit': Value unit,
'confidence': Estimation confidence as float scalar,
'note': Explanatory note
},
'respiratory_rate': {
'value': Estimated value as float scalar,
'unit': Value unit,
'confidence': Estimation confidence as float scalar,
'note': Explanatory note
},
'hrv_sdnn': {
'value': Estimated value as float scalar,
'unit': Value unit,
'confidence': Estimation confidence as float scalar,
'note': Explanatory note
},
'hrv_rmssd': {
'value': Estimated value as float scalar,
'unit': Value unit,
'confidence': Estimation confidence as float scalar,
'note': Explanatory note
},
'hrv_lfhf': {
'value': Estimated value as float scalar,
'unit': Value unit,
'confidence': Estimation confidence as float scalar,
'note': Explanatory note
},
'ppg_waveform': {
'data': Estimated waveform value for each frame,
'unit': Data unit,
'confidence': Estimation confidence for each frame,
'note': Explanatory note
},
'respiratory_waveform': {
'data': Estimated waveform value for each frame,
'unit': Data unit,
'confidence': Estimation confidence for each frame,
'note': Explanatory note
},
},
'face': {
'confidence': Face live confidence for each frame,
'note': Explanatory note
},
'message': Message about estimates
}
- Keep the subject still and facing the camera.
- Ensure a bright and steady light source.
- Use as little video compression as possible if you need to encode the video before using the VitalLens API. Video compression can destroy the vitals signal.
- Offline Analysis (Standard): Typically uses 30 fps for maximum precision. Analyzing 1 minute of video costs 1,800 frame credits (60s x 30 fps).
- Real-time Analysis (Eco Mode): Often uses 15 fps to save bandwidth. Streaming for 1 minute costs 900 frame credits (60s x 15 fps).
Please note that these are just examples. You can configure either real-time or offline analysis to run at 30 fps or 15 fps depending on your specific accuracy requirements and budget.
We define a standard Scan as a 30-second measurement recorded at 30 frames per second (fps).
Calculation: 30 seconds × 30 FPS = 900 frames per Scan.
If your videos are shorter, or if you record at a lower frame rate, your plan will yield more scans than advertised. Conversely, if your videos are longer, or if you record at a higher frame rate, your plan will yield less scans than advertised.
Because the VitalLens API bills by the frame, halving the frame rate consumes half the credits per second of video. This effectively doubles the number of scans available in your plan while maintaining sufficient accuracy for most heart rate and respiratory rate use cases.