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.
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.
{
'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.
If you are using our Python Client with a longer video, it will be split into overlapping segments and use slightly more frames.