Biomarkers
List Biomarkers
Browse the biomarker catalog
GET
Returns a paginated catalog of biomarkers your API key can attach to appointments via Add Individual Biomarkers. Archived biomarkers are excluded.
Only blood-collectable biomarkers are listed. Appointments are blood draws, so biomarkers whose sample is a non-blood material (urine, saliva, stool, swabs, and the like) are excluded — you can’t collect them at a draw. Markers with no specific material (ratios, genetic markers) are kept.
Each breakdown is a list of billing groups — each billed once — plus a total:
Request
Query parameters
string
Restrict the catalog to biomarkers testable at this location, and populate per-biomarker
pricing
for its routing pipeline. The filter is the union across every lab the location’s logistic
template supports: a biomarker is included if it is testable at at least one of those labs.string
Override which rate card the
yours price uses: retail, subscription, or a billing-account
slug your key may use. Defaults to the card on your API key’s billing account, else retail. Only
affects pricing (which requires test_location_id).number
Maximum results to return (1–1000). Omit to return the entire matching catalog — it’s bounded (a
few thousand rows at most). When omitted,
pagination.limit echoes back total.number
default:"0"
Pagination offset. Must be ≥ 0.
Response
Biomarker[]
Array of biomarkers matching the query.
object
Price objects
Pricing has one shape everywhere it appears — biomarkers, panels, and the appointment preview. It is always a pair of breakdowns:object | null
Recommended retail price (retail rate card), or
null when not priceable.object | null
Your price, at the rate card on your API key’s billing account (equals
retail when your key has
no billing-account card).integer
Sum of all groups (each billed once), in cents.
object[]
The billing groups (order groups — a ZOTZ|KLIMAS order panel, an LC price group, a flat bundle, a
Stripe panel). Every group carries
price_cents (the group’s cost at this card, billed once) and
biomarker_ids (every biomarker it delivers; empty for panel-level groups). A ZK GOÄ
group also carries goa_lines — how the price was built. Absent for flat-priced bundles, every
other lab, rate-card overrides, and Stripe-priced panels.integer
What this group costs at this card, in cents (billed once). This is what you pay — when
goa_lines is present it equals the sum of their amount_cents.number[]
Every biomarker this group delivers — not just the one you queried. The order group is billed
once, so this is what comes with it: prerequisite results (a blood-count differential pulls the
full count) and co-delivered markers (one fatty-acid run yields the whole panel), plus, for a
ratio, its components (the ratio rides along). Empty for panel-level groups. Because order groups
are shared, summing per-biomarker prices across a basket over-counts — use the appointment
preview for an exact cart total.
object[] | undefined
The GOÄ positions making up this charge (ZK GOÄ analyses) — usually one, but a panel can bill
several codes. Each line is
{ goa_code, goa_base_cents (GOÄ 1.0× baseline / Einfachsatz), quantity (may be fractional, e.g. 3.5), factor (the multiplier applied to the 1.0× price on this card — e.g. 1.15 retail / 0.8 partner / 0 when ZK invoices you directly; NOT a GOÄ Steigerungsfaktor), amount_cents (what the line costs = goa_base_cents × quantity × factor, server-rounded — read it directly) }. Omitted for flat-priced bundles, other labs, rate-card overrides, and
Stripe-priced panels.