pricing follows from that. Read this page once and the four states below stop looking like special cases.
What the numbers mean
Everyprice_cents is what you pay, at the rate card on your API key. Beside it, retail_cents is the same item at the recommended retail card, so you can show a saving without a second request. Both are integer cents, and both are net: VAT is added on your monthly invoice at the rate your VAT treatment carries, and an exempt treatment adds none. A panel that sells at Aniva’s consumer catalog price is quoted at that price stripped of its 19 % German VAT.
retail_cents is always present. When your key is already on the retail card it simply equals
price_cents.prices_view scope. Without it, pricing is null on the listings and the preview, and the Pricing endpoints return 403.
Your rate card
Your rate card sets your prices. Read it from Get Rate Card.- Each analysis has a
tier:routineorspecialty. Its price is the Aniva catalog price times the multiplier of that tier. - The fees are per appointment, and the logistics fee is per courier pickup. Your appointments at the same location on the same day share one pickup. Aniva bills the fees on your monthly invoice.
The four states
price_cents, plus which optional block sits beside it, is the state. There is no separate type field.
Positive — orderable alone
The marker has a price of its own. It may still appear in positions, andpositions then lists them cheapest first — buying the position is often cheaper than buying its members one by one.
biomarker_ids is the position’s full member set; includes is that set minus the marker you queried — what rides along.
Zero with requires — a ratio
A ratio is computed from measured markers. Most ratios cost 0. A ratio with a positive price_cents bills that price in addition to its components. Order it and Aniva puts its components in the cart at their own prices. A component is paid once per cart however many ratios lean on it.
Zero with positions — sold only inside a position
The marker has no price of its own, but it is a member of one or more positions. Buy one of those positions and you get it.
Null — uncurated
Aniva has not decided what this marker costs, so it is not for sale.null is not zero and not “ask us”: treat it as unavailable.
null by design. Aniva sells microbiome and genetics tests as kits. A kit has one
price, so its member markers have no price of their own. To buy these markers, order the panel that
is the kit. The members come with the panel. The API also accepts a member that you add to an
appointment that already carries its panel.
A marker also reads null when Aniva sells it only inside a position that you cannot see. The
result is the same: you have no price to buy the marker at. The marker gets a price when Aniva
makes that position partner-facing.
Finding the cheapest way to buy a set
Because every position a marker belongs to travels with the marker, you can solve this locally, without extra requests:- Collect the markers you want from List Biomarkers.
- For each one, compare its own
price_centsagainst theprice_centsof the positions in itspositionsblock. - A position bills once and delivers its whole
biomarker_idsset, so a position covering several of your markers is charged a single time. Extra markers you did not ask for come along at no additional cost.
The bill
Preview Appointment returns the bill of an appointment. Quote Cart returns the same bill without an appointment. The bill has:positions[]— every position that fired, billed once at its flat price.panels[]— every attached panel.biomarkers[]— one row per delivered marker. A row a position pays for costs0and names it invia_position. A component pulled in by a ratio carriesrequired_by; the ratio itself carriesrequires.total_cents— the priced positions plus the priced panels plus the priced biomarker rows, withretail_total_centsbeside it.feesandtotal_with_fees_cents— the fees of one appointment, and the total with them.
price_cents: null. The row adds nothing to the total. You cannot attach an unpriced marker on its own, so a position or a panel supplied this row. That position or panel already bills for it.
Aniva has not published every position yet. An unpublished position still bills. It appears in
positions[] with id and name set to null, and its biomarker rows have via_position: null.