Update the caller's own membership settings
curl --request PUT \
--url https://web-api.soxai.site/api/groups/{group_id}/members/me \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"displayName": "Jane",
"sharedFields": {
"sleep_score": true
},
"masterHidden": false
}
'import requests
url = "https://web-api.soxai.site/api/groups/{group_id}/members/me"
payload = {
"displayName": "Jane",
"sharedFields": { "sleep_score": True },
"masterHidden": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({displayName: 'Jane', sharedFields: {sleep_score: true}, masterHidden: false})
};
fetch('https://web-api.soxai.site/api/groups/{group_id}/members/me', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"uid": "user123",
"groupId": "b7d1f0c9a2e4d6f8b0c1",
"role": "admin",
"status": "active",
"displayName": "Mom",
"joinedAt": "2026-08-03T09:30:00+00:00",
"masterHidden": false,
"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
},
"sharingScope": "group_only"
}{
"error": "bad-request",
"error_msg": "displayName must not be empty"
}{
"error": "http-error",
"error_msg": "Invalid authentication credentials. <reason>"
}{
"error": "forbidden",
"error_msg": "Not enough permission"
}{
"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
Update the caller's own membership settings
Update the caller’s own display name and sharing settings in this group. Sharing is per membership, so the same account can share different metrics in different groups.
Parameters
group_id(path, required) - the group whose membership is edited.- Body (
GroupMemberUpdate): every field is optional and only the ones sent are written.displayNamemust not be empty when sent;sharedFieldsis the per-metric selection ({"all": true}shares everything);masterHidden: truehides the caller from every other member at once, whateversharedFieldssays.
Response
200returns the membership as it now stands, the same shapeGET .../members/mereturns.
Errors
| Status | Condition |
|---|---|
| 400 | displayName was sent empty |
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.
PUT
/
api
/
groups
/
{group_id}
/
members
/
me
Update the caller's own membership settings
curl --request PUT \
--url https://web-api.soxai.site/api/groups/{group_id}/members/me \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"displayName": "Jane",
"sharedFields": {
"sleep_score": true
},
"masterHidden": false
}
'import requests
url = "https://web-api.soxai.site/api/groups/{group_id}/members/me"
payload = {
"displayName": "Jane",
"sharedFields": { "sleep_score": True },
"masterHidden": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({displayName: 'Jane', sharedFields: {sleep_score: true}, masterHidden: false})
};
fetch('https://web-api.soxai.site/api/groups/{group_id}/members/me', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"uid": "user123",
"groupId": "b7d1f0c9a2e4d6f8b0c1",
"role": "admin",
"status": "active",
"displayName": "Mom",
"joinedAt": "2026-08-03T09:30:00+00:00",
"masterHidden": false,
"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
},
"sharingScope": "group_only"
}{
"error": "bad-request",
"error_msg": "displayName must not be empty"
}{
"error": "http-error",
"error_msg": "Invalid authentication credentials. <reason>"
}{
"error": "forbidden",
"error_msg": "Not enough permission"
}{
"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
Body
application/json
Response
The membership as it now stands, the same shape GET .../members/me returns.