openapi: 3.2.0 info: title: MMS API V2 Gym Visit API description: 'RESTful API specification for integrating gym management systems with the EGYM platform. This OpenAPI document defines all available endpoints, request/response schemas, authentication requirements, and error codes. **Key Features:** - Member account and membership management - RFID assignment and management - Real-time gym visit tracking (check-in/check-out) - EGYM product booking (Smart Strength, EGYM+) - Trainer task creation and tracking - Webhook subscriptions for event notifications - Push notifications to EGYM mobile apps - Member migration from V1 API' termsOfService: https://egym.com/en/terms/ contact: name: MMS Connect Team url: https://egym.com/ email: connect@egym.com version: 2.0.0 servers: - url: https://mms.api.ed.ts.egym.coffee description: Test - url: https://mms.api.egym.com description: Prod security: - mms: [] tags: - name: Gym Visit description: These operations are needed to transmit the information to EGYM, that a specific member is currently in the gym. Based on that information several business logics are built, to provide a seamless training floor experience to the members of that gym. For example the trainer on the Training Floor is informed that this member is here and that he should complete some tasks. paths: /api/v2/accounts/{accountId}/checkouts: post: tags: - Gym Visit summary: Member Gym Check Out description: This endpoint informs the EGYM system that the member has left the gym. operationId: checkout parameters: - name: accountId in: path required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/UserPresenceDTO' required: true responses: '204': description: No Content '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorDTO' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ErrorDTO' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorDTO' '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' /api/v2/accounts/{accountId}/checkins: post: tags: - Gym Visit summary: Member Gym Check In description: This endpoint informs the EGYM system that the member has entered the gym. operationId: checkin parameters: - name: accountId in: path required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/UserPresenceDTO' required: true responses: '204': description: No Content '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorDTO' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ErrorDTO' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorDTO' '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' /api/v2/accounts/{accountId}/admissions: post: tags: - Gym Visit summary: Member Admission description: This endpoint is currently used only for members with membership type “CORPORATE_FITNESS”. It verifies if the specified member can have access to the desired gym. The MMS should use the response status to allow or block the member from entering the gym. As a side-effect this access is logged in the EGYM Corporate Fitness system if the admission was granted. operationId: checkAdmission parameters: - name: accountId in: path required: true schema: type: string responses: '200': description: Ok content: application/json: schema: $ref: '#/components/schemas/AdmissionDTO' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorDTO' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ErrorDTO' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorDTO' '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' /api/v2/accounts/corporate-fitness: get: tags: - Gym Visit summary: List Corporate Fitness member accounts description: Request Corporate Fitness member accounts for the current gym whose corporate membership cancellation date falls into specified date range. The type of membership is always `CORPORATE_FITNESS`, both `endDateFrom` and `endDateTo` parameters are mandatory and apply to `corporateFitness.endTimestamp`. operationId: getCorporateFitnessMemberAccounts parameters: - name: endDateFrom in: query required: true schema: type: string format: date example: '2022-09-22' - name: endDateTo in: query required: true schema: type: string format: date example: '2022-09-23' responses: '200': description: Ok content: application/json: schema: type: array items: $ref: '#/components/schemas/MemberAccountDTO' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorDTO' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ErrorDTO' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ErrorDTO' '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' components: schemas: CorporateFitnessDTO: type: object properties: startTimestamp: type: string description: The date (in ISO format) when the corporate fitness (Qualitrain/Wellpass) membership will start, in case that is in the future. This field will not be returned in case of an active or past corporate fitness membership. example: '2021-03-08T18:26:47Z' endTimestamp: type: string description: The date (in ISO format) when the corporate fitness (Qualitrain/Wellpass) membership ends. This field is only returned in case there is a defined end timestamp for the corporate fitness membership. example: '2021-03-08T18:26:47Z' AdmissionDTO: type: object properties: firstAdmission: type: boolean description: If this member has been admitted for the first time in the gym this will be true, false otherwise. required: - firstAdmission ErrorDTO: type: object properties: timestamp: type: string format: date-time description: The timestamp of the request. path: type: string description: The path requested. requestId: type: string description: The request ID. example: de625cf1-1 status: type: integer format: int32 description: The http status code. error: type: string description: The error. errorCode: type: string description: The static error code. message: type: string description: The message to describe the error. fieldErrors: type: array description: The constraint violations. items: $ref: '#/components/schemas/FieldErrorDTO' metadata: type: object additionalProperties: type: string description: Additional information of the error context UserPresenceDTO: type: object properties: timestamp: type: integer format: int64 description: Timestamp in milliseconds since epoch for a checkin / checkout event that happened in the past. example: 1612790783000 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: description: The rejected value. example: 3 ContactDTO: type: object properties: phone: type: string description: The Member telephone number. street: type: string description: Street name in member's address. streetNumber: type: string description: Street number in member's address. zipCode: type: string description: Zip Code in member's address. city: type: string description: City in member's address. state: type: string description: State in member's address. country: type: string description: Country of the member's address in ISO 3166-1 alpha-2. example: DE MembershipDTO: type: object properties: membershipId: type: string description: Member ID in the gym software. It must be unique for exactly one member in the gym chain. minLength: 1 agreementNumber: type: string description: The agreement number is the number of the membership between the member and the gym chain. membershipType: type: string description: Type of the member's membership to determine available features. enum: - BASIC - PREMIUM - PROSPECT - CORPORATE_FITNESS membershipSubType: type: string description: Extension of membershipStatus for further customization for this user. One membershipStatus can have multiple membershipSubType. maxLength: 128 minLength: 0 endOfContract: type: string format: date description: 'Date when the member''s contract ends. For gyms with automatic contract renewal, send the date when the contract would run out, if cancelled. Update the field when the contract was renewed (manually and automatically renewals). format: yyyy-MM-dd. Must be on or after startOfContract if provided.' startOfContract: type: string format: date description: 'The date when the membership started. format: yyyy-MM-dd' referringMemberId: type: string description: MembershipId of the member who referred this member. barcode: type: string description: Member's barcode to check-in in the gym. Can be visualised on the Branded Member App and used for lookup to verify membership. verificationTAN: type: string description: Mandatory when creating new membership of type 'CORPORATE_FITNESS' or when updating membership to 'CORPORATE_FITNESS'. Member's verification TAN. Can be visualised on the Qualitrain Member App and used for Qualitrain Membership verification. corporateFitness: $ref: '#/components/schemas/CorporateFitnessDTO' description: The corporate fitness details. These fields are returned only in case membershipType=CORPORATE_FITNESS readOnly: true required: - membershipId - membershipType - startOfContract MemberAccountDTO: type: object properties: accountId: type: string description: The EGYM account ID for the Gym Member. readOnly: true email: type: string description: The Member email address. It should be unique within the gym chain. minLength: 1 firstName: type: string description: The Member first name. example: John minLength: 1 lastName: type: string description: The Member last name. example: Wick minLength: 1 dateOfBirth: type: string format: date description: 'The Member date of birth. format: yyyy-MM-dd' gender: type: string description: The Member gender. Please note that NON_BINARY is not correctly supported yet, we send it as FEMALE for the usage of the machines. enum: - MALE - FEMALE - NON_BINARY contact: $ref: '#/components/schemas/ContactDTO' description: The user's contact information membership: $ref: '#/components/schemas/MembershipDTO' description: The membership details. required: - email - firstName - gender - lastName - membership securitySchemes: mms: type: apiKey description: Authentication is validated via an API key that is generated by EGYM for each gym location. This API key will not be identical with the access token used in the EGYM Gym API v1 name: x-api-key in: header x-tagGroups: - name: Member Account Management tags: - Member Account - Member Account Roles - Member RFIDs - Products booking - name: NFC management (Beta version) tags: - Member Account NFC - name: Member Migration tags: - Migrating members - name: Gym Visit Management tags: - Gym Visit - name: Trainer Task Management tags: - Trainer Task - name: Integration tags: - Webhooks - Push notifications