Log sets by exercise
Logs sets the way a person says them (“bench 185 for 8, 8, 7”): finds the exercise in a session (default the active mesocycle’s next one) by name or muscle, fills its unlogged sets in order, and adds sets when more were done than planned.
/api/training/log__Secure-better-auth.session_tokenAPI key · cookierequiredBetter Auth session. Signing in (Google or email magic link) sets an HttpOnly session cookie that scopes every request to that account. The web app and CLI use this; agents use the OAuth 2.1 flow of the MCP server.
AuthorizationBearer token · headerrequiredPersonal API key sent as Authorization: Bearer skcal_…. Create and scope keys in the app under your profile → API keys. Keys default to full access; a scoped key is limited to its granted resource:action permissions and cannot manage other keys.
application/jsonThe exercise and the sets done.
exercisestringExercise name or muscle as the user said it; matched against the session.
slotIdstringExact slot id, instead of a name.
mesoIdstringMesocycle (default the active one).
weekintegerWeek (default the next session due).
dayintegerDay (default the next session due).
setsobject[]requiredThe sets, in order.
Show propertiesHide properties
objectweightLbnumberLoad in pounds (0 for bodyweight).
repsintegerrequiredReps completed in this set.
atstring | integerWhen the set was finished, ISO 8601 with offset or epoch ms. Omit for sets done just now; sets sent together without times share one timestamp.
The sets were logged.
objectThe request body or parameters failed validation.
errorstringrequiredHuman-readable failure reason.
detailstringOptional extra context, present on upstream failures.