EGYM User Details API

The User Details API from EGYM — 1 operation(s) for user details.

Operations 1

GET /api/v1/gyms/{gymId}/users Get user details #

Documentation

Specifications

Other Resources

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/egym-user-details-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

egym-user-details-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Equipment Vendor API (for server-to-server cases) User Details API
  description: "At EGYM, we believe that fitness is the soul of healthy living. Work together with partners to help us bringing new ways of working out to \nmillions of gym members, and new ways of prescribing exercises to hundred of thousands of gym trainers, all around the world.\n\nEGYM provides a Fitness Platform for the Connected Gym so you can help us with the mission to ***make the gym work for everyone***. \nEGYM provides a global account that is not scoped for a specific tenant, brand or gym. The account is called EGYM ID. The EGYM ID allows \nusers to use different services of the gym. The EGYM ID is used for the login to EGYM hardware and software products and conneceted equipment.   \n\nEGYM works with the best of breed of the fitness industry. In this documentation, we provide tools and info needed to build a variety of workout \nexperiences that integrate directly with the EGYM Ecosystem. We are happy to welcome you as a partner of EGYM.\n\n# Introduction\n\nThe EGYM Equipment Vendor API Server is an open Web service specification that defines methods to connect and save measurements between the\nPartner's Cloud and the EGYM Cloud Platform.\n\nUse the resources below to create, test, and submit your integration to EGYM.\n\n---\n\n# \U0001F4E6 Changelog of Documentation\n\n| Version | Changes |\n|---------|---------|\n| **1.1.1** | \U0001F510 Introduced **NFC-based login** via Apple/Google Wallet — see [`POST /api/v1/oauth/token`](#tag/OAuth/operation/token) |\n| **1.1.0** | ✅ Update of Introduction|\n\n---\n\n# Client Authentication\n\nThe Equipment Vendor API Server client authentication is based on the API Key.\n\nCurrently, different methods for obtaining the Access Token are made available, one by specifying the EGYM User ID (encrypted or obfuscated) and another one by specifying \nthe user RFID.\n\n## \U0001F504 Typical Integration Flow\n\nTo integrate your equipment with the EGYM platform, follow this sequence:\n\n1. **Authenticate via OAuth**  \n   The standard and recommended method is using RFID-based login (`RFID`) or NFC wallet-based login (`NFC`).\n\n   > Logins using `ENCRYPTED_USER_ID`, `OBFUSCATED_USER_ID`, or `REFRESH_TOKEN` are only for special use cases and require prior alignment with EGYM.\n\n2. **Retrieve User Details**  \n   Use the `/api/v1/gyms/{gymId}/users` endpoint with the token to get enriched user data.\n\n3. **Submit a Measurement**  \n   Post workout data (body, cardio, flexibility) to the `/api/v1/measurements/...` endpoint.\n\n> All subsequent requests after login must include the `Authorization: Bearer <accessToken>` header.\n\n```plaintext\n[Authenticate (POST /oauth/token)]\n              ↓\n[Get User Details (GET /gyms/{gymId}/users)]\n              ↓\n[Submit Measurements (POST /measurements/*)]\n\n```\n\n---\n\n## OAuth Login\n\nThe `/api/v1/oauth/token` endpoint supports multiple login methods via the `grantType` field. Select the appropriate grant method and use the corresponding request payload.\n\n### Grant Types and Payload Examples\n\n#### \U0001F3F7️ RFID Login (Standard)\n```json\n{\n  \"grantType\": \"RFID\",\n  \"rfid\": \"AB1020CD\",\n  \"rfidFormat\": \"MIFARE\",\n  \"machineName\": \"scale\"\n}\n```\n\n#### \U0001F4F1 NFC Login (Google Wallet)\n```json\n{\n  \"grantType\": \"NFC\",\n  \"machineName\": \"scale\",\n  \"gymId\": 130,\n  \"payload\": \"nfc-token-data-abc123\",\n  \"transponderType\": \"GOOGLE\",\n  \"issuerId\": {\n    \"collector\": \"123456789\"\n  }\n}\n```\n\n#### \U0001F4F1 NFC Login (Apple Wallet)\n```json\n{\n  \"grantType\": \"NFC\",\n  \"machineName\": \"scale\",\n  \"gymId\": 130,\n  \"payload\": \"nfc-token-data-abc123\",\n  \"transponderType\": \"APPLE\",\n  \"issuerId\": {\n    \"passTypeId\": \"example.apple.com\"\n  }\n}\n```\n\n#### \U0001F501 NFC Login (with VTAP Configuration Index)\n```json\n{\n  \"grantType\": \"NFC\",\n  \"machineName\": \"scale\",\n  \"gymId\": 130,\n  \"payload\": \"nfc-token-data-abc123\",\n  \"transponderType\": \"GOOGLE\",\n  \"configurationIndex\": {\n    \"configurationIndex\": \"2\"\n  }\n}\n```\n\n---\n\n#### \U0001F510 Encrypted User ID (Special Case - Requires Approval)\n```json\n{\n  \"grantType\": \"ENCRYPTED_USER_ID\",\n  \"userId\": 4337273027797130000\n}\n```\n\n#### \U0001F9D1 Obfuscated User ID (Special Case - Requires Approval)\n```json\n{\n  \"grantType\": \"OBFUSCATED_USER_ID\",\n  \"obfuscatedUserId\": \"-1c2yqo37vn9m\"\n}\n```\n\n#### \U0001F504 Refresh Token (Special Case - Requires Approval)\n```json\n{\n  \"grantType\": \"REFRESH_TOKEN\",\n  \"refreshToken\": \"sample-refresh-token-123\"\n}\n```\n\n##\n---\n\n## \U0001F464 Get User Details\n\n\n\n### Endpoint: `/api/v1/gyms/{gymId}/users`\nUse the access token from login to fetch user profile data:\n\nReturns:\n```json\n{\n  \"equipmentUser\": {\n    \"userId\": \"-1c2yqo37vn9m\",\n    \"firstName\": \"Max\",\n    \"lastName\": \"Mustermann\",\n    \"gender\": \"MALE\",\n    \"dateOfBirth\": \"1990-01-01\",\n    \"height\": 180,\n    \"weight\": 75,\n    \"locale\": \"en_US\",\n    \"trainingGoal\": \"MUSCLE_GAIN\"\n  }\n}\n```\n\n---\n\n\n\n## \U0001F3CB️ Submit Measurements\n\n\n\n### Endpoint: `/api/v1/measurements/body`\n\n```json\n{\n  \"timestamp\": 1693474800000,\n  \"machineName\": \"smartscale123\",\n  \"gymId\": 130,\n  \"uniqueMeasurementId\": \"unique-id-xyz\",\n  \"data\": {\n    \"weight\": 72.5,\n    \"bodyFat\": 15.3\n  }\n}\n```\n\n- `timestamp`: Milliseconds since epoch\n- `uniqueMeasurementId`: Must be unique for deduplication\n- `data`: Key-value pairs per registered metric\n\nSimilar structure is used for `/measurements/cardio` and `/measurements/flexibility`.\n\n\n\n---\n\n\n\n## \U0001F512 Security\n\nAll requests must include one of:\n\n- `x-api-key`: For login endpoint\n- `Authorization: Bearer <accessToken>`: For all other endpoints\n\n---\n\n\n\n## ❓ FAQ\n\nThis section addresses common technical integration questions specific to the **Server-to-Server** model.\n\n## 1. Authentication\n- Use the **API-Key** provided by EGYM for your integration\n- API-Key is issued **per gym location**\n- Store securely in your backend; do not expose to client devices\n\n## 2. User Identification\n- Your backend is responsible for mapping user IDs between your system and EGYM\n- Identification methods can include:\n  - RFID/NFC data received from devices\n  - Account linking between your user database and EGYM\n\n## 3. Data Flow\n- Devices send data to your backend\n- Backend sends authenticated API requests to EGYM Cloud\n- Supports both **real-time** and **batched** submissions\n\n## 4. Key Endpoints for Server-to-Server Integrations\n- Authentication: via API-Key in request headers\n- User details: `GET /users`\n- Measurements: `POST /measurements/*`\n\n## 5. Error Handling Best Practices\n- **401 Unauthorized**: Invalid/missing API-Key\n- **403 Forbidden**: Permission issue\n- **429 Too Many Requests**: Rate limit exceeded; retry after delay\n- Implement retry logic with exponential backoff for transient errors\n\n## 6. Rate Limits\n- Standard API limits apply – see API documentation\n- Monitor usage to avoid hitting limits during batch processing\n\n## 7. Testing\n- Use the **EGYM Sandbox** environment for development\n- Test credentials are prodvided by EGYM\n- Test authentication, user mapping, data submission, and error handling\n\n## 8. What if I send the same measurement twice?**  \nUse a different `uniqueMeasurementId` each time.\n\n## 9.When should I use `issuerId` vs `configurationIndex` in NFC?**  \nThese are alternatives for identifying the wallet pass source. Provide one depending on the integration project with EGYM. Configuration Index is only supported when using the Dot Origin VTAP readers.\n---"
  termsOfService: https://egym.com/us/terms/
  contact:
    name: EGYM GmbH
    url: https://egym.com/
    email: support@egym.com
  version: 1.1.1
servers:
- url: https://b2b-partner-api.ext-1.test.co.egym.coffee
  description: Generated server url
tags:
- name: User Details
paths:
  /api/v1/gyms/{gymId}/users:
    get:
      tags:
      - User Details
      summary: Get user details
      description: This endpoint retrieves user details in the defined gym location
      operationId: getUserDetails
      parameters:
      - name: gymId
        in: path
        description: The EGYM Gym Location ID.
        required: true
        schema:
          type: integer
          format: int64
        example: 130
      responses:
        '200':
          description: Ok
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserDetailsDTO'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserDetailsDTO'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDTO'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDTO'
      security:
      - user: []
components:
  schemas:
    EquipmentUserDetailsDTO:
      type: object
      properties:
        userId:
          type: string
          description: The userId assigned by egym, for example -1c2yqo37vn9m.
          example: -1c2yqo37vn9m
        email:
          type: string
          description: The email address of the user. Not available by default. Only available if needed for use case.
        firstName:
          type: string
          description: The user's first name.
        lastName:
          type: string
          description: The user's last name.
        gender:
          type: string
          description: The gender of the user.
          enum:
          - MALE
          - FEMALE
          - NON_BINARY
        dateOfBirth:
          type: string
          description: The date of birth in ISO 8601 format (yyyy-MM-dd).
          format: date
        height:
          type: number
          description: The body height of the user in centimeters.
          format: double
          example: 180
        weight:
          type: number
          description: The body weight of the user in kilograms.
          format: double
          example: 75
        locale:
          type: string
          description: 'The user locale is either in ISO 15897 standard format. i.e.: ''en_US'' or just language. i.e.: ''en'''
          example: en_US
        unitSystem:
          type: string
          description: The user Unit System.
          enum:
          - METRIC
          - US_CUSTOMARY
          - IMPERIAL
        trainingGoal:
          type: string
          description: The user training goal.
          enum:
          - WEIGHT_LOSS
          - FITNESS
          - MUSCLE_GAIN
          - BBP
          - BBP_AND_WEIGHT_LOSS
          - REHASPORT
        termsAndConditionsAccepted:
          type: boolean
          description: Informs if the terms and conditions have been accepted.
    UserDetailsDTO:
      type: object
      properties:
        equipmentUser:
          $ref: '#/components/schemas/EquipmentUserDetailsDTO'
    ErrorDTO:
      type: object
      properties:
        timestamp:
          type: string
          description: The timestamp of the request.
          format: date-time
        path:
          type: string
          description: The path requested.
        requestId:
          type: string
          description: The request ID.
          example: de625cf1-1
        status:
          type: integer
          description: The http status code.
          format: int32
        error:
          type: string
          description: The error.
        message:
          type: string
          description: The message to describe the error.
        fieldErrors:
          type: array
          description: The constraint violations.
          items:
            $ref: '#/components/schemas/FieldErrorDTO'
    FieldErrorDTO:
      type: object
      properties:
        name:
          type: string
          description: The field name.
          example: age
        message:
          type: string
          description: The error message.
          example: Must be greater than 10.
        rejectedValue:
          type: object
          description: The rejected value.
          example: 3
      description: The constraint violations.
  securitySchemes:
    user:
      type: http
      scheme: bearer
      bearerFormat: JWT
    partner:
      type: apiKey
      name: x-api-key
      in: header
x-tagGroups:
- name: Authentication
  tags:
  - OAuth
- name: Measurements
  tags:
  - Body Measurement
  - Cardio Measurement
  - Flexibility Measurement
- name: User
  tags:
  - User Details
x-internal: false