Appointment, bookable appointment and slots operations
PerfectGym Next API (1.20.0)
- Appointment, bookable appointment and slots operations
- Redeem checkin vouchers
- Class and slots operations
- Cross studio operations
- Get customers and contracts
- Retrieve customer accounting details
- Retrieve customer communication details
- Retrieve customer transaction details
- Get device information
- Employee operations
- Debt collection operations
- Leads operations
- Get member lists
- Manage membership contracts
- Membership operations
- Online offer operations
- Payment operations
- Get studio information
- Get trial offers information
https://open-api-demo.open-api.perfectgym.com/
https://redocly.sportalliance.com/_mock/apis/perfectgym/openapi/openapi/
- Demo tenant
https://open-api-demo.open-api.perfectgym.com/v1/cross-studio/customers/by
- Mock server
https://redocly.sportalliance.com/_mock/apis/perfectgym/openapi/openapi/v1/cross-studio/customers/by
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://open-api-demo.open-api.perfectgym.com/v1/cross-studio/customers/by?cardNumber=string&cardNumberFormat=DECIMAL&debtorId=string&barcode=string&pin=string&customerNumber=string&qrCodeUuid=497f6eca-6276-4993-bfeb-53cbbbba6f08' \
-H 'X-API-KEY: YOUR_API_KEY_HERE'OK
Gender of the customer
| Enum Value | Description |
|---|---|
| MALE | Male gender of the customer |
| FEMALE | Female gender of the customer |
| UNISEX | Unisex gender of the customer |
Additional address information of the customer's address
Status of customer
| Enum Value | Description |
|---|---|
| FORMER_MEMBER | Customer is a former member |
| PROSPECT | Customer without contracts |
| MEMBER | Customer with contracts attached |
Url with an image to download. It will expire after 15 minutes
List of additional information field assignments of the customer
Customer's creation date time in ISO-8601 format
UID list of the customer card numbers in expected format. (The new property to use is accessMediums)
{ "id": 1001, "customerNumber": "1-12345", "firstName": "Edgar", "secondFirstName": "Thomas", "lastName": "Bullock", "secondLastName": "Meyer", "dateOfBirth": "1952-05-04", "email": "example@email.com", "gender": "MALE", "street": "Am Bahnhof", "houseNumber": 89, "zipCode": "12133", "city": "Munich", "country": "DE", "secondStreet": "Second Street", "cityPart": "Tegel", "district": "District 12", "streetType": "Avenue", "streetBlock": "5th block", "portal": "Portal 1", "stairway": "Right stairway", "door": "Door 1", "province": "Champagne", "provinceCode": "MD", "additionalAddressInformation": "Additional information", "floor": "2nd floor", "buildingName": "Empire State Building", "status": "MEMBER", "cardNumbers": [ "1290158199" ], "imageUrl": "https://example.com", "phonePrivate": "+49 30901820", "phonePrivateMobile": "+49 15223433333", "phoneBusiness": "+49 30901820", "phoneBusinessMobile": "+49 15223433333", "idlePeriods": [ { … } ], "bankAccount": { "accountHolder": "Sven Hannawald", "bankName": "Deutsche Bank", "bic": "DEUTDEFFXXX", "iban": "DE91 1000 0000 0123 4567 89" }, "accessRefusal": true, "accessRestrictions": [ { … } ], "uuid": "7be3932c-825b-4401-abff-29e9f9410bc7", "referralCode": "20J6N", "studioId": 1238735970, "preferredLanguage": { "languageCode": "de", "countryCode": "DE" }, "additionalInformationFieldAssignments": [ { … } ], "thirdPartyId": "A1000", "createdDateTime": "2022-06-15T23:59:59.123+02:00", "taxIdentifications": [ { … } ], "accessMediums": [ { … } ] }
- Demo tenant
https://open-api-demo.open-api.perfectgym.com/v1/cross-studio/customers/{customerId}
- Mock server
https://redocly.sportalliance.com/_mock/apis/perfectgym/openapi/openapi/v1/cross-studio/customers/{customerId}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://open-api-demo.open-api.perfectgym.com/v1/cross-studio/customers/{customerId}?cardNumberFormat=DECIMAL' \
-H 'X-API-KEY: YOUR_API_KEY_HERE'OK
Gender of the customer
| Enum Value | Description |
|---|---|
| MALE | Male gender of the customer |
| FEMALE | Female gender of the customer |
| UNISEX | Unisex gender of the customer |
Additional address information of the customer's address
Status of customer
| Enum Value | Description |
|---|---|
| FORMER_MEMBER | Customer is a former member |
| PROSPECT | Customer without contracts |
| MEMBER | Customer with contracts attached |
Url with an image to download. It will expire after 15 minutes
List of additional information field assignments of the customer
Customer's creation date time in ISO-8601 format
UID list of the customer card numbers in expected format. (The new property to use is accessMediums)
{ "id": 1001, "customerNumber": "1-12345", "firstName": "Edgar", "secondFirstName": "Thomas", "lastName": "Bullock", "secondLastName": "Meyer", "dateOfBirth": "1952-05-04", "email": "example@email.com", "gender": "MALE", "street": "Am Bahnhof", "houseNumber": 89, "zipCode": "12133", "city": "Munich", "country": "DE", "secondStreet": "Second Street", "cityPart": "Tegel", "district": "District 12", "streetType": "Avenue", "streetBlock": "5th block", "portal": "Portal 1", "stairway": "Right stairway", "door": "Door 1", "province": "Champagne", "provinceCode": "MD", "additionalAddressInformation": "Additional information", "floor": "2nd floor", "buildingName": "Empire State Building", "status": "MEMBER", "cardNumbers": [ "1290158199" ], "imageUrl": "https://example.com", "phonePrivate": "+49 30901820", "phonePrivateMobile": "+49 15223433333", "phoneBusiness": "+49 30901820", "phoneBusinessMobile": "+49 15223433333", "idlePeriods": [ { … } ], "bankAccount": { "accountHolder": "Sven Hannawald", "bankName": "Deutsche Bank", "bic": "DEUTDEFFXXX", "iban": "DE91 1000 0000 0123 4567 89" }, "accessRefusal": true, "accessRestrictions": [ { … } ], "uuid": "7be3932c-825b-4401-abff-29e9f9410bc7", "referralCode": "20J6N", "studioId": 1238735970, "preferredLanguage": { "languageCode": "de", "countryCode": "DE" }, "additionalInformationFieldAssignments": [ { … } ], "thirdPartyId": "A1000", "createdDateTime": "2022-06-15T23:59:59.123+02:00", "taxIdentifications": [ { … } ], "accessMediums": [ { … } ] }
Defines how card numbers are interpreted
Customer phone number. Search matches private, private mobile, business, and business mobile numbers
- Demo tenant
https://open-api-demo.open-api.perfectgym.com/v1/cross-studio/customers/search
- Mock server
https://redocly.sportalliance.com/_mock/apis/perfectgym/openapi/openapi/v1/cross-studio/customers/search
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X POST \
https://open-api-demo.open-api.perfectgym.com/v1/cross-studio/customers/search \
-H 'Content-Type: application/json' \
-H 'X-API-KEY: YOUR_API_KEY_HERE' \
-d '{
"firstName": "Edga",
"lastName": "Bull",
"email": "example@email.com",
"dateOfBirth": "1952-05-04",
"cardNumberFormat": "DECIMAL",
"phoneNumber": "+491234567890",
"thirdPartyId": "A1000"
}'OK
Gender of the customer
| Enum Value | Description |
|---|---|
| MALE | Male gender of the customer |
| FEMALE | Female gender of the customer |
| UNISEX | Unisex gender of the customer |
Additional address information of the customer's address
Status of customer
| Enum Value | Description |
|---|---|
| FORMER_MEMBER | Customer is a former member |
| PROSPECT | Customer without contracts |
| MEMBER | Customer with contracts attached |
Url with an image to download. It will expire after 15 minutes
List of additional information field assignments of the customer
Customer's creation date time in ISO-8601 format
UID list of the customer card numbers in expected format. (The new property to use is accessMediums)
Customer's bank account information. Deprecated: For fetching bank accounts use the Search customers by payment details endpoint.
[ { "id": 1001, "customerNumber": "1-12345", "firstName": "Edgar", "secondFirstName": "Thomas", "lastName": "Bullock", "secondLastName": "Meyer", "dateOfBirth": "1952-05-04", "email": "example@email.com", "gender": "MALE", "street": "Am Bahnhof", "houseNumber": 89, "zipCode": "12133", "city": "Munich", "country": "DE", "secondStreet": "Second Street", "cityPart": "Tegel", "district": "District 12", "streetType": "Avenue", "streetBlock": "5th block", "portal": "Portal 1", "stairway": "Right stairway", "door": "Door 1", "province": "Champagne", "provinceCode": "MD", "additionalAddressInformation": "Additional information", "floor": "2nd floor", "buildingName": "Empire State Building", "status": "MEMBER", "cardNumbers": [ … ], "imageUrl": "https://example.com", "phonePrivate": "+49 30901820", "phonePrivateMobile": "+49 15223433333", "phoneBusiness": "+49 30901820", "phoneBusinessMobile": "+49 15223433333", "idlePeriods": [ … ], "bankAccount": { … }, "accessRefusal": true, "accessRestrictions": [ … ], "uuid": "7be3932c-825b-4401-abff-29e9f9410bc7", "referralCode": "20J6N", "studioId": 1238735970, "preferredLanguage": { … }, "additionalInformationFieldAssignments": [ … ], "thirdPartyId": "A1000", "createdDateTime": "2022-06-15T23:59:59.123+02:00", "taxIdentifications": [ … ], "accessMediums": [ … ] } ]
- Demo tenant
https://open-api-demo.open-api.perfectgym.com/v1/cross-studio/customers/{customerId}/activities/checkins
- Mock server
https://redocly.sportalliance.com/_mock/apis/perfectgym/openapi/openapi/v1/cross-studio/customers/{customerId}/activities/checkins
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://open-api-demo.open-api.perfectgym.com/v1/cross-studio/customers/{customerId}/activities/checkins?fromDate=2019-08-24&toDate=2019-08-24&sliceSize=10&offset=0' \
-H 'X-API-KEY: YOUR_API_KEY_HERE'{ "result": [ { … } ], "hasNext": true, "offset": "1234567890" }
- Demo tenant
https://open-api-demo.open-api.perfectgym.com/v1/cross-studio/membership-offers/studios
- Mock server
https://redocly.sportalliance.com/_mock/apis/perfectgym/openapi/openapi/v1/cross-studio/membership-offers/studios
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
https://open-api-demo.open-api.perfectgym.com/v1/cross-studio/membership-offers/studios \
-H 'X-API-KEY: YOUR_API_KEY_HERE'[ { "name": "Example studio", "description": "Example studio description", "country": "Germany", "countryCode": "DE", "studioId": 123, "openingDate": "2025-06-11", "closingDate": "2029-01-01" } ]
Defines how card numbers are interpreted
Payment details type supported for search
| Enum Value | Description |
|---|---|
| BACS | BACS payment instrument type |
| FINGERPRINT | Fingerprint of any payment instrument |
| SEPA | SEPA payment instrument type |
| ACH | ACH payment instrument type |
| CREDIT_CARD | Credit card payment instrument type |
- Demo tenant
https://open-api-demo.open-api.perfectgym.com/v1/cross-studio/customers/search/by-payment-details
- Mock server
https://redocly.sportalliance.com/_mock/apis/perfectgym/openapi/openapi/v1/cross-studio/customers/search/by-payment-details
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X POST \
https://open-api-demo.open-api.perfectgym.com/v1/cross-studio/customers/search/by-payment-details \
-H 'Content-Type: application/json' \
-H 'X-API-KEY: YOUR_API_KEY_HERE' \
-d '{
"cardNumberFormat": "DECIMAL",
"type": "SEPA",
"bankAccountNumber": "DE89370400440532013000"
}'OK
Customer information
Gender of the customer
| Enum Value | Description |
|---|---|
| MALE | Male gender of the customer |
| FEMALE | Female gender of the customer |
| UNISEX | Unisex gender of the customer |
Additional address information of the customer's address
Status of customer
| Enum Value | Description |
|---|---|
| FORMER_MEMBER | Customer is a former member |
| PROSPECT | Customer without contracts |
| MEMBER | Customer with contracts attached |
Url with an image to download. It will expire after 15 minutes
Private mobile phone number of the customer
Business mobile phone number of the customer
List of access restrictions of the customer
List of additional information field assignments of the customer
Unique ID of the third party customer in the third party system
Customer's creation date time in ISO-8601 format
Tax identification documents of the customer.
UID list of the customer card numbers in expected format. (The new property to use is accessMediums)
[ { "customer": { … }, "paymentDetails": { … } } ]
Optional studio ID to filter bookings to a single studio while preserving cross-studio identity
Start date of the slot window. Class slots are retrieved from slotWindowStartDate to (slotWindowStartDate + daysAhead). If omitted, today is used.
Number of days to look ahead from slotWindowStartDate. If slotWindowStartDate is omitted, the window starts today.
- Demo tenant
https://open-api-demo.open-api.perfectgym.com/v1/cross-studio/customers/{customerId}/class-bookings
- Mock server
https://redocly.sportalliance.com/_mock/apis/perfectgym/openapi/openapi/v1/cross-studio/customers/{customerId}/class-bookings
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://open-api-demo.open-api.perfectgym.com/v1/cross-studio/customers/{customerId}/class-bookings?studioId=0&slotWindowStartDate=2019-08-24&daysAhead=1&sliceSize=10&offset=0' \
-H 'X-API-KEY: YOUR_API_KEY_HERE'OK
List of class bookings
Status of the class slot booking
| Enum Value | Description |
|---|---|
| BOOKED | Customer is successfully booked |
| CANCELED | Customer booking is canceled |
| BOOKED_WITH_CONFIRMATION_REQUIRED | Customer is booked, but booking confirmation is required |
| WAITING_LIST | Customer is assigned to waiting list |
The status of a participant
| Enum Value | Description |
|---|---|
| PARTICIPATING | The customer is participating. |
| UNSET | The participation status is not set. |
| NOT_PARTICIPATING | The customer is not participating. |
Class information for a cross-studio booking
Class slot information for a cross-studio booking
The status of a class slot
| Enum Value | Description |
|---|---|
| COMPLETED | The class slot is completed. |
| CANCELED | The class slot is canceled. |
| PLANNED | The class slot is planned. |
Start date and time of the class slot
{ "result": [ { … } ], "hasNext": true, "offset": "1234567890" }
Optional studio ID to filter bookings to a single studio while preserving cross-studio identity
Start date of the slot window. Appointments are retrieved from slotWindowStartDate to (slotWindowStartDate + daysAhead). If omitted, today is used.
Number of days to look ahead from slotWindowStartDate. If slotWindowStartDate is omitted, the window starts today.
- Demo tenant
https://open-api-demo.open-api.perfectgym.com/v1/cross-studio/customers/{customerId}/appointment-bookings
- Mock server
https://redocly.sportalliance.com/_mock/apis/perfectgym/openapi/openapi/v1/cross-studio/customers/{customerId}/appointment-bookings
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://open-api-demo.open-api.perfectgym.com/v1/cross-studio/customers/{customerId}/appointment-bookings?studioId=0&slotWindowStartDate=2019-08-24&daysAhead=1&sliceSize=10&offset=0' \
-H 'X-API-KEY: YOUR_API_KEY_HERE'OK
List of appointment bookings
Status of the appointment booking
| Enum Value | Description |
|---|---|
| BOOKED | Customer is successfully booked |
| CANCELED | Customer booking is canceled |
| BOOKED_WITH_CONFIRMATION_REQUIRED | Customer booking is successful, but confirmation is required |
The status of a participant
| Enum Value | Description |
|---|---|
| PARTICIPATING | The customer is participating. |
| UNSET | The participation status is not set. |
| NOT_PARTICIPATING | The customer is not participating. |
Appointment information for a cross-studio booking
Category of the appointment
The status of an appointment
| Enum Value | Description |
|---|---|
| COMPLETED | The appointment is completed. |
| CANCELED | The appointment is canceled. |
| PLANNED | The appointment is planned. |
Start date and time of the appointment
End date and time of the appointment
{ "result": [ { … } ], "hasNext": true, "offset": "1234567890" }