Skip to main content
POST
Log a workout

Authorizations

Authorization
string
header
default:Bearer sandbox_any_token_works
required

A 15-minute token bound to one patient and one enrollment, issued by POST /v1/oauth/token with the token-exchange grant. Treat it as opaque. When it expires, exchange a fresh assertion; there is no refresh token.

Headers

Idempotency-Key
string
required

A unique key per logical request, for example a UUID. Retrying with the same key and the same body within 24 hours returns the first response (with Idempotent-Replayed: true) instead of creating a duplicate. The same key with a different body is refused with 422 idempotency_key_reused.

Required string length: 8 - 255

Body

application/json
started_at
string<date-time>
required

ISO 8601 in UTC.

Example:

"2026-10-26T14:05:00Z"

activity_type
string
required

For example strength, walk, run, yoga, cycling.

Maximum string length: 50
Example:

"strength"

duration_min
integer
Required range: 1 <= x <= 600
Example:

35

completed
boolean
default:true
perceived_effort
integer
Required range: 1 <= x <= 10
Example:

6

workout_plan_item_id
string<uuid>
Example:

"1b3d5f7a-9c2e-4a6b-8d0f-2e4a6c8e0b2d"

sets
object[]
Maximum array length: 100
external_id
string

Your own identifier, printable ASCII without spaces.

Required string length: 1 - 128
Pattern: ^[\x21-\x7E]+$
Example:

"workout-5531"

Response

Logged.

started_at
string<date-time>
required

ISO 8601 in UTC.

Example:

"2026-10-26T14:05:00Z"

activity_type
string
required

For example strength, walk, run, yoga, cycling.

Maximum string length: 50
Example:

"strength"

id
string<uuid>
required
Example:

"0190f5c9-6e7f-7081-9ba3-2c3d4e5f6071"

log_date
string<date>
required

A calendar date in the patient's time zone.

Example:

"2026-10-26"

source
enum<string>
required
read-only

Set by the API from the caller. brand_api for brand servers, brand_app for patient tokens issued to a brand.

Available options:
app,
brand_app,
brand_api,
wearable,
coach,
ai,
system
Example:

"brand_app"

created_at
string<date-time>
required

ISO 8601 in UTC.

Example:

"2026-10-26T14:05:00Z"

updated_at
string<date-time>
required

When the log was last corrected; the same as created_at until then.

Example:

"2026-10-26T14:05:00Z"

duration_min
integer
Required range: 1 <= x <= 600
Example:

35

completed
boolean
default:true
perceived_effort
integer
Required range: 1 <= x <= 10
Example:

6

workout_plan_item_id
string<uuid>
Example:

"1b3d5f7a-9c2e-4a6b-8d0f-2e4a6c8e0b2d"

sets
object[]
Maximum array length: 100
external_id
string

Your own identifier, printable ASCII without spaces.

Required string length: 1 - 128
Pattern: ^[\x21-\x7E]+$
Example:

"workout-5531"