openapi: 3.2.0 info: title: MMS API V2 Member Account NFC 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 Account NFC description: Note that NFC API endpoints are in beta as we've been tuning setup processes on both EGYM and partner sides. paths: /api/v2/accounts/{accountId}/nfc: get: tags: - Member Account NFC summary: Retrieve a member account NFC token operationId: getAccountNfcToken parameters: - name: accountId in: path required: true schema: type: string - name: collectorId in: query required: false schema: type: integer format: int64 - name: passTypeId in: query required: false schema: type: string responses: '200': description: Ok content: application/json: schema: $ref: '#/components/schemas/NfcTokenDTO' '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 Account NFC summary: Assign an NFC token to a member account operationId: assignAccountNfcToken parameters: - name: accountId in: path required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/AssignNfcTokenRequest' 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' delete: tags: - Member Account NFC summary: Delete a member account NFC token operationId: deleteAccountNfcToken parameters: - name: accountId in: path required: true schema: type: string - name: collectorId in: query required: false schema: type: integer format: int64 - name: passTypeId in: query required: false schema: type: string 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/nfc/{nfc}: get: tags: - Member Account NFC summary: Retrieve an account by NFC description: Retrieve an account using NFC. operationId: getByNfc parameters: - name: nfc in: path required: true schema: type: string minLength: 1 - name: nfcFormat in: query description: '**Deprecated**: Use `passTypeId` or `collectorId` instead.' required: false deprecated: true schema: type: string enum: - NFC_EGYM_APPLE - NFC_EGYM_GOOGLE - NFC_EXTERNAL_APPLE - NFC_EXTERNAL_GOOGLE - name: collectorId in: query required: false schema: type: integer format: int64 - name: passTypeId in: query required: false schema: type: string 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 AssignNfcTokenRequest: type: object description: Request payload for assigning an NFC token to a member account properties: collectorId: type: integer format: int64 description: Google-specific pass issuer ID. Mutually exclusive with passTypeId. passTypeId: type: string description: Apple-specific pass issuer ID. Mutually exclusive with collectorId. token: type: string description: NFC token payload example: deadbeefcafebabe maxLength: 512 minLength: 0 required: - token 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 NfcTokenDTO: type: object description: Represents an NFC token assigned to a member account properties: token: type: string description: NFC token payload example: deadbeefcafebabe 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