---
title: "Every marker the athlete has recorded, read over time"
method: GET
path: "/labs/markers"
tags: ["Lab results"]
---

# Every marker the athlete has recorded, read over time

`GET /labs/markers`

## Request

- Base URL: `https://bodylab.lol/api/v1`
- URL: `https://bodylab.lol/api/v1/labs/markers`
- Auth: HTTP bearer

One reading per marker: the latest value, the lab's range and flag, guideline limits that apply, the trend through earlier draws and how loudly to say anything. Grouped by catalog group, then by label.

## Headers

- `X-Client-Platform` string
- `X-Client-Version` string

## Response `200`

OK

- object
  - `markers` object[], required
    - `marker` string, required
    - `label` string, required
    - `group` string, required: The catalog group, for grouping cards; other for anything the catalog doesn't know. Known values: iron, blood_count, differential, lipids, glycaemic, thyroid, hormones, kidney, electrolytes, liver_muscle, inflammation, vitamins, other. Treat unknown values as "other".
    - `groupLabel` string, required
    - `known` boolean, required: Whether the catalog knows this marker. Unknown markers are trended without guideline limits or a measure of normal variation.
    - `latest` object, required
      - `drawId` string, required: Opaque identifier.
      - `localDate` string, date, required: A day on the athlete's own calendar: YYYY-MM-DD, no time zone.
      - `value` number, required
      - `comparator` string, nullable, required: How a result printed like "<0.5" compares; null for a plain number. Known values: <, <=, >, >=. Treat unknown values as "other".
      - `unit` string, required
      - `plotValue` number, nullable, required: In the latest result's unit, for one axis; null where it can't be converted onto it.
      - `segment` integer, required: Join points only within a segment: a change of lab, method, assay or unconvertible unit starts a new one.
      - `comparable` boolean, required: Drawn under the same relevant conditions as the latest result: draw solid and joined. Otherwise hollow and not joined.
      - `differences` string[], required: Which conditions differ from the latest draw, or weren't answered.
      - `hoursSinceSession` number, nullable, required
      - `labName` string, nullable, required
      - `method` string, nullable, required
      - `assay` string, nullable, required
    - `labRange` object, nullable, required: The latest result's range, as the lab printed it. Label it "Lab range".
      - `low` number, nullable, required
      - `high` number, nullable, required
      - `text` string, nullable, required
    - `labFlag` string, nullable, required
    - `limits` object[], required: Guideline limits that apply to this result, as ticks on the same axis as the lab range. Empty where no guideline states one.
      - `source` string, required: Who states the limit, and what kind: "EAS/EFLM 2016 flag".
      - `population` string, required: Whom it was stated for.
      - `comparison` string, required: How a result printed like "<0.5" compares; null for a plain number. Known values: <, <=, >, >=. Treat unknown values as "other".
      - `value` number, required: In the latest result's unit.
      - `unit` string, required
      - `label` string, required: For display: "EAS/EFLM 2016 flag, adults: ≥115 mg/dL".
      - `tier` string, required: How loud crossing it is. Known values: none, raise, soon, today. Treat unknown values as "other".
      - `crossed` boolean, required
    - `tier` string, required: none: say nothing. raise: "Worth raising with a clinician." soon: "Contact a clinician soon." today: "Contact a clinician today." Known values: none, raise, soon, today. Treat unknown values as "other".
    - `message` string, nullable, required: The tier's sentence, word for word; null for none.
    - `reasons` object[], required: What triggered the tier, loudest first.
      - `tier` string, required: How loud this reason is on its own. Known values: none, raise, soon, today. Treat unknown values as "other".
      - `text` string, required
    - `notes` string[], required: Caveats to show with the card.
    - `trend` object, required
      - `mode` string, required: trend: a line through comparable draws. once: measured once (Lp(a)), list only. not_trended: listed, never joined. Known values: trend, once, not_trended. Treat unknown values as "other".
      - `note` string, nullable, required: Why a marker isn't trended.
      - `points` object[], required: Oldest first; the last is `latest`.
        - `drawId` string, required: Opaque identifier.
        - `localDate` string, date, required: A day on the athlete's own calendar: YYYY-MM-DD, no time zone.
        - `value` number, required
        - `comparator` string, nullable, required: How a result printed like "<0.5" compares; null for a plain number. Known values: <, <=, >, >=. Treat unknown values as "other".
        - `unit` string, required
        - `plotValue` number, nullable, required: In the latest result's unit, for one axis; null where it can't be converted onto it.
        - `segment` integer, required: Join points only within a segment: a change of lab, method, assay or unconvertible unit starts a new one.
        - `comparable` boolean, required: Drawn under the same relevant conditions as the latest result: draw solid and joined. Otherwise hollow and not joined.
        - `differences` string[], required: Which conditions differ from the latest draw, or weren't answered.
        - `hoursSinceSession` number, nullable, required
        - `labName` string, nullable, required
        - `method` string, nullable, required
        - `assay` string, nullable, required
      - `change` object, nullable, required: Since the last comparable draw on the same line.
        - `fromDrawId` string, required: Opaque identifier.
        - `fromDate` string, date, required: A day on the athlete's own calendar: YYYY-MM-DD, no time zone.
        - `percent` number, required
        - `verdict` string, nullable, required: within normal variation, or a rise or fall beyond it; null where the marker has no known variation. Known values: within, rise, fall. Treat unknown values as "other".
        - `risePercent` number, nullable, required
        - `fallPercent` number, nullable, required
        - `text` string, required
    - `context` string, nullable, required: A population fact about athletes, never about this athlete.

## Other responses

- `401`: Error: UNAUTHORIZED.

---

[API](https://skmtc.dev/bodylab/apis/body-lab-api.md) · [All operations](https://skmtc.dev/bodylab/apis/body-lab-api/llms.txt) · [OpenAPI document](https://skmtc.dev/bodylab/apis/body-lab-api/revisions/544c201eaf88?raw)
