---
title: "POST /api/public/trainees/{traineeId}/body-metrics"
method: POST
path: "/api/public/trainees/{traineeId}/body-metrics"
tags: ["Trainees"]
---

# POST /api/public/trainees/{traineeId}/body-metrics

`POST /api/public/trainees/{traineeId}/body-metrics`

Record a weigh-in for a trainee: weight, body fat, and/or body measurements. This is the only way to write weight through the API, because weight is kept as a dated history rather than a single field: the previous value is moved into the history and the new one becomes current. PATCH /trainees/{traineeId} therefore does NOT accept weight.

Every field is optional, but send at least one. Send only what was actually measured; omitted fields are left untouched, and each measurement field keeps its own dated history. Measurements are in cm, weight in kg, bodyFat in percent.

## Path parameters

- `traineeId` string, required

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `weight` number — Body weight in kg. Becomes the current weight; the previous one is pushed onto the weight history.
  - `bodyFat` number — Body fat percentage. Kept as a dated history, exactly like weight.
  - `date` string — ISO date this measurement was taken. Defaults to now. Use it to backfill an earlier weigh-in.
  - `chest` number — chest in cm.
  - `waist` number — waist in cm.
  - `rightArm` number — rightArm in cm.
  - `leftArm` number — leftArm in cm.
  - `rightThigh` number — rightThigh in cm.
  - `leftThigh` number — leftThigh in cm.
  - `rightCalf` number — rightCalf in cm.
  - `leftCalf` number — leftCalf in cm.
  - `neck` number — neck in cm.
  - `butt` number — butt in cm.
  - `navel` number — navel in cm.
  - `lowerAbdomen` number — lowerAbdomen in cm.
  - `upperAbdomen` number — upperAbdomen in cm.
  - `upperHip` number — upperHip in cm.
  - `lowerHip` number — lowerHip in cm.

## Response `201`

Created

- object — Created
  - `data` object
    - `traineeId` string
    - `date` string, date-time
    - `weight` number, nullable
    - `bodyFat` number, nullable
    - `measurements` object — The measurement fields recorded by this request, in cm.
  - `warnings` object[] — Non-fatal problems with follow-up writes. The resource was created, but each listed field was not applied.
    - `field` string
    - `message` string

## Other responses

- `400` — Default Response
- `401` — Default Response
- `403` — Default Response
- `404` — Default Response
- `409` — Default Response
- `429` — Default Response
- `500` — Default Response

---

[API](https://skmtc.dev/coach-platform/apis/coach-platform-api.md) · [All operations](https://skmtc.dev/coach-platform/apis/coach-platform-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/coach-platform/coach-platform-api/revisions/63d8b39f710a/schema)
