openapi: 3.2.0 info: title: MMS API V2 Member RFIDs 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: Member RFIDs description: Operations with RFIDs paths: /api/v2/accounts/{accountId}/rfids: get: tags: - Member RFIDs summary: Retrieve user RFIDs description: Returns a list of RFIDs of the user. operationId: getUserRfids parameters: - name: accountId in: path required: true schema: type: string - name: allSources in: query description: Allows to receive user RFIDs that were assigned not only by MMS but also by other sources. required: false schema: type: boolean default: false responses: '200': description: Ok content: application/json: schema: type: array items: $ref: '#/components/schemas/RfidDTO' '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' put: tags: - Member RFIDs summary: Update RFIDs of a user description: 'Note: If this field is sent we will replace the RFID list of this user with the info sent (for an empty list, we will delete all RFID connections of this user). The operation does not affect RFIDs assigned from other sources like EGYM machines, Fitness Hub etc.' operationId: updateUsersRfids parameters: - name: accountId in: path required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/RfidListDTO' required: true responses: '200': description: Ok '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' post: tags: - Member RFIDs summary: Add RFID description: Add RFID to specified user. operationId: addRFIDToUser parameters: - name: accountId in: path required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/RfidDTO' required: true responses: '200': description: Ok content: application/json: schema: $ref: '#/components/schemas/RfidDTO' '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/rfid/{rfid}: get: tags: - Member RFIDs summary: Retrieve an account by RFID description: Retrieve an account using RFID. operationId: getByRfid parameters: - name: rfid in: path required: true schema: type: string minLength: 1 - name: tagFormat in: query required: false schema: type: string enum: - HITAG1 - MIFARE - LEGIC 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' /api/v2/accounts/{accountId}/rfids/{rfid}: delete: tags: - Member RFIDs summary: Remove RFID description: Delete specified RFID from user operationId: deleteRfid parameters: - name: accountId in: path required: true schema: type: string - name: rfid in: path required: true schema: type: string - name: tagFormat in: query required: false schema: type: string enum: - HITAG1 - MIFARE - LEGIC 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' 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 RfidDTO: type: object properties: rfid: type: string description: String representing RFID value in hex (with leading "0x"). Please ensure that the RFID string after "0x" contains an even number of hexadecimal characters and that only RFID information is sent in this field, but no other medium like magnetic stripe card numbers or bar codes. pattern: ^0x([0-9a-fA-F]{2})+$ tagFormat: type: string description: The rfid tag format. enum: - HITAG1 - MIFARE - LEGIC required: - rfid 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 RfidListDTO: type: object properties: rfids: type: array description: List of the user's RFIDs items: $ref: '#/components/schemas/RfidDTO' required: - rfids 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