PrevIQ Docs

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_idstring, required — The laboratory's vendor ID.
  • syndromestring — Restrict to one syndrome. Omit for all syndromes.
  • formatstring, default: jsonjson (inline), excel (.xlsx), csv (.zip), or markdown (.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 404 if the vendor has no data, or if a syndrome filter 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_idstring, required — The laboratory's vendor ID.
  • syndromestring, 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.

  • syndromestring, 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_idstring, required — The laboratory's vendor ID.
  • syndromestring — 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 404 for an unknown vendor. A vendor that exists but has no data for the requested syndrome returns 200 with a blocked verdict and a coverage blocker.