Gym Master

Read-only — members, contracts and gym check-in history.

4 endpoints · base /api/v1/gym

GET/api/v1/gym/membersTry it ▶

List gym members (with phone, plan expiry, total paid, assigned staff, last check-in).

MCP tool: gym_list_membersScope: gym.members.viewAPI key / app

Parameter

ParameterTypeInRequiredDescription
pageNumberintquerynoPage (starts at 1)
pageSizeintquerynoRows per page
searchstringquerynoName / phone / member code
isActivebooleanquerynotrue = still active

Example

curl https://api.nextx.vn/api/v1/gym/members?pageNumber=1&pageSize=1&search=...&isActive=... \
  -H "Authorization: Bearer <ACCESS_TOKEN>"

Sample response

{
  "items": [
    {
      "id": "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a5b",
      "branchId": "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a5b",
      "contactId": "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a5b",
      "memberCode": "string",
      "fullName": "string",
      "phone": "string",
      "email": "string",
      "avatarUrl": "string",
      "joinedDate": "2026-10-27",
      "isActive": false,
      "activeSubscriptionType": "string",
      "activeSubscriptionStartDate": "2026-10-27",
      "activeSubscriptionEndDate": "2026-10-27",
      "sourceId": "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a5b",
      "sourceName": "string",
      "createdAt": "2026-10-27T09:00:00+07:00",
      "assignedStaffId": "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a5b",
      "assignedStaffName": "string",
      "assignedStaffCode": "string",
      "dateOfBirth": "2026-10-27",
      "gender": "string",
      "isGroupMembership": false,
      "groupRole": "string",
      "groupContractCode": "string",
      "groupPackageName": "string",
      "groupMemberCount": 0,
      "groupMaxMembers": 0,
      "branchName": "string",
      "address": "string",
      "industryName": "string",
      "customerGroupName": "string",
      "contactPersonName": "string",
      "contactPersonPhone": "string",
      "contactPersonRelationship": "string",
      "standardExpiry": "2026-10-27",
      "classExpiry": "2026-10-27",
      "ptExpiry": "2026-10-27",
      "trainingBranchNames": [
        "string"
      ],
      "trainingAllBranches": false,
      "memberDisplayStatus": "string",
      "taxCode": "string",
      "totalSales": 0,
      "totalPaid": 0,
      "totalDebt": 0,
      "lastCheckinDate": "2026-10-27",
      "daysSinceLastCheckin": 0,
      "loyaltyTierName": "string",
      "identityNumber": "string",
      "identityIssuedDate": "2026-10-27",
      "identityIssuedPlace": "string",
      "notes": "string",
      "cardCode": "string",
      "devicePin": "string",
      "city": "string",
      "district": "string",
      "ward": "string",
      "phone2": "string",
      "phone3": "string",
      "referrerName": "string",
      "referrerMemberCode": "string",
      "createdByName": "string",
      "hasCardCredential": false,
      "hasFaceCredential": false,
      "hasFingerprintCredential": false
    }
  ],
  "totalCount": 0,
  "page": 0,
  "pageSize": 0,
  "totalPages": 0,
  "hasNextPage": false,
  "hasPreviousPage": false
}
GET/api/v1/gym/members/{id}Try it ▶

Details of one member.

MCP tool: gym_get_memberScope: gym.members.viewAPI key / app

Parameter

ParameterTypeInRequiredDescription
idGUIDpathyes—

Example

curl https://api.nextx.vn/api/v1/gym/members/<id> \
  -H "Authorization: Bearer <ACCESS_TOKEN>"

Sample response

{
  "id": "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a5b",
  "branchId": "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a5b",
  "contactId": "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a5b",
  "memberCode": "string",
  "fullName": "string",
  "phone": "string",
  "email": "string",
  "dateOfBirth": "2026-10-27",
  "gender": "string",
  "avatarUrl": "string",
  "joinedDate": "2026-10-27",
  "notes": "string",
  "isActive": false,
  "subscriptions": [
    {
      "id": "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a5b",
      "contractCode": "string",
      "packageName": "string",
      "packageType": "string",
      "status": "string",
      "startDate": "2026-10-27",
      "endDate": "2026-10-27",
      "sessionsTotal": 0,
      "sessionsUsed": 0,
      "pricePaid": 0,
      "createdAt": "2026-10-27T09:00:00+07:00",
      "isGroup": false,
      "maxMembers": 0,
      "groupMemberCount": 0,
      "groupRole": "string",
      "ptId": "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a5b",
      "approvalStatus": "string",
      "activationStatus": "string",
      "debtRemaining": 0
    }
  ],
  "createdAt": "2026-10-27T09:00:00+07:00",
  "updatedAt": "2026-10-27T09:00:00+07:00",
  "identityNumber": "string",
  "identityIssuedDate": "2026-10-27",
  "identityIssuedPlace": "string",
  "ward": "string",
  "address": "string",
  "city": "string",
  "country": "string",
  "phone2": "string",
  "phone3": "string",
  "assignedStaffId": "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a5b",
  "assignedStaffName": "string",
  "assignedStaffCode": "string",
  "industryId": "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a5b",
  "industryName": "string",
  "customerGroupId": "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a5b",
  "customerGroupName": "string",
  "sourceId": "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a5b",
  "sourceName": "string",
  "referredByMemberId": "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a5b",
  "referredByMemberName": "string",
  "referredByMemberCode": "string",
  "cardCode": "string",
  "branchName": "string",
  "contactPersonName": "string",
  "contactPersonPhone": "string",
  "contactPersonRelationship": "string",
  "deviceEmployeeNo": "string",
  "taxCode": "string",
  "devicePin": "string",
  "appAccountWarning": "string",
  "contactSyncWarning": "string",
  "tagIds": [
    "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a5b"
  ],
  "tagSyncWarning": "string"
}
GET/api/v1/gym/contractsTry it ▶

List gym contracts (contract code, plan, expiry, paid/outstanding, sales staff).

MCP tool: gym_list_contractsScope: gym.contracts.viewAPI key / app

Parameter

ParameterTypeInRequiredDescription
pageNumberintquerynoPage (starts at 1)
pageSizeintquerynoRows per page
gymProfileIdGUIDquerynoFilter by one member
statusstringquerynoContract status, e.g. ACTIVE / EXPIRED

Example

curl https://api.nextx.vn/api/v1/gym/contracts?pageNumber=1&pageSize=1&gymProfileId=%3CgymProfileId%3E&status=... \
  -H "Authorization: Bearer <ACCESS_TOKEN>"

Sample response

{
  "items": [
    {
      "id": "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a5b",
      "branchId": "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a5b",
      "branchName": "string",
      "contractCode": "string",
      "gymProfileId": "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a5b",
      "memberCode": "string",
      "memberName": "string",
      "packageName": "string",
      "packageType": "string",
      "status": "string",
      "scheduledStartDate": "2026-10-27",
      "saleStaffId": "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a5b",
      "saleStaffName": "string",
      "startDate": "2026-10-27",
      "endDate": "2026-10-27",
      "sessionsTotal": 0,
      "sessionsUsed": 0,
      "totalPaid": 0,
      "debtRemaining": 0,
      "contractDate": "2026-10-27",
      "createdAt": "2026-10-27T09:00:00+07:00",
      "discountPercent": 0,
      "totalDiscountAmount": 0,
      "activationStatus": "string",
      "category": {
        "id": null,
        "name": null,
        "description": null,
        "color": null,
        "isSystem": null,
        "code": null
      },
      "originalPrice": 0,
      "totalWithVat": 0,
      "durationMonths": 0,
      "durationDays": 0,
      "isRenewal": false,
      "ptId": "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a5b",
      "ptStaffName": "string",
      "orderChannel": "string",
      "memberUrl": "string",
      "registrationDate": "2026-10-27",
      "trainingBranchNames": [
        "string"
      ],
      "trainingAllBranches": false,
      "saleStaffCode": "string",
      "ptStaffCode": "string",
      "searchMatches": [
        null
      ],
      "packageUnitSnapshot": "string",
      "bonusMonths": 0,
      "bonusDays": 0,
      "bonusSessions": 0,
      "serviceValue": 0,
      "carriedValueAmount": 0,
      "pureDiscountAmount": 0,
      "carriedFromContractCode": "string",
      "relationFrom": {
        "kind": null,
        "contractId": null,
        "contractCode": null
      },
      "relationTo": {
        "kind": null,
        "contractId": null,
        "contractCode": null
      },
      "extensionValue": 0,
      "isBranchTransfer": false,
      "isBranchTransferTarget": false,
      "isSessionExhausted": false,
      "approvalStatus": "string",
      "memberDateOfBirth": "2026-10-27",
      "memberPhone": "string",
      "memberEmail": "string",
      "memberAddress": "string",
      "memberGender": "string",
      "memberGroupName": "string",
      "memberSource": "string",
      "memberDevicePin": "string",
      "memberCardCode": "string",
      "contractKind": "string",
      "activatedAt": "2026-10-27T09:00:00+07:00",
      "notes": "string",
      "promotionName": "string",
      "isSigned": false,
      "signedAt": "2026-10-27T09:00:00+07:00",
      "signedByName": "string",
      "createdByName": "string",
      "updatedByName": "string",
      "updatedAt": "2026-10-27T09:00:00+07:00",
      "maxMembers": 0,
      "groupMemberNames": [
        "string"
      ],
      "remainingValue": 0,
      "usedValue": 0,
      "consumedFreezeDays": 0,
      "invoiceRequested": false,
      "invoiceTaxCode": "string",
      "invoiceCompanyName": "string",
      "invoiceAddress": "string",
      "invoiceBuyerName": "string",
      "invoiceEmail": "string",
      "autoRenewStatus": "string"
    }
  ],
  "totalCount": 0,
  "page": 0,
  "pageSize": 0,
  "totalPages": 0,
  "hasNextPage": false,
  "hasPreviousPage": false
}
GET/api/v1/gym/checkinsTry it ▶

Gym check-in history, filterable by member and date range.

MCP tool: gym_list_checkinsScope: gym.checkins.viewAPI key / app

Parameter

ParameterTypeInRequiredDescription
pageNumberintquerynoPage (starts at 1)
pageSizeintquerynoRows per page
gymProfileIdGUIDquerynoFilter by one member
dateFromdatetimequerynoISO datetime, e.g. 2026-08-01T00:00:00+07:00
dateTodatetimequerynoISO datetime

Example

curl https://api.nextx.vn/api/v1/gym/checkins?pageNumber=1&pageSize=1&gymProfileId=%3CgymProfileId%3E&dateFrom=...&dateTo=... \
  -H "Authorization: Bearer <ACCESS_TOKEN>"

Sample response

{
  "items": [
    {
      "id": "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a5b",
      "branchId": "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a5b",
      "gymProfileId": "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a5b",
      "memberCode": "string",
      "memberName": "string",
      "checkinType": "string",
      "credentialType": "string",
      "checkinTime": "2026-10-27T09:00:00+07:00",
      "checkoutTime": "2026-10-27T09:00:00+07:00",
      "isValid": false,
      "invalidReason": "string",
      "isManualOverride": false,
      "deviceName": "string",
      "createdAt": "2026-10-27T09:00:00+07:00",
      "zoneId": "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a5b",
      "accessDecision": "string",
      "denyReason": "string",
      "ticketId": "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a5b",
      "ticketCode": "string",
      "guestName": "string",
      "guestPhone": "string",
      "subscriptionId": "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a5b",
      "contractCode": "string",
      "packageName": "string",
      "avatarKey": "string",
      "branchName": "string",
      "avatarUrl": "string",
      "subscriptionStatus": "string",
      "subscriptionExpireDate": "2026-10-27",
      "subscriptionTotalSessions": 0,
      "subscriptionUsedSessions": 0,
      "packageMode": "string",
      "sessionsRemainingSnapshot": 0,
      "ptId": "0199a1b2-c3d4-7e5f-8a9b-0c1d2e3f4a5b",
      "ptName": "string",
      "sessionsDeducted": 0,
      "serviceCode": "string",
      "checkinSource": "string",
      "notes": "string",
      "packageType": "string",
      "groupMemberAllocation": 0,
      "groupMemberRemaining": 0,
      "hasPhoto": false,
      "photoUrl": "string",
      "registeredFaceUrl": "string",
      "phone": "string",
      "debtRemaining": 0,
      "checkinCountToday": 0,
      "memberNote": "string",
      "contractNote": "string",
      "packageNote": "string",
      "ptCode": "string",
      "ptAvatarUrl": "string",
      "gymHours": "string",
      "saleStaffName": "string",
      "daysRemaining": 0
    }
  ],
  "totalCount": 0,
  "page": 0,
  "pageSize": 0,
  "totalPages": 0,
  "hasNextPage": false,
  "hasPreviousPage": false
}