Download OpenAPI specification:Download
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.
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.
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).
The list endpoints are also used to filter (search). This is accomplished by adding a query string filter. Examples:
filter[where][q][contains]=pushfilter[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:
Per list endpoint you can find which filters are available as well as some example requests.
Note that when filtering on fields defined as booleans you need to pass the value as true/0 or true/1.
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:
filter[order][name]=ascfilter[order][created]=descBy 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.
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.
Depending on the error any of the following codes may be returned:
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.
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!"
}
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,
MultiLangStringfields 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
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": ""
}
}
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.
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:
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 / jpegbmppngtif / 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 |
At this moment Webhooks are in closed beta. If you would like access, please contact our customer support team at support@funxtion.com
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.
Each webhook payload will contain a collection of created/edited/deleted resources, in which each resource contains:
createdupdateddeletedFor 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
}
}
]
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).
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.
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.
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.
Obtain a JSON Web Token based on authentication credentials.
Authorization: Bearer <token> for all api requests. 1 hour by default.refresh_token via endpoint POST /auth/token/refresh.| 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 |
| username required | string <email> |
| password required | string <password> non-empty |
| code | string Organization Code |
| token | string |
| refresh_token | string |
{- "username": "admin@funxtion.com",
- "password": "NeWStRonGPaSsWoRd",
- "code": "funxtion"
}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 for a new JWT token and refresh token. After this exchange the old refresh token is no longer valid.
| refresh_token | string |
| token | string |
| refresh_token | string |
{- "refresh_token": "80b994b617c9a7820033c6b927c4895ce292668dff37f36b434f2557f11d3016d2bac8475094f281481d782bb09a00f2a6242b55192dc53aeac97fedf0743280"
}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 the JWT refresh token. This will make the refresh token invalid and the user will need to login again.
| refresh_token | string |
{- "refresh_token": "80b994b617c9a7820033c6b927c4895ce292668dff37f36b434f2557f11d3016d2bac8475094f281481d782bb09a00f2a6242b55192dc53aeac97fedf0743280"
}{- "code": "401",
- "message": "Invalid credentials."
}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.
Authorization: Bearer <token>. DELETE /auth/integration/token/{id}Restrictions:
10).1 year expiration.read-only for /v3/content/... related API endpoints.| token | string |
| refresh_token | string |
{- "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE2ODc2MzY1MTUsImV4cCI6MTY4ODYzNjUxNSwianRpIjoiMDE4OTJhOTQtNjVjYS03MjM4LWJjNzQtNDllZjdmZmFiMTYyIiwiZW1haWwiOiIwMTg5MmE5NC02NWNhLTcyMzgtYmM3NC00OWVmN2ZmYWIxNjIuYXBpX2NsaWVudEBmdW54dGlvbi5jb20iLCJzY29wZSI6ImFwaS1jbGllbnQiLCJvcmdJZCI6MSwiY29kZSI6ImZ1bnh0aW9uIn0.bo3r4I9uw7IzA-5azZvHjbCcnGfKcheC9IEkhLtpBI0"
}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.
Search & Discover Global Content.
This endpoint allows to search & discover content across all content types based on a search term.
The search results are sorted by the level of relevance matching the search term.
Supported content collections:
workouts -> Workouts training-plans -> Training Plansvideo -> On-Demand Videoaudio -> On-Demand Audio| 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 * |
| q required | string Query String |
Array of objects (SearchCursor) List of collections search cursors from which to start / continue returning results. The aggregated search results are returned based on each collection search cursor. *Notes:
| |
object Filter conditions for refining your search results (property names are fields names). *Notes:
| |
object [ 1 .. 3 ] properties Default: {"match_score":"desc"} A list of fields and their sort orders that will be used for ordering the results. The order of the fields is important, meaning that earlier fields on the left are used for sorting, and in the case that two values are equal, the next field on the right is used (done repeatedly until exhausting all sort_by fields). *Notes:
|
required | Array of objects (SearchResultItem) Search results |
required | Array of objects (SearchQuerySuggestion) Search query suggestions (more popular suggestions show up higher) |
required | Array of objects (SearchCursor) List of search queries that we can use to continue returning results. These search queries can be used to submit a new search request and continue to show more results right after the previous search. |
Search by term "pull" in all content collections filtered by beginner level and sorted by match_score:desc
{- "q": "pull",
- "cursors": [
- {
- "collection": "workouts",
- "offset": 0,
- "limit": 10
}, - {
- "collection": "video",
- "offset": 0,
- "limit": 10
}, - {
- "collection": "audio",
- "offset": 0,
- "limit": 10
}, - {
- "collection": "training-plans",
- "offset": 0,
- "limit": 10
}
], - "filter_by": {
- "level": {
- "eq": "beginner"
}
}, - "sort_by": {
- "match_score": "desc"
}
}{- "results": [
- {
- "collection": "workouts",
- "match_score": 516200,
- "entity_id": "018b615e-21ab-7d36-84bc-b7591e4b1294",
- "title": "Advanced Bench Press",
- "duration": 45,
- "level": "beginner",
- "categories": [
- {
- "id": "1",
- "label": "Core"
}, - {
- "id": "2",
- "label": "Strength"
}
], - "goals": [
- {
- "id": "1",
- "label": "Build Muscle"
}
], - "created_at": "2021-05-08T14:00:00Z",
- "updated_at": "2022-05-08T14:00:00Z"
}, - {
- "collection": "video",
- "match_score": 416200,
- "entity_id": "018b616c-cd2c-702e-8033-ca30ad05b51c",
- "title": "Advanced Bench Press",
- "duration": 45,
- "level": "beginner",
- "categories": [
- {
- "id": "1",
- "label": "Core"
}, - {
- "id": "3",
- "label": "Cardio"
}
], - "goals": [
- {
- "id": "2",
- "label": "Build Endurance"
}
], - "created_at": "2021-05-08T14:00:00Z",
- "updated_at": "2023-05-08T14:00:00Z"
}, - {
- "collection": "audio",
- "match_score": 31620,
- "entity_id": "018b6b7a-5019-705c-aac5-ed40d9a34859",
- "title": "Stretch & Relax",
- "duration": 15,
- "level": "beginner",
- "categories": [
- {
- "id": "6",
- "label": "Stretching"
}
], - "goals": [
- {
- "id": "7",
- "label": "Get Flexible"
}
], - "created_at": "2021-05-08T14:00:00Z",
- "updated_at": "2022-05-08T14:00:00Z"
}, - {
- "collection": "training-plans",
- "match_score": 2062,
- "entity_id": "018b616b-7b9e-7f4d-92eb-d1749649d8fd",
- "title": "7-Day Bedtime Yoga Plan",
- "duration": 1,
- "level": "beginner",
- "categories": [
- {
- "id": "6",
- "label": "Stretching"
}, - {
- "id": "9",
- "label": "Yoga"
}
], - "goals": [
- {
- "id": "7",
- "label": "Get Flexible"
}
], - "created_at": "2023-05-08T14:00:00Z",
- "updated_at": "2023-05-08T14:00:00Z"
}
], - "suggestions": [
- {
- "q": "pullups",
- "popularity": 9.2
}, - {
- "q": "pull-up workout",
- "popularity": 8.7
}, - {
- "q": "pull-up circuit",
- "popularity": 8.3
}, - {
- "q": "pull-up HIIT workout",
- "popularity": 7.9
}
], - "cursors": [
- {
- "collection": "workouts",
- "offset": 1,
- "limit": 5,
- "total": 1
}, - {
- "collection": "video",
- "offset": 1,
- "limit": 5,
- "total": 1
}, - {
- "collection": "audio",
- "offset": 1,
- "limit": 5,
- "total": 1
}, - {
- "collection": "training-plans",
- "offset": 1,
- "limit": 5,
- "total": 1
}
]
}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.
This endpoint depends on the following endpoints to resolve ids:
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'.object (FilterQuery) Query filter object |
| 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 * |
| total required | integer Total number of results |
required | Array of objects (ExercisePreview) |
{- "total": 1,
- "data": [
- {
- "id": "19d2b9dd-da17-4cd0-9e44-033f4ef4891c",
- "name": "Reverse Marching Planks",
- "slug": "reverse-marching-planks",
- "summary": "Reverse Marching Planks",
- "types": [
- 1,
- 2
], - "level": "intermediate",
- "gender": "male",
- "orientation": "left",
- "muscle_groups": [
- 1,
- 3
], - "equipment": [
- 2,
- 4
], - "translation_status": [
- {
- "locale": "en",
- "status": "full"
}, - {
- "locale": "nl",
- "status": "full"
}
]
}
]
}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.
This endpoint depends on the following endpoints to resolve ids:
| id required | string <uuid> Exercise ID |
| lang | string Example: lang=en,nl,pl List of comma-separated language locales a client is requesting a resource. |
| 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 * |
| 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 |
{- "id": "19d2b9dd-da17-4cd0-9e44-033f4ef4891c",
- "name": "Reverse Marching Planks",
- "slug": "reverse-marching-planks",
- "video": {
- "id": "4320b86e-b6ae-43ed-8cb5-2f76b8d21859",
- "name": "nog_311.mp4",
- "mime": "video/mp4",
- "created_at": "2021-06-01 20:09:10Z",
- "updated_at": "2022-08-24T14:15:22Z"
}, - "gif": {
- "id": "123e4567-e89b-12d3-a456-426614174000",
- "name": "image.gif",
- "mime": "image/gif",
- "created_at": "2021-06-01 20:09:10Z",
- "updated_at": "2022-08-24T14:15:22Z"
}, - "image": {
- "id": "cad7861a-1364-4ef6-9742-2cdeaf45d77e",
- "name": "image.png",
- "mime": "image/png",
- "created_at": "2021-06-01 20:09:10Z",
- "updated_at": "2022-08-24T14:15:22Z"
}, - "gender": "female",
- "types": [
- 1,
- 3
], - "level": "intermediate",
- "orientation": "left",
- "steps": [
- "Start in a reversed plank position",
- "Roll your shoulders back, open the chest and keep the hips high",
- "Alternate bringing the knees towards the chest",
- "Keep the body strong and the core engaged"
], - "muscle_groups": [
- 1
], - "equipment": [
- 8
]
}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.
This endpoint depends on the following endpoints to resolve ids:
This endpoint supports pagination, filtering and ordering.
Filtering is accomplished by adding a query string filter. For example:
filter[where][q]=strongfilter[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 templatefilter[where][template]=false - Filter workouts which are not templatefilter[where][status]=default:published,fr:published - Filter workouts where the status is published in the default organization language OR in Frenchfilter[where][status][and]=en:published,fr:published - Filter workouts where the status is published in both English AND French languagesstring <uuid> - Comma seperated list of Content Package UUIDs. See Content Packages| lang | string Example: lang=en,nl,pl List of comma-separated language locales a client is requesting a resource. |
object (FilterQuery) Query filter object |
| 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 * |
| total required | integer Total number of results |
required | Array of objects (WorkoutPreview) |
{- "total": 1,
- "data": [
- {
- "id": "5fe67162-0a29-480a-adde-dad7ea3806af",
- "title": "Reverse Marching Planks",
- "slug": "reverse-marching-planks",
- "gender": "male",
- "level": "beginner",
- "goals": [
- 1,
- 2
], - "types": [
- 2,
- 3
], - "locations": [
- "home",
- "outdoor"
], - "body_parts": [
- 2,
- 5
], - "duration": "16-30",
- "content_packages": [
- "f39b318d-171a-11ed-993e-473d5a0c2ec5",
- "c41b838c-1d6a-11ed-993e-473d5a0c2ec5"
], - "translation_status": [
- {
- "locale": "en",
- "status": "full"
}, - {
- "locale": "nl",
- "status": "full"
}
], - "status": {
- "default": "published",
- "pl": "unpublished"
}, - "created_at": "2021-12-08T15:14:01.751Z",
- "updated_at": "2021-12-08T15:14:01.751Z",
- "published_at": "2021-13-08T15:14:01.751Z"
}
]
}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.
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.
This endpoint depends on the following endpoints to resolve ids:
| id required | string <uuid> Workout ID |
| 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 |
| 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 * |
| 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 |
{- "id": "5fe67162-0a29-480a-adde-dad7ea3806af",
- "title": "My Workout #1",
- "slug": "my-workout-1",
- "description": "Description about the Workout",
- "image": {
- "id": "19d2b9dd-da17-4cd0-9e44-033f4ef4891c",
- "name": "workout.png",
- "mime": "image/png",
- "metadata": {
- "formats": {
- "widescreen": {
- "x": 800,
- "y": 540,
- "width": 1920,
- "height": 1080,
}, - "landscape": {
- "x": 700,
- "y": 500,
- "width": 1400,
- "height": 1000,
}, - "square": {
- "x": 540,
- "y": 540,
- "width": 1080,
- "height": 1080,
}, - "portrait": {
- "x": 540,
- "y": 810,
- "width": 1080,
- "height": 1620,
}
}
}, - "created_at": "2021-06-01 20:09:10Z",
- "updated_at": "2021-06-01 20:09:10Z"
}, - "gender": "female",
- "level": "beginner",
- "duration": "16-30",
- "types": [
- 3
], - "goals": [
- 2
], - "body_parts": [
- 2,
- 3
], - "locations": [
- "home",
- "club"
], - "status": {
- "default": "draft"
}, - "phases": [
- {
- "title": "Warm Up",
- "time": 20,
- "items": [
- {
- "type": "CIRCUIT-TIME",
- "notes": "Enter some extra notes about the time-based Circuit",
- "ct_rounds": [
- {
- "rest_rounds": 15,
- "work": 45,
- "rest": 10,
- "exercises": [
- {
- "notes": "Some trainer notes for the 1st Exercise",
- "exercise_id": "19d2b9dd-da17-4cd0-9e44-033f4ef4891c",
- "rest": 15,
- "resistance_targets": [
- {
- "type": "VALUE",
- "metric": "weight",
- "value": 20
}
]
}, - {
- "notes": "Some trainer notes for the 2nd Exercise",
- "exercise_id": "19d2b9dd-da17-4cd0-9e44-033f4ef4891c",
- "rest": 15,
- "resistance_targets": [
- {
- "type": "VALUE",
- "metric": "weight",
- "value": 10
}
]
}, - {
- "notes": "Some trainer notes for the 3rd Exercise",
- "exercise_id": "19d2b9dd-da17-4cd0-9e44-033f4ef4891c",
- "rest": 15,
- "resistance_targets": [
- {
- "type": "VALUE",
- "metric": "weight",
- "value": 20
}
]
}
]
}
]
}, - {
- "type": "CIRCUIT-REPETITIONS",
- "notes": "Enter some extra notes about the repetitions-based Circuit",
- "cr_rounds": [
- {
- "rest": 10,
- "rest_round": 30,
- "exercises": [
- {
- "notes": "Some trainer notes for the 1st Exercise",
- "rest": 10,
- "exercise_id": "19d2b9dd-da17-4cd0-9e44-033f4ef4891c",
- "goal_targets": [
- {
- "type": "VALUE",
- "metric": "repetitions",
- "value": 20
}
], - "resistance_targets": [
- {
- "type": "VALUE",
- "metric": "repetitions",
- "value": 25
}
]
}
]
}
]
}, - {
- "type": "SINGLE-EXERCISES",
- "notes": "Enter some extra notes about the Single Exercises sequence",
- "se_exercises": [
- {
- "exercise_id": "19d2b9dd-da17-4cd0-9e44-033f4ef4891c",
- "notes": "Enter some extra notes about the Exercise",
- "sets": [
- {
- "notes": "Notes for 1st Set",
- "rest": 10,
- "goal_targets": [
- {
- "type": "VALUE",
- "metric": "repetitions",
- "value": 15
}
], - "resistance_targets": [
- {
- "type": "VALUE",
- "metric": "weight",
- "value": 2
}
]
}, - {
- "notes": "Notes for 2nd Set",
- "rest": 10,
- "goal_targets": [
- {
- "type": "VALUE",
- "metric": "duration",
- "value": 10
}
], - "resistance_targets": [
- {
- "type": "VALUE",
- "metric": "weight",
- "value": 3
}
]
}, - {
- "notes": "Notes for 3rd Set",
- "rest": 15,
- "goal_targets": [
- {
- "type": "RANGE",
- "metric": "repetitions",
- "min": 15,
- "max": 20
}
], - "resistance_targets": [
- {
- "type": "VALUE"
}, - {
- "metric": "weight",
- "value": 5
}
]
}
]
}
]
}, - {
- "type": "SUPERSET",
- "notes": "Enter some extra notes about the SuperSet",
- "ss_sets": 3,
- "ss_rest": 10,
- "ss_exercises": [
- {
- "notes": "Trainer extra notes",
- "exercise_id": "19d2b9dd-da17-4cd0-9e44-033f4ef4891c",
- "goal_targets": [
- {
- "type": "VALUE",
- "metric": "repetitions",
- "value": 15
}
], - "resistance_targets": [
- {
- "type": "VALUE",
- "metric": "weight",
- "value": 20
}
]
}
]
}, - {
- "type": "TIMER",
- "notes": "Extra notes for the Timer",
- "timer_title": "Timer title",
- "timer_duration": 60
}, - {
- "type": "RFT",
- "notes": "Enter some extra notes about the RFT Workout Item",
- "rft_rounds": 3,
- "rft_exercises": [
- {
- "notes": "Trainer extra notes",
- "exercise_id": "19d2b9dd-da17-4cd0-9e44-033f4ef4891c",
- "goal_targets": [
- {
- "type": "VALUE",
- "metric": "repetitions",
- "value": 15
}
], - "resistance_targets": [
- {
- "type": "VALUE",
- "metric": "weight",
- "value": 20
}
]
}
]
}, - {
- "type": "AMRAP",
- "notes": "Enter some extra notes about the AMRAP Workout Item",
- "amrap_duration": 60,
- "amrap_exercises": [
- {
- "notes": "Trainer extra notes",
- "rest": 10,
- "exercise_id": "19d2b9dd-da17-4cd0-9e44-033f4ef4891c",
- "goal_targets": [
- {
- "type": "VALUE",
- "metric": "repetitions",
- "value": 15
}
], - "resistance_targets": [
- {
- "type": "VALUE",
- "metric": "weight",
- "value": 20
}
]
}
]
}, - {
- "type": "EMOM",
- "notes": "Enter some extra notes about the EMOM Workout Item",
- "emom_rest": 10,
- "emom_minutes": [
- {
- "notes": "Trainer extra notes",
- "rest": 10,
- "exercise_id": "19d2b9dd-da17-4cd0-9e44-033f4ef4891c",
- "goal_targets": [
- {
- "type": "VALUE",
- "metric": "repetitions",
- "value": 15
}
], - "resistance_targets": [
- {
- "type": "VALUE",
- "metric": "weight",
- "value": 20
}
]
}
]
}
]
}, - {
- "title": "Training",
- "time": 0,
- "items": [ ]
}, - {
- "title": "Cool down",
- "time": 0,
- "items": [ ]
}
], - "content_packages": [
- "f39b318d-171a-11ed-993e-473d5a0c2ec5",
- "c41b838c-1d6a-11ed-993e-473d5a0c2ec5"
], - "created_at": "2021-12-08T15:14:01.751Z",
- "updated_at": "2021-12-08T15:14:01.751Z",
- "published_at": "2021-13-08T15:14:01.751Z"
}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.
This endpoint depends on the following endpoints:
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 statusfilter[where][status][and]=en:published,fr:published - Filter training plans where the content status is published in English AND Frenchinteger (number of total training days)integer (number of weeks of training plans)integer (maximum of training days per week. min=1 max=7)string <uuid> - Comma seperated list of Content Package UUIDs. See Content Packages object (FilterQuery) Query filter object |
| 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 * |
| total required | integer Total number of results |
required | Array of objects (TrainingPlanPreview) |
{- "total": 1,
- "data": [
- {
- "id": "afa11eb9-c43d-4b09-b7e8-6befc61d7c26",
- "title": "My Training Plan #1",
- "slug": "my-training-plan-1",
- "description": "Description about the Training Plan",
- "weeks_total": 4,
- "days_total": 12,
- "max_days_per_week": 3,
- "goals": [
- 1,
- 2
], - "types": [
- 1
], - "level": "beginner",
- "locations": [
- "club"
], - "content_packages": [
- "f39b318d-171a-11ed-993e-473d5a0c2ec5",
- "c41b838c-1d6a-11ed-993e-473d5a0c2ec5"
], - "translation_status": [
- {
- "locale": "en",
- "status": "full"
}, - {
- "locale": "nl",
- "status": "full"
}
], - "status": {
- "default": "published"
}, - "created_at": "2021-12-08T15:14:01.751Z",
- "updated_at": "2021-12-08T15:14:01.751Z",
- "published_at": "2021-13-08T15:14:01.751Z"
}
]
}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.
This endpoint depends on the following endpoints:
| id required | string <uuid> The Training Plan ID |
| lang | string Example: lang=en,nl,pl List of comma-separated language locales a client is requesting a resource. |
| 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 * |
| 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 |
{- "id": "afa11eb9-c43d-4b09-b7e8-6befc61d7c26",
- "title": "My Training Plan #1",
- "slug": "my-training-plan-1",
- "description": "Description about the Training Plan",
- "image": {
- "id": "7e654bbf-02a0-46a0-94e1-c8c2cb4b4f50",
- "name": "my-plan.png",
- "mime": "image/png",
- "metadata": {
- "formats": {
- "widescreen": {
- "x": 800,
- "y": 540,
- "width": 1920,
- "height": 1080,
}, - "landscape": {
- "x": 700,
- "y": 500,
- "width": 1400,
- "height": 1000,
}, - "square": {
- "x": 540,
- "y": 540,
- "width": 1080,
- "height": 1080,
}, - "portrait": {
- "x": 540,
- "y": 810,
- "width": 1080,
- "height": 1620,
}
}
}, - "created_at": "2021-12-08T15:14:01Z",
- "updated_at": "2022-08-24T14:15:22Z"
}, - "goals": [
- 1,
- 2
], - "types": [
- 1
], - "level": "beginner",
- "locations": [
- "club"
], - "translation_status": [
- {
- "locale": "en",
- "status": "full"
}, - {
- "locale": "nl",
- "status": "full"
}
], - "status": {
- "default": "draft"
}, - "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": [
- {
- "days": [
- {
- "activities": [
- {
- "type": "workouts",
- "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}, - {
- "type": "on-demand",
- "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}, - {
- "type": "fitness-activities",
- "id": "2",
- "fields": {
- "title": "Outdoor walk",
- "description": "Evening walk",
- "distance": 4000,
- "duration": 60
}
}
]
}
]
}
], - "content_packages": [
- "f39b318d-171a-11ed-993e-473d5a0c2ec5",
- "c41b838c-1d6a-11ed-993e-473d5a0c2ec5"
]
}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.
This endpoint depends on the following endpoints:
This endpoint supports pagination, filtering and ordering.
int - id of the body partstring - name of the body partstring - slug name of the body partobject (FilterQuery) Query filter object |
| 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 * |
| total required | integer Total number of results |
required | Array of objects (EquipmentPreview) |
{- "total": 0,
- "data": [
- {
- "id": 0,
- "name": "string",
- "slug": null,
- "brand_id": 0,
- "categories": [
- 0
],
}
]
}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.
This endpoint depends on the following endpoints:
| id required | integer Equipment ID |
| lang | string Example: lang=en,nl,pl List of comma-separated language locales a client is requesting a resource. |
| 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 * |
| 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 |
{- "id": 3,
- "name": "No Gear",
- "slug": "no-gear",
- "image": {
- "id": "cad7861a-1364-4ef6-9742-2cdeaf45d77e",
- "name": "image.png",
- "mime": "image/png",
- "created_at": "2021-06-01 20:09:10Z",
- "updated_at": "2022-08-24T14:15:22Z"
}, - "description": "Equipment description",
- "categories": [
- 2,
- 3
], - "brand_id": 2
}List Equipment Brands
object (FilterQuery) Query filter object |
| 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 * |
| total required | integer Total number of results |
required | Array of objects (EquipmentBrandPreview) |
{- "total": 14,
- "data": [
- {
- "id": 1,
- "name": "Matrix",
- "slug": "matrix",
}, - {
- "id": 2,
- "name": "Technogym",
- "slug": "technogym",
}, - {
- "id": 3,
- "name": "Life Fitness",
- "slug": "life-fitness",
}, - {
- "id": 4,
- "name": "Escape Fitness",
- "slug": "escape-fitness",
}, - {
- "id": 5,
- "name": "Woodway",
- "slug": "woodway",
}, - {
- "id": 6,
- "name": "Concept 2",
- "slug": "concept-2",
}, - {
- "id": 7,
- "name": "Precor",
- "slug": "precor",
}, - {
- "id": 8,
- "name": "Lifemaxx",
- "slug": "lifemaxx",
}, - {
- "id": 9,
- "name": "Wattbike",
- "slug": "wattbike",
}, - {
- "id": 10,
- "name": "bodybike",
- "slug": "bodybike",
}, - {
- "id": 11,
- "name": "Booty Builder",
- "slug": "booty-builder",
}, - {
- "id": 12,
- "name": "Bosu",
- "slug": "bosu",
}, - {
- "id": 13,
- "name": "Queenax",
- "slug": "queenax",
}, - {
- "id": 14,
- "name": "TRX",
- "slug": "trx",
}
]
}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.
This endpoint supports pagination, filtering and ordering.
Filtering is accomplished by adding a query string filter. For example:
filter[where][id][in]=1,2filter[where][name][eq]=cardioYou can use the following filters:
object (FilterQuery) Query filter object |
| 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 * |
| total required | integer Total number of results |
required | Array of objects (EquipmentCategoryPreview) |
{- "total": 8,
- "data": [
- {
- "id": 1,
- "name": "Cardio",
- "slug": "cardio",
}, - {
- "id": 2,
- "name": "Strength",
- "slug": "strength",
}, - {
- "id": 3,
- "name": "Plate Loaded Strength",
- "slug": "plate-loaded-strength",
}, - {
- "id": 4,
- "name": "Bodyweight",
- "slug": "bodyweight",
}, - {
- "id": 5,
- "name": "Free Weights",
- "slug": "free-weights",
}, - {
- "id": 6,
- "name": "Functional Racks",
- "slug": "functional-racks",
}, - {
- "id": 7,
- "name": "Boxing",
- "slug": "boxing",
}, - {
- "id": 8,
- "name": "Functional",
- "slug": "functional",
}
]
}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.
This endpoint supports pagination, filtering and ordering.
Filtering is accomplished by adding a query string filter. For example:
filter[where][id][in]=1,2filter[where][name][eq]=toneYou can use the following filters:
object (FilterQuery) Query filter object |
| 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 * |
| total required | integer Total number of results |
required | Array of objects (FitnessGoal) |
{- "total": 0,
- "data": [
- {
- "id": 0,
- "name": "string",
- "slug": null
}
]
}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.
| id required | integer Fitness Goal ID |
| lang | string Example: lang=en,nl,pl List of comma-separated language locales a client is requesting a resource. |
| 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 * |
| 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 |
{- "id": 0,
- "name": "string",
- "slug": null
}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.
| lang | string Example: lang=en,nl,pl List of comma-separated language locales a client is requesting a resource. |
object (FilterQuery) Query filter object |
| total required | integer Total number of results |
required | Array of objects (Instructor) |
{- "total": 3,
- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "user_id": "497f6eca-1111-1111-bfeb-53cbbbba6f08",
- "name": "Thiago Zuado",
- "gender": "male",
- "photo": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "instructor.png",
- "mime": "image/png",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2022-08-24T14:15:22Z"
}
}, - {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "user_id": null,
- "name": "Gustavo Brochado",
- "gender": "male",
- "photo": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "instructor.png",
- "mime": "image/png",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2022-08-24T14:15:22Z"
}
}, - {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "user_id": "497f6eca-1111-1111-bfeb-53cbbbba6f08",
- "name": "Andrea Miller",
- "gender": "female",
- "photo": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "instructor.png",
- "mime": "image/png",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2022-08-24T14:15:22Z"
}
}
]
}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.
| id required | string <uuid> Instructor ID |
| 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 |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "user_id": "497f6eca-1111-1111-bfeb-53cbbbba6f08",
- "name": "Thiago Zuado",
- "gender": "male",
- "photo": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "instructor.png",
- "mime": "image/png",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2022-08-24T14:15:22Z"
}
}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.
This endpoint supports pagination, filtering and ordering.
filter[where][q]=johnfilter[where][level][eq]=beginnerfilter[where][duration][in]=0-15,16-30filter[where][categories][eq]=9d6efa5b-8b60-11ed-8c71-0242ac140005filter[where][categories][and]=8d6efa5b-8b60-11ed-8c71-0242ac140005,9d6efa5b-8b60-11ed-8c71-0242ac140005filter[where][title][contains]=hiitfilter[where][equipment][in]=1,3filter[where][instructor][eq]=497f6eca-6276-4993-bfeb-53cbbbba6f08published: filter[where][status]=publishedstring. - The level of the training. Possible values are beginner, intermediate and advanced.string - The duration of the video Possible values are 0-15, 16-30, 31-45, 46-60 and 61+.string <uuid> - Comma seperated list of instructor UUIDs.string <uuid> - Comma seperated list of on-demand categories UUIDs. For a list of available categories please refer to List On-Demands Categories.string - The On-Demand title.integer - Comma seperated list of equipment IDs. For a list of available equipment please refer to List Equipment.string <uuid> - Comma seperated list of Content Package UUIDs. See Content Packagesobject (FilterQuery) Query filter object |
| 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 * |
| total required | integer Total number of results |
required | Array of objects (OnDemandPreview) |
{- "total": 1,
- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "My On Demand #1",
- "type": "virtual-class",
- "duration": "0-15",
- "level": "beginner",
- "goals": [
- 1,
- 2
], - "content_provider": 1,
- "categories": [
- "019863ad-d41a-7139-a398-60700662d5d4",
- "019863ad-d544-730d-a0e5-44a4261883f0"
], - "equipment": [
- 1,
- 2
], - "instructor_id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "content_packages": [
- "f39b318d-171a-11ed-993e-473d5a0c2ec5",
- "c41b838c-1d6a-11ed-993e-473d5a0c2ec5"
], - "translation_status": [
- {
- "locale": "en",
- "status": "full"
}, - {
- "locale": "nl",
- "status": "full"
}
], - "languages": [
- "en-US",
- "en-AU",
- "nl",
- "es-ES",
- "pl"
], - "status": {
- "default": "published"
}, - "created_at": "2021-12-08T15:14:01.751Z",
- "updated_at": "2021-12-08T15:14:01.751Z",
- "published_at": "2021-13-08T15:14:01.751Z"
}
]
}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.
| id required | string <uuid> On Demand ID |
| 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. |
| 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 * |
| 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 |
{- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "My On Demand #1",
- "description": "Long description about the On Demand",
- "type": "virtual-class",
- "video": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "playlist.m3u8",
- "mime": "application/vnd.apple.mpegurl",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2022-08-24T14:15:22Z"
}, - "image": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "on-demand.png",
- "mime": "image/png",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2022-08-24T14:15:22Z"
}, - "languages": [
- "en-US",
- "en-AU",
- "nl",
- "es-ES",
- "pl"
], - "instructor_id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "level": "beginner",
- "external_id": 1,
- "equipment": [
- 2,
- 5
], - "goals": [
- 1,
- 2
], - "content_provider": 2,
- "content_types": [
- 10,
- 12
], - "categories": [
- "8d023fdd-2b64-4784-9609-9c597d7bf4d8",
- "56e681db-28d1-4dda-b117-21932892dd79"
], - "duration": "0-15",
- "content_packages": [
- "f39b318d-171a-11ed-993e-473d5a0c2ec5",
- "c41b838c-1d6a-11ed-993e-473d5a0c2ec5"
], - "translation_status": [
- {
- "locale": "en",
- "status": "full"
}, - {
- "locale": "nl",
- "status": "full"
}
], - "status": {
- "default": "published"
}, - "created_at": "2021-12-08T15:14:01.751Z",
- "updated_at": "2021-12-08T15:14:01.751Z",
- "published_at": "2021-13-08T15:14:01.751Z"
}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.
object (FilterQuery) Query filter object |
| 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 * |
| total required | integer Total number of results |
required | Array of objects (ContentProvider) |
{- "total": 0,
- "data": [
- {
- "id": 0,
- "name": "string",
- "slug": null
}
]
}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.
This endpoint supports pagination, filtering and ordering.
Filtering is accomplished by adding a query string filter. For example:
filter[where][id][in]=1,2filter[where][name][eq]=toneYou can use the following filters:
| entity | string Enum: "exercise" "on-demand" "workout" "training-plan" Entity by which to filter |
object (FilterQuery) Query filter object |
| 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 * |
| total required | integer Total number of results |
required | Array of objects (ContentCategory) |
{- "total": 22,
- "data": [
- {
- "id": 1,
- "name": "Booty",
- "slug": "booty",
- "entities": [
- "on-demand",
- "workouts",
- "training-plans"
]
}, - {
- "id": 2,
- "name": "Boxing",
- "slug": "boxing",
- "entities": [
- "exercises"
]
}, - {
- "id": 3,
- "name": "Breathing",
- "slug": "breathing",
- "entities": [
- "on-demand"
]
}, - {
- "id": 4,
- "name": "Cardio",
- "slug": "cardio",
- "entities": [
- "exercises",
- "on-demand",
- "workouts",
- "training-plans"
]
}, - {
- "id": 5,
- "name": "Conditioning",
- "slug": "conditioning",
- "entities": [
- "exercises"
]
}, - {
- "id": 6,
- "name": "Core",
- "slug": "core",
- "entities": [
- "exercises",
- "on-demand",
- "workouts",
- "training-plans"
]
}, - {
- "id": 7,
- "name": "Cross-Training",
- "slug": "cross-training",
- "entities": [
- "exercises"
]
}, - {
- "id": 8,
- "name": "HIIT",
- "slug": "hiit",
- "entities": [
- "on-demand",
- "workouts",
- "training-plans"
]
}, - {
- "id": 9,
- "name": "Meditation",
- "slug": "meditation",
- "entities": [
- "on-demand"
]
}, - {
- "id": 10,
- "name": "Mobility",
- "slug": "mobility",
- "entities": [
- "exercises"
]
}, - {
- "id": 11,
- "name": "Olympic Weightlifting",
- "slug": "olympic-weightlifting",
- "entities": [
- "exercises"
]
}, - {
- "id": 12,
- "name": "Pilates",
- "slug": "pilates",
- "entities": [
- "exercises",
- "on-demand"
]
}, - {
- "id": 13,
- "name": "Strength",
- "slug": "strength",
- "entities": [
- "on-demand",
- "workouts",
- "training-plans"
]
}, - {
- "id": 14,
- "name": "Plyometrics",
- "slug": "plyometrics",
- "entities": [
- "exercises"
]
}, - {
- "id": 15,
- "name": "Rehabilitation",
- "slug": "rehabilitation",
- "entities": [
- "exercises"
]
}, - {
- "id": 16,
- "name": "Resistance Training",
- "slug": "resistance-training",
- "entities": [
- "exercises",
- "workouts",
- "training-plans"
]
}, - {
- "id": 17,
- "name": "Senior",
- "slug": "senior",
- "entities": [
- "exercises"
]
}, - {
- "id": 18,
- "name": "Stability",
- "slug": "stability",
- "entities": [
- "exercises"
]
}, - {
- "id": 19,
- "name": "Strength",
- "slug": "strength",
- "entities": [
- "on-demand",
- "workouts",
- "training-plans"
]
}, - {
- "id": 20,
- "name": "Stretching",
- "slug": "stretching",
- "entities": [
- "exercises",
- "on-demand",
- "workouts",
- "training-plans"
]
}, - {
- "id": 21,
- "name": "Suspension Training",
- "slug": "suspension-training",
- "entities": [
- "exercises"
]
}, - {
- "id": 22,
- "name": "Yoga",
- "slug": "yoga",
- "entities": [
- "exercises",
- "on-demand"
]
}
]
}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.
This endpoint supports pagination, filtering and ordering.
Filtering is accomplished by adding a query string filter. For example:
filter[where][id][in]=1,2filter[where][name][eq]=toneYou can use the following filters:
object (FilterQuery) Query filter object |
| 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 * |
| total required | integer Total number of results |
required | Array of objects (OnDemandCategory) |
{- "total": 0,
- "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "slug": null
}
]
}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.
This endpoint supports pagination, filtering and ordering.
Filtering is accomplished by adding a query string filter. For example:
filter[where][id][in]=1,2filter[where][name][eq]=toneYou can use the following filters:
object (FilterQuery) Query filter object |
| 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 * |
| total required | integer Total number of results |
required | Array of objects (MuscleGroup) |
{- "total": 2,
- "data": [
- {
- "id": 1,
- "name": "Hamstring",
- "slug": "hamstring"
}, - {
- "id": 2,
- "name": "Lower back",
- "slug": "lower-back"
}, - {
- "id": 3,
- "name": "Buttocks",
- "slug": "buttocks"
}, - {
- "id": 4,
- "name": "Shoulders",
- "slug": "shoulders"
}, - {
- "id": 5,
- "name": "Abdomen",
- "slug": "abdomen"
}, - {
- "id": 6,
- "name": "Chest",
- "slug": "chest"
}, - {
- "id": 7,
- "name": "Thighs",
- "slug": "thighs"
}, - {
- "id": 8,
- "name": "Upper back",
- "slug": "upper-back"
}, - {
- "id": 9,
- "name": "Calves",
- "slug": "calves"
}, - {
- "id": 10,
- "name": "Triceps",
- "slug": "triceps"
}, - {
- "id": 11,
- "name": "Biceps",
- "slug": "biceps"
}, - {
- "id": 12,
- "name": "Forearms",
- "slug": "forearms"
}
]
}Get fitness activities types
| 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 * |
| total required | integer Total number of results |
required | Array of objects (Fitness Activity Type Preview) |
{- "total": 6,
- "data": [
- {
- "id": 1,
- "name": "Cycling",
- "slug": "cycling"
}, - {
- "id": 2,
- "name": "Walking",
- "slug": "walking"
}, - {
- "id": 3,
- "name": "Running",
- "slug": "running"
}, - {
- "id": 4,
- "name": "Swimming",
- "slug": "swimming"
}, - {
- "id": 5,
- "name": "Mindfulness",
- "slug": "mindfulness"
}, - {
- "id": 6,
- "name": "Yoga",
- "slug": "yoga"
}
]
}Get fitness Activity Type details
| id required | string |
| lang | string Example: lang=en,nl,pl List of comma-separated language locales a client is requesting a resource. |
| 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 * |
| 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) |
{- "id": 3,
- "name": "Running",
- "slug": "running",
- "fields": [
- {
- "key": "title",
- "type": "text"
}, - {
- "key": "description",
- "type": "text"
}, - {
- "key": "duration",
- "type": "number"
}, - {
- "key": "distance",
- "type": "number"
}
]
}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.
This endpoint supports pagination, filtering and ordering.
Filtering is accomplished by adding a query string filter. For example:
filter[where][id][in]=1,2filter[where][name][eq]=coreAvailable properties for filtering:
object (FilterQuery) Query filter object |
| 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 * |
| total required | integer Total number of results |
required | Array of objects (BodyPart) |
{- "total": 0,
- "data": [
- {
- "id": 0,
- "name": "string",
- "slug": null
}
]
}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.
| id required | integer |
| lang | string Example: lang=en,nl,pl List of comma-separated language locales a client is requesting a resource. |
| 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 * |
| 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 |
{- "id": 0,
- "name": "string",
- "slug": null
}Get Fitness Equipment Brand
| id required | integer Equipment Brand ID |
| lang | string Example: lang=en,nl,pl List of comma-separated language locales a client is requesting a resource. |
| 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 * |
| 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 |
{- "id": 0,
- "name": "string",
- "slug": null,
- "image": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "metadata": {
- "size": 0,
- "formats": {
}
}, - "name": "string",
- "mime": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "updated_at": "2019-08-24T14:15:22Z"
}
}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.
object (FilterQuery) Query filter object |
| 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 * |
| total required | integer Total number of results |
required | Array of objects (ContentPackage) |
{- "total": 2,
- "data": [
- {
- "id": "c7c0ebf5-c6cc-417a-940a-92fc5a67de57",
- "name": "Premium package",
- "description": "Content associated with the internal Premium subscription",
- "linked_subscription_types": [
- "basic",
- "premium"
], - "created_by": "10",
- "updated_by": "20",
- "created_at": "2020-12-08T12:00:00Z",
- "updated_at": "2022-05-08T14:00:00Z"
}, - {
- "id": "c7c0ebf5-c6cc-417a-940a-92fc5a67de58",
- "name": "Platinum package",
- "linked_subscription_types": [
- "basic",
- "premium"
], - "created_by": "10",
- "updated_by": "20",
- "created_at": "2020-10-08T12:00:00Z",
- "updated_at": "2022-04-08T14:00:00Z"
}
]
}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.
| id required | string <uuid> Content Package identifier |
| lang | string Example: lang=en,nl,pl List of comma-separated language locales a client is requesting a resource. |
| 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 * |
| 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 |
{- "id": "c7c0ebf5-c6cc-417a-940a-92fc5a67de57",
- "name": "Premium package",
- "description": "Content associated with the internal Premium subscription",
- "linked_subscription_types": [
- "basic",
- "premium"
], - "created_by": "10",
- "updated_by": "20",
- "created_at": "2020-12-08T12:00:00Z",
- "updated_at": "2022-05-08T14:00:00Z"
}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.
| id required | string <uuid> Content Package identifier |
object (FilterQuery) Query filter object |
| 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 * |
| total required | integer Total number of results |
required | Array of objects (ContentPackageItemEntityPreview) |
{- "total": 2,
- "data": [
- {
- "id": "c7c0ebf5-c6cc-417a-940a-92fc5a67de50",
- "type": "workouts",
- "created_at": "2020-12-08T12:00:00Z",
- "data": {
- "id": "c7c0ebf5-c6cc-417a-940a-92fc5a67de50",
- "title": "Reverse Marching Planks",
- "slug": "reverse-marching-planks",
- "gender": "male",
- "level": "beginner",
- "goals": [
- 1,
- 2
], - "types": [
- 2,
- 3
], - "locations": [
- "home",
- "outdoor"
], - "body_parts": [
- 2,
- 5
], - "duration": "16-30",
- "status": {
- "default": "published",
- "pl": "draft"
}, - "created_at": "2021-12-08T15:14:01.751Z",
- "updated_at": "2021-12-08T15:14:01.751Z",
- "published_at": "2021-13-08T15:14:01.751Z"
}
}, - {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "type": "on-demand",
- "created_at": "2020-12-08T12:00:00Z",
- "data": {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "title": "My On Demand",
- "description": "Long description about the On Demand",
- "slug": "my-on-demand",
- "type": "virtual-class",
- "languages": [
- "en-US",
- "en-AU",
- "nl",
- "es-ES",
- "pl"
], - "instructor_id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "level": "beginner",
- "external_id": 1,
- "equipment": [
- 2,
- 5
], - "goals": [
- 1,
- 2
], - "content_provider": 2,
- "content_types": [
- 10,
- 12
], - "categories": [
- "c60d7733-daa0-41bb-933c-7a2e5f675b10",
- "c60d7733-daa0-41bb-933c-7a2e5f675b11"
], - "duration": "0-15",
- "status": {
- "default": "published",
- "pl": "draft"
}, - "created_at": "2021-12-08T15:14:01.751Z",
- "updated_at": "2021-12-08T15:14:01.751Z",
- "published_at": "2021-13-08T15:14:01.751Z"
}
}
]
}