# Get Flexibility History for a user

This endpoint retrieves flexibility measurements history for the user with pagination support

Endpoint: GET /api/v1/measurements/flexibility/history
Version: 1.2.0
Security: user

## Security:

  - `user` (unknown)
    http bearer JWT

## Query parameters:

  - `lastId` (integer)
    Cursor for keyset pagination. When provided, only measurements with an ID strictly less than this value are returned, allowing the client to page backwards through the history. Omit on the first request.

  - `measurementLimit` (integer)
    Maximum number of measurements to return. Must be a positive integer. When omitted, the server applies its default limit.

## Response 200:

  - `200` (unknown)
    Ok

## Response 200 fields (application/json):

  - `id` (integer)
    The ID of the measurement
    Example: 123

  - `timestamp` (integer)
    The timestamp when the measurement was created (epoch milliseconds)
    Example: 1647685800000

  - `metrics` (array)
    List of flexibility metrics for this measurement

  - `metrics.type` (string)
    The type of the flexibility metric
    Enum: "RANGE_OF_MOVEMENT_SCORE", "SYMMETRIC_SCORE", "HARMONY_SCORE", "TOTAL_SCORE", "ADDUCTOR_LEFT_DEGREE", "ADDUCTOR_LEFT_SCORE", "ADDUCTOR_RIGHT_DEGREE", "ADDUCTOR_RIGHT_SCORE", "ADDUCTOR_RANGE_OF_MOTION_SCORE", "ADDUCTOR_SYMMETRY_SCORE", "LEG_BACKSIDE_LYING_LEFT_DEGREE", "LEG_BACKSIDE_LYING_LEFT_SCORE", "LEG_BACKSIDE_LYING_RIGHT_DEGREE", "LEG_BACKSIDE_LYING_RIGHT_SCORE", "LEG_BACKSIDE_LYING_RANGE_OF_MOTION_SCORE", "LEG_BACKSIDE_LYING_SYMMETRY_SCORE", "LEG_BACKSIDE_STANDING_LEFT_DEGREE", "LEG_BACKSIDE_STANDING_LEFT_SCORE", "LEG_BACKSIDE_STANDING_RIGHT_DEGREE", "LEG_BACKSIDE_STANDING_RIGHT_SCORE", "LEG_BACKSIDE_STANDING_RANGE_OF_MOTION_SCORE", "LEG_BACKSIDE_STANDING_SYMMETRY_SCORE", "LEG_EXTENSION_LEFT_DEGREE", "LEG_EXTENSION_LEFT_SCORE", "LEG_EXTENSION_RIGHT_DEGREE", "LEG_EXTENSION_RIGHT_SCORE", "LEG_EXTENSION_RANGE_OF_MOTION_SCORE", "LEG_EXTENSION_SYMMETRY_SCORE", "CHEST_LYING_LEFT_DEGREE", "CHEST_LYING_LEFT_SCORE", "CHEST_LYING_RIGHT_DEGREE", "CHEST_LYING_RIGHT_SCORE", "CHEST_LYING_RANGE_OF_MOTION_SCORE", "CHEST_LYING_SYMMETRY_SCORE", "CHEST_SITTING_LEFT_DEGREE", "CHEST_SITTING_LEFT_SCORE", "CHEST_SITTING_RIGHT_DEGREE", "CHEST_SITTING_RIGHT_SCORE", "CHEST_SITTING_RANGE_OF_MOTION_SCORE", "CHEST_SITTING_SYMMETRY_SCORE", "HIP_FLEXOR_LEFT_DEGREE", "HIP_FLEXOR_LEFT_SCORE", "HIP_FLEXOR_RIGHT_DEGREE", "HIP_FLEXOR_RIGHT_SCORE", "HIP_FLEXOR_RANGE_OF_MOTION_SCORE", "HIP_FLEXOR_SYMMETRY_SCORE", "TORSO_MUSCLES_LYING_LEFT_DEGREE", "TORSO_MUSCLES_LYING_LEFT_SCORE", "TORSO_MUSCLES_LYING_RIGHT_DEGREE", "TORSO_MUSCLES_LYING_RIGHT_SCORE", "TORSO_MUSCLES_LYING_RANGE_OF_MOTION_SCORE", "TORSO_MUSCLES_LYING_SYMMETRY_SCORE", "TORSO_MUSCLES_SITTING_LEFT_DEGREE", "TORSO_MUSCLES_SITTING_LEFT_SCORE", "TORSO_MUSCLES_SITTING_RIGHT_DEGREE", "TORSO_MUSCLES_SITTING_RIGHT_SCORE", "TORSO_MUSCLES_SITTING_RANGE_OF_MOTION_SCORE", "TORSO_MUSCLES_SITTING_SYMMETRY_SCORE", "SHOULDER_NECK_LEFT_DEGREE", "SHOULDER_NECK_LEFT_SCORE", "SHOULDER_NECK_RIGHT_DEGREE", "SHOULDER_NECK_RIGHT_SCORE", "SHOULDER_NECK_RANGE_OF_MOTION_SCORE", "SHOULDER_NECK_SYMMETRY_SCORE", "CALF_LEFT_DEGREE", "CALF_LEFT_SCORE", "CALF_RIGHT_DEGREE", "CALF_RIGHT_SCORE", "CALF_RANGE_OF_MOTION_SCORE", "CALF_SYMMETRY_SCORE", "TORSO_LATERAL_FLEXION_LEFT_DEGREE", "TORSO_LATERAL_FLEXION_RIGHT_DEGREE", "TORSO_LATERAL_FLEXION_LEFT_NORMALIZED", "TORSO_LATERAL_FLEXION_RIGHT_NORMALIZED", "NECK_LATERAL_FLEXION_LEFT_DEGREE", "NECK_LATERAL_FLEXION_RIGHT_DEGREE", "NECK_LATERAL_FLEXION_LEFT_NORMALIZED", "NECK_LATERAL_FLEXION_RIGHT_NORMALIZED", "CHEST_EXTENSION_LEFT_DEGREE", "CHEST_EXTENSION_RIGHT_DEGREE", "CHEST_EXTENSION_LEFT_NORMALIZED", "CHEST_EXTENSION_RIGHT_NORMALIZED", "HIP_EXTENSION_LEFT_DEGREE", "HIP_EXTENSION_RIGHT_DEGREE", "HIP_EXTENSION_LEFT_NORMALIZED", "HIP_EXTENSION_RIGHT_NORMALIZED", "HAMSTRING_EXTENSION_LEFT_DEGREE", "HAMSTRING_EXTENSION_RIGHT_DEGREE", "HAMSTRING_EXTENSION_LEFT_NORMALIZED", "HAMSTRING_EXTENSION_RIGHT_NORMALIZED", "SQUAT_DEPTH", "SQUAT_SHOULDER_DEGREE", "SQUAT_BACK_DEGREE"

  - `metrics.value` (number)
    The value of the metric
    Example: 85.0

## Response 400:

  - `400` (unknown)
    Bad Request

## Response 400 fields (application/json):

  - `timestamp` (integer)
    Unix epoch milliseconds when the error occurred.
    Example: 1775122463109

  - `path` (string)
    The request path that triggered the error.
    Example: /api/v1/measurements/body/history

  - `status` (integer)
    HTTP status code.
    Example: 400

  - `error` (string)
    Short textual description of the HTTP status.
    Example: Bad Request

  - `requestId` (string)
    Unique identifier for the request, useful for correlating logs and support tickets.
    Example: d0c0fd9e-236

  - `message` (string)
    Human-readable description of the error.
    Example: Invalid request parameters: value must be greater than or equal to 1 and less than or equal to 1000

  - `fieldErrors` (array)
    List of field-level validation errors. Only present when the error was caused by request-body binding failures or custom form validation.

  - `fieldErrors.name` (string)
    The field name.

  - `fieldErrors.message` (string)
    The error message.
    Example: Must not be null.

  - `fieldErrors.rejectedValue` (any)
    The rejected value.
    Example: Must not be null.

  - `errorCode` (string)
    Machine-readable error code for domain-specific errors. Only present for exceptions that carry a custom error code.
    Example: USER_NOT_FOUND

## Response 401:

  - `401` (unknown)
    Unauthorized

## Response 500:

  - `500` (unknown)
    Internal Server Error

## Response 500 fields (application/json):

  - `timestamp` (integer)
    Unix epoch milliseconds when the error occurred.
    Example: 1775122463109

  - `path` (string)
    The request path that triggered the error.
    Example: /api/v1/measurements/body/history

  - `status` (integer)
    HTTP status code.
    Example: 400

  - `error` (string)
    Short textual description of the HTTP status.
    Example: Bad Request

  - `requestId` (string)
    Unique identifier for the request, useful for correlating logs and support tickets.
    Example: d0c0fd9e-236

  - `message` (string)
    Human-readable description of the error.
    Example: Invalid request parameters: value must be greater than or equal to 1 and less than or equal to 1000

  - `fieldErrors` (array)
    List of field-level validation errors. Only present when the error was caused by request-body binding failures or custom form validation.

  - `fieldErrors.name` (string)
    The field name.

  - `fieldErrors.message` (string)
    The error message.
    Example: Must not be null.

  - `fieldErrors.rejectedValue` (any)
    The rejected value.
    Example: Must not be null.

  - `errorCode` (string)
    Machine-readable error code for domain-specific errors. Only present for exceptions that carry a custom error code.
    Example: USER_NOT_FOUND

