Skip to main content
GET
The same catalog as List Panels, describing each panel as the groups it requires rather than a flat list of biomarker IDs. A group holds interchangeable biomarkers, and exactly one of them is measured — hs-CRP or CRP, serum or EDTA plasma. Which one is decided per draw by lab routing. So v1’s flat biomarker_ids over-states what a draw returns: a panel listing 120 IDs delivers around 90 results.
Count groups, not biomarker IDs, when telling a patient what they get. Every group listed here is required, so each one is always ordered.
v1 is not deprecated and keeps serving the flat union of every listed group’s members. Requires the panels_access scope. The pricing object also requires the prices_view scope.

Request

Query parameters

string
Override which rate card price_cents uses: retail, or the id of a rate card your key may use. Get Rate Card returns that id. Defaults to the card on your API key’s billing account, else retail. retail_cents is always the retail card.
test_location_id is not accepted here and returns 400. v1 only validated that it existed — panel pricing is location-independent.

Response

Returns an array of panels.
string
Stable panel identifier (UUID) — pass this to Add Panels.
string
Display name.
object[]
What the panel requires. Empty for custom container panels — their membership lives per-appointment, so use Add Individual Biomarkers.
object | null
What this panel costs on your card, with retail_cents beside it — see price objects. Location-independent. null only when your key lacks the prices_view scope. A panel without a rate-card or catalog price costs the sum of its biomarkers at your card’s rates, which is what the monthly invoice bills. A panel with no priced biomarker (e.g. the custom container) carries price_cents: null.

Error responses