Partially updates a Team Member with a merge-patch body. services, when present, replaces the full set of bookable service links; each link is keyed by service_id and carries the same override fields as on Service. Missing services leaves links unchanged, services: [] unlinks every service, and null override fields inherit the Service default. Requires If-Match; changing links moves the ETag on both the Team Member and affected Service resources.
Public profession label shown to clients (for example in online booking).
Moves the Team Member on or off a paid seat in the Location's licence, changing what the Location is charged. Turning it on fails with 422 when the licence has no free paid seat; turning it off also drops schedule access, because a non-billable member cannot be bookable. Locations on the older licensing model ignore this field.
- Mock serverhttps://developer.alteg.io/_mock/en/b2b-v3/openapi/locations/{location_id}/team_members/{team_member_id}
- Preview resource API contract - endpoint surface is not live yethttps://api.alteg.io/api/v3/locations/{location_id}/team_members/{team_member_id}
- OAuth2
- RestrictedKey
curl -i -X PATCH \
'https://developer.alteg.io/_mock/en/b2b-v3/openapi/locations/{location_id}/team_members/{team_member_id}' \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Content-Type: application/merge-patch+json' \
-H 'If-Match: string' \
-d '{
"position_id": 16
}'The updated team member.
Requests left in the most constrained policy window that applies to this request.
On 429, seconds until the most constrained policy frees up; it equals Retry-After there. On a successful response it reports the length of that policy's window rather than the time left in the current one, so treat it as the window size, not as a countdown — the counter to pace against is RateLimit-Remaining.
Most constrained policy applied to the request, as <limit>;w=<window in seconds>.
Version tag of the returned resource. Send it back in If-Match on the next PATCH or DELETE.
Public profession label shown to clients (for example in online booking).
Whether this Team Member occupies a paid seat in the Location's licence, which is what the Location is charged for. A non-billable member cannot hold schedule access, so is_bookable is always false for one. Locations still on the older licensing model report false here and ignore the field on write — there the paid seat count follows schedule access instead.
{ "id": 321, "object": "team_member", "name": "Aigerim Bekova", "specialization": "Hairdresser", "position_id": 15, "service_ids": [ 100 ], "is_bookable": true, "created_at": "2026-06-01T08:00:00Z", "updated_at": "2026-07-01T08:00:00Z" }