Get one family group
curl --request GET \
--url https://web-api.soxai.site/api/groups/{group_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://web-api.soxai.site/api/groups/{group_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://web-api.soxai.site/api/groups/{group_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"groupId": "b7d1f0c9a2e4d6f8b0c1",
"groupName": "Shibata family",
"status": "active",
"role": "admin",
"createdAt": "2026-08-03T09:30:00+00:00",
"memberCount": 2,
"sharedFields": {
"sleep_score": true,
"health_score": true,
"activity_score": false,
"sleep_total_time_exclude_awake": false,
"activity_steps": true,
"heat_stroke_severity": true,
"last_sync_time": true
},
"masterHidden": false,
"sharedFieldNames": [
"activity_steps",
"health_score",
"heat_stroke_severity",
"last_sync_time",
"sleep_score"
],
"members": [
{
"uid": "user123",
"displayName": "Mom",
"role": "admin",
"joinedAt": "2026-08-03T09:30:00+00:00",
"isSelf": true,
"visibleFields": [
"activity_steps",
"health_score",
"heat_stroke_severity",
"last_sync_time",
"sleep_score"
]
},
{
"uid": "user456",
"displayName": "Dad",
"role": "member",
"joinedAt": "2026-08-05T02:10:00+00:00",
"isSelf": false,
"visibleFields": [
"sleep_score"
]
}
],
"watching": true,
"groupType": "family",
"createdBy": "user123"
}{
"error": "http-error",
"error_msg": "Invalid authentication credentials. <reason>"
}{
"error": "forbidden",
"error_msg": "Not enough permission"
}{
"error": "not-found",
"error_msg": "group not found"
}{
"error": "unprocessable-entity",
"error_msg": "body.<field>: <validation message>"
}{
"error": "rate-limited",
"error_msg": "Rate limit exceeded. Retry after <n> seconds."
}{
"error": "internal-server-error",
"error_msg": "Failed to fetch data: <error_message>"
}Family Groups
Get one family group
One group by id — the same keys as a GET /api/groups entry plus groupType
and createdBy. Member identity comes with the entry (members, SOX-82);
member health data lives in GroupView.
Parameters
group_id(path, required) - the group to describe.
Response
200returns the same keys as aGET /api/groupsentry, plusgroupType,createdByandmembers, the roster’s identities.
Errors
| Status | Condition |
|---|---|
| 404 | The group does not exist. Only an active member of some other group reaches this: a non-member is refused with 403 first |
Authorization
- Scheme:
Authorization: Bearer <idToken>orsoxai-api-key: <api key>. - Authority inside a group comes from the caller’s own membership record, never from a SOXAI
role: an
Admin,PartnerAdminorOrgAdminclaim grants nothing here. - Required: an active member of the group. A caller who is not one receives
403 not a member of this group, whether or not the group exists.
GET
/
api
/
groups
/
{group_id}
Get one family group
curl --request GET \
--url https://web-api.soxai.site/api/groups/{group_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://web-api.soxai.site/api/groups/{group_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://web-api.soxai.site/api/groups/{group_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"groupId": "b7d1f0c9a2e4d6f8b0c1",
"groupName": "Shibata family",
"status": "active",
"role": "admin",
"createdAt": "2026-08-03T09:30:00+00:00",
"memberCount": 2,
"sharedFields": {
"sleep_score": true,
"health_score": true,
"activity_score": false,
"sleep_total_time_exclude_awake": false,
"activity_steps": true,
"heat_stroke_severity": true,
"last_sync_time": true
},
"masterHidden": false,
"sharedFieldNames": [
"activity_steps",
"health_score",
"heat_stroke_severity",
"last_sync_time",
"sleep_score"
],
"members": [
{
"uid": "user123",
"displayName": "Mom",
"role": "admin",
"joinedAt": "2026-08-03T09:30:00+00:00",
"isSelf": true,
"visibleFields": [
"activity_steps",
"health_score",
"heat_stroke_severity",
"last_sync_time",
"sleep_score"
]
},
{
"uid": "user456",
"displayName": "Dad",
"role": "member",
"joinedAt": "2026-08-05T02:10:00+00:00",
"isSelf": false,
"visibleFields": [
"sleep_score"
]
}
],
"watching": true,
"groupType": "family",
"createdBy": "user123"
}{
"error": "http-error",
"error_msg": "Invalid authentication credentials. <reason>"
}{
"error": "forbidden",
"error_msg": "Not enough permission"
}{
"error": "not-found",
"error_msg": "group not found"
}{
"error": "unprocessable-entity",
"error_msg": "body.<field>: <validation message>"
}{
"error": "rate-limited",
"error_msg": "Rate limit exceeded. Retry after <n> seconds."
}{
"error": "internal-server-error",
"error_msg": "Failed to fetch data: <error_message>"
}Authorizations
HTTPBearerSoxaiApiKey
Path Parameters
Response
The same keys as a GET /api/groups entry, plus groupType and createdBy.