Panels
Create Panel
Create a panel with its biomarkers
POST
/
api
/
v1
/
panels
curl --request POST \
--url https://anivahealth.com/api/v1/panels \
--header 'x-api-key: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: panel-iron-check-2026-10' \
--data '{
"name": "Iron check",
"description": "Ferritin and iron status for fatigue follow-ups",
"panel_group_ids": ["d4b1e2f3-6a7c-4d8e-9f0a-1b2c3d4e5f60"],
"biomarker_ids": [12, 48, 51]
}'
{
"id": "0f6c2a1e-9b3d-4e5f-8a7b-6c5d4e3f2a1b",
"name": "Iron check",
"description": "Ferritin and iron status for fatigue follow-ups",
"biomarker_ids": [12, 48, 51],
"panel_group_ids": ["d4b1e2f3-6a7c-4d8e-9f0a-1b2c3d4e5f60"]
}
{
"error": "Not delivered by any lab order: 51"
}
Creates a panel with its biomarkers in one call. Attach it to appointments with
Add Panels, like any panel from List Panels.
Requires the
panels_create scope.
Send an optional Idempotency-Key header to make this create safe to retry. A repeat of the same key returns the original response instead of creating a second panel. See Idempotency.
- Each biomarker becomes its own required group, so every one is measured.
- If one of the biomarkers is archived or no lab delivers it, the API answers
400and creates nothing. - If your key is limited to panel groups, attach the panel to one or more of them. Otherwise you could not see the panel afterwards.
- The response carries no pricing. Read the price from List Panels.
Request
Body
string
required
Display name, at most 200 characters.
string
What the panel is for, at most 2000 characters. Optional.
string[]
Panel groups to attach the panel to. Required unless your key has global access.
integer[]
Biomarkers to include, from List Biomarkers.
Response
On success, the API returns201 Created with the panel.
string
required
Unique panel identifier (UUID).
string
required
Display name.
string
Description. May be
null.integer[]
required
Biomarkers in the panel.
string[]
required
Panel groups the panel is attached to.
Error responses
| Status | Description |
|---|---|
400 | Validation error, panel_group_ids missing for a key limited to panel groups, or a biomarker that is archived or that no lab delivers. |
403 | Forbidden — your API key lacks the panels_create scope, or a panel group is outside your permission scope. |
409 | The Idempotency-Key was already used with a different body, or its original request has not completed. |
500 | Internal server error. |
curl --request POST \
--url https://anivahealth.com/api/v1/panels \
--header 'x-api-key: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: panel-iron-check-2026-10' \
--data '{
"name": "Iron check",
"description": "Ferritin and iron status for fatigue follow-ups",
"panel_group_ids": ["d4b1e2f3-6a7c-4d8e-9f0a-1b2c3d4e5f60"],
"biomarker_ids": [12, 48, 51]
}'
{
"id": "0f6c2a1e-9b3d-4e5f-8a7b-6c5d4e3f2a1b",
"name": "Iron check",
"description": "Ferritin and iron status for fatigue follow-ups",
"biomarker_ids": [12, 48, 51],
"panel_group_ids": ["d4b1e2f3-6a7c-4d8e-9f0a-1b2c3d4e5f60"]
}
{
"error": "Not delivered by any lab order: 51"
}
⌘I
curl --request POST \
--url https://anivahealth.com/api/v1/panels \
--header 'x-api-key: YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: panel-iron-check-2026-10' \
--data '{
"name": "Iron check",
"description": "Ferritin and iron status for fatigue follow-ups",
"panel_group_ids": ["d4b1e2f3-6a7c-4d8e-9f0a-1b2c3d4e5f60"],
"biomarker_ids": [12, 48, 51]
}'
{
"id": "0f6c2a1e-9b3d-4e5f-8a7b-6c5d4e3f2a1b",
"name": "Iron check",
"description": "Ferritin and iron status for fatigue follow-ups",
"biomarker_ids": [12, 48, 51],
"panel_group_ids": ["d4b1e2f3-6a7c-4d8e-9f0a-1b2c3d4e5f60"]
}
{
"error": "Not delivered by any lab order: 51"
}