Skip to main content
After a blood draw is confirmed and the lab processes the samples, results become available on the appointment. Results are retrieved via GET /api/v1/appointments/{id}/results and include clinical biomarker results, genetic biomarker results, and downloadable lab report documents.

Results status

The top-level status field on the results response indicates overall processing progress: Individual results within the response have their own per-result status (see below), so you can display partial results while the overall status is still in_progress.

Clinical results

Clinical results represent standard blood biomarker measurements — things like Vitamin D levels, cholesterol, thyroid hormones, and so on. Each clinical result includes:
  • biomarker_name and category — what was measured and its grouping (e.g., Vitamins, Hormones).
  • value and value_operator — the effective measurement. The operator is eq (equals) for exact values, or lt/gt when the lab reports a value below or above the measurable range.
  • unit — the measurement unit (e.g., ng/mL, µIU/mL).
  • reference_range_lab — normal and optimal min/max bounds as reported by the lab for this result, converted onto the same scale as value. A bound the lab leaves open is null, so a one-sided interval such as < 50 arrives as normal_min: null, normal_max: 50. Each result carries the interval it was measured against, so a patient with results across several draws or labs gets the right one per result.
  • reference_range_aniva — Aniva-curated reference ranges adjusted for age, sex, and pregnancy status.
  • tested_at — the date the test was performed.
  • comment — free-text annotation from the lab on this specific result (e.g., reference-range guidance, sample-quality warnings). null when the lab did not attach one.
  • lab_reported — the performing lab’s own report line, verbatim and unconverted. See below.

Normalized values versus the lab’s own line

value, unit and reference_range_lab are normalized: we convert every measurement onto the biomarker’s canonical unit and report it under our own biomarker name, so the same analyte is comparable across labs and over time. That is what you want for trending and thresholds, and it is not what a reviewing doctor sees on the lab’s PDF — alkaline phosphatase printed as 48 U/l (40 - 129) reaches you as 0.8 µkat/L. lab_reported carries that printed line alongside it: the lab’s analyte name and code, the value and unit as printed, the reference interval both as text (< 50, > 55, 40 - 129) and as the lab’s own unconverted bounds, plus its abnormal flag, result status and note. Use lab_reported when a human is reconciling your data against the lab’s report, and the canonical fields for everything computed. Only fields the lab actually sent are populated; nothing in lab_reported is inferred, defaulted or converted, and the whole object is null when we hold no raw record for a result.
Reference intervals that are treatment targets or risk tiers rather than true reference ranges — LDL goals under ESC, vitamin D status bands — are deliberately kept out of the structured range fields. Where a lab prints them they appear in comment or lab_reported.comment.

Clinical result statuses

When displaying results to patients, use the value field directly — it already reflects the corrected value when one exists.

Genetic results

Genetic results represent gene-level findings from DNA analysis. Each result corresponds to a gene (e.g., APOE, MTHFR) and includes:
  • gene — the gene symbol.
  • genotype — the detected genotype (e.g., E3/E4).
  • clinical_significance — an ACMG-based classification of the finding.
  • risk_description — a human-readable explanation of what the genotype means.
  • comment — free-text annotation from the lab on this specific result. null when the lab did not attach one.
  • variants — the specific genetic variants detected, each with SNV-level detail.

Clinical significance values

Genetic result statuses

Variant structure

Each genetic result contains a variants array. Each variant includes:
  • name — common name (e.g., APOE E4).
  • clinical_significance — variant-level significance (may differ from the gene-level significance).
  • conditions — associated diseases/conditions with descriptions.
  • snvs — the underlying single nucleotide variants, each with rs_id, allele, reference_allele, and optional HGVS notation.

Documents

The documents array in the results response contains references to downloadable lab report PDFs. Each document has:
  • id — a file UUID. Pass this to GET /api/v1/documents/{id} to download the file.
  • file_name — the original file name (e.g., lab-report-2026-04-05.pdf).
Access to documents is validated against the profile that owns the document.

Example results response