Panels
List Panels (v2)
Browse the panel catalog as biomarker groups
GET
/
api
/
v2
/
panels
curl --url 'https://anivahealth.com/api/v2/panels' \
--header 'x-api-key: YOUR_API_KEY'
[
{
"id": "f1c2d4a3-7b8e-4f2a-9c1d-2e3f4a5b6c7d",
"name": "Hormones (Female)",
"biomarker_groups": [
{ "biomarker_ids": [42], "required": true, "inclusion_condition": null },
{ "biomarker_ids": [43, 44], "required": true, "inclusion_condition": null },
{ "biomarker_ids": [51], "required": true, "inclusion_condition": "sex=2" }
],
"pricing": { "price_cents": 11900, "retail_cents": 14900 }
},
{
"id": "9c1d2e3f-4a5b-4c7d-8e9f-0a1b2c3d4e5f",
"name": "Custom",
"biomarker_groups": [],
"pricing": { "price_cents": null, "retail_cents": null }
}
]
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
v1 is not deprecated and keeps serving the flat union of every listed group’s members.
Requires the
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.
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.
Show group
Show group
number[]
Interchangeable ways to satisfy the group. Exactly one is measured. Cross-reference against
List Biomarkers.
boolean
true on a partner key: the catalog lists required groups only, and a required group is
always ordered. false appears only for Aniva-internal keys.string | null
Demographic gate on the whole group, evaluated against the patient when the panel is attached
to an appointment:
sex=2, age>50, combinable with && / || (sex is ISO/IEC 5218 — 1
male, 2 female). null applies to everyone. The catalog has no patient in context, so gated
groups are listed here ungated — Preview
Appointment is the patient-aware answer.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
| Status | Description |
|---|---|
400 | Validation error — e.g. unknown/unauthorised rate_card. |
403 | Forbidden — missing panels_access scope. |
500 | Internal server error. |
curl --url 'https://anivahealth.com/api/v2/panels' \
--header 'x-api-key: YOUR_API_KEY'
[
{
"id": "f1c2d4a3-7b8e-4f2a-9c1d-2e3f4a5b6c7d",
"name": "Hormones (Female)",
"biomarker_groups": [
{ "biomarker_ids": [42], "required": true, "inclusion_condition": null },
{ "biomarker_ids": [43, 44], "required": true, "inclusion_condition": null },
{ "biomarker_ids": [51], "required": true, "inclusion_condition": "sex=2" }
],
"pricing": { "price_cents": 11900, "retail_cents": 14900 }
},
{
"id": "9c1d2e3f-4a5b-4c7d-8e9f-0a1b2c3d4e5f",
"name": "Custom",
"biomarker_groups": [],
"pricing": { "price_cents": null, "retail_cents": null }
}
]
⌘I
curl --url 'https://anivahealth.com/api/v2/panels' \
--header 'x-api-key: YOUR_API_KEY'
[
{
"id": "f1c2d4a3-7b8e-4f2a-9c1d-2e3f4a5b6c7d",
"name": "Hormones (Female)",
"biomarker_groups": [
{ "biomarker_ids": [42], "required": true, "inclusion_condition": null },
{ "biomarker_ids": [43, 44], "required": true, "inclusion_condition": null },
{ "biomarker_ids": [51], "required": true, "inclusion_condition": "sex=2" }
],
"pricing": { "price_cents": 11900, "retail_cents": 14900 }
},
{
"id": "9c1d2e3f-4a5b-4c7d-8e9f-0a1b2c3d4e5f",
"name": "Custom",
"biomarker_groups": [],
"pricing": { "price_cents": null, "retail_cents": null }
}
]