Skip to content
Last updated

Synchronous Exports

Synchronous exports return one JSON page immediately. Use them for incremental syncs and reporting flows that do not need a downloadable file.

Responses are paginated. Each response contains up to 100 rows and may include a nextCursor for the next page.

Synchronous event exports are limited to recent data. Smart Strength workouts, Smart Strength assessments, flexibility measurements, and body measurements can go back only one month. Weekly analytics is the exception and can be queried synchronously for up to 365 days.

Event exports require member opt-in

Event exports (Smart Strength workouts, Smart Strength assessments, body measurements, and flexibility measurements) only include records for members who have opted in to health data and consumer-to-business (C2B) sharing. Records for members without this opt-in are excluded, so a response may contain fewer rows than the total number of events at the gym. Weekly analytics metrics are aggregated and are not subject to this filter.

Every user-related export item includes externalAccountId, a unique and stable identifier for the member's account. Store this ID alongside the data you export so you can reconcile records across exports and delete a specific member's previously exported data later if needed (for example, when they opt out).

Query parameters

All synchronous endpoints use the same query parameters.

ParameterRequiredDescription
startDateYesStart date in YYYY-MM-DD format.
endDateYesEnd date in YYYY-MM-DD format. Must be the same as or after startDate.
cursorNoPagination cursor returned as nextCursor by the previous response.

If the response contains nextCursor, call the same endpoint again with the same startDate and endDate and the returned cursor. When nextCursor is null, the export is complete.

startDate and endDate are interpreted as UTC calendar days, and timestamp fields in the response (such as eventTimestamp) are returned in UTC.

Date range limits

EndpointMaximum rangeAdditional rule
GET /api/v1/data/analytics365 daysNone
GET /api/v1/data/smart-strength-workouts30 daysEvent data can go back only one month. startDate must be within the last month.
GET /api/v1/data/smart-strength-assessments30 daysEvent data can go back only one month. startDate must be within the last month.
GET /api/v1/data/flexibility-measurements30 daysEvent data can go back only one month. startDate must be within the last month.
GET /api/v1/data/body-measurements30 daysEvent data can go back only one month. startDate must be within the last month.

For event data older than one month, use Asynchronous Exports.

Weekly analytics

GET /api/v1/data/analytics?startDate=2026-01-01&endDate=2026-03-31
x-api-key: <api-key>
{
  "gym": {
    "name": "EGYM Gym Berlin"
  },
  "data": [
    {
      "periodStart": "2026-03-23",
      "periodEnd": "2026-03-29",
      "metricType": "workouts",
      "metricKey": "total",
      "metricSubType": "smart_strength",
      "value": 128.0
    }
  ],
  "nextCursor": null
}

Smart Strength workouts

GET /api/v1/data/smart-strength-workouts?startDate=2026-06-01&endDate=2026-06-15
x-api-key: <api-key>
{
  "gym": {
    "name": "EGYM Gym Berlin"
  },
  "data": [
    {
      "eventTimestamp": "2026-06-12T09:21:13Z",
      "externalAccountId": "member-123",
      "mmsMembershipId": "mms-abc-123",
      "isGuestUser": false,
      "firstName": "Alex",
      "lastName": "Example",
      "email": "alex@example.com",
      "machineType": "LEG_PRESS",
      "trainingMethod": "ADAPTIVE",
      "operationMode": "STANDARD",
      "trainingVisualization": "CURVE"
    }
  ],
  "nextCursor": null
}

Smart Strength assessments

GET /api/v1/data/smart-strength-assessments?startDate=2026-06-01&endDate=2026-06-15
x-api-key: <api-key>

Assessment items include the assessed bodyRegion, the assessment typeId, and the human-readable activityName.

{
  "gym": {
    "name": "EGYM Gym Berlin"
  },
  "data": [
    {
      "eventTimestamp": "2026-06-12T09:21:13Z",
      "bodyRegion": "LOWER",
      "typeId": "M4",
      "activityName": "Leg Press",
      "measurementCompleted": true,
      "chainName": "EGYM Chain",
      "firstName": "Alex",
      "lastName": "Example",
      "email": "alex@example.com",
      "externalAccountId": "member-123",
      "mmsMembershipId": "mms-abc-123"
    }
  ],
  "nextCursor": null
}

Body measurements

GET /api/v1/data/body-measurements?startDate=2026-06-01&endDate=2026-06-15
x-api-key: <api-key>

Body measurement items include measurementSource, which identifies where the measurement originated (for example, SCALE, FITNESS_HUB, or ASSESSMENT).

{
  "gym": {
    "name": "EGYM Gym Berlin"
  },
  "data": [
    {
      "externalAccountId": "member-123",
      "mmsMembershipId": "mms-abc-123",
      "eventTimestamp": "2026-06-12T09:21:13Z",
      "measurementSource": "SCALE",
      "isStaff": true,
      "measurementCompleted": true,
      "chainName": "EGYM Chain",
      "firstName": "Alex",
      "lastName": "Example",
      "email": "alex@example.com"
    }
  ],
  "nextCursor": null
}

Flexibility measurements

GET /api/v1/data/flexibility-measurements?startDate=2026-06-01&endDate=2026-06-15
x-api-key: <api-key>

Flexibility measurement items include measurementType, which identifies the assessed movement (for example, SHOULDER, HIP, or SQUAT).

{
  "gym": {
    "name": "EGYM Gym Berlin"
  },
  "data": [
    {
      "externalAccountId": "member-123",
      "mmsMembershipId": "mms-abc-123",
      "eventTimestamp": "2026-06-12T09:21:13Z",
      "measurementType": "SHOULDER",
      "isStaff": true,
      "measurementCompleted": true,
      "chainName": "EGYM Chain",
      "firstName": "Alex",
      "lastName": "Example",
      "email": "alex@example.com"
    }
  ],
  "nextCursor": null
}

Opted-out users

GET /api/v1/data/opted-out-users
x-api-key: <api-key>

Returns the members at the gym location who have not opted in to health data and consumer-to-business (C2B) sharing. Because these members are excluded from all event exports, use this endpoint to identify accounts whose previously exported data must be deleted to comply with GDPR and other data-protection requirements.

This endpoint takes no query parameters and is not paginated. It returns all opted-out users for the gym location in a single response. Each item contains only externalAccountId and lastSeenAt, the UTC timestamp when the member was last seen.

No personal details (name or email) are returned for opted-out members. EGYM shares only the externalAccountId, which is the same identifier included in the export endpoints. Match it against the data you previously exported to delete that member's records, so you can meet GDPR and other data-protection requirements without EGYM transmitting any identifiable user information.

{
  "gym": {
    "name": "EGYM Gym Berlin"
  },
  "data": [
    {
      "externalAccountId": "member-456",
      "lastSeenAt": "2026-05-30T18:42:00Z"
    }
  ]
}

Use the API Reference for the exact fields returned by each endpoint.