List coaches
GET /public/v1/coaches
Authorization: Bearer <access_token>
coaches:read
| Parameter | Type | Notes |
|---|---|---|
page | integer | 1-based page number |
limit | integer | Defaults to 100, maximum 500 |
search | string | Searches first name, last name, and email |
role | string | One of Coach, Manager, or Admin |
curl -H "Authorization: Bearer $FITSOCIETY_ACCESS_TOKEN" \
"https://api.fitsociety.io/public/v1/coaches?page=1&limit=50&search=doe"
const response = await fetch(
"https://api.fitsociety.io/public/v1/coaches?page=1&limit=50&search=doe",
{
headers: {
Authorization: `Bearer ${process.env.FITSOCIETY_ACCESS_TOKEN}`,
},
},
);
const body = await response.json();
console.log(body.data.total, body.data.data);
import os
import requests
response = requests.get(
"https://api.fitsociety.io/public/v1/coaches",
headers={"Authorization": f"Bearer {os.environ['FITSOCIETY_ACCESS_TOKEN']}"},
params={"page": 1, "limit": 50, "search": "doe"},
)
response.raise_for_status()
body = response.json()
print(body["data"]["total"], body["data"]["data"])
{
"data": {
"page": 1,
"limit": 50,
"total": 1,
"totalPages": 1,
"hasNextPage": false,
"hasPrevPage": false,
"data": [
{
"_id": "64b64c0f2f5f4c0012345671",
"firstName": "John",
"lastName": "Doe",
"email": "john@example.com",
"role": "Coach",
"language": "nl",
"trainerStatus": true,
"image": null,
"lastActive": "2026-08-22T14:05:00.000Z",
"online": false
}
]
},
"meta": {
"requestId": "req_0123456789abcdef",
"rateLimit": { "limit": 10, "remaining": 9, "resetSeconds": 1 }
}
}
Get a coach
GET /public/v1/coaches/{coachId}
Authorization: Bearer <access_token>
coaches:read
curl -H "Authorization: Bearer $FITSOCIETY_ACCESS_TOKEN" \
"https://api.fitsociety.io/public/v1/coaches/64b64c0f2f5f4c0012345671"
const coachId = "64b64c0f2f5f4c0012345671";
const response = await fetch(
`https://api.fitsociety.io/public/v1/coaches/${coachId}`,
{
headers: {
Authorization: `Bearer ${process.env.FITSOCIETY_ACCESS_TOKEN}`,
},
},
);
const body = await response.json();
console.log(body.data.coach);
import os
import requests
coach_id = "64b64c0f2f5f4c0012345671"
response = requests.get(
f"https://api.fitsociety.io/public/v1/coaches/{coach_id}",
headers={"Authorization": f"Bearer {os.environ['FITSOCIETY_ACCESS_TOKEN']}"},
)
response.raise_for_status()
body = response.json()
print(body["data"]["coach"])
{
"data": {
"coach": {
"_id": "64b64c0f2f5f4c0012345671",
"firstName": "John",
"lastName": "Doe",
"email": "john@example.com",
"role": "Coach",
"language": "nl",
"trainerStatus": true,
"image": null,
"lastActive": "2026-08-22T14:05:00.000Z",
"online": false
}
},
"meta": {
"requestId": "req_0123456789abcdef",
"rateLimit": { "limit": 10, "remaining": 8, "resetSeconds": 1 }
}
}
Coach output fields
List response fields:| Field | Type | Nullable | Description |
|---|---|---|---|
data.page | integer | no | Current page. |
data.limit | integer | no | Page size after cap, maximum 500. |
data.total | integer | no | Total matching coaches. |
data.totalPages | integer | no | Total pages. |
data.hasNextPage | boolean | no | Next page availability. |
data.hasPrevPage | boolean | no | Previous page availability. |
data.data[]._id | string | no | Coach ID. |
data.data[].firstName | string | no | First name. |
data.data[].lastName | string | no | Last name. |
data.data[].email | string | no | Coach email. |
data.data[].role | string | no | Coach, Manager, or Admin. |
data.data[].language | string | no | Coach language. |
data.data[].trainerStatus | boolean | no | Trainer active flag. |
data.data[].image | string/object | yes | Stored profile image metadata as returned by the coach model. |
data.data[].lastActive | string | yes | Last active timestamp. |
data.data[].online | boolean | yes | Online flag. |
| Field | Type | Nullable | Description |
|---|---|---|---|
data.coach._id | string | no | Coach ID. |
data.coach.firstName | string | no | First name. |
data.coach.lastName | string | no | Last name. |
data.coach.email | string | no | Coach email. |
data.coach.role | string | no | Coach, Manager, or Admin. |
data.coach.language | string | no | Coach language. |
data.coach.trainerStatus | boolean | no | Trainer active flag. |
data.coach.image | string/object | yes | Stored profile image metadata as returned by the coach model. |
data.coach.lastActive | string | yes | Last active timestamp. |
data.coach.online | boolean | yes | Online flag. |