Reports
Generate client summaries, panel recommendations, and cross-client comparisons.
These endpoints back the Reports page. JSON responses match the inline preview; other formats stream a downloadable file.
Client report
GET /api/v1/reports/client/{vendor_id}
Generate a Type A client summary for one laboratory.
vendor_id—string, required — The laboratory's vendor ID.syndrome—string— Restrict to one syndrome. Omit for all syndromes.format—string, default:json—json(inline),excel(.xlsx),csv(.zip), ormarkdown(.md).
JSON preview
curl "https://api.previq.ospri.bio/api/v1/reports/client/AFC?format=json"
Excel download
curl -L "https://api.previq.ospri.bio/api/v1/reports/client/AFC?format=excel" -o AFC_summary.xlsx
The JSON response includes vendor_id, date_range, total_specimens, total_tested_cells, a
syndromes array (each with panels and top_organisms), and the methodology_footnote.
Important
Returns
404if the vendor has no data, or if asyndromefilter matches nothing for that vendor.
Panel recommendation
GET /api/v1/reports/panel-recommendation/{vendor_id}/{syndrome}
Generate a Type B INCLUDE / WATCH / RARE recommendation for one lab × one syndrome.
vendor_id—string, required — The laboratory's vendor ID.syndrome—string, required — The syndrome bucket (e.g.RESPIRATORY).
cURL
curl "https://api.previq.ospri.bio/api/v1/reports/panel-recommendation/AFC/UTI"
Response (abridged)
{
"vendor_id": "AFC",
"syndrome": "UTI",
"date_range": { "start": "2026-01-01", "end": "2026-03-31" },
"organisms": [
{ "organism": "Escherichia coli", "prevalence_rate": 0.596, "sample_size_tier": "A", "classification": "INCLUDE", "...": "..." }
],
"count_include": 6,
"count_watch": 3,
"count_rare": 11,
"methodology_footnote": "Prevalence rates are computed as the fraction of all tested specimens..."
}
Each organism carries its classification (INCLUDE / WATCH / RARE). See
Panel classifications for the rules.
Cross-client comparison
GET /api/v1/reports/cross-client/{syndrome}
Generate a Type C vendor × organism pivot for one syndrome.
syndrome—string, required — The syndrome bucket.
cURL
curl "https://api.previq.ospri.bio/api/v1/reports/cross-client/RESPIRATORY"
Returns syndrome, a vendors array, and rows where each row is an organism with a
per_vendor map of that organism's prevalence detail per lab.
Readiness check
GET /api/v1/reports/readiness/{vendor_id}
Run the automated pre-share checklist for a vendor (and optional syndrome). Returns a verdict plus per-check detail — see Readiness check on the Reports page.
vendor_id—string, required — The laboratory's vendor ID.syndrome—string— Restrict the checks to one syndrome. Omit for all syndromes.
cURL
curl "https://api.previq.ospri.bio/api/v1/reports/readiness/LXS?syndrome=UTI"
Response (abridged)
{
"vendor_id": "LXS",
"syndrome": "UTI",
"verdict": "review",
"summary": "1 warning(s) to review before sharing.",
"checks": [
{ "id": "coverage", "label": "Data coverage", "status": "pass", "detail": "45 prevalence rows across 1 panel(s)." },
{ "id": "reportable_evidence", "label": "Reportable evidence", "status": "pass", "detail": "45/45 rows (100%) are Tier A/B." },
{ "id": "geography", "label": "Geography", "status": "warn", "detail": "Vendor geography is not set; geo context will be limited." }
]
}
status is one of pass, warn, block, or manual. The overall verdict is blocked if any
check is block, otherwise review if any is warn, otherwise ready. manual items are
reminders for human verification and never change the verdict.
Important
Returns
404for an unknown vendor. A vendor that exists but has no data for the requested syndrome returns200with ablockedverdict and acoverageblocker.