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": 217,
// Include only locations belonging to a specific Region
// Can be null
"region_id": 67,
// Include only locations belonging to a specific Club
// Can be null
"club_id": 499,
// 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": 808,
// 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": 999,
// The number of items to include into response
// Cannot be null
"count": 812
}
,
// 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": 227
}
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": 516
}
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": 53,
// FKL ID of the user to log in (used when there are multiple users in the account)
// Can be null
"id": 507,
// 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::Users::TrainersController
This controller provides access to trainers APIs.
GET /api/unified/users/trainers/detailed
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": 553,
// Include only trainer belonging to the SDH with id passed
// Can be null
"service_working_time_id": 885,
// Returns trainers associated to the selected service
// Can be null
"service_id": 625,
// 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": 307,
// 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": 68,
// The number of items to include into response
// Cannot be null
"count": 963
}
}
{
// The detailed collection of trainers matching criteria and pagination settings
// Cannot be null
"trainers": [ Trainer::Show ],
// Total number of items
// Cannot be null
"count": 688
}
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": 972,
// Include only trainer belonging to the SDH with id passed
// Can be null
"service_working_time_id": 829,
// Returns trainers associated to the selected service
// Can be null
"service_id": 958,
// 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": 769,
// 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": 126,
// The number of items to include into response
// Cannot be null
"count": 372
}
}
{
// The collection of trainers matching criteria and pagination settings
// Cannot be null
"trainers": [ Trainer::Index ],
// Total number of items
// Cannot be null
"count": 435
}
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": 73,
// 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": 891,
// The number of items to include into response
// Cannot be null
"count": 745
}
}
{
// The list of service models matching filters and pagination settings
// Cannot be null
"colors": [ Service::Colors ],
// Total number of items
// Cannot be null
"count": 805
}
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": 543,
// Include only services provided by a specific trainer
// Can be null
"trainer_id": 194,
// Include only services provided within a specific location
// Can be null
"location_id": 194,
// Include only services belonging to the service category with id passed
// Can be null
"service_category_id": 801,
// Include only services belonging to the SDH with id passed
// Can be null
"service_working_time_id": 466,
// 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": 464,
// The number of items to include into response
// Cannot be null
"count": 135
}
}
{
// The list of service models matching filters and pagination settings
// Cannot be null
"services": [ Service::Index ],
// Total number of items
// Cannot be null
"count": 499
}
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": 430
}
{
// An extended version of the service model
// Can be null
"service": Service::Show
}
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": 333,
// 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": 710
}
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": 730,
// Optional Location ID to get custom prices specific to Sales Location
// Can be null
"location_id": 623
}
{
// 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": 819,
// The number of items to include into response
// Cannot be null
"count": 169
}
}
{
// 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": 905
}
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": 756,
// The number of items to include into response
// Cannot be null
"count": 191
}
}
{
// 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": 663
}
Api::Unified::Schedule::WorkingTimesController
This controller provides API endpoints for managing working time entities.
GET /api/unified/schedule/working_times
Fetches all the working hours visible to the current club, allowing filtering by multiple fields.
{
// Contains filters to limit response by specific criteria
// Can be null
"unified_filters":
{
// An ID of the user to filter by
// Can be null
"user_id": "Some string",
// An ID of the user to filter by
// Can be null
"trainer_id": "Some string",
// An Array of trainers ID to filter by
// Can be null
"trainer_ids": [ "An", "Array", "Of", "Strings/Integers" ],
// A group_id of user to filter by
// Can be null
"trainer_group_id": "Some string",
// Show working times after this datetime
// Can be null
"since": "2026-03-18T12:31:26Z",
// Show working times before this datetime
// Can be null
"till": "2026-03-18T12:31:26Z",
// An ID of the location to filter by
// Can be null
"location_id": "Some string",
// An array of locations ID to filter by
// Can be null
"blocked_location_id": [ "An", "Array", "Of", "Strings/Integers" ]
}
}
{
// The collection of working times matching criteria
// Cannot be null
"working_times": [ WorkingTime::Index ],
// Total number of items
// Cannot be null
"count": 944
}
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": "2026-03-18T12:31:26Z",
// The latest UTC time the occurrence can start at
// Cannot be null
"till": "2026-03-18T12:31:26Z",
// Optional id of the client required to be a part of the occurrence
// Can be null
"client_id": 858,
// Optional id of the location required to be a part of the occurrence
// Can be null
"location_id": 245,
// Returns occurrences for the specified sub location
// Can be null
"sub_location_id": 227,
// Optional id of the service required to be associated to an occurrence
// Can be null
"service_id": 156,
// Optional id of the service category required to be associated to a service associated to an occurrence
// Can be null
"service_category_id": 268,
// Optional id of the activity category required to be associated to a service associated to an occurrence
// Can be null
"activity_category_id": 913,
// 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": 386,
// 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": 560,
// The number of items to include into response
// Cannot be null
"count": 194
}
,
// 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": 311
}
{
// A list of occurrences matching filters and pagination criteria
// Cannot be null
"occurrences": [ Occurrence::Index ],
// Total number of items
// Cannot be null
"count": 487
}