openapi: 3.2.0 info: title: MMS API V2 Migrating members 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: Migrating members description: These operations are needed to migrate members from V1 API to V2 API. paths: /api/v2/migrate: post: tags: - Migrating members summary: Migrate an account description: Migrate membership from V1 API using old EGYM user id (if already migrated then just returns membership). operationId: migrate parameters: - name: legacyUserId in: query required: true schema: type: integer format: int64 responses: '200': description: Ok content: application/json: schema: $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' 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 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