Api::Unified::Clubs::LocationsController

    This controller provides access to locations available to the current user.

GET /api/unified/clubs/locations

      Fetches all the locations visible to the client.

{
// Contains filters to limit response by specific criteria
// Can be null
"unified_filters": {
// Include only locations belonging to a specific parent location
// Can be null
"parent_id": 187, // Include only locations belonging to a specific Region
// Can be null
"region_id": 717, // Include only locations belonging to a specific Club
// Can be null
"club_id": 606, // Include only hidden locations
// Can be null
"hidden": true, // A string to peform a full-text search against
// Can be null
"fulltext": "Some string", // An id of client_id for filter by his memberships locations
// Can be null
"memberships_client_id": 880, // Tag id to filter locations by
// Can be null
"tag_ids": [ "An", "Array", "Of", "Strings/Integers" ], // Tag ids and strings to peform a full-text search against to filter locations by
// Can be null
"tags_fulltext": [ "An", "Array", "Of", "Strings/Integers" ] } ,

// Pagination settings
// Can be null
"limit": {
// The number of items to skip (=start from)
// Cannot be null
"start": 673, // The number of items to include into response
// Cannot be null
"count": 260 } ,

// Sorting settings
// Can be null
"unified_sorting": {
// Sort by name, ascending if true
// Can be null
"name": true }

}
{
// The list of location models matching filters and pagination settings
// Cannot be null
"locations": [ Location::Index ], // Total number of items
// Cannot be null
"count": 972 }

GET /api/unified/clubs/locations/:id

      Shows the location entity

The :id placeholder in the URL has to be replaced with the identifier of the entity to be manipulated.

{
// Internal ID of the location
// Cannot be null
"id": 715 }
{
// A location entity
// Can be null
"location": Location::Show }

Api::Unified::SessionsController

  This controller provides a set of APIs for signing in, signing out, resetting the password and so on.

POST /api/unified/sessions/auth

      Attemps to authenticate the user using one of the implemented strategies.
      Available options are:
      * fisikal_token is used internally to cross-authenticate the user between Fisikal subsystems. Not for external use.
      * email and password are used to authenticate the user via providing Fisikal credentials.
      * dll hash is used to authenticate the user using David Lloyd oAuth data.

{
// Fisikal authentication token
// Can be null
"fisikal_token": "Some string", // FKL Club ID of the user to log in (used when there are multiple users in the account)
// Can be null
"club_id": 911, // FKL ID of the user to log in (used when there are multiple users in the account)
// Can be null
"id": 714, // A hash used for processing DLL oAuth responses
// Can be null
"dll": {
// oAuth code returned by DLL
// Cannot be null
"code": "Some string", // oAuth token returned by DLL
// Cannot be null
"token": "Some string", // Redirect URL used during authentication
// Cannot be null
"redirect_url": "Some string" } ,

// A hash used for processing FFUK auth
// Can be null
"ffuk": {
// FFUK email
// Cannot be null
"email": "Some string", // FFUK password
// Cannot be null
"password": "Some string", // FFUK identifier
// Cannot be null
"identifier": "Some string" } ,

// A hash used for processing EGYM auth
// Can be null
"egym": {
// EGYM Identity token (JWT)
// Cannot be null
"token": "Some string", // EGYM Custom token (JWT). Used when login with EGYM
// Cannot be null
"custom_token": "Some string" } ,

// A hash used for processing MGF auth responses
// Can be null
"mgf": {
// auth token returned by DLL
// Cannot be null
"token": "Some string" } ,

// Authenticate with PerfectGym
// Can be null
"perfect_gym": {
// PerfectGym member login
// Cannot be null
"login": "Some string", // PerfectGym member password
// Cannot be null
"password": "Some string" } ,

// E-mail of the user
// Can be null
"email": "Some string", // Password to authenticate with
// Can be null
"password": "Some string", // Roles accepted for signing in
// Can be null
"roles": [ "An", "Array", "Of", "Strings/Integers" ] }
{
// The user model which represents the user currently signed in
// Can be null
"user": User::Auth, // The club of the current user
// Can be null
"club": Club::Auth, // Identity entry with token information (if needed within the app)
// Can be null
"identity": Identity::Auth, // The list of alternative accounts this user can switch to
// Can be null
"users": [ User::Auth ] }

POST /api/unified/sessions/sign_up

      Attempts to create user's account within the current club.

{
// A hash containing user's attributes
// Cannot be null
"user": {
// The name of the user to be used
// Cannot be null
"name": "Some string", // The e-mail of the user to be used
// Cannot be null
"email": "Some string", // The password which user wants to be used for his account
// Can be null
"password": "Some string", // The club which users wants to be in
// Can be null
"club_id": "Some string", // The home location which user wants to be used for his account
// Can be null
"home_location_id": "Some string", // The title of the user to be used
// Can be null
"title": "Some string", // The mobile number which user wants to be used
// Can be null
"mobile_no": "Some string", // The sex of the user to be used
// Can be null
"sex": "Some string", // The date of birth of the user to be used
// Can be null
"dob": "Some string" }

}
{
// A hash containing user's attributes
// Cannot be null
"user": {
// A set of errors occurred during creating a user's account
// Cannot be null
"errors": [ Error::Index ] }

}

PUT /api/unified/sessions/restore_password

      Initiates password restore flow for the user with the email supplied.

{
// The object to identify the user
// Cannot be null
"user": {
// E-mail address of the user
// Cannot be null
"email": "Some string" }

}

DELETE /api/unified/sessions

    Clears all session data associated with a user, along with a spoof stack, if present.

Api::Unified::VersionsController

    This controller is used to obtain access to applications' versions.

GET /api/unified/versions/check

      Checks which versions of the app are configured on the backend and replies with the most
      recent one, along with a URL to that version, so that an app can suggest upgrading to the user.

{
// The identifier of the application to fetch the latest version for
// Cannot be null
"app": "Some string", // The name of the platform of the app
// Allowed values are: "ios" and "android"
// Cannot be null
"platform": "Some string" }
{
// Version string in MAJOR.MINOR.PATCH format
// Cannot be null
"version": "Some string", // The URL to the page where this specific version is available for download. Can be either an App Store / Google Play URL, or a Fisikal application download page
// Can be null
"url": "Some string" }

Api::Unified::Users::TrainersController

    This controller provides access to trainers APIs.

GET /api/unified/users/trainers

      Fetches all the trainers visible to the current user, allowing paging through them as well
      as filtering by multiple fields.

{
// Contains filters to limit response by specific criteria
// Can be null
"unified_filters": {
// An arbitrary parameter limiting the collection to 1 trainer with the specified id
// Can be null
"id": "Some string", // An arbitrary string to perform full-text search against
// Can be null
"fulltext": "Some string", // Gender of the trainer
// Can be null
"sex": true, // Boolean parameter to flag if not to show current user
// Can be null
"others": "Some string", // Boolean parameter to flag if visible or hidden trainers to be shown
// Can be null
"disabled": "Some string", // A list of group ids to show the clients from
// Can be null
"group_ids": "Some string", // A list of locations ids to show the clients from
// Can be null
"location_ids": "Some string", // Id of the service category that the trainer is assocated with
// Can be null
"service_category_id": "Some string", // Returns trainers with the specified status: active, inactive, frozen
// Can be null
"status": 586, // Include only trainer belonging to the SDH with id passed
// Can be null
"service_working_time_id": 897, // Returns trainers associated to the selected service
// Can be null
"service_id": 674, // Returns trainers who provides personal or group services
// Can be null
"individual_trainers": true, // Returns trainers who share their schedule
// Can be null
"share_schedule": true, // Returns trainers with the specified type
// Allowed values are: "Users::Trainers::Employed" and "Users::Trainers::SelfEmployed"
// Can be null
"type": [ "An", "Array", "Of", "Strings/Integers" ], // Array of Tag IDs or an arbitrary string to perform full-text search against
// Can be null
"tag_ids": [ "An", "Array", "Of", "Strings/Integers" ], // Array of Tag IDs or an arbitrary string to perform full-text search against both tag names and trainers
// Can be null
"tags_fulltext": [ "An", "Array", "Of", "Strings/Integers" ], // Contains filters for coaches based on the relationships they have
// Can be null
"relationship": {
// Minimum strength of relationship
// Can be null
"min_strength": 994, // Ids of clients, relationships with whom will be analysed
// Can be null
"client_ids": [ "An", "Array", "Of", "Strings/Integers" ], // Array of relationship types
// Allowed values are: "has_package_with", "has_booking_with", "has_assessment_with", "has_workout_from", "is_allocated_to", and "has_active_package_with"
// Can be null
"type": [ "An", "Array", "Of", "Strings/Integers" ] }

} ,

// Sorting settings
// Can be null
"unified_sorting": {
// Sort by name, ascending if true
// Can be null
"name": true } ,

// Pagination settings
// Can be null
"limit": {
// The number of items to skip (=start from)
// Cannot be null
"start": 151, // The number of items to include into response
// Cannot be null
"count": 291 }

}
{
// The collection of trainers matching criteria and pagination settings
// Cannot be null
"trainers": [ Trainer::Index ], // Total number of items
// Cannot be null
"count": 660 }

GET /api/unified/users/trainers/:id

      Fetches specific trainer's profile.

The :id placeholder in the URL has to be replaced with the identifier of the entity to be manipulated.

{
// Requested trainer's profile
// Cannot be null
"trainer": Trainer::Show }

Api::Unified::Services::ServicesController

    This controller provides access to services: models encapsulating the information about fitness classes in terms of duration, pricing etc.

GET /api/unified/services/services/colors

      Fetches all the service colors visible to the current user, allowing paging through them as well
      as filtering by multiple fields.

{
// Contains filters to limit response by specific criteria
// Can be null
"unified_filters": {
// Returns a collection of the specified service by id
// Can be null
"id": "Some string", // An arbitrary string to perform full-text search against
// Can be null
"fulltext": "Some string", // Returns a collection of active / hidden services as specified
// Can be null
"disabled": "Some string", // Returns a collection from the specified location
// Can be null
"location_id": "Some string", // Returns a collection for the specified trainer
// Can be null
"trainer_id": "Some string", // Returns a collection with / without the client_rates
// Can be null
"client_rates": "Some string", // Returns a collection for the specified service category id
// Can be null
"service_category_id": "Some string", // Include only services belonging to the SDH with id passed
// Can be null
"service_working_time_id": 169, // Returns a collection for the specified activity category id
// Can be null
"activity_category_id": "Some string", // Returns a collection for the specified service title id
// Can be null
"service_title_id": "Some string", // Array of Tag IDs or an arbitrary string to perform full-text search against
// Can be null
"tag_ids": [ "An", "Array", "Of", "Strings/Integers" ], // Tag id to filter services by (grouped inside tags categories])
// Can be null
"tags_grouped_by_categories": [ "An", "Array", "Of", "Strings/Integers" ] } ,

// Sorting settings
// Can be null
"unified_sorting": {
// Sort by service_title, ascending if true
// Can be null
"service_title": true } ,

// Pagination settings
// Can be null
"limit": {
// The number of items to skip (=start from)
// Cannot be null
"start": 6, // The number of items to include into response
// Cannot be null
"count": 904 }

}
{
// The list of service models matching filters and pagination settings
// Cannot be null
"colors": [ Service::Colors ], // Total number of items
// Cannot be null
"count": 859 }

GET /api/unified/services/services

      Fetches all the services visible to the client, allowing paging through them as well
      as filtering by multiple fields.

{
// Contains filters to limit response by specific criteria
// Can be null
"unified_filters": {
// Include only services belonging to the activity category with id passed
// Can be null
"activity_category_id": 377, // Include only services provided by a specific trainer
// Can be null
"trainer_id": 235, // Include only services provided within a specific location
// Can be null
"location_id": 564, // Include only services belonging to the service category with id passed
// Can be null
"service_category_id": 435, // Include only services belonging to the SDH with id passed
// Can be null
"service_working_time_id": 933, // A string to peform a full-text search against
// Can be null
"fulltext": "Some string", // Include only entities marked by current user as favourite
// Can be null
"starred": true, // Tag id to filter services by
// Can be null
"tag_ids": [ "An", "Array", "Of", "Strings/Integers" ], // Tag id to filter services by (grouped inside tags categories])
// Can be null
"tags_grouped_by_categories": [ "An", "Array", "Of", "Strings/Integers" ], // Tag ids and strings to peform a full-text search against to filter services by
// Can be null
"tags_fulltext": [ "An", "Array", "Of", "Strings/Integers" ] } ,

// Sorting settings
// Can be null
"unified_sorting": {
// Sort by name, ascending if true
// Can be null
"name": true } ,

// Pagination settings
// Can be null
"limit": {
// The number of items to skip (=start from)
// Cannot be null
"start": 744, // The number of items to include into response
// Cannot be null
"count": 990 }

}
{
// The list of service models matching filters and pagination settings
// Cannot be null
"services": [ Service::Index ], // Total number of items
// Cannot be null
"count": 187 }

GET /api/unified/services/services/:id

      Fetches a specific service to be presented to the client.

The :id placeholder in the URL has to be replaced with the identifier of the entity to be manipulated.

{
// Internal ID of the service
// Can be null
"id": 138 }
{
// An extended version of the service model
// Can be null
"service": Service::Show }

Api::Unified::Services::ServiceCategoriesController

    This controller provides access to service categories, which are used to group services within a club.

GET /api/unified/services/service_categories

      Fetches all the service categories available to the client.

{
// Contains filters to limit response by specific criteria
// Can be null
"unified_filters": {
// The name to filter service categories by
// Can be null
"name": "Some string", // Filter by show_in_member_app field
// Can be null
"show_in_member_app": true } ,

// Sorting settings
// Can be null
"unified_sorting": {
// Sort by name, ascending if true
// Can be null
"name": true } ,

// Pagination settings
// Can be null
"limit": {
// The number of items to skip (=start from)
// Cannot be null
"start": 544, // The number of items to include into response
// Cannot be null
"count": 384 }

}
{
// The list of service category models matching filters and pagination settings
// Cannot be null
"service_categories": [ ServiceCategory::Index ], // Total number of items
// Cannot be null
"count": 743 }

Api::Unified::Services::ServicePackagesController

    This controller provides access to service packages: models incapsulating multiple services to assign / purchase bulks at once.

GET /api/unified/services/service_packages

      Fetches all the service packages visible to the current user, allowing paging through them as well
      as filtering by multiple fields.

{
// Returns a collection of the specified club
// Cannot be null
"club_id": 56, // Contains filters to limit response by specific criteria
// Can be null
"unified_filters": {
// Returns a collection of the specified service package by id
// Can be null
"id": "Some string", // Returns a collection from the specified location
// Can be null
"location_id": "Some string" }

}
{
// The collection of service packages matching criteria and pagination settings
// Cannot be null
"service_packages": [ ServicePackage::Index ], // Total number of items
// Cannot be null
"count": 323 }

GET /api/unified/services/service_packages/:id

      Fetches the service package visible to a guest

The :id placeholder in the URL has to be replaced with the identifier of the entity to be manipulated.

{
// ID of the Service Package
// Cannot be null
"id": 329, // Optional Location ID to get custom prices specific to Sales Location
// Can be null
"location_id": 17 }
{
// An extended version of the location entity
// Can be null
"service_package": ServicePackage::Show }

Api::Unified::Schedule::ServiceWorkingTimesController

    This controller provides API endpoints for managing Service Delivery Hours (SDH) entities.

GET /api/unified/schedule/service_working_times/lookup

      Creates a new service working time entity.

{
// Contains filters to limit response by specific criteria
// Can be null
"unified_filters": {
// Id of the occurrence to return
// Can be null
"id": "Some string", // Title of the entity
// Can be null
"fulltext": "Some string", // A status to filter by
// Can be null
"disabled": "Some string", // Only include SDH entities that are editable by current user
// Can be null
"editable": true } ,

// Sorting settings
// Can be null
"unified_sorting": {
// Sort by title, ascending if true
// Can be null
"title": true } ,

// Pagination settings
// Can be null
"limit": {
// The number of items to skip (=start from)
// Cannot be null
"start": 292, // The number of items to include into response
// Cannot be null
"count": 402 }

}
{
// The collection of service working times matching criteria and pagination settings
// Cannot be null
"service_working_times": [ ServiceWorkingTime::Lookup ], // Total number of items
// Cannot be null
"count": 22 }

GET /api/unified/schedule/service_working_times

      Fetches all available service working time entries.

{
// Contains filters to limit response by specific criteria
// Can be null
"unified_filters": {
// Id of the occurrence to return
// Can be null
"id": "Some string", // Title of the entity
// Can be null
"fulltext": "Some string", // A status to filter by
// Can be null
"disabled": true, // Only include SDH entities that are editable by current user
// Can be null
"editable": true, // Standard flag of SDH to filter by
// Can be null
"standard": true } ,

// Sorting settings
// Can be null
"unified_sorting": {
// Sort by title, ascending if true
// Can be null
"title": true } ,

// Pagination settings
// Can be null
"limit": {
// The number of items to skip (=start from)
// Cannot be null
"start": 835, // The number of items to include into response
// Cannot be null
"count": 29 }

}
{
// The collection of service working times matching criteria and pagination settings
// Cannot be null
"service_working_times": [ ServiceWorkingTime::Index ], // Total number of items
// Cannot be null
"count": 730 }

Api::Unified::Schedule::OccurrencesController

    This controller is used to interact with schedule's entries, as well as provides APIs for enrolling into specific appointments.

GET /api/unified/schedule/occurrences

      Fetches occurrences available to the client based on the filters provided.

{
// Contains filters to limit response by specific criteria
// Can be null
"unified_filters": {
// The earliest UTC time the occurrence can start at
// Cannot be null
"since": "2025-10-18T13:48:52Z", // The latest UTC time the occurrence can start at
// Cannot be null
"till": "2025-10-18T13:48:52Z", // Optional id of the client required to be a part of the occurrence
// Can be null
"client_id": 230, // Optional id of the location required to be a part of the occurrence
// Can be null
"location_id": 719, // Returns occurrences for the specified sub location
// Can be null
"sub_location_id": 246, // Optional id of the service required to be associated to an occurrence
// Can be null
"service_id": 103, // Optional id of the service category required to be associated to a service associated to an occurrence
// Can be null
"service_category_id": 821, // Optional id of the activity category required to be associated to a service associated to an occurrence
// Can be null
"activity_category_id": 458, // Whether to include only occurrences associated to favourite services
// Can be null
"starred": true, // Return only occurrences visible on schedule
// Can be null
"visible_on_schedule": true, // Return only occurrences which are personal trainings
// Can be null
"individual": true, // Optional id of the trainer required to be associated with an occurrence
// Can be null
"trainer_id": 680, // Optional. Show occurrences which can be rated only.
// Can be null
"can_be_rated": true, // Optional. Show occurrences which can be prompted to rate.
// Can be null
"can_be_prompted": true, // Optional. Whether to include only occurrences that the client has booked and attended (true) or booked but not attended (false) or occurrences that are not booked at all (null)
// Can be null
"is_attended": true, // Array of service Tag IDs or an arbitrary string to perform full-text search against
// Can be null
"service_tag_ids": [ "An", "Array", "Of", "Strings/Integers" ], // Array of Tag IDs or an arbitrary string to perform full-text search against
// Can be null
"tag_ids": [ "An", "Array", "Of", "Strings/Integers" ], // Array of Tag IDs or an arbitrary string to perform full-text search against tag names, occurrences and services
// Can be null
"tags_fulltext": [ "An", "Array", "Of", "Strings/Integers" ], // Tag id to filter occurrences by (grouped inside tags categories])
// Can be null
"tags_grouped_by_categories": [ "An", "Array", "Of", "Strings/Integers" ] } ,

// Pagination settings
// Can be null
"limit": {
// The number of items to skip (=start from)
// Cannot be null
"start": 836, // The number of items to include into response
// Cannot be null
"count": 915 } ,

// Optional client id to compute presence status (joined / awaiting) and allowed actions for. Must be one of the linked clients
// Can be null
"client_id": 27 }
{
// A list of occurrences matching filters and pagination criteria
// Cannot be null
"occurrences": [ Occurrence::Index ], // Total number of items
// Cannot be null
"count": 400 }

Location::Index

        This entity represents location record of a club.
{
// Persistent identifier of the entity
// Cannot be null
"id": 688, // Id of the parent location, if this is sublocation
// Can be null
"parent_id": 510, // Whether this location is hidden
// Cannot be null
"hidden": true, // The Region ID of Location
// Can be null
"region_id": 523, // The ALT ID of Location
// Can be null
"alt_id": 125, // Full name of the location
// Cannot be null
"name": "Some string", // Short code of the location
// Cannot be null
"short_code": "Some string", // Number of the location
// Can be null
"number": 183, // Latitude of the location
// Can be null
"latitude": 31.0, // Longitude of the location
// Can be null
"longitude": 31.9, // Whether this location directory is hidden
// Cannot be null
"directory_is_enabled": true, // Name of the parent location, if available
// Can be null
"parent_name": "Some string", // Directory model
// Can be null
"directory": Directory::Show }

Directory::Show

        This entity represents location record of a directory(location).
{
// Persistent identifier of the entity
// Cannot be null
"id": 78, // Identifier of the directory location
// Cannot be null
"location_id": 415, // Š’escription of the location directory
// Cannot be null
"description": "Some string", // Main image url of the location directory
// Cannot be null
"image_url": "Some string", // Address of the location directory
// Can be null
"address": "Some string", // Postcode of the location directory
// Can be null
"postcode": "Some string", // Phone number of the location directory
// Can be null
"phone_no": "Some string", // Cover images URLS of the location directory
// Can be null
"cover_image_urls": [ "An", "Array", "Of", "Strings/Integers" ], // Location name
// Can be null
"name": "Some string", // Schedule pdf url
// Can be null
"schedule_pdf_url": "Some string", // Shows the link to the pdf enabled or not
// Can be null
"link_to_pdf_enabled": true, // Shows the service category of the directory
// Can be null
"service_category": ServiceCategory::Index, // Shows the link to the schedule enabled or not
// Cannot be null
"link_to_schedule_enabled": true, // Opening Hours of the location directory
// Can be null
"opening_hours": [ DirectoryOpeningHours::Index ] }

ServiceCategory::Index

        The service category entity represents a category associated to some services, primarely used for grouping
        services with different activities based on some common factors or for marketing purposes.
{
// Persistent identifier of the entity
// Cannot be null
"id": 908, // The name of the service category
// Cannot be null
"name": "Some string", // The name to be displayed within the app
// Cannot be null
"name_in_member_app": "Some string", // The description of the service category
// Can be null
"description": "Some string", // The URL to the service category logo, if specified
// Can be null
"logo_url": "Some string", // The direct URL to the service category video file, if specified
// Can be null
"video_url": "Some string" }

DirectoryOpeningHours::Index

        This entity represents location record of a directory(location) opening hours model.
{
// Persistent identifier of the entity
// Cannot be null
"id": 383, // Persistent Identifier of the directory
// Cannot be null
"directory_id": 303, // Š’escription of the location directory
// Can be null
"title": "Some string", // Start time
// Can be null
"start_time": "Some string", // End time
// Can be null
"end_time": "Some string" }

Location::Show

        Represents the stripped version of the user entity
{
// The internal ID of the entity
// Cannot be null
"id": 360, // The Region ID of Location
// Can be null
"region_id": 941, // The name of the entity
// Cannot be null
"title": "Some string", // The description of the entity
// Cannot be null
"description": "Some string", // Image URL of the entity
// Cannot be null
"image_url": "Some string", // The list of tag entities
// Cannot be null
"tags": [ Tag::Index ] }

Tag::Index

        This entity encapsulates tag fields
{
// Persistent identifier of the entity
// Cannot be null
"id": 257, // Name of the tag
// Cannot be null
"name": "Some string", // Description of the tag
// Cannot be null
"description": "Some string", // Translations of the tag
// Cannot be null
"translations": "Some string", // The URL to the tag image, if specified
// Can be null
"tag_image_url": "Some string", // Is editable?
// Cannot be null
"editable": true, // Representation of Tag category which tag belongs
// Can be null
"tag_category": TagCategory::Index }

TagCategory::Index

        This entity represents a tag category
{
// Persistent identifier of the entity
// Cannot be null
"id": 242, // Is disabled?
// Cannot be null
"disabled": true, // Human array of roles
// Cannot be null
"human_user_visibility": [ "An", "Array", "Of", "Strings/Integers" ], // Contains translations data
// Cannot be null
"translations": [ "An", "Array", "Of", "Strings/Integers" ], // A set of tag categories entities
// Cannot be null
"tag_category_entities": [ "An", "Array", "Of", "Strings/Integers" ], // The URL to the tag category logo, if specified
// Can be null
"logo_url": "Some string" }

User::Auth

        Represents an authenticated user typically returned in response to authentication attempts. This entity
        encapsulates the most essential information consumed by various flavours of sign in widgets and forms.
{
// Unique identifier of the user
// Cannot be null
"id": 89, // Users's alt ID.
// Cannot be null
"alt_id": "Some string", // User's club ID.
// Cannot be null
"club_id": 45, // Display name of the user
// Cannot be null
"name": "Some string", // E-mail of the user
// Cannot be null
"email": "Some string", // URL to the avatar of the user
// Can be null
"image_url": "Some string", // URL to the cover photo of the user
// Can be null
"cover_photo_url": "Some string", // User role identifier
// Allowed values are: "Client", "Trainer", "Manager", "Users::Trainers::SelfEmployed", "Users::Trainers::Employed", and "IndependentTrainer"
// Cannot be null
"type": "Some string", // User's home location
// Can be null
"home_location_id": 60, // The name of the club
// Can be null
"club_name": "Some string", // Access PIN associated with the user's account
// Can be null
"access_pin": "Some string" }

Club::Auth

        Represents a club a specific user belongs to. This specific entity is intended to be used during
        authentication flow to present club's summary to the user.
{
// Unique identifier of the club
// Cannot be null
"id": 360, // Display name of the club
// Cannot be null
"name": "Some string", // URL to the logo of the club
// Can be null
"image_url": "Some string", // IANA time zone identifier
// Cannot be null
"time_zone": "Some string" }

Identity::Auth

        Represents an authentication handle which contains information used to complete
        various oAuth / external authentication flows, as well as Fisikal token, which can
        be used for password-less authentication.
{
// Unique identifier of the identity record
// Can be null
"id": 103, // External system's user id, if any
// Can be null
"uid": "Some string", // External system's token, if any
// Can be null
"token": "Some string", // Fisikal authentication token
// Cannot be null
"fisikal_token": "Some string" }

Error::Index

        Represents an error entry attached to an arbitrary model.
{
// The name of the field the error is attached to
// Cannot be null
"on": "Some string", // The type of the error
// Allowed values are: "is_incorrect", "booking_allowed_in_sublocations_only", "is_not_billed", "is_already_cancelled", "is_already_refunded", "is_earlier_then_tomorrow", "conflicts", "failed", "taken", "length", "confirmation", "invalid", "presence", "format", "duplicate", "working_hours_violation", "spare_schedule_violation", "individual_appointment_requires_client", "excess", "numericality", "advance_time_restriction", "not_enough_credits", "requires_action", "booking_per_day_limit_exceeded", "booking_limit_exceeded", and "waiting_list_conflicts"
// Cannot be null
"type": "Some string", // Map of validation arguments to be used (for instance, the regular expression which failed to match)
// Cannot be null
"options": {
}

}

Trainer::Index

        The lookup representation of the trainer.
{
// Persistent identifier of the entity
// Cannot be null
"id": 524, // ALT ID of the user
// Can be null
"alt_id": "Some string", // The name of the entity
// Cannot be null
"title": "Some string", // The description of the entity
// Cannot be null
"description": "Some string", // The description of the entity
// Cannot be null
"short_desc": "Some string", // The link to the image of the entity
// Cannot be null
"image_url": "Some string" }

Trainer::Show

        Represents full trainer's profile data.
{
// Id of the trainer
// Cannot be null
"id": 723, // Preferred title of the user
// Can be null
"title": "Some string", // Name of the trainer
// Cannot be null
"name": "Some string", // E-mail of the trainer
// Cannot be null
"email": "Some string", // Qualifications of the trainer
// Can be null
"qualifications": "Some string", // Biography of the trainer
// Can be null
"bio": "Some string", // Type of trainer
// Cannot be null
"type": "Some string", // Avatar image of the user
// Can be null
"image": , // Cover photo of the user
// Can be null
"cover_photo": , // Returns amounts of relationships for current user grouped by type
// Cannot be null
"relationships": {
// Strength of has_package_with relationships for given client and trainer
// Cannot be null
"has_package_with": 863, // Strength of has_booking_with relationships for given client and trainer
// Cannot be null
"has_booking_with": 610, // Strength of has_assessment_with relationships for given client and trainer
// Cannot be null
"has_assessment_with": 685, // Strength of has_workout_from relationships for given client and trainer
// Cannot be null
"has_workout_from": 394, // Strength of is_allocated_to relationships for given client and trainer
// Cannot be null
"is_allocated_to": 453, // Strength of has_active_package_with relationships for given client and trainer
// Cannot be null
"has_active_package_with": 403 } ,

// The list of tag entities
// Cannot be null
"tags": [ Tag::Index ] }

Service::Colors

        Response colors for services
{
// Persistent identifier of the entity
// Cannot be null
"id": 801, // Activity category id
// Cannot be null
"activity_category_id": 524, // Schedule color for header
// Cannot be null
"schedule_color_header": 505, // Schedule color for header text
// Cannot be null
"schedule_color_header_text": 852, // Schedule color for body
// Cannot be null
"schedule_color_body": 894, // Schedule color for body text
// Cannot be null
"schedule_color_body_text": 673, // Use activity schedule colors (true/false)
// Cannot be null
"use_activity_schedule_colors": 56 }

Service::Index

        This entity represents a service provided by some trainers in some locations. It combines
        the information about service settings, favourite status etc.
{
// Persistent identifier of the entity
// Cannot be null
"id": 507, // Maximum number of attendees
// Cannot be null
"group_size": 227, // The hour part of service duration
// Cannot be null
"duration_in_hours": 815, // The minute part of service duration
// Cannot be null
"duration_in_minutes": 879, // The description of the service
// Can be null
"declaration": "Some string", // The URL to the service logo image, if specified
// Can be null
"logo_url": "Some string", // The URL to the service image, if specified
// Can be null
"service_image_url": "Some string", // The direct URL to the service video file, if specified
// Can be null
"video_url": "Some string", // The title of the service
// Cannot be null
"service_title": "Some string", // Whether the current user has marked the service as a favourite
// Cannot be null
"starred": true, // Show free spaces
// Cannot be null
"show_free_spaces": true, // Trainer remains available
// Cannot be null
"trainer_availability": true, // The list of tag entities
// Cannot be null
"tags": [ Tag::Index ] }

Service::Show

        The extended version of the service entity which represents a service provided by some trainers in some locations. It combines
        the information about service settings, favourite status etc.
{
// Persistent identifier of the entity
// Cannot be null
"id": 839, // Maximum number of attendees
// Cannot be null
"group_size": 418, // The hour part of service duration
// Cannot be null
"duration_in_hours": 114, // The minute part of service duration
// Cannot be null
"duration_in_minutes": 925, // The description of the service
// Can be null
"declaration": "Some string", // The URL to the service logo image, if specified
// Can be null
"logo_url": "Some string", // The URL to the service image image, if specified
// Can be null
"service_image_url": "Some string", // The direct URL to the service video file, if specified
// Can be null
"video_url": "Some string", // The title of the service
// Cannot be null
"service_title": "Some string", // Whether the current user has marked the service as a favourite
// Cannot be null
"starred": true, // Show free spaces
// Cannot be null
"show_free_spaces": true, // Trainer remains available
// Cannot be null
"trainer_availability": true, // The list of tag entities
// Cannot be null
"tags": [ Tag::Index ] }

ServicePackage::Index

Represents a service package entity, which is effectively a collection of services grouped together in one purchasable unit.

{
// Unique persistent id of the entity
// Cannot be null
"id": 16, // The alt ID of Package
// Cannot be null
"alt_id": "Some string", // Title of the service package
// Cannot be null
"name": "Some string", // Description of the service package
// Can be null
"description": "Some string", // The url to the logo file associated with the service package
// Can be null
"logo_url": "Some string", // The url to the image file associated with the service package
// Can be null
"service_package_image_url": "Some string", // Video associated with the package
// Can be null
"video": {
// The URL to the web-based player configured to play the video file
// Can be null
"player_url": "Some string", // Direct URL to the video file
// Can be null
"file_url": "Some string" } ,

// Regular price of the package; nil if the package is free
// Can be null
"price": , // Client-specific price of the package; nil if the package is free
// Can be null
"custom_price": , // Id of the product which contents is this service package; purchase use only
// Cannot be null
"product_id": 154, // Whether the service package is disabled
// Cannot be null
"disabled": true, // Service category id
// Can be null
"service_category_id": "Some string", // Price of the service package
// Can be null
"cost": "Some string", // Service category name
// Cannot be null
"service_category_name": "Some string", // Whether the service package is expirable
// Can be null
"expirable": true, // Type of expiration
// Allowed values are: "day", "week", and "month"
// Can be null
"expires_period_type": "Some string", // Value of expiration
// Can be null
"expires_in": 640, // Type of expiration for related credits
// Allowed values are: :default, :custom, and :unexpirable
// Cannot be null
"credits_expiration_type": "Some string", // Number of days when user can use credits after package expiration
// Can be null
"credits_expire_after_days": 99, // Is package restricted to single trainer
// Can be null
"restrict_bookings_to_payee": true, // Whether Client must complete Assessment to purchase or not
// Cannot be null
"clients_require_assessment": true, // Id of package payee
// Can be null
"payee_id": 202, // Roles this service package is visible to
// Cannot be null
"user_visibility": [ UserVisibility::Index ], // A collection of service package services
// Cannot be null
"service_package_services": [ ServicePackageService::Lookup ] }

UserVisibility::Index

        This enum represents possible values for user visibiltiy settings.
{
// Visible to users with Client role
// Cannot be null
"Client" // Visible to users with Trainer role
// Cannot be null
"Trainer" // Visible to users with Manager role
// Cannot be null
"Manager" // Visible to users with Independent Trainer role
// Cannot be null
"IndependentTrainer" // Visible to users with Content Provider role
// Cannot be null
"ContentProvider" // Visible to users with Content User role
// Cannot be null
"ContentUser" // Visible to users with SjdAccountant role
// Cannot be null
"SjdAccountant" // Visible to users with Administrator role
// Cannot be null
"Administrator" // Visible to users with FOHM role
// Cannot be null
"FrontHouseManager" // Visible to users with PT Manager role
// Cannot be null
"PtManager" }

ServicePackageService::Lookup

Represents a service package service entity.

{
// Unique persistent id of the entity
// Cannot be null
"id": 758, // Amount of credits to be added when assigning the package
// Cannot be null
"amount": "Some string", // Associated service object
// Cannot be null
"service": Service::Lookup }

Service::Lookup

        The lookup representation of the service.
{
// Persistent identifier of the entity
// Cannot be null
"id": 536, // The name of the entity
// Cannot be null
"title": "Some string", // The description of the entity
// Cannot be null
"description": "Some string", // The link to the image of the entity
// Cannot be null
"image_url": "Some string" }

ServicePackage::Show

Represents a service package entity, which is effectively a collection of services grouped together in one purchasable unit.

{
// Unique persistent id of the entity
// Cannot be null
"id": 910, // The alt ID of Package
// Cannot be null
"alt_id": "Some string", // Title of the service package
// Cannot be null
"name": "Some string", // Description of the service package
// Can be null
"description": "Some string", // The url to the logo file associated with the service package
// Can be null
"logo_url": "Some string", // The url to the image file associated with the service package
// Can be null
"service_package_image_url": "Some string", // Video associated with the package
// Can be null
"video": {
// The URL to the web-based player configured to play the video file
// Can be null
"player_url": "Some string", // Direct URL to the video file
// Can be null
"file_url": "Some string" } ,

// Regular price of the package; nil if the package is free
// Can be null
"price": , // Client-specific price of the package; nil if the package is free
// Can be null
"custom_price": , // Id of the product which contents is this service package; purchase use only
// Cannot be null
"product_id": 130, // Whether the service package is disabled
// Cannot be null
"disabled": true, // Service category id
// Can be null
"service_category_id": "Some string", // Price of the service package
// Can be null
"cost": "Some string", // Service category name
// Cannot be null
"service_category_name": "Some string", // Whether the service package is expirable
// Can be null
"expirable": true, // Type of expiration
// Allowed values are: "day", "week", and "month"
// Can be null
"expires_period_type": "Some string", // Value of expiration
// Can be null
"expires_in": 658, // Type of expiration for related credits
// Allowed values are: :default, :custom, and :unexpirable
// Cannot be null
"credits_expiration_type": "Some string", // Number of days when user can use credits after package expiration
// Can be null
"credits_expire_after_days": 751, // Is package restricted to single trainer
// Can be null
"restrict_bookings_to_payee": true, // Whether Client must complete Assessment to purchase or not
// Cannot be null
"clients_require_assessment": true, // Id of package payee
// Can be null
"payee_id": 62, // Roles this service package is visible to
// Cannot be null
"user_visibility": [ UserVisibility::Index ], // A collection of service package services
// Cannot be null
"service_package_services": [ ServicePackageService::Lookup ], // The list of tag entities used as restictions for relation service_packages and occurrences
// Cannot be null
"tags": [ Tag::Index ], // The list of tag entities for possible search by tags
// Cannot be null
"service_package_tags": [ Tag::Index ] }

ServiceWorkingTime::Lookup

        Represents lookup variant of service working time entity.
{
// The internal ID of the entity
// Cannot be null
"id": 709, // The name of the entity
// Cannot be null
"title": "Some string", // The description of the entity
// Cannot be null
"description": "Some string", // Image URL of the entity
// Cannot be null
"image_url": "Some string" }

ServiceWorkingTime::Index

        This entity represents a single service working time.
{
// Persistent identifier of the entity
// Cannot be null
"id": 66, // The name of the entity
// Cannot be null
"title": "Some string", // The type of the payroll scheme
// Cannot be null
"color": "Some string", // Flag indicating the SDH refers to standard working times
// Can be null
"standard": true, // A flag representing does the entity is inactive
// Can be null
"disabled": true, // Whether the current user can edit working times belonging to this SDH
// Cannot be null
"editable": true, // A list of service entities
// Cannot be null
"services": [ Service::Lookup ] }

Occurrence::Index

        This entity represents a single training event with all the information about specifics merged in.
{
// Persistent identifier of the entity
// Cannot be null
"id": 923, // UTC time this occurrence starts at
// Cannot be null
"occurs_at": "2025-10-18T13:48:52Z", // Hours part of the duration
// Cannot be null
"duration_in_hours": 136, // Minutes part of the duration
// Cannot be null
"duration_in_minutes": 990, // Activity category id for pulling data about color
// Can be null
"activity_category_id": 689, // Id of trainer associated with occurrence
// Can be null
"trainer_id": 741, // The name of the trainer performing the event
// Cannot be null
"trainer_name": "Some string", // The ID of the location this event occurs in
// Cannot be null
"location_id": 106, // The name of the location this event occurs in
// Cannot be null
"location_name": "Some string", // The name of the sub location this event occurs in
// Can be null
"sub_location_name": "Some string", // Id of service associated with occurrence
// Can be null
"service_id": 691, // ID of service category associated with occurrence
// Can be null
"service_category_id": 300, // The URL to the logo image, if specified
// Can be null
"service_logo_url": "Some string", // The title of the service this event is about
// Cannot be null
"service_title": "Some string", // The description of the service this event is about
// Can be null
"service_description": "Some string", // The maximum number of attendees allowed
// Cannot be null
"service_group_size": 453, // The number of attendees actually visited the event
// Cannot be null
"attended_clients_count": 195, // Hours before occurrence starts at to
// Can be null
"restrict_to_book_in_advance_time_in_hours": 945, // Days before occurrence starts at to
// Can be null
"restrict_to_book_in_advance_time_in_days": 738, // Calculation of how much time until the booking is open
// Can be null
"seconds_until_booking_open": 486, // The club time zone
// Cannot be null
"time_zone": "Some string", // The position on the waiting list (1..N)
// Cannot be null
"position_on_waiting_list": 69, // true if waiting list is full
// Cannot be null
"waiting_list_full": true, // true if current user has joined this event
// Cannot be null
"is_joined": true, // true if current user has joined the waiting list of the session
// Cannot be null
"is_waiting": true, // true if the event is readonly and cannot be joined / awaited etc
// Cannot be null
"is_readonly": true, // true if current user has requsted this event, and it's not confirmed yet
// Cannot be null
"is_requested": true, // Version of occurrence
// Cannot be null
"lock_version": 465, // Returns true if occurrence has Livestream option
// Can be null
"is_online": true, // Returns Livestream origin (Zoom, youtube)
// Can be null
"livestream_origin": "Some string", // Return direct url to livestream resource
// Can be null
"livestream_url": "Some string", // Return livestream id for youtube if possible
// Can be null
"livestream_youtube_id": "Some string", // Return livestream id for vimeo if possible
// Can be null
"livestream_vimeo_id": "Some string", // Livestream available Prior in minutes
// Can be null
"livestream_available_prior": 991, // Livestream available After in minutes
// Can be null
"livestream_available_after": 727, // Show free spaces
// Can be null
"show_free_spaces": true, // Show whether the occurrence can be rated or not
// Can be null
"can_be_rated": true, // Show if it's allowed to be prompted
// Can be null
"can_be_prompted": true, // A list of actions this user is allowed to perform on this particular event
// Cannot be null
"actions": [ Occurrence::Action ], // The list of tag entities
// Cannot be null
"tags": [ Tag::Index ], // The list of tag entities
// Cannot be null
"service_tags": [ Tag::Index ] }

Occurrence::Action

        This enum represents possible actions that a client can perform on an occurrence.
{
// Join the occurrence as an attendee
// Cannot be null
"join" // Penalty-free cancellation
// Cannot be null
"cancel" // Leaving occurrence's waiting list
// Cannot be null
"leave" // Declining occurrence request
// Cannot be null
"decline" // Cancelling an occurrence with billing penalties applied
// Cannot be null
"late_cancel" // Enrolling onto waiting list
// Cannot be null
"wait" // Rate the attended occurrence
// Cannot be null
"rate" // Mark the occurrence as prompted
// Cannot be null
"prompt" }