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 (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).
All synchronous endpoints use the same query parameters.
| Parameter | Required | Description |
|---|---|---|
startDate | Yes | Start date in YYYY-MM-DD format. |
endDate | Yes | End date in YYYY-MM-DD format. Must be the same as or after startDate. |
cursor | No | Pagination 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.
| Endpoint | Maximum range | Additional rule |
|---|---|---|
GET /api/v1/data/analytics | 365 days | None |
GET /api/v1/data/smart-strength-workouts | 30 days | Event data can go back only one month. startDate must be within the last month. |
GET /api/v1/data/smart-strength-assessments | 30 days | Event data can go back only one month. startDate must be within the last month. |
GET /api/v1/data/flexibility-measurements | 30 days | Event data can go back only one month. startDate must be within the last month. |
GET /api/v1/data/body-measurements | 30 days | Event data can go back only one month. startDate must be within the last month. |
For event data older than one month, use Asynchronous Exports.
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
}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
}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
}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
}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
}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.