Signal Quality
The quality model attached to every measurement — good / fair / poor, a 0–1 score, and a usable flag.
Every measurement carries a required quality object. It is the single reliability signal you react to — it tells you how much to trust the whole capture, before you show any metric to the user.
The quality object
quality is always present and never null:
"quality": {
"level": "good", // "good" | "fair" | "poor"
"score": 0.82, // number 0..1, two decimals
"usable": true // boolean — true for good/fair, false for poor
}| Field | Type | Meaning |
|---|---|---|
level | good / fair / poor | A coarse bucket for at-a-glance UI. |
score | 0.00 .. 1.00 | Aggregate reliability of the accepted signal. |
usable | boolean | Whether the capture is good enough to trust (good/fair = true, poor = false). |
How to read it
good— a clean capture. Present the metrics normally.fair— usable, but noisier. Consider a subtle "measurement was a bit noisy" hint and prefer a re-measure for critical use.poor— the capture is not usable. Ask the user to re-measure. Metric values may benullin this case (see below).
The recommended gate is quality.usable:
if (!result.quality.usable) {
showRetryPrompt(); // poor capture — don't present numbers
} else {
renderMetrics(result); // good or fair
}Null-out-below-floor
neccessory does not fabricate numbers. Any metric whose contributing signal fell
below the reliability floor is returned as null (the field is always present,
the value is null) rather than a guessed value. When quality.level is poor,
all numeric metric values may be null.
Always handle null: hide or dim the field rather than rendering a blank or a
zero.
Per-metric confidence
Some metrics also carry their own confidence (0..1) — today heart rate, blood
pressure, and SpO2. Where the SDK has no per-metric confidence signal, that field
is simply omitted; the metric still inherits trust from the top-level quality.
Show live feedback
During a measurement, the SDK surfaces the current quality level so you can guide the user in real time — a low level usually means an actionable problem (motion, poor lighting, or distance). Pair it with the guidance in Requirements to tell the user what to fix.
See the measurement result for the full JSON shape.