Funxtion API (3.1.0)

Download OpenAPI specification:Download

Funxtion Development Team: development@funxtion.com

This OpenAPI specification describes how to use the Funxtion API, authenticate, use a refresh token, and gain access to content. Please contact us to receive credentials for accessing the API.

Logging In

So now you have credentials, but how do you use them?

In order to login, you'll need the credentials you've been issued. You can login to the portal to change your credentials, or call the password reset endpoint.

In order to retrieve a token, call the POST /auth/login endpoint, which will return two tokens: an access token and a refresh token. We have several scopes your token can request:

  • mobile: This scope is used by members to login to the mobile app and only allows reading of fitness content, calendar, and booking data. These tokens are valid for 4 hours.
  • platform: This scope is used to grant access to management functionality on the platform. These tokens are valid for 4 hours.

You'll also provide your code to the endpoint, which will grant access to your organization. Your code should reflect the name of the organization, e.g., "funxtion". If you don't have a code, please contact us.

If an authentication attempt is tried too many times, an unblock token will be provided, which can be used to unblock the account and try again. The unblock token is valid for 24 hours.

The refresh token can be used to request a new access token. The refresh token is valid for six months which can be revoked at any time by calling the POST /auth/token/revoke endpoint.

Filtering

and Pagination

Most of the list endpoints have pagination, filters, and ordering capabilities. Some of the response attributes will have ID references, e.g. goals in the endpoint for workouts These IDs can be found by either by getting the goal by id, or by listing the goals and search for it there. The same principle applies to

As an implementation best practice we suggest to cache the data of these supporting endpoints and handle the references in your application.

By default the results of this list endpoint is limited to 20 results per page. This limit can be modified by setting a filter[limit], e.g. filter[limit]=100. In this example the limit is set to 100. The maximum number of items you can have per page is capped to 250.

filter[offset] can be used in conjunction with a limit to fetch a specific page. The offset is the starting point within the results set. The offset divided by the limit, floored, is effectively the page index. By default it is set to 0. Increment this by the limit to retrieve each successive page.

filter[limit]=5&filter[offset]=15. This example has a limit of 5 items per page and it will display the 4th page (items 15-19).

Filtering

The list endpoints are also used to filter (search). This is accomplished by adding a query string filter. Examples:

  • filter[where][q][contains]=push
  • filter[where][q][contains]=bosu&filter[where][level][eq]=beginner The combined filters act as an logical 'AND'. You can add as many filters as you like.
  • filter[where][equipment][in]=1,2,3 allows you to filter exercises that uses equipment id 1, or 2, or 3. This operator acts as a logical inclusive 'OR'.
  • filter[where][equipment][and]=11,13 - allows you to filter exercises that uses equipment id 11 AND 13. This operator acts as a logical inclusive 'AND'.

Available operators are:

  • in (inclusive OR operator in which the values needs to be comma seperated)
  • contains (use the value as a substring of term you're searching for)
  • eq (must equals the value)
  • and (inclusive AND operator in which the values need to be comma separated)

Per list endpoint you can find which filters are available as well as some example requests.

Boolean filters

Note that when filtering on fields defined as booleans you need to pass the value as true/0 or true/1.

Ordering

Listing endpoints can be ordered in an ascending/descending direction. The format is filter[order][<fieldname>]=<direction>. Each endpoint has the definition of the sortable fields available.

Some examples are:

  • Order by name in an ascending direction: filter[order][name]=asc
  • Order by creation date in a descending direction: filter[order][created]=desc

Default ordering

By default the ordering is set to desc on the updated property of the entity. The exception is the Clubs listing endpoint which has a default ordering based on name.

Headers

Each request is required to have the Content-Type: application/json header. When consuming endpoints related to Content an Authorization header is required. Please refer to the Authentication and Authentication endpoints sections.

Response codes

Error codes

Depending on the error any of the following codes may be returned:

  • 400 Payload is missing required attributes. The request is missing attributes as defined by the specification.
  • 401 Authentication errors. This may happen due to several reasons, such as invalid credentials when trying to authenticate, an expired JWT token etc. You can find reason for the error in the response body.
  • 403 Insufficient privileges to access this resource. Your currently authenticated user is not allowed to perform the action.
  • 404 Resource not found. The requested resource cannot be found. You may have mistyped the id, or it might have been deleted.
  • 409 Conflict. In certain situations a conflict may arise. For example, when trying to update a resource to an invalid state. You can find the precise reason for the conflict in the response body.
  • 422 Validation Error. One or more of the request attributes are invalid. You can find the validation errors per attribute in the response body.
  • 429 Rate limit exceeded. There have been to many requests to the current endpoint.

Language

Each organization using the Funxtion API has a designated default language. Funxtion can additionally support multiple languages, allowing content to be accessed in any of these translated versions.

Default Behavior

By default, the Funxtion API will return responses in a single language determined by the Accept-Language HTTP request header. The API will return the requested resource in the specified language if available, otherwise in the default Organization language as a fallback.

For example, with Accept-Language: en, the response will be:

{
  "title": "hello!"
}

With Accept-Language: nl, the response will be:

{
  "title": "hallo!"
}

Multiple Languages

API resources can be fetched optionally in multiple languages simultaneously using the lang query parameter with comma-separated language codes:

GET https://api.funxtion.com/v3/resource/:id?lang=en,nl,pl,ar-SA

When multiple languages are requested, MultiLangString fields will be returned as objects with language codes as keys:

{
  "title": {
    "default": "hello!",
    "en": "hello!",          
    "nl": "hallo!",
    "pl": "Witam!",
    "ar-SA": "مرحبًا"
  }
}

The default key always contains the value in the Organization's default language.

Note: When making multi-language API requests, MultiLangString fields are always returned as literal strings in pagination API endpoints but they are returned as multi-language objects for non-pagination API endpoints.

Note: Requesting multiple languages may impact performance as more data needs to be fetched and returned, so the recommended approach is to request resources in a single language and only use multi-language requests if absolutely necessary or response times are not a concern.

For an exact list of supported languages, reach our customer support team at support@funxtion.com

Missing Translations

In the case of a missing translation, the locale key will be presented the multi-language object with an empty locale value, so you can safely fallback to presenting the "default" key if the language you want to present is unavailable for that string.

E.g: Example of response for an Organization with en as default language, where the resource translation is not available in Polish:

{
  "title": {
    "default": "hello!",
    "en": "hello!",
    "pl": ""
  }
}

Thumbnails

The Funxtion API returns image urls in the form of signed urls that refer to the original image in full size as uploaded by Content Managers.

In order to generate a reduced and more compact representation of images a Thumbnails API is provided.

Retrieving thumbnails

Image thumbnails can be generated by appending dynamically a set of query parameters to the returned image urls in http API responses.

The basic thumbnail url structure looks like this:

Sample link urls:

Query Parameters:

name required type description
v yes string The image version hash in md5 format
Policy yes string The signed url policy in base64 format
style yes string The aspect ratio name (one of: portrait (2:3), landscape (7:5), widescreen (16:9) or square (1:1))
size no string The size scale to apply to the image (one of: xs, s, m or l)

Remarks:

  • In case size parameter is not included as part of the url, the default size will be the original image size as uploaded by Content Managers.

Supported image extensions:

  • jpg / jpeg
  • bmp
  • png
  • tif / tiff
  • gif (animated)
  • webp (animated)

Table of mappings between image styles and widths for non-animated images:

Name style width
Extra Small xs 440 px
Small s 680 px
Medium m 1400 px
Large l 2800 px

Table of mappings between image styles and widths for animated images (.gif & webp files):

Name style width
Extra Small xs 240 px
Small s 360 px
Medium m 480 px
Large l 600 px

Webhooks

Registering a webhook listener

At this moment Webhooks are in closed beta. If you would like access, please contact our customer support team at support@funxtion.com

Consuming webhooks

Available resources

There are webhooks available for all the resource defined within the Content section. These webhooks will be dispatched whenever a create, update or delete action is performed on the resource.

Webhook payloads

Each webhook payload will contain a collection of created/edited/deleted resources, in which each resource contains:

  • The event which triggered the dispatch which can be any of:
    • created
    • updated
    • deleted
  • The name of the effected resource (e.g. Exercise, Equipment)
  • Data which is structurally identical to to the details endpoint such as Get Exercise, Get Equipment

For example, when an exercise gets updated, the webhook payload will like the following:

[
  {
    "event": "updated",
    "entity": "Exercise",
    "data": {
      "id": "19d2b9dd-da17-4cd0-9e44-033f4ef4891c",
      "name": "Reverse Marching Planks",
      "slug": "reverse-marching-planks",
      "summary": "Reverse Marching Planks",
      ...etc
    }
  }
]

Integrations

The Funxtion API offers integration options with 3rd party content providers allowing tenants to effortlessly load external content into their database. Each integrations consists of two parts: the general API integration itself (integration) and the particular settings for this integration per tenants (integration connection).

Integration

This is an integration as provided by the API. This could be anything from Les Mills, Hyrox, etc. Each integration has one or more settings which need to be configured per tenant. These could be API keys, custom connection headers etc.

Integration connection

This is the tenant-specific implementation of an integration. Each connection will have one or more settings which refers back to the settings of the integration used.

List of 3rd party content providers supported

Auth

Everything regarding authentication. Getting a JWT token or a JWT refresh token. The token needs to put into the Authorization header to interact with the content of our API.

Get a JSON Web Token

Obtain a JSON Web Token based on authentication credentials.

  • The token can be used by setting the header Authorization: Bearer <token> for all api requests.
  • The token is valid for 1 hour by default.
  • A new token can be obtained using the refresh_token via endpoint POST /auth/token/refresh.
  • Remember to revoke the refresh token when you're logging the user out or when your no longer need it.
header Parameters
X-Scope
required
string
Enum: "mobile" "platform"

Application scope header used to identify the intended client for a token

X-Unblock-Token
string

Token to unblock rate limiter

Request Body schema: application/json
username
required
string <email>
password
required
string <password> non-empty
code
string

Organization Code

Responses

Response Schema: application/json
token
string
refresh_token
string

Request samples

Content type
application/json
{
  • "username": "admin@funxtion.com",
  • "password": "NeWStRonGPaSsWoRd",
  • "code": "funxtion"
}

Response samples

Content type
application/json

Access token with 'mobile' scope

{
  • "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpYXQiOjE2NjQzNTg3NDAsImV4cCI6MTY2NDM3MzE0MCwicm9sZXMiOnsiZ2VuZXJhbCI6WyJtZW1iZXIiXSwiY2x1YiI6W119LCJlbWFpbCI6Im1lbWJlckBmdW54dGlvbi5jb20iLCJpc0Z1bnh0aW9uVXNlciI6dHJ1ZSwidXNlcklkIjoxMTIsIm9yZ0lkIjo3LCJjb2RlIjoiZnVueHRpb24iLCJzY29wZSI6Im1vYmlsZSIsImV4dGVybmFsSWQiOiIiLCJidW5kbGVzIjpbImFsbCJdLCJzdWJzY3JpcHRpb25zIjpbXX0.QsqIvJAHxsR2bQhpNvHakh4wQ3bONDeqc_G8G77pux9nRaOdeAYgoIjBhLzPQ8HKVtxVq58Zly3dHsn2MEqRaAHGH7AgNTXYRMePdYhE7-jkaL9PHp-G3lk1eF2HdlAgyz124pOYTMrHxs9i79-C9rJ01GTv2tys8r86ZmteMqf7RK7QLe_9YKSjUo6Lfz3KnmZ8XsmdVBx6ILeXcphms_SpzM9rmGig2uoh3WbXP3L1dq4XMBdUHNi4k7Zhcy5xeMvdxgGmQ6hijHEqiKyxb64AnebR3SkDMF7Rh8349Xy9u7ydV5Up9yllSx266StwV95vcuxsg9VxUiwaMnQqa0uitSVQcxNXqfJRadbAm7cQIVEGFfi3rf1Fh_tm0JPQBizc4ayDsA4dJTqHRABR74t3jWtqFHwBuUZTHCJiRRzY9tZ2AL5Ooj-_-icdel1wbZBqY8KMn23Zq8uusp7f7N0_u5EmzewDV3kgvXlRmI862KVIhtSNCbjxxgl7tf3kH7EhtvaJ8ypLek_m5j8_zE6bo3TyRJhO6EjpDqn1OhwHeik3nNE_2RBZhVpZT_D-vc9rdGrODFhvSe-HlnJsIoMpA3rfLEICovmKLp1aFZdc61ukf90OYa7S8XobM595voY-FBO3fyhwCoBgSa3m5Esnt89xad6Sz6nbv83zaVY",
  • "refresh_token": "80b994b617c9a7820033c6b927c4895ce292668dff37f36b434f2557f11d3016d2bac8475094f281481d782bb09a00f2a6242b55192dc53aeac97fedf0743280"
}

Exchange a refresh token.

Exchange a refresh token for a new JWT token and refresh token. After this exchange the old refresh token is no longer valid.

Request Body schema: application/json
refresh_token
string

Responses

Response Schema: application/json
token
string
refresh_token
string

Request samples

Content type
application/json
{
  • "refresh_token": "80b994b617c9a7820033c6b927c4895ce292668dff37f36b434f2557f11d3016d2bac8475094f281481d782bb09a00f2a6242b55192dc53aeac97fedf0743280"
}

Response samples

Content type
application/json

Access token with 'mobile' scope

{
  • "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpYXQiOjE2NjQzNTg3NDAsImV4cCI6MTY2NDM3MzE0MCwicm9sZXMiOnsiZ2VuZXJhbCI6WyJtZW1iZXIiXSwiY2x1YiI6W119LCJlbWFpbCI6Im1lbWJlckBmdW54dGlvbi5jb20iLCJpc0Z1bnh0aW9uVXNlciI6dHJ1ZSwidXNlcklkIjoxMTIsIm9yZ0lkIjo3LCJjb2RlIjoiZnVueHRpb24iLCJzY29wZSI6Im1vYmlsZSIsImV4dGVybmFsSWQiOiIiLCJidW5kbGVzIjpbImFsbCJdLCJzdWJzY3JpcHRpb25zIjpbXX0.QsqIvJAHxsR2bQhpNvHakh4wQ3bONDeqc_G8G77pux9nRaOdeAYgoIjBhLzPQ8HKVtxVq58Zly3dHsn2MEqRaAHGH7AgNTXYRMePdYhE7-jkaL9PHp-G3lk1eF2HdlAgyz124pOYTMrHxs9i79-C9rJ01GTv2tys8r86ZmteMqf7RK7QLe_9YKSjUo6Lfz3KnmZ8XsmdVBx6ILeXcphms_SpzM9rmGig2uoh3WbXP3L1dq4XMBdUHNi4k7Zhcy5xeMvdxgGmQ6hijHEqiKyxb64AnebR3SkDMF7Rh8349Xy9u7ydV5Up9yllSx266StwV95vcuxsg9VxUiwaMnQqa0uitSVQcxNXqfJRadbAm7cQIVEGFfi3rf1Fh_tm0JPQBizc4ayDsA4dJTqHRABR74t3jWtqFHwBuUZTHCJiRRzY9tZ2AL5Ooj-_-icdel1wbZBqY8KMn23Zq8uusp7f7N0_u5EmzewDV3kgvXlRmI862KVIhtSNCbjxxgl7tf3kH7EhtvaJ8ypLek_m5j8_zE6bo3TyRJhO6EjpDqn1OhwHeik3nNE_2RBZhVpZT_D-vc9rdGrODFhvSe-HlnJsIoMpA3rfLEICovmKLp1aFZdc61ukf90OYa7S8XobM595voY-FBO3fyhwCoBgSa3m5Esnt89xad6Sz6nbv83zaVY",
  • "refresh_token": "80b994b617c9a7820033c6b927c4895ce292668dff37f36b434f2557f11d3016d2bac8475094f281481d782bb09a00f2a6242b55192dc53aeac97fedf0743280"
}

Revoke a refresh token

Revoke the JWT refresh token. This will make the refresh token invalid and the user will need to login again.

Request Body schema: application/json
refresh_token
string

Responses

Request samples

Content type
application/json
{
  • "refresh_token": "80b994b617c9a7820033c6b927c4895ce292668dff37f36b434f2557f11d3016d2bac8475094f281481d782bb09a00f2a6242b55192dc53aeac97fedf0743280"
}

Response samples

Content type
application/json
{
  • "code": "401",
  • "message": "Invalid credentials."
}

Create Integration API Access Token

You can create a long-lived machine-to-machine token attached to the organization. This token is to be used when consuming data using a server-to-server communication setup.

Create an Integration API Access Token.

  • The token is returned as a JSON Web Token (JWT).
  • The token can be used in requests headers as Authorization: Bearer <token>.
  • The token can be revoked by calling DELETE /auth/integration/token/{id}

Restrictions:

  • An Organization has a limit on the maximum number of Integration Api Tokens that can be created (default: 10).
  • The token has 1 year expiration.
  • The token has a pre-defined scope and permissions: read-only for /v3/content/... related API endpoints.
Authorizations:
BearerAuth

Responses

Response Schema: application/json
token
string
refresh_token
string

Response samples

Content type
application/json
{
  • "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE2ODc2MzY1MTUsImV4cCI6MTY4ODYzNjUxNSwianRpIjoiMDE4OTJhOTQtNjVjYS03MjM4LWJjNzQtNDllZjdmZmFiMTYyIiwiZW1haWwiOiIwMTg5MmE5NC02NWNhLTcyMzgtYmM3NC00OWVmN2ZmYWIxNjIuYXBpX2NsaWVudEBmdW54dGlvbi5jb20iLCJzY29wZSI6ImFwaS1jbGllbnQiLCJvcmdJZCI6MSwiY29kZSI6ImZ1bnh0aW9uIn0.bo3r4I9uw7IzA-5azZvHjbCcnGfKcheC9IEkhLtpBI0"
}

Delete Integration API Access Token

Delete an Integration API Access Token

Authorizations:
BearerAuth
path Parameters
id
required
string

Token ID

Responses

Response samples

Content type
application/json
{
  • "code": "401",
  • "message": "Invalid credentials."
}

Content

The Funxtion platform is a great repository of resources, ranging from single exercises, workouts, training plans, on-demand video content, content packages, instructor data, and more, and all of it is accessible through Funxtion’s Open API. There are also supporting endpoints which allow the retrieval of more specific content, based on goals, equipment, instructor, content package, and more, by way of specific IDs.

List Exercises

An exercise is the basic building block of any workout. This object consists of a singular movement, done with or without equipment, which is retrievable in plain image, GIF, or MP4 format.

The List Exercises endpoint returns a simplified list of all exercise objects.

Each returned Exercise contains some basic information about the exercise, such as the links to video, GIF, and image, exercise name, level of difficulty, gender of the person performing the exercise, orientation (if applicable), muscle groups exercised, equipment, and associated metrics goals (see response example).

To retrieve the full exercise data (including steps, use the Get an exercise endpoint.

Dependencies

This endpoint depends on the following endpoints to resolve ids:

Filtering and Pagination

This endpoint supports pagination, filtering and ordering. Filtering is accomplished by adding a query string filter. For example:

  • filter[where][q]=barbell - Filter Exercises by a substring match on searchable fields Exercise name or Equipment Name.
  • filter[where][name][contains]=chest press - Filter Exercises by a substring match on a specific field.
  • filter[where][q]=bosu&filter[where][level]=beginner. The combined filters act as an logical 'AND'. You can add as many filters as you like.
  • filter[where][equipment][in]=1,2,3 - Filter exercises by id 1, or 2, or 3. This operator acts as a logical inclusive 'OR'.
  • filter[where][equipment_brands]=1,2,3 - Filter exercises by equipment brands id 1, or 2, or 3. This operator acts as a logical inclusive 'OR'.
  • filter[where][muscle_groups][and]=11,13 - Filter exercises by Muscle Groups Ids 11 AND 13. This operator acts as a logical inclusive 'AND'.

Available properties for filtering

  • q (keyword matching exercise name or equipment name)
  • id (comma seperated list of IDs)
  • orientation (left, right, alternating)
  • level (beginner, intermediate, advanced)
  • equipment (comma seperated IDs for equipment)
  • equipment_brands (comma seperated IDs for equipment brands)
  • muscle_groups (comma seperated IDs for muscle groups)
  • types (comma seperated IDs for types)
  • gender (male, female, duo) - Type of instructor gender. Will be a different picture depending on the gender

Available properties for ordering

  • name
  • orientation
  • level
  • created
  • updated
Authorizations:
BearerAuth
query Parameters
object (FilterQuery)

Query filter object

header Parameters
Accept-Language
string
Example: nl, en-US;q=0.9, en;q=0.8

Which languages the client is able to understand, and which locale variant is preferred.

E.g: nl, en-US;q=0.9, en;q=0.8 *

Responses

Response Schema: application/json
total
required
integer

Total number of results

required
Array of objects (ExercisePreview)

Response samples

Content type
application/json
{}

Get an exercise

An exercise is the basic building block of any workout. This object consists of a singular movement, done with or without equipment, which is retrievable in plain image, GIF, or MP4 format. By using this endpoint, you can retrieve the full details of an exercise. This includes the steps towards performing the exercise.

This endpoint returns the full details of a single exercise, compared to the limited information you get from the list exercises. The exercise ID, which is an UUID, is part of the path.

Dependencies

This endpoint depends on the following endpoints to resolve ids:

Authorizations:
BearerAuth
path Parameters
id
required
string <uuid>

Exercise ID

query Parameters
lang
string
Example: lang=en,nl,pl

List of comma-separated language locales a client is requesting a resource.

header Parameters
Accept-Language
string
Example: nl, en-US;q=0.9, en;q=0.8

Which languages the client is able to understand, and which locale variant is preferred.

E.g: nl, en-US;q=0.9, en;q=0.8 *

Responses

Response Schema: application/json
id
required
string <uuid>
required
string or MultiLangString (object)

Exercise name

slug
required
string or null (FieldSlug) >= 3 characters ^[a-z0-9]+(?:-[a-z0-9]+)*$
Default: null

Resource Slug.

This field will be generated in case is submitted as null

level
required
string (FitnessLevel)
Enum: "beginner" "intermediate" "advanced"

The fitness level required to perform the activity

gender
required
string (Instructor(s) Gender)
Enum: "male" "female" "duo"
orientation
string or null (ExerciseOrientation)
Enum: "left" "right" "alternating"

Exercise Orientation

muscle_groups
required
Array of integers <int32> [ items <int32 > ]

List of Muscle Groups IDs involved in the Exercise. See Get Muscle Groups

equipment
required
Array of integers <int32> [ items <int32 > ]

List of Equipment IDs required to perform the Exercise. See Get Equipment

types
required
Array of integers <int32> [ items <int32 > ]

List of Content Category IDs. See Get Content Categories

Array of objects (Current translation status)

Translation status

required
object (Upload)

Video file

required
object (Upload)

GIF file

required
object (Upload)

Image file

required
Array of strings or MultiLangString (object)

List of Exercise Steps

Response samples

Content type
application/json
Example
{
  • "id": "19d2b9dd-da17-4cd0-9e44-033f4ef4891c",
  • "name": "Reverse Marching Planks",
  • "slug": "reverse-marching-planks",
  • "video": {},
  • "gif": {},
  • "image": {},
  • "gender": "female",
  • "types": [
    ],
  • "level": "intermediate",
  • "orientation": "left",
  • "steps": [
    ],
  • "muscle_groups": [
    ],
  • "equipment": [
    ]
}

List Workouts

A workout is an object comprised of an assemblage of exercises that have been grouped in a specific order. This endpoint allows you to fetch basic information about the Workout object, such as the image associated with the workout, level, goals, intended location for the workout, body parts and duration.

To retrieve the full workout data (including exercises inside the workout), use the Get a workout endpoint.

Dependencies

This endpoint depends on the following endpoints to resolve ids:

Filtering and Pagination

This endpoint supports pagination, filtering and ordering.

Filtering is accomplished by adding a query string filter. For example:

  • filter[where][q]=strong
  • filter[where][q]=strong&filter[where][level][eq]=beginner. The combined filters act as an logical 'AND'. You can add as many filters as you like.
  • filter[where][body_parts][in]=1,2,3 - Allows you to filter workouts that uses body_part id 1, or 2, or 3.
  • filter[where][body_parts][and]=1,2,3 - Allows you to filter workouts that uses body_part id 1 and 2 and 3. This operator acts as a logical inclusive 'OR'.
  • filter[where][template]=true - Filter workouts which are template
  • filter[where][template]=false - Filter workouts which are not template
  • filter[where][status]=default:published,fr:published - Filter workouts where the status is published in the default organization language OR in French
  • filter[where][status][and]=en:published,fr:published - Filter workouts where the status is published in both English AND French languages

Available properties for filtering

  • q (keyword matching name, goal, body part or content category)
  • id (comma seperated list of IDs)
  • goals (comma seperated ids). See Fitness Goals
  • body_parts (comma seperated ids). See Body Parts
  • level (beginner, intermediate, advanced)
  • duration (0-15, 15-30, 31-45, 46-60, 61+ minutes)
  • template (true, false) - A boolean field that defines the Workout as a Template (either true or false)
  • types (comma seperated ids). See Content Category
  • locations (home, club, outdoors)
  • content_packages string <uuid> - Comma seperated list of Content Package UUIDs. See Content Packages
  • status (draft, processing, published, unpublished, unavailable) - Content status (comma separated list of : pairs)

Available properties for ordering

  • title
  • level
  • duration
  • is_multizone
  • created
  • updated
Authorizations:
BearerAuth
query Parameters
lang
string
Example: lang=en,nl,pl

List of comma-separated language locales a client is requesting a resource.

object (FilterQuery)

Query filter object

header Parameters
Accept-Language
string
Example: nl, en-US;q=0.9, en;q=0.8

Which languages the client is able to understand, and which locale variant is preferred.

E.g: nl, en-US;q=0.9, en;q=0.8 *

Responses

Response Schema: application/json
total
required
integer

Total number of results

required
Array of objects (WorkoutPreview)

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Get a Workout

A workout is an object comprised of an assemblage of exercises that have been grouped in a specific order. This endpoint allows you to fetch more in-depth information about the Workout object. Using this endpoint, you can fetch the image associated with the workout, level, goals, intended location for the workout, body parts, duration, and - more importantly - the “phases” of the workout, which contain the structure, exercises, trainers notes, resistance goals, and other information relating to the workout and its parts (more on that below).

This endpoint returns the full details of a single workout, as opposed to the limited information you get from using the list workouts endpoint. The workout ID, which is an UUID, is part of the path.

This endpoint's response contains the attribute phases. There are a maximum of 3 phases, starting with Warm up, Training, and finally Cooldown.

Workout Phases

This endpoint's response contains the attribute phases. There are a maximum of 3 phases, starting with Warm up, Training, and finally Cooldown.

A phase can contain multiple types of workouts:

  • single-exercises. Exercises can be combined into multiple sets with different metrics connected to it.
  • superset. The concept of a superset is to perform 2 exercises back to back, followed by a short rest (but not always).
  • circuit-time. A time-based circuit is a combination of exercises performed with a prescribed work-rest interval. Each round can have a different work-rest interval and/or different exercises.
  • circuit-reps. A repetition-based circuit is a combination of exercises performed with short rest periods between them for a set number of repetitions. Each round can have a different number of reps, rest interval, and/or exercises.
  • amrap AMRAP is short for 'as many reps as possible'. Participants need to complete as many repetitions of the given exercise sequence in a set amount of time. The total number of repetitions completed is the participant's score.
  • rft RFT is short for 'rounds for time'. Participants need to complete the set amount of rounds and reps as soon as possible. A round is a sequence of all exercises. The time it takes the participants to complete the set number of rounds is their score.
  • emom EMOM is short for 'every minute on the minute'. In this type of workout, the participant has to complete the exercises at the start of every minute for a set number of minutes. Each minute can have different exercises with different values.

Each of these workout types are a bit different. To see the difference, have a close look in the response sample. All workout types are represented throughout the three phases.

Dependencies

This endpoint depends on the following endpoints to resolve ids:

Authorizations:
BearerAuth
path Parameters
id
required
string <uuid>

Workout ID

query Parameters
lang
string
Example: lang=en,nl,pl

List of comma-separated language locales a client is requesting a resource.

training-plan
string <uuid>

Parent training plan id

header Parameters
Accept-Language
string
Example: nl, en-US;q=0.9, en;q=0.8

Which languages the client is able to understand, and which locale variant is preferred.

E.g: nl, en-US;q=0.9, en;q=0.8 *

Responses

Response Schema: application/json
id
required
string <uuid>
required
string or MultiLangString (object)

Title

slug
required
string or null (FieldSlug) >= 3 characters ^[a-z0-9]+(?:-[a-z0-9]+)*$
Default: null

Resource Slug.

This field will be generated in case is submitted as null

gender
required
string (Target Gender for a Fitness activity)
Enum: "male" "female" "non-binary"
level
required
string (FitnessLevel)
Enum: "beginner" "intermediate" "advanced"

The fitness level required to perform the activity

types
required
Array of integers <int32> [ items <int32 > ]

List of Content Category IDs involved in the workouts. See List Content Category.

goals
required
Array of integers <int32> [ items <int32 > ]

List of Goal IDs involved in the workouts. See List Fitness Goals

body_parts
required
Array of integers <int32> [ items <int32 > ]

List of Body Parts IDs involved in the workouts. See Get Body Parts

locations
required
Array of strings (Location)
Items Enum: "home" "club" "outdoor"

List of Locations

duration
required
string (Duration)
Enum: "0-15" "16-30" "31-45" "46-60" "61+"

Duration range in minutes

estimated_duration
integer <int32>

The number of minutes as integer for workout duration

template
boolean
Default: false

Whether a Workout is a template or a regular Workout

content_packages
Array of strings <uuid>

List of Content Package IDs

Array of objects (Current translation status)

Translation status

required
object (ContentStatus)

Content Status for multiple languages

created_at
required
string <date-time>

Creation date

updated_at
required
string <date-time>

Last modification date

published_at
string <date-time>

Publication date

required
string or MultiLangString (object)

Description

required
object (Upload)

Workout Image

required
Array of objects (WorkoutPhase)

Sequence of Workout Phases

Response samples

Content type
application/json
Example
{
  • "id": "5fe67162-0a29-480a-adde-dad7ea3806af",
  • "title": "My Workout #1",
  • "slug": "my-workout-1",
  • "description": "Description about the Workout",
  • "image": {},
  • "gender": "female",
  • "level": "beginner",
  • "duration": "16-30",
  • "types": [
    ],
  • "goals": [
    ],
  • "body_parts": [
    ],
  • "locations": [
    ],
  • "status": {
    },
  • "phases": [
    ],
  • "content_packages": [
    ],
  • "created_at": "2021-12-08T15:14:01.751Z",
  • "updated_at": "2021-12-08T15:14:01.751Z",
  • "published_at": "2021-13-08T15:14:01.751Z"
}

List Training Plans

A training plan is an object that is comprised of a selection of workouts. These workouts are distributed across a number of weeks and/or days. This endpoint allows you to fetch the basic information about a training plan. More in-depth information (including the workouts contained inside the training plan) may be fetched using the Get Training Plan endpoint.

Dependencies

This endpoint depends on the following endpoints:

Filtering and Pagination

This endpoint supports pagination, filtering and ordering.

Filtering is accomplished by adding a query string filter. For example:

  • filter[where][goals][in]=1,2 - Filter by goal ids 1 or 2.
  • filter[where][goals][eq]=3&filter[where][locations][eq]=home - Filter by goal id 3 and home location.
  • filter[where][level][eq]=beginner - Filter by beginner level.
  • filter[where][types][in]=1,2 - Filter by category ids 1 or 2.
  • filter[where][days_total][gte]=10 - Filter by more than 10 training days.
  • filter[where][weeks_total][gte]=2 - Filter by a duration of 2 or more weeks.
  • filter[where][max_days_per_week][eq]=2 - Filter by a maximum of 2 training days per week.
  • filter[where][max_days_per_week][gte]=1&filter[where][max_days_per_week][lte]=3 - Filter by a maximum of training days per week between 1 and 3 (inclusive).
  • filter[where][status]=en:published,fr:published - Filter training plans by published status in English OR French published status
  • filter[where][status][and]=en:published,fr:published - Filter training plans where the content status is published in English AND French

Available properties for filtering

  • q (keyword matching name, goal or content category)
  • id (comma seperated list of IDs)
  • goals (comma seperated ids)
  • types (comma seperated ids)
  • level (beginner, intermediate, advanced)
  • locations (club, home, outdoor)
  • days_total integer (number of total training days)
  • weeks_total integer (number of weeks of training plans)
  • max_days_per_week integer (maximum of training days per week. min=1 max=7)
  • content_packages string <uuid> - Comma seperated list of Content Package UUIDs. See Content Packages
  • status (draft, processing, published, unpublished, unavailable) - Content status (comma separated list of : pairs)

Available properties for ordering

  • title
  • level
  • weeks_total
  • days_total
  • max_days_per_week
  • created
  • updated
  • has_content_packages
Authorizations:
BearerAuth
query Parameters
object (FilterQuery)

Query filter object

header Parameters
Accept-Language
string
Example: nl, en-US;q=0.9, en;q=0.8

Which languages the client is able to understand, and which locale variant is preferred.

E.g: nl, en-US;q=0.9, en;q=0.8 *

Responses

Response Schema: application/json
total
required
integer

Total number of results

required
Array of objects (TrainingPlanPreview)

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Get Training Plan

A training plan is an object that is comprised by a selection of activities (such as workouts or on-demand video content). These activities are distributed across a number of weeks and/or days. This endpoint allows you to fetch in-depth information about a training plan, including activities that are included inside the training plan per week and per day. For a more detailed explanation, read below.

The response of this endpoint will retrieve more details of the training plan compared to getting a list of training plans. The main difference is the additional attribute: weeks.

The weeks attribute contains an array of days, which in turn contains an array of activities.

An activity is a workout, or an on-demand video. You'll only receive a reference ID to the activity, which will allow you to fetch the resource.

If the activity is of type workout, then you'd need to do a request to the get workout endpoint to retrieve the details of that workout. The same principle applies to an on-demand type, but then call the get on-demand endpoint to retrieve the video details.

For an example of the structure of the response, please have a detailed look at the example response in the right column.

Dependencies

This endpoint depends on the following endpoints:

Authorizations:
BearerAuth
path Parameters
id
required
string <uuid>

The Training Plan ID

query Parameters
lang
string
Example: lang=en,nl,pl

List of comma-separated language locales a client is requesting a resource.

header Parameters
Accept-Language
string
Example: nl, en-US;q=0.9, en;q=0.8

Which languages the client is able to understand, and which locale variant is preferred.

E.g: nl, en-US;q=0.9, en;q=0.8 *

Responses

Response Schema: application/json
id
required
string <uuid>
required
string or MultiLangString (object)

Title

slug
required
string or null (FieldSlug) >= 3 characters ^[a-z0-9]+(?:-[a-z0-9]+)*$
Default: null

Resource Slug.

This field will be generated in case is submitted as null

required
string or MultiLangString (object)

Description

goals
required
Array of integers <int32> [ items <int32 > ]

List of Fitness Goal IDs. See here.

types
required
Array of integers <int32> [ items <int32 > ]

List of Content Category IDs. See here.

level
required
string (FitnessLevel)
Enum: "beginner" "intermediate" "advanced"

The fitness level required to perform the activity

locations
required
Array of strings (Location)
Items Enum: "home" "club" "outdoor"

List of Locations

content_packages
Array of strings <uuid>

List of Content Package IDs

Array of objects (Current translation status)

Translation status

required
object (ContentStatus)

Content Status for multiple languages

created_at
required
string <date-time>

Creation date

updated_at
required
string <date-time>

Last modification date

published_at
string <date-time>

Publication date

required
Array of objects (TrainingPlanWeek)

Training Plan Weeks

required
object (Upload)

Image file

Response samples

Content type
application/json
Example
{
  • "id": "afa11eb9-c43d-4b09-b7e8-6befc61d7c26",
  • "title": "My Training Plan #1",
  • "slug": "my-training-plan-1",
  • "description": "Description about the Training Plan",
  • "image": {},
  • "goals": [
    ],
  • "types": [
    ],
  • "level": "beginner",
  • "locations": [
    ],
  • "translation_status": [
    ],
  • "status": {
    },
  • "created_at": "2021-12-08T15:14:01.751Z",
  • "updated_at": "2021-12-08T15:14:01.751Z",
  • "published_at": "2021-13-08T15:14:01.751Z",
  • "weeks": [
    ],
  • "content_packages": [
    ]
}

List Equipment

Equipment refers to the physical gym materials, exercise tools, or machines needed to be able to perform an exercise. This can be something like a barbell, treadmill, kettlebell, mini-band, etc. There is also a “no-gear” ID for exercises that do not require any equipment (such as bodyweight exercises).

This endpoint returns a paginated list of available fitness equipment types such as such as barbell, treadmill etc etc. The results can used be for further filtering on list endpoints.

Dependencies

This endpoint depends on the following endpoints:

Filtering and Pagination

This endpoint supports pagination, filtering and ordering.

Available properties for filtering

  • id int - id of the body part
  • name string - name of the body part
  • slug string - slug name of the body part

Available properties for ordering

  • id
  • name
  • slug
  • brand
Authorizations:
BearerAuth
query Parameters
object (FilterQuery)

Query filter object

header Parameters
Accept-Language
string
Example: nl, en-US;q=0.9, en;q=0.8

Which languages the client is able to understand, and which locale variant is preferred.

E.g: nl, en-US;q=0.9, en;q=0.8 *

Responses

Response Schema: application/json
total
required
integer

Total number of results

required
Array of objects (EquipmentPreview)

Response samples

Content type
application/json
{
  • "total": 0,
  • "data": [
    ]
}

Get Equipment

Equipment refers to the physical gym materials, exercise tools, or machines needed to be able to perform an exercise. This can be something like a barbell, treadmill, kettlebell, mini-band, etc. There is also a “no-gear” ID for exercises that do not require any equipment (such as bodyweight exercises).

The Equipment ID is included inside the exercise object. This equipment ID can be used to retrieve additional details, such as the name, image, description of the equipment, and equipment categories through this endpoint.

Dependencies

This endpoint depends on the following endpoints:

Authorizations:
BearerAuth
path Parameters
id
required
integer

Equipment ID

query Parameters
lang
string
Example: lang=en,nl,pl

List of comma-separated language locales a client is requesting a resource.

header Parameters
Accept-Language
string
Example: nl, en-US;q=0.9, en;q=0.8

Which languages the client is able to understand, and which locale variant is preferred.

E.g: nl, en-US;q=0.9, en;q=0.8 *

Responses

Response Schema: application/json
id
required
integer <int32>
name
required
string

Equipment name

slug
string or null (FieldSlug) >= 3 characters ^[a-z0-9]+(?:-[a-z0-9]+)*$
Default: null

Resource Slug.

This field will be generated in case is submitted as null

brand_id
required
integer <int32>

Equipment Brand ID

categories
required
Array of integers <int32> non-empty [ items <int32 > ]

List of Equipment Categories IDs

required
string or MultiLangString (object)

Long description

required
object (Upload)

Equipment image file

Response samples

Content type
application/json
{
  • "id": 3,
  • "name": "No Gear",
  • "slug": "no-gear",
  • "image": {},
  • "description": "Equipment description",
  • "categories": [
    ],
  • "brand_id": 2
}

List Equipment Brands

List Equipment Brands

Authorizations:
BearerAuth
query Parameters
object (FilterQuery)

Query filter object

header Parameters
Accept-Language
string
Example: nl, en-US;q=0.9, en;q=0.8

Which languages the client is able to understand, and which locale variant is preferred.

E.g: nl, en-US;q=0.9, en;q=0.8 *

Responses

Response Schema: application/json
total
required
integer

Total number of results

required
Array of objects (EquipmentBrandPreview)

Response samples

Content type
application/json
{}

List Fitness Equipment Categories

A Fitness Equipment Category is an object representing a fitness goal for which equipment is used. For example, equipment such as a threadmill could fall under the Fitness Equipment Category “Cardio”.

This endpoint returns a paginated list of available fitness equipment categories types, such as such as cardio, strength, boxing, and more. The results can used be for filtering on other list endpoints.

Filtering and Pagination

This endpoint supports pagination, filtering and ordering.

Filtering is accomplished by adding a query string filter. For example:

  • filter[where][id][in]=1,2
  • filter[where][name][eq]=cardio

You can use the following filters:

  • id (id of the category)
  • name (name of the category)
  • slug (slug name of the category)
Authorizations:
BearerAuth
query Parameters
object (FilterQuery)

Query filter object

header Parameters
Accept-Language
string
Example: nl, en-US;q=0.9, en;q=0.8

Which languages the client is able to understand, and which locale variant is preferred.

E.g: nl, en-US;q=0.9, en;q=0.8 *

Responses

Response Schema: application/json
total
required
integer

Total number of results

required
Array of objects (EquipmentCategoryPreview)

Response samples

Content type
application/json
{}

List Fitness Goals

A fitness goal refers to a goal of a training activity. This can be something along the lines of “build muscle”, “lose weight”, etc.

This endpoint returns a paginated list of available fitness goals. The results can used be for further filtering on list endpoints.

To retrieve data on specific Fitness goals, use the Get Fitness Goal endpoint.

Filtering and Pagination

This endpoint supports pagination, filtering and ordering.

Filtering is accomplished by adding a query string filter. For example:

  • filter[where][id][in]=1,2
  • filter[where][name][eq]=tone

You can use the following filters:

  • id (id of the goal)
  • name (name of the goal)
  • slug (slug name of the goal)
Authorizations:
BearerAuth
query Parameters
object (FilterQuery)

Query filter object

header Parameters
Accept-Language
string
Example: nl, en-US;q=0.9, en;q=0.8

Which languages the client is able to understand, and which locale variant is preferred.

E.g: nl, en-US;q=0.9, en;q=0.8 *

Responses

Response Schema: application/json
total
required
integer

Total number of results

required
Array of objects (FitnessGoal)

Response samples

Content type
application/json
{
  • "total": 0,
  • "data": [
    ]
}

Get a Fitness Goal

A fitness goal refers to a goal of a training activity. This can be something along the lines of “build muscle”, “lose weight”, etc. The is the same information returned by the List Fitness Goals endpoint. Unlike the previous endpoint (which lists all possible Fitness Goals), this endpoint retrieves a specific Fitness Equipment Category. This is done by defining the ID in the request made.

Authorizations:
BearerAuth
path Parameters
id
required
integer

Fitness Goal ID

query Parameters
lang
string
Example: lang=en,nl,pl

List of comma-separated language locales a client is requesting a resource.

header Parameters
Accept-Language
string
Example: nl, en-US;q=0.9, en;q=0.8

Which languages the client is able to understand, and which locale variant is preferred.

E.g: nl, en-US;q=0.9, en;q=0.8 *

Responses

Response Schema: application/json
id
required
integer <int32>
required
string or MultiLangString (object)

Name

slug
required
string or null (FieldSlug) >= 3 characters ^[a-z0-9]+(?:-[a-z0-9]+)*$
Default: null

Resource Slug.

This field will be generated in case is submitted as null

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "slug": null
}

List Instructors

An instructor refers to an individual featured in On-Demand content. Using this endpoint, you can fetch a list of all instructors. Each entry contains information such as their unique id, name, gender, as well as a photo of the instructor. The instructor’s id can be used to filter On-Demand content.

Authorizations:
BearerAuth
query Parameters
lang
string
Example: lang=en,nl,pl

List of comma-separated language locales a client is requesting a resource.

object (FilterQuery)

Query filter object

Responses

Response Schema: application/json
total
required
integer

Total number of results

required
Array of objects (Instructor)

Response samples

Content type
application/json
{
  • "total": 3,
  • "data": [
    ]
}

Get Instructor

An instructor refers to an individual featured in On-Demand content. Using this endpoint, you can fetch the information of a specific instructor. The entry contains information such as their name, gender, as well as a photo of the instructor.

Authorizations:
BearerAuth
path Parameters
id
required
string <uuid>

Instructor ID

Responses

Response Schema: application/json
user_id
string or null <uuid>

The ID of the User related to the Instructor

name
required
string

The name of the instructor

gender
string (Instructor(s) Gender)
Enum: "male" "female" "duo"
id
required
string <uuid>

Instructor ID

object (Upload)

Photo of the instructor

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "user_id": "497f6eca-1111-1111-bfeb-53cbbbba6f08",
  • "name": "Thiago Zuado",
  • "gender": "male",
  • "photo": {}
}

List On-Demand

On-Demand refers to a streamable media object (video content). This endpoint allows you to list all available on-demand items, along with basic information pertaining to each On-Demand media entry available.

Note that this endpoint does not contain metadata.

To retrieve more details about an item, please use the Get On-Demand endpoint.

Dependencies

Filtering and Pagination

This endpoint supports pagination, filtering and ordering.

Examples

  • Filter On-Demand content by fuzzy search on instructor name: filter[where][q]=john
  • Filter On-Demand content by beginner level: filter[where][level][eq]=beginner
  • Filter On-Demand content by duration: filter[where][duration][in]=0-15,16-30
  • Filter On-Demand content by categories: filter[where][categories][eq]=9d6efa5b-8b60-11ed-8c71-0242ac140005
  • Filter On-Demand content by categories: filter[where][categories][and]=8d6efa5b-8b60-11ed-8c71-0242ac140005,9d6efa5b-8b60-11ed-8c71-0242ac140005
  • Filter On-Demand content by title: filter[where][title][contains]=hiit
  • Filter On-Demand content by equipment: filter[where][equipment][in]=1,3
  • Filter On-Demand content by instructor id: filter[where][instructor][eq]=497f6eca-6276-4993-bfeb-53cbbbba6f08
  • Filter On-Demand content by status published: filter[where][status]=published

Available properties for filtering

  • q (keyword matching title, goal, instructor name or category)
  • id (comma seperated list of IDs)
  • level string. - The level of the training. Possible values are beginner, intermediate and advanced.
  • duration string - The duration of the video Possible values are 0-15, 16-30, 31-45, 46-60 and 61+.
  • instructor string <uuid> - Comma seperated list of instructor UUIDs.
  • categories string <uuid> - Comma seperated list of on-demand categories UUIDs. For a list of available categories please refer to List On-Demands Categories.
  • title string - The On-Demand title.
  • equipment integer - Comma seperated list of equipment IDs. For a list of available equipment please refer to List Equipment.
  • content_packages string <uuid> - Comma seperated list of Content Package UUIDs. See Content Packages
  • status (draft, processing, published, unpublished, unavailable) - Content status

Available properties for ordering

  • title
  • level
  • content_provider
  • duration
  • created
  • updated
  • has_content_packages
Authorizations:
BearerAuth
query Parameters
object (FilterQuery)

Query filter object

header Parameters
Accept-Language
string
Example: nl, en-US;q=0.9, en;q=0.8

Which languages the client is able to understand, and which locale variant is preferred.

E.g: nl, en-US;q=0.9, en;q=0.8 *

Responses

Response Schema: application/json
total
required
integer

Total number of results

required
Array of objects (OnDemandPreview)

Response samples

Content type
application/json
{
  • "total": 1,
  • "data": [
    ]
}

Get On-Demand

On-Demand refers to a streamable media object (video content). This endpoint allows you to retrieve data pertaining to a specific On-Demand object by indicating its id in the request.

In the response, you will also find enriched information about the object queried, such as metadata, equipment, goals, content types, categories, duration, content provider, content packages, level, language, and more.

Dependencies

Authorizations:
BearerAuth
path Parameters
id
required
string <uuid>

On Demand ID

query Parameters
lang
string
Example: lang=en,nl,pl

List of comma-separated language locales a client is requesting a resource.

training-plan
string <uuid>

Parent training plan id. Only needed if the on-demand content is part of a training plan.

header Parameters
Accept-Language
string
Example: nl, en-US;q=0.9, en;q=0.8

Which languages the client is able to understand, and which locale variant is preferred.

E.g: nl, en-US;q=0.9, en;q=0.8 *

Responses

Response Schema: application/json
id
required
string <uuid>

On-Demand ID

required
object (Upload)

On-Demand video

required
object (Upload)

On-Demand image

instructor_id
string <uuid>

Instructor ID.

content_packages
Array of strings <uuid>

List of Content Package IDs

type
required
string (OnDemandType)
Enum: "virtual-class" "audio-workout"

The type of On-Demand content

duration
required
string (Duration)
Enum: "0-15" "16-30" "31-45" "46-60" "61+"

Duration range in minutes

level
required
string (FitnessLevel)
Enum: "beginner" "intermediate" "advanced"

The fitness level required to perform the activity

goals
required
Array of integers <int32> [ items <int32 > ]

List of Goal IDs

equipment
required
Array of integers <int32> [ items <int32 > ]

List of Equipment IDs

categories
required
Array of strings <uuid>

List of On-Demand Category IDs

languages
required
Array of strings

List of Language codes in which the video is available

content_provider
required
integer <int32>

Content Provider ID

Array of objects (Current translation status)

Translation status

required
object (ContentStatus)

Content Status for multiple languages

created_at
required
string <date-time>

Creation date

updated_at
required
string <date-time>

Last modification date

published_at
string <date-time>

Publication date

required
string or MultiLangString (object)

Title

language
string (Language)
Default: "en"
Enum: "en" "nl"

Language name

content_types
required
Array of integers <int32> non-empty [ items <int32 > ]

List of Content Category IDs

required
string or MultiLangString (object)

Description

external_id
integer

external id at the provider

Response samples

Content type
application/json
Example
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "title": "My On Demand #1",
  • "description": "Long description about the On Demand",
  • "type": "virtual-class",
  • "video": {},
  • "image": {},
  • "languages": [
    ],
  • "instructor_id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "level": "beginner",
  • "external_id": 1,
  • "equipment": [
    ],
  • "goals": [
    ],
  • "content_provider": 2,
  • "content_types": [
    ],
  • "categories": [
    ],
  • "duration": "0-15",
  • "content_packages": [
    ],
  • "translation_status": [
    ],
  • "status": {
    },
  • "created_at": "2021-12-08T15:14:01.751Z",
  • "updated_at": "2021-12-08T15:14:01.751Z",
  • "published_at": "2021-13-08T15:14:01.751Z"
}

List Content Providers

A Content provider refers to the entity that created a specific type of On-Demand content. This can be Funxtion, or any other third-party whose content has been uploaded into the Funxtion platform. This can be used to filter On-Demand content.

Authorizations:
BearerAuth
query Parameters
object (FilterQuery)

Query filter object

header Parameters
Accept-Language
string
Example: nl, en-US;q=0.9, en;q=0.8

Which languages the client is able to understand, and which locale variant is preferred.

E.g: nl, en-US;q=0.9, en;q=0.8 *

Responses

Response Schema: application/json
total
required
integer

Total number of results

required
Array of objects (ContentProvider)

Response samples

Content type
application/json
{
  • "total": 0,
  • "data": [
    ]
}

List Content Category

A Content Category refers to the category in which an activity type (exercise, workout, or trraining plan) falls in. For example, a weightlifting exercise would be included in the content category “Olympic-Weightlifting”, while a workout or training plan focusing on “Booty” would fall in the category of the same name.

This endpoint returns a paginated list of all available content categories types such as HIIT, Strength, Booty, among others. The results can used be for further filtering on list endpoints.

Filtering and Pagination

This endpoint supports pagination, filtering and ordering.

Filtering is accomplished by adding a query string filter. For example:

  • filter[where][id][in]=1,2
  • filter[where][name][eq]=tone

You can use the following filters:

  • id (id of the content category)
  • name (name of the content category)
  • slug (slug name of the content category)
Authorizations:
BearerAuth
query Parameters
entity
string
Enum: "exercise" "on-demand" "workout" "training-plan"

Entity by which to filter

object (FilterQuery)

Query filter object

header Parameters
Accept-Language
string
Example: nl, en-US;q=0.9, en;q=0.8

Which languages the client is able to understand, and which locale variant is preferred.

E.g: nl, en-US;q=0.9, en;q=0.8 *

Responses

Response Schema: application/json
total
required
integer

Total number of results

required
Array of objects (ContentCategory)

Response samples

Content type
application/json
{
  • "total": 22,
  • "data": [
    ]
}

List On-Demand Categories

On-demand categories refers to the category in which an streamable media object (video content) falls in. For example, a cardio class would be placed in the “Cardio” category.

Each on-demand item can have one or more of these categories attached to it. The results of this endpoint can be used to further filter the on the List On-Demand endpoint.

Filtering and Pagination

This endpoint supports pagination, filtering and ordering.

Filtering is accomplished by adding a query string filter. For example:

  • filter[where][id][in]=1,2
  • filter[where][name][eq]=tone

You can use the following filters:

  • id (id of the on-demand category)
  • name (name of the on-demand category)
  • slug (slug name of the on-demand category)
Authorizations:
BearerAuth
query Parameters
object (FilterQuery)

Query filter object

header Parameters
Accept-Language
string
Example: nl, en-US;q=0.9, en;q=0.8

Which languages the client is able to understand, and which locale variant is preferred.

E.g: nl, en-US;q=0.9, en;q=0.8 *

Responses

Response Schema: application/json
total
required
integer

Total number of results

required
Array of objects (OnDemandCategory)

Response samples

Content type
application/json
{
  • "total": 0,
  • "data": [
    ]
}

List Muscle Groups

A muscle group refers to the group of muscles impacted during a specific exercise, such as biceps, obliques, core, glutes, etc.

This endpoint returns a paginated list of available muscle groups. These results can used be for filtering the Exercises list.

Filtering and Pagination

This endpoint supports pagination, filtering and ordering.

Filtering is accomplished by adding a query string filter. For example:

  • filter[where][id][in]=1,2
  • filter[where][name][eq]=tone

You can use the following filters:

  • id (id of the muscle groups)
  • name (name of the muscle groups)
  • slug (slug name of muscle groups)
Authorizations:
BearerAuth
query Parameters
object (FilterQuery)

Query filter object

header Parameters
Accept-Language
string
Example: nl, en-US;q=0.9, en;q=0.8

Which languages the client is able to understand, and which locale variant is preferred.

E.g: nl, en-US;q=0.9, en;q=0.8 *

Responses

Response Schema: application/json
total
required
integer

Total number of results

required
Array of objects (MuscleGroup)

Response samples

Content type
application/json
{
  • "total": 2,
  • "data": [
    ]
}

Get fitness activities types

Get fitness activities types

Authorizations:
BearerAuth
header Parameters
Accept-Language
string
Example: nl, en-US;q=0.9, en;q=0.8

Which languages the client is able to understand, and which locale variant is preferred.

E.g: nl, en-US;q=0.9, en;q=0.8 *

Responses

Response Schema: application/json
total
required
integer

Total number of results

required
Array of objects (Fitness Activity Type Preview)

Response samples

Content type
application/json
{
  • "total": 6,
  • "data": [
    ]
}

Get fitness Activity Type

Get fitness Activity Type details

Authorizations:
BearerAuth
path Parameters
id
required
string
query Parameters
lang
string
Example: lang=en,nl,pl

List of comma-separated language locales a client is requesting a resource.

header Parameters
Accept-Language
string
Example: nl, en-US;q=0.9, en;q=0.8

Which languages the client is able to understand, and which locale variant is preferred.

E.g: nl, en-US;q=0.9, en;q=0.8 *

Responses

Response Schema: application/json
id
required
integer <int32>
required
string or MultiLangString (object)

Name of the activity

slug
required
string or null (FieldSlug) >= 3 characters ^[a-z0-9]+(?:-[a-z0-9]+)*$
Default: null

Resource Slug.

This field will be generated in case is submitted as null

required
Array of objects (Dynamic Field Definition)

Response samples

Content type
application/json
Example
{
  • "id": 3,
  • "name": "Running",
  • "slug": "running",
  • "fields": [
    ]
}

Get Body Parts

A body part refers to the part of the body that is the focus of an exercise or workout, such as lower body, shoulders, back, etc.

This endpoint returns a paginated list of available body parts. The results can used be for further filtering such as a workouts list.

Filtering and Pagination

This endpoint supports pagination, filtering and ordering.

Filtering is accomplished by adding a query string filter. For example:

  • filter[where][id][in]=1,2
  • filter[where][name][eq]=core

Available properties for filtering:

  • id (id of the body part)
  • name (name of the body part)
  • slug (slug name of body part)
Authorizations:
BearerAuth
query Parameters
object (FilterQuery)

Query filter object

header Parameters
Accept-Language
string
Example: nl, en-US;q=0.9, en;q=0.8

Which languages the client is able to understand, and which locale variant is preferred.

E.g: nl, en-US;q=0.9, en;q=0.8 *

Responses

Response Schema: application/json
total
required
integer

Total number of results

required
Array of objects (BodyPart)

Response samples

Content type
application/json
{
  • "total": 0,
  • "data": [
    ]
}

Get a Body Part

A body part refers to the part of the body that is the focus of an exercise or workout, such as lower body, shoulders, back, etc.

Unlike the previous endpoint (which lists all possible Body Parts), this endpoint retrieves a specific body part. This is done by defining the ID in the request made.

This can be used for further filtering in other endpoints. This endpoint returns the same information returned by the list body parts endpoint but limited to a single entity.

Authorizations:
BearerAuth
path Parameters
id
required
integer
query Parameters
lang
string
Example: lang=en,nl,pl

List of comma-separated language locales a client is requesting a resource.

header Parameters
Accept-Language
string
Example: nl, en-US;q=0.9, en;q=0.8

Which languages the client is able to understand, and which locale variant is preferred.

E.g: nl, en-US;q=0.9, en;q=0.8 *

Responses

Response Schema: application/json
id
required
integer <int32>
required
string or MultiLangString (object)

Name

slug
required
string or null (FieldSlug) >= 3 characters ^[a-z0-9]+(?:-[a-z0-9]+)*$
Default: null

Resource Slug.

This field will be generated in case is submitted as null

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "slug": null
}

Get Fitness Equipment Brand

Get Fitness Equipment Brand

Authorizations:
BearerAuth
path Parameters
id
required
integer

Equipment Brand ID

query Parameters
lang
string
Example: lang=en,nl,pl

List of comma-separated language locales a client is requesting a resource.

header Parameters
Accept-Language
string
Example: nl, en-US;q=0.9, en;q=0.8

Which languages the client is able to understand, and which locale variant is preferred.

E.g: nl, en-US;q=0.9, en;q=0.8 *

Responses

Response Schema: application/json
id
required
integer <int32>
required
string or MultiLangString (object)

Name

slug
required
string or null (FieldSlug) >= 3 characters ^[a-z0-9]+(?:-[a-z0-9]+)*$
Default: null

Resource Slug.

This field will be generated in case is submitted as null

required
object (Upload)

Equipment Brand Image

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "slug": null,
  • "image": {
    }
}

List Content Packages

A Content Package is an object that contains specific workouts and on-demand content. This content has been assigned to a specific package. With this endpoint, you may list all existing Content Packages and related information, such as the name, description, linked subscription types, as well as information relating to any updates made to this package.

Note that this endpoint does not list items inside the content packages. To view items inside a specific package, please use the List Content Package items endpoint.

Authorizations:
BearerAuth
query Parameters
object (FilterQuery)

Query filter object

header Parameters
Accept-Language
string
Example: nl, en-US;q=0.9, en;q=0.8

Which languages the client is able to understand, and which locale variant is preferred.

E.g: nl, en-US;q=0.9, en;q=0.8 *

Responses

Response Schema: application/json
total
required
integer

Total number of results

required
Array of objects (ContentPackage)

Response samples

Content type
application/json
{
  • "total": 2,
  • "data": [
    ]
}

Get Content Package

A Content Package is an object that contains specific workouts and on-demand content. This content has been assigned to a specific package. With this endpoint, you may list a specific Content Package, along with related information such as the name, description, linked subscription types, as well as information relating to any updates made to the package.

Note that this endpoint does not list items inside the content package. To view items inside a specific package, please use the List Content Package items endpoint.

Authorizations:
BearerAuth
path Parameters
id
required
string <uuid>

Content Package identifier

query Parameters
lang
string
Example: lang=en,nl,pl

List of comma-separated language locales a client is requesting a resource.

header Parameters
Accept-Language
string
Example: nl, en-US;q=0.9, en;q=0.8

Which languages the client is able to understand, and which locale variant is preferred.

E.g: nl, en-US;q=0.9, en;q=0.8 *

Responses

Response Schema: application/json
created_by
required
string

The user's id who created the resource

updated_by
required
string

The last user who modified the resource

created_at
required
string <date-time>

Creation date

updated_at
required
string <date-time>

Last modification date

id
required
string <uuid>
required
string or MultiLangString (object)

Multi-Language String

string or MultiLangString (object)

Multi-Language String

linked_subscription_types
required
Array of strings

List of Subscription type codes

Response samples

Content type
application/json
Example
{
  • "id": "c7c0ebf5-c6cc-417a-940a-92fc5a67de57",
  • "name": "Premium package",
  • "description": "Content associated with the internal Premium subscription",
  • "linked_subscription_types": [
    ],
  • "created_by": "10",
  • "updated_by": "20",
  • "created_at": "2020-12-08T12:00:00Z",
  • "updated_at": "2022-05-08T14:00:00Z"
}

List Content Package items

A Content Package is an object that contains specific workouts and on-demand content. This content has been assigned to a specific package. With this endpoint, you may list all the workout and on-demand items included within a specific content package.

Workouts will be listed with the ID and basic workout information, such as the name, image link, goals, workout item type, locations, body parts, and duration. Further information can be retrieved by using the Get a Workout endpoint.

On-demand content is listed with the ID, title, video link, image link, language, instructor id, level, equipment, goals, content provider, content type(s), content categories, and duration. This is the same information retrieved when you use the Get On-Demand endpoint.

Available properties for ordering

  • type
  • created_at
  • content.title
  • content.weeks_total
  • content.days_total
  • content.max_days_per_week
  • content.is_multizone
  • content.created
  • content.updated
Authorizations:
BearerAuth
path Parameters
id
required
string <uuid>

Content Package identifier

query Parameters
object (FilterQuery)

Query filter object

header Parameters
Accept-Language
string
Example: nl, en-US;q=0.9, en;q=0.8

Which languages the client is able to understand, and which locale variant is preferred.

E.g: nl, en-US;q=0.9, en;q=0.8 *

Responses

Response Schema: application/json
total
required
integer

Total number of results

required
Array of objects (ContentPackageItemEntityPreview)

Response samples

Content type
application/json
{
  • "total": 2,
  • "data": [
    ]
}