The Fitssey API is organized around REST implementation. It communicates using HTTPS resource-oriented URLs, accepting and returning JSON payloads. The API is secured using Bearer token which can be obtained in your Studio > Integrations > API Keys.
We advise you to take 30 minutes upon reading this document and this may save you time when developing your great application.
This document covers the REST API. To get notified about events in your Studio in real time, see the Webhooks documentation.
/client/{user}/notes endpoint/client/{user}/notes endpoint/report/client-pricing-option/active endpoint/classroom/book endpoint/classroom/cancel endpoint/client/{user} endpoint/client/{user}/tags endpoint/client/{user}/tags endpoint/schedule/courses endpoint/report/finance/zero-sales endpoint/report endpointThe base URL contains {uuid} parameter which can be found in Studio > Your Studio > UUID section and it's an integral part of each request.
Thanks to the UUID, we know it's you.
https://app.fitssey.com/{uuid}/api/v4/public
For developers we have created examples that can be found in our official Github profile (https://github.com/fitssey).
Check out our Widgets integration - simply copy & paste the given code and things magically appear on your website!
Fitssey API by default uses HTTP authentication.
The very first thing you would have to do is to create an API key in your Studio > Integrations > API Keys.
Of course it's very important to keep your API keys always secure. That is why we strongly recommend to:
The created API key must be sent along with each API request, by providing it in the HTTP Authorization request header using the Bearer method. The valid Authorization header looks as follows:
Bearer live_dHar4XY7LxsDOtmnkVtjNVWXLSlXsM.
Each API key is granted a set of scopes when it is created in Studio > Integrations > API Keys. A scope allows a single kind of operation on a single resource, e.g. client:read or clientVisit:write.
Grant each key only the scopes the integration really needs.
A request made with a key that lacks the required scope is rejected:
HTTP/1.1 403 Forbidden
Content-Type: application/json
WWW-Authenticate: Bearer error="insufficient_scope", scope="client:write"
{
"error": {
"statusCode": 403,
"code": 109,
"message": "Insufficient scope. This endpoint requires the \"client:write\" scope."
}
}
Scopes other than read also require API write access to be activated for the studio. New studios can request it in Studio > Integrations > API Keys. Until it is activated, such requests are rejected with code 110:
HTTP/1.1 403 Forbidden
Content-Type: application/json
{
"error": {
"statusCode": 403,
"code": 110,
"message": "Write access is not activated for this studio. The \"client:write\" scope requires API write access, which can be requested in Studio > Integrations > API Keys."
}
}
Whenever you develop the application, you must always check for errors because sometimes things break. Normally, you will always get a response in JSON format explaining what the error was along with the error code for a reference.
A first digit of HTTP status code represents whether the response was successful or not.
2xx range indicates that a response was successful and you can handle the data in your application.4xx range indicates that a response has failed due to number of reasons explained in the error message (can be validation problem, resource not found or authentication issue).
Usually this error won't go away by itself.5xx range indicates that Fitssey application had hiccup, meaning something happened in our app infrastructure. Only we know what causes the problem, so you won't get detailed message what's going on in the error message.
In such critical errors, we are instantly notified about the problem, so it may be possible that if you retry your request it will work again.HTTP/1.1 403 Forbidden
Content-Type: application/json
{
"error": {
"statusCode": 403,
"code": 103,
"message": "Invalid API key"
}
}
Sometimes we use enums as strings (e.g. scheduled) and sometimes as integers (e.g. 1 (paid)). Pay attention whether to use each.
You can use our API to write custom applications or integrations for your website. You can do variety of things including the following:
As of late 2025, we have introduced rate limits as follows:
The limits apply per studio, not per API key. All API keys of a studio share the same budget, so creating additional keys does not raise the limit. Each response carries the current state in the X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset (seconds) headers.
When a limit is exceeded, the request is rejected until the lockout expires:
HTTP/1.1 429 Too Many Requests
Content-Type: application/json
X-RateLimit-Limit: 200
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1800
{
"error": {
"statusCode": 429,
"code": 0,
"message": "Rate limit exceeded. Retry after 1800 seconds."
}
}
Stop sending requests until X-RateLimit-Reset seconds have passed. Some lockouts are extended by every request made during the lockout, so retrying early only makes it longer.
Yes. An API key that keeps sending requests while being rate limited is suspended after too many consecutive 429 responses (1000 by default). Any request that is not rate limited resets the counter, so integrations that respect the lockout are never suspended. The studio owner is notified by email when a key is suspended.
A suspended key is rejected with code 111 on every request:
HTTP/1.1 403 Forbidden
Content-Type: application/json
{
"error": {
"statusCode": 403,
"code": 111,
"message": "API key has been suspended after too many rate-limited requests. The studio can resume it in Settings > Integrations > API."
}
}
The studio can resume the key in Studio > Integrations > API Keys. Fix the integration's retry behaviour first, otherwise the key will be suspended again.
Please treat our API with all the respect and don't abuse the calls. If possible, please cache the responses on your side.
Required scope: classService:read
This call returns all studio classes.
| sortField | string Default: createdAt Value: createdAt Determines by which field the collection should be sorted on. |
| sortDir | string Default: asc Enum: asc desc Determines the sort order for the collection. |
| page | integer (page) Default: 1 Example: page=1 The page number to return. |
| count | integer (count) <= 1000 Default: 10 Example: count=10 The number of items to return per page. Must not exceed 1000; a higher value returns a 400 error. |
| pages | integer or null The number of pages for the given collection. |
| totalCount | integer or null The total number of items returned in the given collection. |
object An object describing the current page. | |
Array of objects (ClassService) |
{- "collection": [
- {
- "name": "Astanga Yoga",
- "internalName": "Astanga Yoga [with own mats]",
- "description": "This class is perfect for...",
- "categories": [
- {
- "name": "Yoga",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
], - "picture": {
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "experienceLevel": {
- "name": "Beginner level",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "serviceType": "classroom",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
]
}Required scope: client:read
This call returns all studio clients.
| sortField | string Default: createdAt Enum: (all properties) city street postalCode Determines by which field the collection should be sorted on. |
| sortDir | string Default: asc Enum: asc desc Determines the sort order for the collection. |
| page | integer (page) Default: 1 Example: page=1 The page number to return. |
| count | integer (count) <= 1000 Default: 10 Example: count=10 The number of items to return per page. Must not exceed 1000; a higher value returns a 400 error. |
| filters[emailAddress] | string Example: filters[emailAddress][email protected] Shrink the collection based on the email address criteria. |
| filters[address] | Array of arrays Items Enum: havingAddress noAddress Example: filters[address]=havingAddress Shrink the collection based on address criteria. |
| filters[phone] | Array of arrays Items Enum: havingPhone noPhone Example: filters[phone]=noPhone Shrink the collection based on phone criteria. |
| filters[sex] | Array of arrays Items Enum: 0 (male) 1 (female) Example: filters[sex]=1 Shrink the collection based on gender criteria. |
| filters[age] | Array of arrays Items Enum: <18 18-24 25-34 35-44 45-54 55-64 65+ Example: filters[age]=18-24 Shrink the collection based on age criteria. |
| filters[agreements] | Array of arrays Items Enum: havingTermsOfUseAgreement noTermsOfUseAgreement havingPrivacyPolicyAgreement noPrivacyPolicyAgreement havingNewsletterAgreement noNewsletterAgreement Example: filters[agreements]=noPrivacyPolicyAgreement Shrink the collection based on agreements criteria. |
| filters[tags] | Array of arrays Items Enum: havingTags noTags Example: filters[tags]=havingTags Shrink the collection based on tags criteria. |
| filters[selectedTags] | Array of arrays Items Value: guid Example: filters[selectedTags]=F15138B6-826E-4287-AAA5-8EC301D65FB4 Shrink the collection based on specific tags criteria. |
| filters[notes] | Array of arrays Items Enum: havingNotes noNotes Example: filters[notes]=havingNotes Shrink the collection based on notes criteria. |
| filters[emergencyContact] | Array of arrays Items Enum: havingEmergencyContact noEmergencyContact Example: filters[emergencyContact]=noEmergencyContact Shrink the collection based on emergency contact criteria. |
| filters[mobileApps] | Array of arrays Items Enum: mobileApp noMobileApp Example: filters[mobileApps]=noMobileApp Shrink the collection based on mobile app criteria. |
| filters[deleted] | Array of arrays Items Enum: true false Example: filters[deleted]=true Shrink the collection based on deleted clients criteria. |
| filters[suspended] | Array of arrays Items Enum: havingAccountSuspended noAccountSuspended Example: filters[suspended]=havingAccountSuspended Shrink the collection based on suspended clients criteria. |
| filters[birthdate] | Array of arrays Items Enum: havingBirthdate noBirthdate Example: filters[birthdate]=noBirthdate Shrink the collection based on birthdates criteria. |
| filters[login] | Array of arrays Items Enum: havingLoginEnabled noLoginEnabled Example: filters[login]=noLoginEnabled Shrink the collection based on login criteria. |
| filters[createdAt] | Array of arrays Items Enum: eq (=) lt (<) lte (<=) gt (>) gte (>=) Example: filters[createdAt]=lt(2023-10-25) Shrink the collection based on created on criteria. |
| filters[modifiedAt] | Array of arrays Items Enum: between eq (=) lt (<) lte (<=) gt (>) gte (>=) Example: filters[modifiedAt]=between(2023-10-01,2023-10-31) Shrink the collection based on modified on criteria. |
| queryString | string Default: null Filtering collection by free text. |
| pages | integer or null The number of pages for the given collection. |
| totalCount | integer or null The total number of items returned in the given collection. |
object An object describing the current page. | |
Array of objects (User) |
{- "collection": [
- {
- "firstName": "Maria",
- "lastName": "Dvorak",
- "sex": 1,
- "suspensionType": 1,
- "isSuspended": false,
- "suspendedAt": "2019-09-10T15:31:47+02:00",
- "suspensionExpiresAt": "2019-09-17T15:31:47+02:00",
- "suspensionReason": "Suspended due to many cancellations",
- "isLoginEnabled": true,
- "activatedAt": "2019-09-01T12:02:35+02:00",
- "lastSeenAt": "2019-09-03T09:54:12+02:00",
- "client": {
- "uuid": "1000072",
- "clientFields": {
- "8D2A6C1E-4F3B-4A7E-9C21-5B6E0F3D7A12": 1234,
- "C47E9B05-1A2D-4E6F-8B3C-9D0E2F4A6B81": "ABCD"
}, - "agreements": null,
- "birthdateAt": "1980-01-19T23:00:00+01:00",
- "lastActiveAt": "2019-09-03T08:06:23+02:00",
- "address": {
- "street": "Sunny street 77a",
- "postalCode": "1234AB",
- "city": "Amsterdam",
- "countryCode": "NL"
}, - "phone": {
- "mobilePhone": "+31222333444",
- "homePhone": "20304050",
- "workPhone": "60708090",
- "isMobilePhoneVerified": false
}, - "picture": {
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "clientNotes": [
- {
- "type": "private",
- "note": "Client prefers morning classes.",
- "color": "#FF5733",
- "expiresAt": null,
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
], - "tags": [
- {
- "name": "VIP",
- "color": "#FF5733",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
]
}, - "fullName": "Monica Dvorak",
- "hasAndroidApp": false,
- "hasIosApp": false,
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
]
}Required scope: client:read
This call returns the client.
| user required | string <guid> The guid of the Client to return. |
| emailAddress | string or null Default: null An unique user's email address. |
| contactEmailAddress | string or null Default: null The user's contact email address. |
| firstName | string The user's first name. |
| lastName | string The user's last name. |
| sex | integer or null Default: 1 Enum: 0 (male) 1 (female) The user's gender. |
| suspensionType | integer or null Default: null Enum: 0 (booking) 1 (login) If not null, returns information about what type of suspension has been set on user's account. |
| isSuspended | boolean Default: false Determines whether the user's account is suspended or not. |
| suspendedAt | string or null Default: null The time at which user's account has been suspended. |
| suspensionExpiresAt | string or null Default: null The time at which user's account will be automatically released from suspension. |
| suspensionReason | string or null Default: null Additional reason of why user's account has been suspended. |
| isLoginEnabled | boolean Default: true Determines whether the user's login possibility is enabled or not. |
| activatedAt | string or null Default: null The time at which user's account has been activated (mostly via activation link in the email). |
| lastSeenAt | string or null Default: null The time at which user was logged in to FrontOffice for the last time. |
object or null (Client) Attached when user is a | |
| fullName | string The user's full name. |
| hasAndroidApp | boolean Default: false Determines whether user is using Android app (Fitssey free app or Fitssey premium app). |
| hasIosApp | boolean Default: false Determines whether user is using iOS app (Fitssey free app or Fitssey premium app). |
| guid | string <guid> = 36 characters Globally unique identifier |
{- "firstName": "Maria",
- "lastName": "Dvorak",
- "sex": 1,
- "suspensionType": 1,
- "isSuspended": false,
- "suspendedAt": "2019-09-10T15:31:47+02:00",
- "suspensionExpiresAt": "2019-09-17T15:31:47+02:00",
- "suspensionReason": "Suspended due to many cancellations",
- "isLoginEnabled": true,
- "activatedAt": "2019-09-01T12:02:35+02:00",
- "lastSeenAt": "2019-09-03T09:54:12+02:00",
- "client": {
- "uuid": "1000072",
- "clientFields": {
- "8D2A6C1E-4F3B-4A7E-9C21-5B6E0F3D7A12": 1234,
- "C47E9B05-1A2D-4E6F-8B3C-9D0E2F4A6B81": "ABCD"
}, - "agreements": null,
- "birthdateAt": "1980-01-19T23:00:00+01:00",
- "lastActiveAt": "2019-09-03T08:06:23+02:00",
- "address": {
- "street": "Sunny street 77a",
- "postalCode": "1234AB",
- "city": "Amsterdam",
- "countryCode": "NL"
}, - "phone": {
- "mobilePhone": "+31222333444",
- "homePhone": "20304050",
- "workPhone": "60708090",
- "isMobilePhoneVerified": false
}, - "picture": {
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "clientNotes": [
- {
- "type": "private",
- "note": "Client prefers morning classes.",
- "color": "#FF5733",
- "expiresAt": null,
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
], - "tags": [
- {
- "name": "VIP",
- "color": "#FF5733",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
]
}, - "fullName": "Monica Dvorak",
- "hasAndroidApp": false,
- "hasIosApp": false,
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}Required scope: client:write
This call allows you to update a client account, including its tags, notes, agreements and custom fields.
| user required | string <guid> The guid of the Client to update. |
| firstName | string [ 2 .. 25 ] characters The client's first name. |
| lastName | string [ 2 .. 40 ] characters The client's last name. |
| emailAddress | string <= 50 characters The client's email address. |
| sex | integer Enum: 0 (male) 1 (female) The client's gender. |
object A property describing client payload. |
| emailAddress | string or null Default: null An unique user's email address. |
| contactEmailAddress | string or null Default: null The user's contact email address. |
| firstName | string The user's first name. |
| lastName | string The user's last name. |
| sex | integer or null Default: 1 Enum: 0 (male) 1 (female) The user's gender. |
| suspensionType | integer or null Default: null Enum: 0 (booking) 1 (login) If not null, returns information about what type of suspension has been set on user's account. |
| isSuspended | boolean Default: false Determines whether the user's account is suspended or not. |
| suspendedAt | string or null Default: null The time at which user's account has been suspended. |
| suspensionExpiresAt | string or null Default: null The time at which user's account will be automatically released from suspension. |
| suspensionReason | string or null Default: null Additional reason of why user's account has been suspended. |
| isLoginEnabled | boolean Default: true Determines whether the user's login possibility is enabled or not. |
| activatedAt | string or null Default: null The time at which user's account has been activated (mostly via activation link in the email). |
| lastSeenAt | string or null Default: null The time at which user was logged in to FrontOffice for the last time. |
object or null (Client) Attached when user is a | |
| fullName | string The user's full name. |
| hasAndroidApp | boolean Default: false Determines whether user is using Android app (Fitssey free app or Fitssey premium app). |
| hasIosApp | boolean Default: false Determines whether user is using iOS app (Fitssey free app or Fitssey premium app). |
| guid | string <guid> = 36 characters Globally unique identifier |
{- "firstName": "Jonathan",
- "lastName": "Smith",
- "sex": 1,
- "client": {
- "birthdayAt": "1995-06-27 00:00:00",
- "address": {
- "street": "Sunny street 77a",
- "postalCode": "1234AB",
- "city": "Amsterdam"
}, - "phone": {
- "mobilePhone": "+31222333444",
- "homePhone": "20304050",
- "workPhone": "60708090"
}, - "clientFields": {
- "8D2A6C1E-4F3B-4A7E-9C21-5B6E0F3D7A12": 1234,
- "C47E9B05-1A2D-4E6F-8B3C-9D0E2F4A6B81": "ABCD"
}, - "tags": [
- "F7AF8A76-1A51-4CE6-9142-0D987C2B647F",
- "A1FED25B-A13E-4E65-8F74-62290C882BEF"
], - "clientNotes": [
- {
- "note": "Prefers morning classes.",
- "isPinned": true,
- "color": "#FF5733"
}
], - "agreements": {
- "termsOfUse": true,
- "newsletter": false,
- "privacyPolicy": true
}
}
}{- "firstName": "Maria",
- "lastName": "Dvorak",
- "sex": 1,
- "suspensionType": 1,
- "isSuspended": false,
- "suspendedAt": "2019-09-10T15:31:47+02:00",
- "suspensionExpiresAt": "2019-09-17T15:31:47+02:00",
- "suspensionReason": "Suspended due to many cancellations",
- "isLoginEnabled": true,
- "activatedAt": "2019-09-01T12:02:35+02:00",
- "lastSeenAt": "2019-09-03T09:54:12+02:00",
- "client": {
- "uuid": "1000072",
- "clientFields": {
- "8D2A6C1E-4F3B-4A7E-9C21-5B6E0F3D7A12": 1234,
- "C47E9B05-1A2D-4E6F-8B3C-9D0E2F4A6B81": "ABCD"
}, - "agreements": null,
- "birthdateAt": "1980-01-19T23:00:00+01:00",
- "lastActiveAt": "2019-09-03T08:06:23+02:00",
- "address": {
- "street": "Sunny street 77a",
- "postalCode": "1234AB",
- "city": "Amsterdam",
- "countryCode": "NL"
}, - "phone": {
- "mobilePhone": "+31222333444",
- "homePhone": "20304050",
- "workPhone": "60708090",
- "isMobilePhoneVerified": false
}, - "picture": {
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "clientNotes": [
- {
- "type": "private",
- "note": "Client prefers morning classes.",
- "color": "#FF5733",
- "expiresAt": null,
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
], - "tags": [
- {
- "name": "VIP",
- "color": "#FF5733",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
]
}, - "fullName": "Monica Dvorak",
- "hasAndroidApp": false,
- "hasIosApp": false,
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}Required scope: client:write
This call allows you to create a client account.
| firstName required | string [ 2 .. 25 ] characters The client's first name. |
| lastName required | string [ 2 .. 40 ] characters The client's last name. |
| emailAddress | string <= 50 characters Default: null The client's email address. |
| sex | integer Default: null Enum: 0 (male) 1 (female) The client's gender. |
| activationMethod | string Default: null Enum: disabled email password There are two types of activation (both require providing an email address): |
object Credentials are required when | |
object A property describing client payload. |
| emailAddress | string or null Default: null An unique user's email address. |
| contactEmailAddress | string or null Default: null The user's contact email address. |
| firstName | string The user's first name. |
| lastName | string The user's last name. |
| sex | integer or null Default: 1 Enum: 0 (male) 1 (female) The user's gender. |
| suspensionType | integer or null Default: null Enum: 0 (booking) 1 (login) If not null, returns information about what type of suspension has been set on user's account. |
| isSuspended | boolean Default: false Determines whether the user's account is suspended or not. |
| suspendedAt | string or null Default: null The time at which user's account has been suspended. |
| suspensionExpiresAt | string or null Default: null The time at which user's account will be automatically released from suspension. |
| suspensionReason | string or null Default: null Additional reason of why user's account has been suspended. |
| isLoginEnabled | boolean Default: true Determines whether the user's login possibility is enabled or not. |
| activatedAt | string or null Default: null The time at which user's account has been activated (mostly via activation link in the email). |
| lastSeenAt | string or null Default: null The time at which user was logged in to FrontOffice for the last time. |
object or null (Client) Attached when user is a | |
| fullName | string The user's full name. |
| hasAndroidApp | boolean Default: false Determines whether user is using Android app (Fitssey free app or Fitssey premium app). |
| hasIosApp | boolean Default: false Determines whether user is using iOS app (Fitssey free app or Fitssey premium app). |
| guid | string <guid> = 36 characters Globally unique identifier |
{- "firstName": "Jonathan",
- "lastName": "Smith",
- "sex": 1,
- "activationMethod": "password",
- "credentials": {
- "authMethod": "0",
- "value": "Mypas$word123!"
}, - "client": {
- "birthdayAt": "1995-06-27 00:00:00",
- "address": {
- "street": "Sunny street 77a",
- "postalCode": "1234AB",
- "city": "Amsterdam"
}, - "phone": {
- "mobilePhone": "+31222333444",
- "homePhone": "20304050",
- "workPhone": "60708090"
}, - "clientFields": {
- "8D2A6C1E-4F3B-4A7E-9C21-5B6E0F3D7A12": 1234,
- "C47E9B05-1A2D-4E6F-8B3C-9D0E2F4A6B81": "ABCD"
}, - "tags": [
- "F7AF8A76-1A51-4CE6-9142-0D987C2B647F",
- "A1FED25B-A13E-4E65-8F74-62290C882BEF"
], - "agreements": {
- "termsOfUse": true,
- "newsletter": false,
- "privacyPolicy": true
}
}
}[- {
- "firstName": "Maria",
- "lastName": "Dvorak",
- "sex": 1,
- "suspensionType": 1,
- "isSuspended": false,
- "suspendedAt": "2019-09-10T15:31:47+02:00",
- "suspensionExpiresAt": "2019-09-17T15:31:47+02:00",
- "suspensionReason": "Suspended due to many cancellations",
- "isLoginEnabled": true,
- "activatedAt": "2019-09-01T12:02:35+02:00",
- "lastSeenAt": "2019-09-03T09:54:12+02:00",
- "client": {
- "uuid": "1000072",
- "clientFields": {
- "8D2A6C1E-4F3B-4A7E-9C21-5B6E0F3D7A12": 1234,
- "C47E9B05-1A2D-4E6F-8B3C-9D0E2F4A6B81": "ABCD"
}, - "agreements": null,
- "birthdateAt": "1980-01-19T23:00:00+01:00",
- "lastActiveAt": "2019-09-03T08:06:23+02:00",
- "address": {
- "street": "Sunny street 77a",
- "postalCode": "1234AB",
- "city": "Amsterdam",
- "countryCode": "NL"
}, - "phone": {
- "mobilePhone": "+31222333444",
- "homePhone": "20304050",
- "workPhone": "60708090",
- "isMobilePhoneVerified": false
}, - "picture": {
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "clientNotes": [
- {
- "type": "private",
- "note": "Client prefers morning classes.",
- "color": "#FF5733",
- "expiresAt": null,
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
], - "tags": [
- {
- "name": "VIP",
- "color": "#FF5733",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
]
}, - "fullName": "Monica Dvorak",
- "hasAndroidApp": false,
- "hasIosApp": false,
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
]Required scope: clientContract:read
This call returns all client contracts.
| user required | string <guid> The guid of the User the returned client contracts belong to. |
| sortField | string Default: createdAt Value: createdAt Determines by which field the collection should be sorted on. |
| sortDir | string Default: asc Enum: asc desc Determines the sort order for the collection. |
| page | integer (page) Default: 1 Example: page=1 The page number to return. |
| count | integer (count) <= 1000 Default: 10 Example: count=10 The number of items to return per page. Must not exceed 1000; a higher value returns a 400 error. |
| pages | integer or null The number of pages for the given collection. |
| totalCount | integer or null The total number of items returned in the given collection. |
object An object describing the current page. | |
Array of objects (ClientContract) |
{- "collection": [
- {
- "privateNotes": "Client prefers monthly billing",
- "startsAt": "2019-06-01T22:00:00+02:00",
- "endsAt": "2020-05-31T21:59:59+02:00",
- "terminatedAt": "2020-10-02T22:00:00+02:00",
- "terminatedFrom": "2020-10-02T22:00:00+02:00",
- "terminationReason": "Moving out to different country",
- "contract": {
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "instalments": [
- {
- "status": "scheduled",
- "scheduledAt": "2019-05-12T22:00:00+02:00",
- "endsAt": "2019-06-12T21:59:59+02:00",
- "processedAt": "2019-06-12T22:00:00+02:00",
- "chargeAt": "2019-06-01T22:00:00+02:00",
- "suspendedAt": "2020-03-15T10:00:00+02:00",
- "suspensionReason": "Holiday season",
- "clientOrder": {
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "qualifiedName": "Guest Card",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
], - "nextPaymentAt": "2020-10-02T22:00:00+02:00",
- "nextChargeAmount": "8000",
- "minInstalmentCountToAllowTermination": "3",
- "qualifiedName": "1 Year Contract",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
]
}Required scope: clientContractInstalment:write
With this call you will be able to resume a previously suspended client contract instalment. Resuming an instalment changes the associated order status back to scheduled.
| clientContractInstalment required | string <guid> The guid of the ClientContractInstalment to be resumed. |
| status | string Enum: scheduled processed The status that indicates whether the instalment has been scheduled or processed |
| scheduledAt | string The scheduled date of the instalment (expressed in ISO 8601 format). This is the date when scheduled instalment becomes processed one |
| endsAt | string The end date of the instalment (expressed in ISO 8601 format) |
| processedAt | datetime or null Default: null Time at which the instalment has changed the status to "processed" (expressed in ISO 8601 format). |
| chargeAt | datetime or null Default: null Time at which the instalment is scheduled for charge (expressed in ISO 8601 format). |
| suspendedAt | datetime or null Default: null Time at which the instalment has been suspended (expressed in ISO 8601 format). |
| suspensionReason | string or null Default: null The reason why the instalment has been suspended |
object (ClientOrder) Attached the order to the instalment | |
| qualifiedName | string A representative name of the instalment, derived from the attached order items. |
| guid | string <guid> = 36 characters Globally unique identifier |
{- "status": "scheduled",
- "scheduledAt": "2019-05-12T22:00:00+02:00",
- "endsAt": "2019-06-12T21:59:59+02:00",
- "processedAt": "2019-06-12T22:00:00+02:00",
- "chargeAt": "2019-06-01T22:00:00+02:00",
- "suspendedAt": "2020-03-15T10:00:00+02:00",
- "suspensionReason": "Holiday season",
- "clientOrder": {
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "qualifiedName": "Guest Card",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}Required scope: clientContractInstalment:write
With this call you will be able to suspend a client contract instalment. Suspending an instalment changes the associated order status to suspended.
| clientContractInstalment required | string <guid> The guid of the ClientContractInstalment to be suspended. |
| suspensionReason | string The reason why the instalment is being suspended. |
| status | string Enum: scheduled processed The status that indicates whether the instalment has been scheduled or processed |
| scheduledAt | string The scheduled date of the instalment (expressed in ISO 8601 format). This is the date when scheduled instalment becomes processed one |
| endsAt | string The end date of the instalment (expressed in ISO 8601 format) |
| processedAt | datetime or null Default: null Time at which the instalment has changed the status to "processed" (expressed in ISO 8601 format). |
| chargeAt | datetime or null Default: null Time at which the instalment is scheduled for charge (expressed in ISO 8601 format). |
| suspendedAt | datetime or null Default: null Time at which the instalment has been suspended (expressed in ISO 8601 format). |
| suspensionReason | string or null Default: null The reason why the instalment has been suspended |
object (ClientOrder) Attached the order to the instalment | |
| qualifiedName | string A representative name of the instalment, derived from the attached order items. |
| guid | string <guid> = 36 characters Globally unique identifier |
{- "suspensionReason": "Holiday season"
}{- "status": "scheduled",
- "scheduledAt": "2019-05-12T22:00:00+02:00",
- "endsAt": "2019-06-12T21:59:59+02:00",
- "processedAt": "2019-06-12T22:00:00+02:00",
- "chargeAt": "2019-06-01T22:00:00+02:00",
- "suspendedAt": "2020-03-15T10:00:00+02:00",
- "suspensionReason": "Holiday season",
- "clientOrder": {
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "qualifiedName": "Guest Card",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}Required scope: clientNote:write
This call adds one or more notes to the client. Existing notes are kept. The request is rejected as a whole if any of the notes is invalid.
| user required | string <guid> The guid of the Client to add the notes to. |
required | Array of objects An array of notes to add. |
object or null (Client) Attached when user is a | |
| guid | string <guid> = 36 characters Globally unique identifier |
{- "notes": [
- {
- "note": "Prefers morning classes.",
- "type": "private",
- "color": "#FF5733",
- "isPinned": true,
- "expiresAt": "2026-12-31T23:59:59+01:00"
}
]
}{- "client": {
- "clientNotes": [
- {
- "type": "private",
- "note": "Client prefers morning classes.",
- "color": "#FF5733",
- "expiresAt": null,
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
]
}, - "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}Required scope: clientNote:write
This call removes one or more notes from the client. Each note is identified by its GUID. A note that does not exist or does not belong to the client results in a 404.
| user required | string <guid> The guid of the Client to remove the notes from. |
| notes required | Array of strings <guid> An array of note GUIDs. |
object or null (Client) Attached when user is a | |
| guid | string <guid> = 36 characters Globally unique identifier |
{- "notes": [
- "558491D8-3B6C-411B-9DF7-4486C3F66B5B",
- "7C1E2A90-5B3D-4F6A-8E21-9D0C3B4A5F67"
]
}{- "client": {
- "clientNotes": [
- {
- "type": "private",
- "note": "Client prefers morning classes.",
- "color": "#FF5733",
- "expiresAt": null,
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
]
}, - "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}Required scope: clientOrder:read
This call returns all client orders.
| user required | string <guid> The guid of the User the returned client orders belong to. |
| sortField | string Default: createdAt Value: (all properties) Determines by which field the collection should be sorted on. |
| sortDir | string Default: asc Enum: asc desc Determines the sort order for the collection. |
| page | integer (page) Default: 1 Example: page=1 The page number to return. |
| count | integer (count) <= 1000 Default: 10 Example: count=10 The number of items to return per page. Must not exceed 1000; a higher value returns a 400 error. |
| status | string Default: null Enum: current past You can filter out collection based on the given status. |
| startDate | string <Y-m-d> (startDate) Default: Today's date The requested start date for filtering the results. |
| endDate | string <Y-m-d> (endDate) Default: Today's date The requested end date for filtering the results. |
| pages | integer or null The number of pages for the given collection. |
| totalCount | integer or null The total number of items returned in the given collection. |
object An object describing the current page. | |
Array of objects (ClientOrder) |
{- "collection": [
- {
- "orderStatus": 1,
- "paymentMethod": 0,
- "paidAmount": 1750,
- "dueAmount": 0,
- "discountRate": 0,
- "invoiceDetails": null,
- "privateNotes": null,
- "voidReason": null,
- "paymentDueAt": null,
- "paidAt": "2025-05-12T12:45:47+02:00",
- "voidedAt": null,
- "clientOrderItems": [
- {
- "name": "Yoga Card x4",
- "internalName": "Yoga Card x4 [previously 4x card]",
- "netPrice": 1428,
- "totalPrice": 1750,
- "taxAmount": 322,
- "taxRate": 0.23,
- "totalPriceBeforeDiscount": 2000,
- "serviceType": "classroom",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709",
- "createdAt": "2019-05-12T12:45:47+02:00",
- "modifiedAt": "2023-09-12T19:18:23+02:00"
}
], - "totalPrice": 1750,
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709",
- "createdAt": "2019-05-12T12:45:47+02:00",
- "modifiedAt": "2023-09-12T19:18:23+02:00"
}
]
}Required scope: clientOrder:read
This call returns the client order.
| user required | string <guid> The guid of the User the client order belongs to. |
| clientOrder required | string <guid> The guid of the ClientOrder to return. |
| orderStatus | integer Enum: 0 (pending) 1 (paid) 2 (unpaid) 3 (cancelled) 4 (rejected) 5 (awaiting) 6 (void) 7 (scheduled) 8 (failed) 9 (authorizationAllowed) 10 (authorizationDisallowed) 11 (freeOfCharge) 12 (suspended) The last order status that indicates whether the order has been paid or not. |
| paymentMethod | integer Enum: 0 (online) 1 (bankTransfer) 2 (cash) 3 (other) 4 (gift) 5 (none) 6 (paymentCard) 11 (test) 12 (terminal) 13 (wallet) The payment method that has been used to pay for this order. |
| paidAmount | decimal A positive integer in the smallest currency unit (100 cents for 1 EUR) representing the total paid amount for the order. |
| dueAmount | decimal A positive integer in the smallest currency unit (100 cents for 1 EUR) representing the total due amount for the order. |
| discountRate | decimal A decimal number indicating discount rate (0.2 for 20%, 1.0 for 100%). |
| invoiceDetails | object or null Default: null |
| privateNotes | string or null Default: null Private notes visible only to studio members, not exposed to the client. |
| voidReason | string or null Default: null The reason why the order has been voided. |
| paymentDueAt | string or null Default: null Time by which the order should be paid. |
| paidAt | string or null Default: null Time at which the order has been paid. |
| voidedAt | string or null Default: null Time at which the order has been voided. |
Array of objects Item objects purchased along with the order. | |
| totalPrice | integer A positive integer in the smallest currency unit (100 cents for 1 EUR) representing the total price of the order. |
| guid | string <guid> = 36 characters Globally unique identifier |
| createdAt | string Time at which the object was created (expressed in ISO 8601 format) |
| modifiedAt | string Time at which the object was modified (expressed in ISO 8601 format). If never modified it will equal date of creation |
{- "orderStatus": 1,
- "paymentMethod": 0,
- "paidAmount": 1750,
- "dueAmount": 0,
- "discountRate": 0,
- "invoiceDetails": null,
- "privateNotes": null,
- "voidReason": null,
- "paymentDueAt": null,
- "paidAt": "2025-05-12T12:45:47+02:00",
- "voidedAt": null,
- "clientOrderItems": [
- {
- "name": "Yoga Card x4",
- "internalName": "Yoga Card x4 [previously 4x card]",
- "netPrice": 1428,
- "totalPrice": 1750,
- "taxAmount": 322,
- "taxRate": 0.23,
- "totalPriceBeforeDiscount": 2000,
- "serviceType": "classroom",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709",
- "createdAt": "2019-05-12T12:45:47+02:00",
- "modifiedAt": "2023-09-12T19:18:23+02:00"
}
], - "totalPrice": 1750,
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709",
- "createdAt": "2019-05-12T12:45:47+02:00",
- "modifiedAt": "2023-09-12T19:18:23+02:00"
}Required scope: clientPricingOption:read
This call returns all client pricing options.
| user required | string <guid> The guid of the User the returned client pricing options belong to. |
| sortField | string Default: createdAt Value: (all properties) Determines by which field the collection should be sorted on. |
| sortDir | string Default: asc Enum: asc desc Determines the sort order for the collection. |
| page | integer (page) Default: 1 Example: page=1 The page number to return. |
| count | integer (count) <= 1000 Default: 10 Example: count=10 The number of items to return per page. Must not exceed 1000; a higher value returns a 400 error. |
| status | string Default: null Enum: active inactive notActivated active,notActivated You can filter out collection based on the given status. |
| pages | integer or null The number of pages for the given collection. |
| totalCount | integer or null The total number of items returned in the given collection. |
object An object describing the current page. | |
Array of objects (ClientPricingOption) |
{- "collection": [
- {
- "remain": 4,
- "sessionType": "limitedVisits",
- "expiresAt": "2023-08-31T21:59:59+02:00",
- "activatedAt": "2023-08-01T22:00:00+02:00",
- "pricingOption": {
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "isUnpaid": false,
- "isShared": false,
- "qualifiedName": "Yoga pass 8x",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
]
}Required scope: clientVisit:write
This call books one or more classes for the given client and creates a ClientVisit for each of them.
The call is a two-step flow driven by the type property. Send validate first to learn whether each of the requested classes can be booked and which client pricing options (passes) may pay for it, then send the very same payload again with confirm to create the bookings.
Classes are referenced by the referenceId of their ScheduleEvent, which is returned by the /schedule and /schedule-event/{scheduleEvent} endpoints.
| user required | string <guid> = 36 characters The unique GUID of the User the classes are booked for. |
| type | string Default: validate Enum: validate confirm Determines the step of the booking flow. |
| enrollments required | Array of strings The referenceIds of the ScheduleEvents to book. Booking several classes at once is supported and they are always validated in chronological order. |
| clientPricingOption | string or null <guid> = 36 characters The GUID of the client pricing option (pass) to pay with. It is used only when it is among the available ones returned by the validation, otherwise the best matching pass is picked automatically. |
| actions | Array of strings Items Enum: waitinglistFlow allowUnpaid forceUnpaid Opts the booking into an alternative flow. |
| awaitingUntil | string or null <Y-m-d H:i:s> Only used together with the |
object Optional context of the request. |
| status | string Value: validated Always |
object (ScheduleEventValidationResult) |
{- "user": "F7CB86F0-0E5F-42A4-895E-480BD0B7B963",
- "type": "validate",
- "enrollments": [
- "55995f06ed386dc3d3bd236eaeb95b8c109540266bf7e1a6c634ae1b56b5bfe6"
], - "clientPricingOption": "C9E2C0C9-8F3E-4C0F-A0A6-9E7B0E6C1A2D",
- "actions": [
- "waitinglistFlow"
], - "awaitingUntil": "2026-09-30 18:00:00",
- "metadata": {
- "startsAt": "2026-09-30 18:00:00",
- "endsAt": "2026-09-30 19:00:00"
}
}{- "status": "validated",
- "data": {
- "result": [
- {
- "scheduleEvent": {
- "referenceId": "55995f06ed386dc3d3bd236eaeb95b8c109540266bf7e1a6c634ae1b56b5bfe6",
- "totalCapacity": 22,
- "onlineCapacity": 20,
- "waitingListCapacity": 10,
- "color": "rgb(69, 180, 231)",
- "liveStreamUrl": null,
- "liveStreamPassword": null,
- "privateNotes": "Some private notes about this event.",
- "isFree": false,
- "isLiveStream": false,
- "isCancelled": false,
- "isHidden": false,
- "isBookableOnline": true,
- "startsAt": "2019-09-04T10:00:00+02:00",
- "endsAt": "2019-09-04T11:00:00+02:00",
- "room": {
- "name": "Room A",
- "location": {
- "name": "Circle place",
- "directions": "Take the second exit on the roundabout.",
- "picture": {
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "address": {
- "street": "Sunny street 77a",
- "postalCode": "1234AB",
- "state": "Noord-Holland",
- "city": "Amsterdam",
- "countryCode": "NL"
}, - "phone": {
- "mobilePhone": "+31222333444",
- "homePhone": "20304050",
- "workPhone": "60708090",
- "isMobilePhoneVerified": false,
- "primaryPhone": "+48111222333"
}, - "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "qualifiedName": "Circle place - Room A",
- "hasSmartLock": false,
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "scheduleMeta": {
- "bookingBehavior": 1,
- "classService": {
- "name": "Astanga Yoga",
- "description": "This class is perfect for...",
- "picture": {
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "experienceLevel": {
- "name": "Beginner level",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "serviceType": "classroom",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "hasStarted": true,
- "hasEnded": true,
- "isInProgress": false,
- "remainCapacity": 5,
- "remainOnlineCapacity": 3,
- "remainFrontOfficeCapacity": 3,
- "remainWaitingListCapacity": 2,
- "remainCapacityForMale": 2,
- "remainCapacityForFemale": 3,
- "bookedSpots": 17,
- "bookedSpotsForMale": 8,
- "bookedSpotsForFemale": 9,
- "bookedWaitingListSpots": 4,
- "bookedOnlineSpots": 12,
- "maleCapacity": 10,
- "femaleCapacity": 12,
- "isAvailableForBookingAhead": true,
- "isAvailableBeforeStartTime": true,
- "qualifiedName": "Astanga Led",
- "serviceType": "TYPE_CLASSROOM_SERVICE",
- "members": [
- {
- "publicBiography": "Mark is one of the best Yoga teachers...",
- "user": {
- "firstName": "Maria",
- "lastName": "Dvorak",
- "sex": 1,
- "fullName": "Monica Dvorak",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "picture": {
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "qualifiedName": "Mark the Teacher"
}
]
}, - "clientPricingOption": {
- "remain": 4,
- "sessionType": "limitedVisits",
- "expiresAt": "2023-08-31T21:59:59+02:00",
- "activatedAt": "2023-08-01T22:00:00+02:00",
- "pricingOption": {
- "expirationType": 0,
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "isUnpaid": false,
- "isShared": false,
- "qualifiedName": "Yoga pass 8x",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "locationRoom": {
- "name": "Room A",
- "location": {
- "name": "Circle place",
- "directions": "Take the second exit on the roundabout.",
- "picture": {
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "address": {
- "street": "Sunny street 77a",
- "postalCode": "1234AB",
- "state": "Noord-Holland",
- "city": "Amsterdam",
- "countryCode": "NL"
}, - "phone": {
- "mobilePhone": "+31222333444",
- "homePhone": "20304050",
- "workPhone": "60708090",
- "isMobilePhoneVerified": false,
- "primaryPhone": "+48111222333"
}, - "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "qualifiedName": "Circle place - Room A",
- "hasSmartLock": false,
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "id": "55995f06ed386dc3d3bd236eaeb95b8c109540266bf7e1a6c634ae1b56b5bfe6",
- "clientPricingOptionValidationResults": [
- {
- "guid": "1A4A0B1B-4D8B-4A5E-8E6F-2C0D9B8A7F61",
- "clientPricingOption": {
- "remain": 4,
- "sessionType": "limitedVisits",
- "expiresAt": "2023-08-31T21:59:59+02:00",
- "activatedAt": "2023-08-01T22:00:00+02:00",
- "pricingOption": {
- "expirationType": 0,
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "isUnpaid": false,
- "isShared": false,
- "qualifiedName": "Yoga pass 8x",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "status": "bookable",
- "reason": "clientPricingOptionHasNotEnoughSessionValue",
- "reasonMessage": "There are no sessions left on this pass.",
- "state": "none"
}
], - "status": "bookable",
- "reason": "isFullyBooked",
- "reasonMessage": "This class is fully booked.",
- "minValidityDate": "2026-10-01T00:00:00+02:00",
- "qualifiedName": "Yoga class",
- "serviceType": "TYPE_CLASSROOM_SERVICE"
}
], - "metadata": {
- "actions": { },
- "canBookUnpaidClientVisits": false,
- "enrollments": [
- "55995f06ed386dc3d3bd236eaeb95b8c109540266bf7e1a6c634ae1b56b5bfe6"
], - "requiredDepositAmount": 1000
}
}
}Required scope: clientVisit:write
This call cancels one or more classes the given client is booked for.
Just like booking, the call is a two-step flow driven by the type property. Send validate first to learn whether each of the bookings may be cancelled and what it costs the client, then send the very same payload again with confirm to cancel them. A confirm call re-runs the validation internally, so only the bookings coming back as cancellable are cancelled. Whenever a cancelled class has a waiting list, the first client awaiting a spot is moved into it automatically.
Bookings are referenced by the GUID of their ClientVisit, which is returned by the /client/{user}/client-visit/all and /schedule-event/{scheduleEvent}/client-visits endpoints.
| user required | string <guid> = 36 characters The unique GUID of the User the bookings belong to. |
| type required | string Enum: validate confirm Determines the step of the cancellation flow. |
| enrollments required | Array of strings <guid> The GUIDs of the ClientVisits to cancel. |
Array of objects One entry per requested booking. | |
object Context shared by all the validated bookings. |
{- "user": "F7CB86F0-0E5F-42A4-895E-480BD0B7B963",
- "type": "validate",
- "enrollments": [
- "B0A9C6F1-2E4D-4F0B-9C7A-5D3E8F1A2B3C"
]
}{- "result": [
- {
- "id": "B0A9C6F1-2E4D-4F0B-9C7A-5D3E8F1A2B3C",
- "status": "cancellable",
- "reason": "isPast",
- "reasonMessage": "This class has already been cancelled.",
- "qualifiedName": "Yoga class",
- "serviceType": "TYPE_CLASSROOM_SERVICE",
- "clientEnrollment": {
- "status": 0,
- "weight": 1,
- "awaitingUntil": "2024-04-02T11:00:00+01:00",
- "privateNotes": "Client requested front row spot.",
- "isFree": false,
- "client": {
- "clientFields": {
- "8D2A6C1E-4F3B-4A7E-9C21-5B6E0F3D7A12": 1234,
- "C47E9B05-1A2D-4E6F-8B3C-9D0E2F4A6B81": "ABCD"
}, - "birthdateAt": "1980-01-19T23:00:00+01:00",
- "user": {
- "firstName": "Maria",
- "lastName": "Dvorak",
- "sex": 1,
- "fullName": "Monica Dvorak",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "phone": {
- "mobilePhone": "+31222333444",
- "homePhone": "20304050",
- "workPhone": "60708090",
- "isMobilePhoneVerified": false,
- "primaryPhone": "+48111222333"
}, - "picture": {
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "age": 34
}, - "clientPricingOption": {
- "remain": 4,
- "sessionType": "limitedVisits",
- "expiresAt": "2023-08-31T21:59:59+02:00",
- "activatedAt": "2023-08-01T22:00:00+02:00",
- "pricingOption": {
- "expirationType": 0,
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "isUnpaid": false,
- "qualifiedName": "Yoga pass 8x",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "source": "api",
- "isUnpaid": false,
- "bookedAt": "2024-04-01T09:30:00+01:00",
- "qualifiedName": "Yoga class",
- "enrollmentType": "clientVisit",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
}
], - "metadata": {
- "enrollments": [
- "B0A9C6F1-2E4D-4F0B-9C7A-5D3E8F1A2B3C"
], - "lateFee": 500,
- "smartLockOpeningThreshold": 15
}
}Required scope: clientVisit:read
This call returns all client visits.
| user required | string <guid> The guid of the User the returned client visits belong to. |
| sortField | string Default: createdAt Value: (all properties) Determines by which field the collection should be sorted on. |
| sortDir | string Default: asc Enum: asc desc Determines the sort order for the collection. |
| page | integer (page) Default: 1 Example: page=1 The page number to return. |
| count | integer (count) <= 1000 Default: 10 Example: count=10 The number of items to return per page. Must not exceed 1000; a higher value returns a 400 error. |
| pages | integer or null The number of pages for the given collection. |
| totalCount | integer or null The total number of items returned in the given collection. |
object An object describing the current page. | |
Array of objects (ClientVisit) |
{- "collection": [
- {
- "status": 0,
- "weight": 1,
- "members": [
- {
- "user": {
- "fullName": "Monica Dvorak",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
}
], - "room": {
- "qualifiedName": "Circle place - Room A",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "visitStartsAt": "2024-04-02T11:00:00+01:00",
- "visitEndsAt": "2024-04-02T12:00:00+01:00",
- "awaitingUntil": "2024-04-02T11:00:00+01:00",
- "privateNotes": "Client requested front row spot.",
- "isFree": false,
- "clientPricingOption": {
- "qualifiedName": "Yoga pass 8x",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "source": "api",
- "isUnpaid": false,
- "isOnWaitingList": false,
- "bookedAt": "2024-04-01T09:30:00+01:00",
- "qualifiedName": "Yoga class",
- "enrollmentType": "clientVisit",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
]
}Required scope: contract:read
This call returns all studio contracts.
| sortField | string Default: createdAt Value: createdAt Determines by which field the collection should be sorted on. |
| sortDir | string Default: asc Enum: asc desc Determines the sort order for the collection. |
| page | integer (page) Default: 1 Example: page=1 The page number to return. |
| count | integer (count) <= 1000 Default: 10 Example: count=10 The number of items to return per page. Must not exceed 1000; a higher value returns a 400 error. |
| pages | integer or null The number of pages for the given collection. |
| totalCount | integer or null The total number of items returned in the given collection. |
object An object describing the current page. | |
Array of objects (Contract) |
{- "collection": [
- {
- "name": "One Year Contract",
- "description": null,
- "picture": {
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "privateNotes": "Internal discount contract for VIP clients",
- "preSaleInfo": "Must agree to terms and conditions",
- "instalments": { },
- "isSoldOnline": true,
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
]
}Required scope: contract:read
This call returns the contract.
| contract required | string <guid> The guid of the Contract to return. |
| name | string A descriptive name for the contract. |
| description | string or null Default: null A public description for the contract, available in FrontOffice. |
object (Picture) A public picture representing the given contract. | |
| privateNotes | string or null Default: null Private notes attached to the contract, only visible to studio staff. |
| preSaleInfo | string or null Default: null Additional information displayed in the FrontOffice shopping cart before purchasing. |
| instalments | object An installment configuration. |
| isSoldOnline | boolean Determines whether the contract is available in FrontOffice to be sold. |
| guid | string <guid> = 36 characters Globally unique identifier |
{- "name": "One Year Contract",
- "description": null,
- "picture": {
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "privateNotes": "Internal discount contract for VIP clients",
- "preSaleInfo": "Must agree to terms and conditions",
- "instalments": { },
- "isSoldOnline": true,
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}Required scope: location:read
This call returns all studio locations.
| sortField | string Default: createdAt Value: createdAt Determines by which field the collection should be sorted on. |
| sortDir | string Default: asc Enum: asc desc Determines the sort order for the collection. |
| page | integer (page) Default: 1 Example: page=1 The page number to return. |
| count | integer (count) <= 1000 Default: 10 Example: count=10 The number of items to return per page. Must not exceed 1000; a higher value returns a 400 error. |
| pages | integer or null The number of pages for the given collection. |
| totalCount | integer or null The total number of items returned in the given collection. |
object An object describing the current page. | |
Array of objects (Location) |
{- "collection": [
- {
- "name": "Circle place",
- "type": "facility",
- "directions": "Take the second exit on the roundabout.",
- "entranceInstructions": "Use the side entrance and ring the bell.",
- "picture": {
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "address": {
- "street": "Sunny street 77a",
- "postalCode": "1234AB",
- "city": "Amsterdam",
- "countryCode": "NL"
}, - "phone": {
- "mobilePhone": "+31222333444",
- "homePhone": "20304050",
- "workPhone": "60708090",
- "isMobilePhoneVerified": false
}, - "rooms": [
- {
- "name": "Room A",
- "qualifiedName": "Circle place - Room A",
- "hasSmartLock": false,
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
], - "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
]
}Required scope: member:read
This call returns all studio staff members.
| sortField | string Default: createdAt Value: createdAt Determines by which field the collection should be sorted on. |
| sortDir | string Default: asc Enum: asc desc Determines the sort order for the collection. |
| page | integer (page) Default: 1 Example: page=1 The page number to return. |
| count | integer (count) <= 1000 Default: 10 Example: count=10 The number of items to return per page. Must not exceed 1000; a higher value returns a 400 error. |
| iamRole | string Default: null Enum: lb:iam_role:manager lb:iam_role:teacher lb:iam_role:host Filters out the collection based on the given IAM role. |
| pages | integer or null The number of pages for the given collection. |
| totalCount | integer or null The total number of items returned in the given collection. |
object An object describing the current page. | |
Array of objects (User) |
{- "collection": [
- {
- "firstName": "Maria",
- "lastName": "Dvorak",
- "sex": 1,
- "suspensionType": 1,
- "isSuspended": false,
- "suspendedAt": "2019-09-10T15:31:47+02:00",
- "suspensionExpiresAt": "2019-09-17T15:31:47+02:00",
- "suspensionReason": "Suspended due to many cancellations",
- "isLoginEnabled": true,
- "activatedAt": "2019-09-01T12:02:35+02:00",
- "lastSeenAt": "2019-09-03T09:54:12+02:00",
- "member": {
- "publicBiography": "Mark is one of the best Yoga teachers...",
- "birthdateAt": "1974-09-17T22:00:00+02:00",
- "address": {
- "street": "Sunny street 77a",
- "postalCode": "1234AB",
- "city": "Amsterdam",
- "countryCode": "NL"
}, - "phone": {
- "mobilePhone": "+31222333444",
- "homePhone": "20304050",
- "workPhone": "60708090",
- "isMobilePhoneVerified": false
}, - "picture": {
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "tags": [
- {
- "name": "VIP",
- "color": "#FF5733",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
], - "qualifiedName": "Mark the Teacher"
}, - "fullName": "Monica Dvorak",
- "hasAndroidApp": false,
- "hasIosApp": false,
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
]
}Required scope: member:read
This call returns the member.
| user required | string <guid> The guid of the Member to return. |
| emailAddress | string or null Default: null An unique user's email address. |
| contactEmailAddress | string or null Default: null The user's contact email address. |
| firstName | string The user's first name. |
| lastName | string The user's last name. |
| sex | integer or null Default: 1 Enum: 0 (male) 1 (female) The user's gender. |
| suspensionType | integer or null Default: null Enum: 0 (booking) 1 (login) If not null, returns information about what type of suspension has been set on user's account. |
| isSuspended | boolean Default: false Determines whether the user's account is suspended or not. |
| suspendedAt | string or null Default: null The time at which user's account has been suspended. |
| suspensionExpiresAt | string or null Default: null The time at which user's account will be automatically released from suspension. |
| suspensionReason | string or null Default: null Additional reason of why user's account has been suspended. |
| isLoginEnabled | boolean Default: true Determines whether the user's login possibility is enabled or not. |
| activatedAt | string or null Default: null The time at which user's account has been activated (mostly via activation link in the email). |
| lastSeenAt | string or null Default: null The time at which user was logged in to FrontOffice for the last time. |
object (Member) Attached when user is a | |
| fullName | string The user's full name. |
| hasAndroidApp | boolean Default: false Determines whether user is using Android app (Fitssey free app or Fitssey premium app). |
| hasIosApp | boolean Default: false Determines whether user is using iOS app (Fitssey free app or Fitssey premium app). |
| guid | string <guid> = 36 characters Globally unique identifier |
{- "firstName": "Maria",
- "lastName": "Dvorak",
- "sex": 1,
- "suspensionType": 1,
- "isSuspended": false,
- "suspendedAt": "2019-09-10T15:31:47+02:00",
- "suspensionExpiresAt": "2019-09-17T15:31:47+02:00",
- "suspensionReason": "Suspended due to many cancellations",
- "isLoginEnabled": true,
- "activatedAt": "2019-09-01T12:02:35+02:00",
- "lastSeenAt": "2019-09-03T09:54:12+02:00",
- "member": {
- "publicBiography": "Mark is one of the best Yoga teachers...",
- "birthdateAt": "1974-09-17T22:00:00+02:00",
- "address": {
- "street": "Sunny street 77a",
- "postalCode": "1234AB",
- "city": "Amsterdam",
- "countryCode": "NL"
}, - "phone": {
- "mobilePhone": "+31222333444",
- "homePhone": "20304050",
- "workPhone": "60708090",
- "isMobilePhoneVerified": false
}, - "picture": {
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "tags": [
- {
- "name": "VIP",
- "color": "#FF5733",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
], - "qualifiedName": "Mark the Teacher"
}, - "fullName": "Monica Dvorak",
- "hasAndroidApp": false,
- "hasIosApp": false,
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}Required scope: paymentOption:read
This call returns all studio payment options.
| sortField | string Default: createdAt Value: createdAt Determines by which field the collection should be sorted on. |
| sortDir | string Default: asc Enum: asc desc Determines the sort order for the collection. |
| page | integer (page) Default: 1 Example: page=1 The page number to return. |
| count | integer (count) <= 1000 Default: 10 Example: count=10 The number of items to return per page. Must not exceed 1000; a higher value returns a 400 error. |
| pages | integer or null The number of pages for the given collection. |
| totalCount | integer or null The total number of items returned in the given collection. |
object An object describing the current page. | |
Array of objects (PaymentOption) |
{- "collection": [
- {
- "name": "Physical card fee",
- "privateNotes": "Internal note about card fee",
- "price": 500,
- "taxRate": 1.23,
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
]
}Required scope: paymentOption:read
This call returns the payment option.
| paymentOption required | string <guid> The guid of the PaymentOption to return. |
| name | string A descriptive name for the payment option. |
| privateNotes | string or null Default: null Private notes for the payment option. |
| price | decimal A positive integer in the smallest currency unit (100 cents for 1 EUR) representing the amount for the payment option. |
| taxRate | decimal or null Default: null A decimal number indicating tax rate (1.0 for 0%, 1.23 for 23%). |
| guid | string <guid> = 36 characters Globally unique identifier |
{- "name": "Physical card fee",
- "privateNotes": "Internal note about card fee",
- "price": 500,
- "taxRate": 1.23,
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}Required scope: pricingOption:read
This call returns all studio pricing options.
| sortField | string Default: createdAt Value: createdAt Determines by which field the collection should be sorted on. |
| sortDir | string Default: asc Enum: asc desc Determines the sort order for the collection. |
| page | integer (page) Default: 1 Example: page=1 The page number to return. |
| count | integer (count) <= 1000 Default: 10 Example: count=10 The number of items to return per page. Must not exceed 1000; a higher value returns a 400 error. |
| pages | integer or null The number of pages for the given collection. |
| totalCount | integer or null The total number of items returned in the given collection. |
object An object describing the current page. | |
Array of objects (PricingOption) |
{- "collection": [
- {
- "name": "Guest card",
- "internalName": "Guest card [previously 1x card]",
- "description": "Great option for trying out!",
- "picture": {
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "privateNotes": "Internal note about guest card",
- "preSaleInfo": "Remember, you can only buy one",
- "sessionType": "limitedVisits",
- "sessionValue": 2,
- "price": 5500,
- "taxRate": 1.23,
- "expirationType": 0,
- "isSoldOnline": true,
- "isAutoAssigned": false,
- "isIntroductoryOffer": false,
- "promotion": {
- "isPromotionEnabled": true,
- "promotionType": "discount",
- "discountAmount": 3000,
- "discountType": 0,
- "promotionStartsAt": "2025-01-00:00:00+02:00",
- "promotionEndsAt": "2026-01-01T23:59:59+02:00"
}, - "discountedPrice": 2500,
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
]
}Required scope: pricingOption:read
This call returns the pricing option.
| pricingOption required | string <guid> The guid of the PricingOption to return. |
| name | string A descriptive name for the pricing option. |
| internalName | string or null Default: null An additional descriptive name for the pricing option visible in BackOffice only. |
| description | string or null Default: null A public description for the pricing option, available in FrontOffice. |
object (Picture) A public picture representing the given pricing option. | |
| privateNotes | string or null Default: null Private notes for the pricing option. |
| preSaleInfo | string or null Default: null Additional information displayed in the FrontOffice shopping cart before purchasing. |
| sessionType | string Enum: limitedVisits limitedTime unlimited Determines the session type. |
| sessionValue | integer Determines how many sessions (credits) are available for the pricing option. Check |
| price | decimal A positive integer in the smallest currency unit (100 cents for 1 EUR) representing the amount for the pricing option. |
| taxRate | decimal A decimal number indicating tax rate (1.0 for 0%, 1.23 for 23%). |
| expirationType | integer Enum: 0 (sale date) 1 (first visit) 2 (always valid) 3 (calendar month) 4 (specific date) 5 (first booking) Determines expiration type for the pricing option and set the activation and expiration dates accordingly. |
| isSoldOnline | boolean Determines whether the pricing option is available in FrontOffice to be sold. |
| isAutoAssigned | boolean Determines whether the pricing option is automatically assigned to newly created accounts. |
| isIntroductoryOffer | boolean Determines whether the pricing option is set as introductory offer visible under certain conditions to new clients. |
object (PricingOptionPromotion) An object holding promotion information when created. | |
| discountedPrice | float A positive integer in the smallest currency unit (100 cents for 1 EUR) representing the discounted amount for the pricing option. |
| guid | string <guid> = 36 characters Globally unique identifier |
{- "name": "Guest card",
- "internalName": "Guest card [previously 1x card]",
- "description": "Great option for trying out!",
- "picture": {
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "privateNotes": "Internal note about guest card",
- "preSaleInfo": "Remember, you can only buy one",
- "sessionType": "limitedVisits",
- "sessionValue": 2,
- "price": 5500,
- "taxRate": 1.23,
- "expirationType": 0,
- "isSoldOnline": true,
- "isAutoAssigned": false,
- "isIntroductoryOffer": false,
- "promotion": {
- "isPromotionEnabled": true,
- "promotionType": "discount",
- "discountAmount": 3000,
- "discountType": 0,
- "promotionStartsAt": "2025-01-00:00:00+02:00",
- "promotionEndsAt": "2026-01-01T23:59:59+02:00"
}, - "discountedPrice": 2500,
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}Required scope: product:read
This call returns all studio products.
| sortField | string Default: createdAt Value: createdAt Determines by which field the collection should be sorted on. |
| sortDir | string Default: asc Enum: asc desc Determines the sort order for the collection. |
| page | integer (page) Default: 1 Example: page=1 The page number to return. |
| count | integer (count) <= 1000 Default: 10 Example: count=10 The number of items to return per page. Must not exceed 1000; a higher value returns a 400 error. |
| pages | integer or null The number of pages for the given collection. |
| totalCount | integer or null The total number of items returned in the given collection. |
object An object describing the current page. | |
Array of objects (Product) |
{- "collection": [
- {
- "name": "Yoga mat",
- "description": "Best looking mat for your yoga poses",
- "privateNotes": "Internal note about yoga mat",
- "sku": "K42SF92919",
- "price": 34200,
- "taxRate": 1.23,
- "stock": 134,
- "picture": {
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "isPublic": true,
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
]
}Required scope: product:read
This call returns the product.
| product required | string <guid> The guid of the Product to return. |
| name | string A descriptive name for the product. |
| description | string or null Default: null A public description for the product, available in FrontOffice. |
| privateNotes | string or null Default: null Private notes for the product. |
| sku | string or null Default: null SKU (Stock keeping unit) of the product. |
| price | decimal A positive integer in the smallest currency unit (100 cents for 1 EUR) representing the amount for the product. |
| taxRate | decimal A decimal number indicating tax rate (1.0 for 0%, 1.23 for 23%). |
| stock | integer Determines number of items in the stock. |
object (Picture) A public picture representing the given product. | |
| isPublic | boolean Determines whether the product is publicly visible. |
| guid | string <guid> = 36 characters Globally unique identifier |
{- "name": "Yoga mat",
- "description": "Best looking mat for your yoga poses",
- "privateNotes": "Internal note about yoga mat",
- "sku": "K42SF92919",
- "price": 34200,
- "taxRate": 1.23,
- "stock": 134,
- "picture": {
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "isPublic": true,
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}Required scope: report:read, granted for this report
Returns all client visits for the specified date range in a report format. Uses cursor-based pagination - page with page/count and follow links.next (see pages/totalCount in the response).
| startDate required | string <Y-m-d> (startDate) Default: Today's date The requested start date for filtering the results. |
| endDate required | string <Y-m-d> (endDate) Default: Today's date The requested end date for filtering the results. |
| page | integer (page) Default: 1 Example: page=1 The page number to return. |
| count | integer (count) <= 1000 Default: 10 Example: count=10 The number of items to return per page. Must not exceed 1000; a higher value returns a 400 error. |
| pages | integer or null
|
| totalCount | integer or null
|
object An object describing the current page. | |
Array of objects | |
object (collectionLinks) Pagination links for the collection. |
curl -X GET "https://app.fitssey.com/{uuid}/api/v4/public/report/enrollments/client-visit?startDate=2025-01-01&endDate=2025-01-31" \ -H "Authorization: Bearer {apiKey}"
{- "pages": null,
- "totalCount": null,
- "currentPage": {
- "count": 1,
- "firstCount": 0,
- "lastCount": 10
}, - "collection": [
- {
- "guid": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "classServiceGuid": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "clientUuid": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "clientPricingOptionExpiresAt": "2025-06-30",
- "clientPricingOptionGuid": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "clientPricingOptionName": "Guest Card",
- "clientPricingOptionRemain": 7,
- "locationGuid": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "locationName": "Weteringschans",
- "memberGuid": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "memberName": "Lidewij Severins",
- "paymentStatus": "paid",
- "privateNotes": "Prefers front row",
- "qualifiedName": "Astanga Yoga",
- "serviceType": "TYPE_CLASSROOM_SERVICE",
- "source": "backoffice",
- "startsAt": "2025-01-15",
- "status": 1,
- "userFirstName": "Maria",
- "userGuid": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "userLastName": "Dvorak",
- "weekday": 1
}
], - "links": {
- "prev": null,
- "next": null,
- "pages": null
}
}Required scope: report:read, granted for this report
Returns all client appointments for the specified date range in a report format. Uses cursor-based pagination - page with page/count and follow links.next (see pages/totalCount in the response).
| startDate required | string <Y-m-d> (startDate) Default: Today's date The requested start date for filtering the results. |
| endDate required | string <Y-m-d> (endDate) Default: Today's date The requested end date for filtering the results. |
| page | integer (page) Default: 1 Example: page=1 The page number to return. |
| count | integer (count) <= 1000 Default: 10 Example: count=10 The number of items to return per page. Must not exceed 1000; a higher value returns a 400 error. |
| pages | integer or null
|
| totalCount | integer or null
|
object An object describing the current page. | |
Array of objects | |
object (collectionLinks) Pagination links for the collection. |
curl -X GET "https://app.fitssey.com/{uuid}/api/v4/public/report/enrollments/client-appointment?startDate=2025-01-01&endDate=2025-01-31" \ -H "Authorization: Bearer {apiKey}"
{- "pages": null,
- "totalCount": null,
- "currentPage": {
- "count": 1,
- "firstCount": 0,
- "lastCount": 10
}, - "collection": [
- {
- "guid": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "appointmentServiceGuid": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "clientPricingOptionExpiresAt": "2025-06-30",
- "clientPricingOptionGuid": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "clientPricingOptionName": "Guest Card",
- "clientPricingOptionRemain": 7,
- "clientUuid": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "locationGuid": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "locationName": "Weteringschans",
- "memberGuid": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "memberName": "Lidewij Severins",
- "paymentStatus": "paid",
- "privateNotes": "Prefers front row",
- "qualifiedName": "Massage | Deep Tissue",
- "source": "backoffice",
- "startsAt": "2025-01-15",
- "status": 1,
- "userFirstName": "Maria",
- "userGuid": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "userLastName": "Dvorak",
- "weekday": 1
}
], - "links": {
- "prev": null,
- "next": null,
- "pages": null
}
}Required scope: report:read, granted for this report
Returns all client entries for the specified date range in a report format. Uses cursor-based pagination - page with page/count and follow links.next (see pages/totalCount in the response).
| startDate required | string <Y-m-d> (startDate) Default: Today's date The requested start date for filtering the results. |
| endDate required | string <Y-m-d> (endDate) Default: Today's date The requested end date for filtering the results. |
| page | integer (page) Default: 1 Example: page=1 The page number to return. |
| count | integer (count) <= 1000 Default: 10 Example: count=10 The number of items to return per page. Must not exceed 1000; a higher value returns a 400 error. |
| pages | integer or null
|
| totalCount | integer or null
|
object An object describing the current page. | |
Array of objects | |
object (collectionLinks) Pagination links for the collection. |
curl -X GET "https://app.fitssey.com/{uuid}/api/v4/public/report/enrollments/client-entry?startDate=2025-01-01&endDate=2025-01-31" \ -H "Authorization: Bearer {apiKey}"
{- "pages": null,
- "totalCount": null,
- "currentPage": {
- "count": 1,
- "firstCount": 0,
- "lastCount": 10
}, - "collection": [
- {
- "guid": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "clientPricingOptionExpiresAt": "2025-06-30",
- "clientPricingOptionGuid": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "clientPricingOptionName": "Guest Card",
- "clientPricingOptionRemain": 7,
- "clientUuid": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "entryServiceGuid": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "locationGuid": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "locationName": "Weteringschans",
- "paymentStatus": "paid",
- "privateNotes": "Prefers front row",
- "qualifiedName": "Open Gym",
- "startsAt": "2025-01-15",
- "userFirstName": "Maria",
- "userGuid": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "userLastName": "Dvorak",
- "weekday": 1
}
], - "links": {
- "prev": null,
- "next": null,
- "pages": null
}
}Required scope: report:read, granted for this report
Returns sales/revenue data for the specified date range in a report format.
| startDate required | string <Y-m-d> (startDate) Default: Today's date The requested start date for filtering the results. |
| endDate required | string <Y-m-d> (endDate) Default: Today's date The requested end date for filtering the results. |
| page | integer (page) Default: 1 Example: page=1 The page number to return. |
| count | integer (count) <= 1000 Default: 10 Example: count=10 The number of items to return per page. Must not exceed 1000; a higher value returns a 400 error. |
| pages | integer or null The number of pages for the given collection. |
| totalCount | integer or null The total number of items returned in the given collection. |
object An object describing the current page. | |
Array of objects | |
object (collectionLinks) Pagination links for the collection. |
curl -X GET "https://app.fitssey.com/{uuid}/api/v4/public/report/finance/sales?startDate=2025-01-01&endDate=2025-01-31" \ -H "Authorization: Bearer {apiKey}"
{- "pages": 1,
- "totalCount": 22,
- "currentPage": {
- "count": 1,
- "firstCount": 0,
- "lastCount": 10
}, - "collection": [
- {
- "clientAddressCity": "Amsterdam",
- "clientAddressPostalCode": "1017 CV",
- "clientAddressStreet": "Weteringschans 28",
- "clientUuid": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "guid": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "discountAmount": 500,
- "discountRate": 5,
- "invoiceAddressLine": "Keizersgracht 112",
- "invoiceCity": "Amsterdam",
- "invoiceCompanyName": "Van der Berg Fitness B.V.",
- "invoicePostalCode": "1015 AA",
- "invoiceTaxIdentificationNumber": "NL123456789B01",
- "itemName": "Guest Card",
- "itemNetPrice": 7983,
- "itemPrice": 9500,
- "itemTaxAmount": 1517,
- "itemTaxRate": 19,
- "itemTotalPrice": 9500,
- "locationGuid": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "locationName": "Weteringschans",
- "paymentMethod": "card",
- "saleDate": "2025-01-15",
- "userFirstName": "Maria",
- "userFullName": "Maria Dvorak",
- "userGuid": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "userLastName": "Dvorak"
}
], - "links": {
- "prev": null,
- "next": null,
- "pages": null
}
}Required scope: report:read, granted for this report
Returns orders fully discounted to zero (e.g. redeemed with a voucher) within the specified date range.
| startDate required | string <Y-m-d> (startDate) Default: Today's date The requested start date for filtering the results. |
| endDate required | string <Y-m-d> (endDate) Default: Today's date The requested end date for filtering the results. |
| page | integer (page) Default: 1 Example: page=1 The page number to return. |
| count | integer (count) <= 1000 Default: 10 Example: count=10 The number of items to return per page. Must not exceed 1000; a higher value returns a 400 error. |
| pages | integer or null The number of pages for the given collection. |
| totalCount | integer or null The total number of items returned in the given collection. |
object An object describing the current page. | |
Array of objects | |
object (collectionLinks) Pagination links for the collection. |
curl -X GET "https://app.fitssey.com/{uuid}/api/v4/public/report/finance/zero-sales?startDate=2026-04-01&endDate=2026-04-30" \ -H "Authorization: Bearer {apiKey}"
{- "pages": 1,
- "totalCount": 22,
- "currentPage": {
- "count": 1,
- "firstCount": 0,
- "lastCount": 10
}, - "collection": [
- {
- "createdAt": "2026-04-20 10:30:00",
- "clientOrderGuid": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "clientUuid": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "userGuid": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "userFirstName": "Maria",
- "userLastName": "Dvorak",
- "qualifiedName": "Guest Card, Yoga Mat",
- "voucherCode": "WELCOME100",
- "discountRate": 100,
- "discountAmount": 9500
}
], - "links": {
- "prev": null,
- "next": null,
- "pages": null
}
}Required scope: report:read, granted for this report
Returns every client pricing option that is currently usable: it was sold in an order whose status authorizes usage (paid, unpaid, scheduled, awaiting, authorization allowed or free of charge), it is activated (or not activated yet with no expiration date) and it is not expired. Client pricing options with a negative remain (-1) are unlimited. This report ignores startDate/endDate. Responses are cached for 5 minutes per unique query string.
| filters[pricingOptions][] | Array of strings Example: filters[pricingOptions][]=3F2504E0-4F89-11D3-9A0C-0305E82C3301 Only return client pricing options bought from the given pricing options (guids). |
| filters[clientTags][] | Array of strings Example: filters[clientTags][]=3F2504E0-4F89-11D3-9A0C-0305E82C3301 Only return client pricing options whose client has at least one of the given tags (guids). |
| filters[minSessionValue] | integer >= 0 Default: 0 Example: filters[minSessionValue]=1 Only return client pricing options with at least this many remaining sessions. Unlimited client pricing options are always included. |
| sortField | string Default: validTo Enum: userFirstName userLastName itemName itemTotalPrice createdAt validFrom validTo remain Column to sort by. Unknown values fall back to the default ( |
| sortDir | string Default: asc Enum: asc desc |
| page | integer (page) Default: 1 Example: page=1 The page number to return. |
| count | integer (count) <= 1000 Default: 10 Example: count=10 The number of items to return per page. Must not exceed 1000; a higher value returns a 400 error. |
| pages | integer or null The number of pages for the given collection. |
| totalCount | integer or null The total number of items returned in the given collection. |
object An object describing the current page. | |
Array of objects | |
object (collectionLinks) Pagination links for the collection. |
curl -X GET "https://app.fitssey.com/{uuid}/api/v4/public/report/client-pricing-option/active?filters[minSessionValue]=1&sortField=validTo&sortDir=asc&count=100" \ -H "Authorization: Bearer {apiKey}"
{- "pages": 1,
- "totalCount": 22,
- "currentPage": {
- "count": 1,
- "firstCount": 0,
- "lastCount": 10
}, - "collection": [
- {
- "guid": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "clientOrderGuid": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "clientUuid": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "userGuid": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "userFirstName": "Maria",
- "userLastName": "Dvorak",
- "pricingOptionGuid": "3F2504E0-4F89-11D3-9A0C-0305E82C3301",
- "pricingOptionName": "10 Sessions Card",
- "itemName": "10 Sessions Card",
- "itemTotalPrice": 250,
- "createdAt": "2026-09-01T10:30:00+02:00",
- "validFrom": "2026-09-01T00:00:00+02:00",
- "validTo": "2026-10-01T23:59:59+02:00",
- "remain": 7,
- "sessionType": "limitedVisits"
}
], - "links": {
- "prev": null,
- "next": null,
- "pages": null
}
}Required scope: retail:checkout
With this call you will be able to checkout contracts.
object Root property describing retail payload. |
| privateNotes | string or null Default: null Private notes attached to the client contract, only visible to studio staff. |
| startsAt | string Time at which the contract starts (expressed in ISO 8601 format). |
| endsAt | string or null Default: null Time at which the contract ends (expressed in ISO 8601 format). |
| terminatedAt | datetime or null Default: null Time at which the contract has been terminated (expressed in ISO 8601 format). |
| terminatedFrom | datetime Time from which the contract will become terminated (expressed in ISO 8601 format). |
| terminationReason | string or null Default: null The reason why the contract has been terminated. |
object (Contract) The contract template from which this client contract was created. | |
Array of objects A list of contract instalments. | |
| nextPaymentAt | datetime Time at which next payment is scheduled (expressed in ISO 8601 format). |
| nextChargeAmount | integer A positive integer in the smallest currency unit (100 cents for 1 EUR) representing the next scheduled charge amount. |
| minInstalmentCountToAllowTermination | integer A minimum number of instalments after which the contract can be terminated. No value means it can be terminated anytime. |
| qualifiedName | string A representative name of the client's contract. Can be custom or inherited from Contract. |
| guid | string <guid> = 36 characters Globally unique identifier |
{- "retail": {
- "user": "F7CB86F0-0E5F-42A4-895E-480BD0B7B963",
- "paidAmount": 1250,
- "paymentMethod": 0,
- "contracts": [
- {
- "guid": "37E96AEF-A1DA-4A41-9A56-A64F661A32BF",
- "name": "My contract",
- "startDate": "2020-03-11",
- "privateNotes": "The payment was made via website"
}
]
}
}[- {
- "privateNotes": "Client prefers monthly billing",
- "startsAt": "2019-06-01T22:00:00+02:00",
- "endsAt": "2020-05-31T21:59:59+02:00",
- "terminatedAt": "2020-10-02T22:00:00+02:00",
- "terminatedFrom": "2020-10-02T22:00:00+02:00",
- "terminationReason": "Moving out to different country",
- "contract": {
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "instalments": [
- {
- "status": "scheduled",
- "scheduledAt": "2019-05-12T22:00:00+02:00",
- "endsAt": "2019-06-12T21:59:59+02:00",
- "processedAt": "2019-06-12T22:00:00+02:00",
- "chargeAt": "2019-06-01T22:00:00+02:00",
- "suspendedAt": "2020-03-15T10:00:00+02:00",
- "suspensionReason": "Holiday season",
- "clientOrder": {
- "orderStatus": 1,
- "paymentMethod": 0,
- "paidAmount": 1750,
- "dueAmount": 0,
- "discountRate": 0,
- "invoiceDetails": null,
- "privateNotes": null,
- "voidReason": null,
- "paymentDueAt": null,
- "paidAt": "2025-05-12T12:45:47+02:00",
- "voidedAt": null,
- "clientOrderItems": [
- {
- "name": "Yoga Card x4",
- "internalName": "Yoga Card x4 [previously 4x card]",
- "netPrice": 1428,
- "totalPrice": 1750,
- "taxAmount": 322,
- "taxRate": 0.23,
- "totalPriceBeforeDiscount": 2000,
- "serviceType": "classroom",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
], - "totalPrice": 1750,
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "qualifiedName": "Guest Card",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
], - "nextPaymentAt": "2020-10-02T22:00:00+02:00",
- "nextChargeAmount": "8000",
- "minInstalmentCountToAllowTermination": "3",
- "qualifiedName": "1 Year Contract",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
]Required scope: retail:checkout
With this call you will be able to checkout pricing options, payment options or products.
object Root property describing retail payload. |
| orderStatus | integer Enum: 0 (pending) 1 (paid) 2 (unpaid) 3 (cancelled) 4 (rejected) 5 (awaiting) 6 (void) 7 (scheduled) 8 (failed) 9 (authorizationAllowed) 10 (authorizationDisallowed) 11 (freeOfCharge) 12 (suspended) The last order status that indicates whether the order has been paid or not. |
| paymentMethod | integer Enum: 0 (online) 1 (bankTransfer) 2 (cash) 3 (other) 4 (gift) 5 (none) 6 (paymentCard) 11 (test) 12 (terminal) 13 (wallet) The payment method that has been used to pay for this order. |
| paidAmount | decimal A positive integer in the smallest currency unit (100 cents for 1 EUR) representing the total paid amount for the order. |
| dueAmount | decimal A positive integer in the smallest currency unit (100 cents for 1 EUR) representing the total due amount for the order. |
| discountRate | decimal A decimal number indicating discount rate (0.2 for 20%, 1.0 for 100%). |
| invoiceDetails | object or null Default: null |
| privateNotes | string or null Default: null Private notes visible only to studio members, not exposed to the client. |
| voidReason | string or null Default: null The reason why the order has been voided. |
| paymentDueAt | string or null Default: null Time by which the order should be paid. |
| paidAt | string or null Default: null Time at which the order has been paid. |
| voidedAt | string or null Default: null Time at which the order has been voided. |
Array of objects Item objects purchased along with the order. | |
| totalPrice | integer A positive integer in the smallest currency unit (100 cents for 1 EUR) representing the total price of the order. |
| guid | string <guid> = 36 characters Globally unique identifier |
{- "retail": {
- "user": "F7CB86F0-0E5F-42A4-895E-480BD0B7B963",
- "paidAmount": 3000,
- "paymentMethod": 0,
- "orders": [
- {
- "qualifiedName": 1,
- "orderStatus": 1,
- "discount": {
- "type": 1,
- "amount": 25
}, - "privateNotes": "The payment was made via website",
- "pricingOptions": [
- {
- "guid": "FFA73DC2-2A6F-442A-AB8E-6444BAF0188D",
- "name": "My pass",
- "price": 1000
}
], - "paymentOptions": [
- {
- "guid": "0F5A4FA5-B394-48A4-B20F-6974EED8C076",
- "name": "My payment",
- "price": 1000
}
], - "products": [
- {
- "guid": "AB370858-C5B6-4887-A3CF-45CED74E4667",
- "name": "My product",
- "price": 1000
}
]
}
]
}
}[- {
- "orderStatus": 1,
- "paymentMethod": 0,
- "paidAmount": 1750,
- "dueAmount": 0,
- "discountRate": 0,
- "invoiceDetails": null,
- "privateNotes": null,
- "voidReason": null,
- "paymentDueAt": null,
- "paidAt": "2025-05-12T12:45:47+02:00",
- "voidedAt": null,
- "clientOrderItems": [
- {
- "name": "Yoga Card x4",
- "internalName": "Yoga Card x4 [previously 4x card]",
- "netPrice": 1428,
- "totalPrice": 1750,
- "taxAmount": 322,
- "taxRate": 0.23,
- "totalPriceBeforeDiscount": 2000,
- "serviceType": "classroom",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
], - "totalPrice": 1750,
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
]Required scope: schedule:read
This call returns all courses bookable online within the given period.
| startDate | string <Y-m-d> (startDate) Default: Today's date The requested start date for filtering the results. |
| endDate | string <Y-m-d> (endDate) Default: Today's date The requested end date for filtering the results. |
| bookingBehavior | integer Enum: 0 (noInfluence) 1 (allowBookingAllDatesOnly) 2 (allowBookingSingleDatesOnly) 3 (allowBookingAllAndSingleDates) Determines how the course can be booked. |
object (ClassService) The ClassService object associated with this event. | |
Array of objects The collection of ScheduleEvents that belong to the course, ordered chronologically. | |
| startsAt | string <Y-m-dTH:i:s> The time at which the first event of the course starts. |
| endsAt | string <Y-m-dTH:i:s> The time at which the last event of the course ends. |
| qualifiedName | string The qualified name of the course. |
| guid | string <guid> = 36 characters Globally unique identifier |
curl -X GET "https://app.fitssey.com/<YOUR_UUID>/api/v4/public/schedule/courses?startDate=2026-11-07&endDate=2026-11-14" \ -H "Accept: application/json" \ -H "Authorization: Bearer <YOUR_API_KEY>"
[- {
- "bookingBehavior": 1,
- "classService": {
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "scheduleEvents": [
- {
- "referenceId": "55995f06ed386dc3d3bd236eaeb95b8c109540266bf7e1a6c634ae1b56b5bfe6",
- "totalCapacity": 22,
- "onlineCapacity": 20,
- "waitingListCapacity": 10,
- "color": "rgb(69, 180, 231)",
- "liveStreamUrl": null,
- "liveStreamPassword": null,
- "isFree": false,
- "isLiveStream": false,
- "isCancelled": false,
- "isHidden": false,
- "isBookableOnline": true,
- "startsAt": "2019-09-04T10:00:00+02:00",
- "endsAt": "2019-09-04T11:00:00+02:00",
- "room": {
- "qualifiedName": "Circle place - Room A",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "remainCapacity": 5,
- "remainOnlineCapacity": 3,
- "remainFrontOfficeCapacity": 3,
- "remainWaitingListCapacity": 2,
- "remainCapacityForMale": 2,
- "remainCapacityForFemale": 3,
- "bookedSpots": 17,
- "bookedSpotsForMale": 8,
- "bookedSpotsForFemale": 9,
- "bookedWaitingListSpots": 4,
- "bookedOnlineSpots": 12,
- "maleCapacity": 10,
- "femaleCapacity": 12,
- "isAvailableForBookingAhead": true,
- "isAvailableBeforeStartTime": true,
- "qualifiedName": "Astanga Led",
- "serviceType": "TYPE_CLASSROOM_SERVICE",
- "classService": {
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "experienceLevel": {
- "name": "Beginner level",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "members": [
- {
- "user": {
- "fullName": "Monica Dvorak",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
}
]
}
], - "startsAt": "2026-04-20T10:00:00+02:00",
- "endsAt": "2026-04-20T11:00:00+02:00",
- "qualifiedName": "Astanga Led",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
]Required scope: schedule:read
This call returns all ScheduleEvents within the given period grouped by date.
| startDate | string <Y-m-d> (startDate) Default: Today's date The requested start date for filtering the results. |
| endDate | string <Y-m-d> (endDate) Default: Today's date The requested end date for filtering the results. |
object Default: null The object containing filters to base the search on. |
Array of objects Schedule data grouped by dates. |
curl -X GET "https://app.fitssey.com/<YOUR_UUID>/api/v4/public/schedule?startDate=2026-11-07&endDate=2026-11-14&filters[members][]=D666929B-4795-45F9-AF97-1A45E295DE95" \ -H "Accept: application/json" \ -H "Authorization: Bearer <YOUR_API_KEY>"
{- "schedule": [
- {
- "date": "2025-11-24",
- "scheduleEvents": [
- {
- "referenceId": "55995f06ed386dc3d3bd236eaeb95b8c109540266bf7e1a6c634ae1b56b5bfe6",
- "totalCapacity": 22,
- "onlineCapacity": 20,
- "waitingListCapacity": 10,
- "color": "rgb(69, 180, 231)",
- "liveStreamUrl": null,
- "liveStreamPassword": null,
- "isFree": false,
- "isLiveStream": false,
- "isCancelled": false,
- "isHidden": false,
- "isBookableOnline": true,
- "startsAt": "2019-09-04T10:00:00+02:00",
- "endsAt": "2019-09-04T11:00:00+02:00",
- "room": {
- "qualifiedName": "Circle place - Room A",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "remainCapacity": 5,
- "remainOnlineCapacity": 3,
- "remainFrontOfficeCapacity": 3,
- "remainWaitingListCapacity": 2,
- "remainCapacityForMale": 2,
- "remainCapacityForFemale": 3,
- "bookedSpots": 17,
- "bookedSpotsForMale": 8,
- "bookedSpotsForFemale": 9,
- "bookedWaitingListSpots": 4,
- "bookedOnlineSpots": 12,
- "maleCapacity": 10,
- "femaleCapacity": 12,
- "isAvailableForBookingAhead": true,
- "isAvailableBeforeStartTime": true,
- "qualifiedName": "Astanga Led",
- "serviceType": "TYPE_CLASSROOM_SERVICE",
- "classService": {
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "experienceLevel": {
- "name": "Beginner level",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "members": [
- {
- "user": {
- "fullName": "Monica Dvorak",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
}
]
}
]
}
]
}Required scope: clientVisit:read
This call returns all ClientVisits assigned to the given ScheduleEvent.
| scheduleEvent required | string The referenceId of the ScheduleEvent. |
| sortField | string Default: createdAt Value: (all properties) Determines by which field the collection should be sorted on. |
| sortDir | string Default: asc Enum: asc desc Determines the sort order for the collection. |
| page | integer (page) Default: 1 Example: page=1 The page number to return. |
| count | integer (count) <= 1000 Default: 10 Example: count=10 The number of items to return per page. Must not exceed 1000; a higher value returns a 400 error. |
| pages | integer or null The number of pages for the given collection. |
| totalCount | integer or null The total number of items returned in the given collection. |
object An object describing the current page. | |
Array of objects (ClientVisit) |
{- "collection": [
- {
- "status": 0,
- "weight": 1,
- "members": [
- {
- "user": {
- "fullName": "Monica Dvorak",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
}
], - "room": {
- "qualifiedName": "Circle place - Room A",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "visitStartsAt": "2024-04-02T11:00:00+01:00",
- "visitEndsAt": "2024-04-02T12:00:00+01:00",
- "awaitingUntil": "2024-04-02T11:00:00+01:00",
- "privateNotes": "Client requested front row spot.",
- "isFree": false,
- "client": {
- "uuid": "1000072",
- "user": {
- "fullName": "Monica Dvorak",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
}, - "clientPricingOption": {
- "remain": 4,
- "sessionType": "limitedVisits",
- "expiresAt": "2023-08-31T21:59:59+02:00",
- "activatedAt": "2023-08-01T22:00:00+02:00",
- "pricingOption": {
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "isUnpaid": false,
- "isShared": false,
- "qualifiedName": "Yoga pass 8x",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "source": "api",
- "experienceLevel": {
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "isUnpaid": false,
- "isOnWaitingList": false,
- "bookedAt": "2024-04-01T09:30:00+01:00",
- "qualifiedName": "Yoga class",
- "enrollmentType": "clientVisit",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}
]
}Required scope: scheduleEvent:read
This call returns the schedule event.
| scheduleEvent required | string The referenceId of the ScheduleEvent. |
| referenceId | string The unique ID of the event. |
| totalCapacity | integer The total number of available spots for the given event. |
| onlineCapacity | integer The total number of spots available for booking online (via FrontOffice, mobile app) for the given event. |
| waitingListCapacity | integer or null Default: null The total number of spots available for joining waiting list for the given event. |
| color | string or null Default: null Representing color of the given event displayed on the schedule. |
| liveStreamUrl | string or null Default: null The livestream URL to join the event. |
| liveStreamPassword | string or null Default: null The password of the livestream (null when the livestream is not protected by password). |
| privateNotes | string or null Default: null |
| isFree | boolean Default: false Determines whether the event is free of charge (no ClientPricingOption required). |
| isLiveStream | boolean Default: false Determines whether the event is a livestream. |
| isCancelled | boolean Default: false Determines whether the event is cancelled or not. |
| isHidden | boolean Default: false Determines whether the event is hidden on the schedule or not. |
| isBookableOnline | boolean Default: true Determines whether the event is bookable online (e.g. FrontOffice, mobile app). |
| startsAt | string <Y-m-dTH:i:s> The time at which the event starts. |
| endsAt | string <Y-m-dTH:i:s> The time at which the event ends. |
object (LocationRoom) The room in which the event takes place. | |
object (ScheduleMeta) Attached ScheduleMeta object to the given event. | |
| remainCapacity | integer The number of remaining spots across all booking channels. |
| remainOnlineCapacity | integer The number of remaining spots bookable online via FrontOffice or mobile app. |
| remainFrontOfficeCapacity | integer The effective remaining capacity for FrontOffice bookings, capped by both total and online remaining capacity. |
| remainWaitingListCapacity | integer The number of remaining spots on the waiting list. |
| remainCapacityForMale | integer or null The remaining capacity available for male clients. Null when gender-restricted capacity is not enabled. |
| remainCapacityForFemale | integer or null The remaining capacity available for female clients. Null when gender-restricted capacity is not enabled. |
| bookedSpots | integer The total number of spots currently booked or attended (status booked or present). |
| bookedSpotsForMale | integer or null The number of booked spots occupied by male clients. Null when gender-restricted capacity is not enabled. |
| bookedSpotsForFemale | integer or null The number of booked spots occupied by female clients. Null when gender-restricted capacity is not enabled. |
| bookedWaitingListSpots | integer The number of spots currently occupied on the waiting list. |
| bookedOnlineSpots | integer The number of spots booked online via FrontOffice or mobile app (status booked or present). |
| maleCapacity | integer or null The maximum number of spots reserved for male clients. Null when gender-restricted capacity is not enabled. |
| femaleCapacity | integer or null The maximum number of spots reserved for female clients. Null when gender-restricted capacity is not enabled. |
| isAvailableForBookingAhead | boolean Determines whether the event falls within the service's booking-ahead window and is open for booking. |
| isAvailableBeforeStartTime | boolean Determines whether the event is still within the booking window before the booking-close cutoff. |
| qualifiedName | string A qualified name for the event. |
| serviceType | string Enum: TYPE_CLASSROOM_SERVICE TYPE_COURSE_SERVICE TYPE_APPOINTMENT_SERVICE TYPE_VIDEO_SERVICE TYPE_ENTRY_SERVICE The service type of the event. |
object (ClassService) The ClassService associated with this event. | |
object (StudioExperienceLevel) The experience level of the event. | |
Array of objects The teachers assigned to the given event. | |
| createdAt | string Time at which the object was created (expressed in ISO 8601 format) |
| modifiedAt | string Time at which the object was modified (expressed in ISO 8601 format). If never modified it will equal date of creation |
{- "referenceId": "55995f06ed386dc3d3bd236eaeb95b8c109540266bf7e1a6c634ae1b56b5bfe6",
- "totalCapacity": 22,
- "onlineCapacity": 20,
- "waitingListCapacity": 10,
- "color": "rgb(69, 180, 231)",
- "liveStreamUrl": null,
- "liveStreamPassword": null,
- "privateNotes": "Some private notes about this event.",
- "isFree": false,
- "isLiveStream": false,
- "isCancelled": false,
- "isHidden": false,
- "isBookableOnline": true,
- "startsAt": "2019-09-04T10:00:00+02:00",
- "endsAt": "2019-09-04T11:00:00+02:00",
- "room": {
- "qualifiedName": "Circle place - Room A",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709",
- "createdAt": "2019-05-12T12:45:47+02:00",
- "modifiedAt": "2023-09-12T19:18:23+02:00"
}, - "scheduleMeta": {
- "classService": {
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709",
- "createdAt": "2019-05-12T12:45:47+02:00",
- "modifiedAt": "2023-09-12T19:18:23+02:00"
}, - "guid": "364F59AB-5B43-4D02-989E-AE2811422709",
- "createdAt": "2019-05-12T12:45:47+02:00",
- "modifiedAt": "2023-09-12T19:18:23+02:00"
}, - "remainCapacity": 5,
- "remainOnlineCapacity": 3,
- "remainFrontOfficeCapacity": 3,
- "remainWaitingListCapacity": 2,
- "remainCapacityForMale": 2,
- "remainCapacityForFemale": 3,
- "bookedSpots": 17,
- "bookedSpotsForMale": 8,
- "bookedSpotsForFemale": 9,
- "bookedWaitingListSpots": 4,
- "bookedOnlineSpots": 12,
- "maleCapacity": 10,
- "femaleCapacity": 12,
- "isAvailableForBookingAhead": true,
- "isAvailableBeforeStartTime": true,
- "qualifiedName": "Astanga Led",
- "serviceType": "TYPE_CLASSROOM_SERVICE",
- "classService": {
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709",
- "createdAt": "2019-05-12T12:45:47+02:00",
- "modifiedAt": "2023-09-12T19:18:23+02:00"
}, - "experienceLevel": {
- "name": "Beginner level",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709",
- "createdAt": "2019-05-12T12:45:47+02:00",
- "modifiedAt": "2023-09-12T19:18:23+02:00"
}, - "members": [
- {
- "user": {
- "fullName": "Monica Dvorak",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709",
- "createdAt": "2019-05-12T12:45:47+02:00",
- "modifiedAt": "2023-09-12T19:18:23+02:00"
}
}
], - "createdAt": "2019-05-12T12:45:47+02:00",
- "modifiedAt": "2023-09-12T19:18:23+02:00"
}Required scope: user:read
This call returns the user.
| user required | string <guid> The guid of the User to return. |
| uuid | string or null Default: null Client's public and unique ID. |
| clientFields | object or null Default: null An object describing client's custom fields, keyed by the custom field guid. |
object or null (agreements) Default: null | |
| birthdateAt | string Default: null The client's birthdate. |
| lastActiveAt | string or null <Y-m-d H:i:s> Default: null The last time at which client made one of the following actions: |
object (User) | |
object (Address) The object describing client's postal address. | |
object (Phone) The object describing client's available phone numbers. | |
object (Picture) An uploaded image displayed in client's profile (FrontOffice and BackOffice). | |
Array of objects A collection of tags assigned to the client. |
{- "uuid": "1000072",
- "clientFields": {
- "8D2A6C1E-4F3B-4A7E-9C21-5B6E0F3D7A12": 1234,
- "C47E9B05-1A2D-4E6F-8B3C-9D0E2F4A6B81": "ABCD"
}, - "agreements": null,
- "birthdateAt": "1980-01-19T23:00:00+01:00",
- "lastActiveAt": "2019-09-03T08:06:23+02:00",
- "user": {
- "firstName": "Maria",
- "lastName": "Dvorak",
- "sex": 1,
- "suspensionType": 1,
- "isSuspended": false,
- "suspendedAt": "2019-09-10T15:31:47+02:00",
- "suspensionExpiresAt": "2019-09-17T15:31:47+02:00",
- "suspensionReason": "Suspended due to many cancellations",
- "isLoginEnabled": true,
- "activatedAt": "2019-09-01T12:02:35+02:00",
- "lastSeenAt": "2019-09-03T09:54:12+02:00",
- "member": {
- "publicBiography": "Mark is one of the best Yoga teachers...",
- "birthdateAt": "1974-09-17T22:00:00+02:00",
- "picture": {
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "tags": [
- {
- "name": "VIP",
- "color": "#FF5733",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709",
- "createdAt": "2019-05-12T12:45:47+02:00",
- "modifiedAt": "2023-09-12T19:18:23+02:00"
}
], - "qualifiedName": "Mark the Teacher"
}, - "client": { },
- "fullName": "Monica Dvorak",
- "hasAndroidApp": false,
- "hasIosApp": false,
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709",
- "createdAt": "2019-05-12T12:45:47+02:00",
- "modifiedAt": "2023-09-12T19:18:23+02:00"
}, - "address": {
- "street": "Sunny street 77a",
- "postalCode": "1234AB",
- "city": "Amsterdam",
- "countryCode": "NL",
- "createdAt": "2019-05-12T12:45:47+02:00",
- "modifiedAt": "2023-09-12T19:18:23+02:00"
}, - "phone": {
- "primaryPhone": "+48111222333",
- "createdAt": "2019-05-12T12:45:47+02:00",
- "modifiedAt": "2023-09-12T19:18:23+02:00"
}, - "picture": {
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709"
}, - "tags": [
- {
- "name": "VIP",
- "color": "#FF5733",
- "guid": "364F59AB-5B43-4D02-989E-AE2811422709",
- "createdAt": "2019-05-12T12:45:47+02:00",
- "modifiedAt": "2023-09-12T19:18:23+02:00"
}
]
}