Update member role
PUT /teams/{teamId}/members/{userId}/role
Changes a member's role on the team.
teams:write · Team permission:members.set_role · Rate limit: default (120 / 60s)viewer, editor and owner are no longer accepted.They named a model the product no longer has. On this endpoint owner meant "runs the team" and mapped to Admin (not the account owner), and there was no name at all for Deputy Admin, Data Manager, or a role your team built for itself. A caller sending owner was granting something other than what they asked for.Send one of admin, deputy_admin, data_manager, editor, viewer, or a roleId, which is the only way to name a custom role. There is no deprecation window. The old names return 400 BAD_REQUEST.Beyond the key's own scope, the person who created the key must hold members.set_role on the team, and the containment rules apply exactly as they do in the Hub: you cannot change your own role, you cannot change somebody whose role is not smaller than yours, and the account owner cannot be given another role. Each of those has its own error. See Errors.
Path parameters
Request body
Send exactly one of role or roleId.
admin, deputy_admin, data_manager, editor or viewer. owner is not assignable.{ "role": "data_manager" }
{ "roleId": "01930000-0000-7000-8000-000000000004" }
Request
curl -X PUT https://api.twominutereports.com/v1/teams/0190f8b0-1a2b-7c3d-8e4f-5a6b7c8d9e0f/members/0190f8a4-5e6f-7a8b-9c0d-1e2f3a4b5c6d/role \
-H "Authorization: Bearer tmrc_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{ "role": "data_manager" }'
Response
{
"success": true,
"data": { "updated": true }
}
{
"success": false,
"error": { "code": "BAD_REQUEST", "message": "Unknown or unassignable role \"owner\". Send one of admin, deputy_admin, data_manager, editor, viewer — or a `roleId` for a custom role." }
}
{
"success": false,
"error": { "code": "PAYMENT_REQUIRED", "message": "Your team's plan has been cancelled. Please reactivate your subscription to continue." }
}
{
"success": false,
"error": { "code": "INSUFFICIENT_ROLE", "message": "[email protected] is not allowed to use members.set_role. This needs a role that includes it; their role is editor." }
}
The role name is not one this endpoint accepts. The legacy viewer/editor/owner vocabulary was removed in September 2026.
{
"success": false,
"error": { "code": "BAD_REQUEST", "message": "Unknown or unassignable role \"owner\". Send one of admin, deputy_admin, data_manager, editor, viewer — or a `roleId` for a custom role." }
}
Nobody can change their own role, not even to reduce it.
{
"success": false,
"error": { "code": "CANNOT_ACT_ON_SELF", "message": "You cannot change your own role or seat. Ask another Admin to do it." }
}
The target holds permissions the key's holder does not. An equal role is refused too.
{
"success": false,
"error": { "code": "CANNOT_ACT_ON_MEMBER", "message": "This member holds permissions you do not have, so you cannot change or remove them. Ask an Admin." }
}
The member is the account owner, whose role nobody can change.
{
"success": false,
"error": { "code": "BAD_REQUEST", "message": "That user is the account owner and cannot be changed." }
}
The key holder's role allows this, but they have no seat in the team.
{
"success": false,
"error": { "code": "SEAT_REQUIRED", "message": "[email protected] needs a seat in this team to use members.set_role. Their role allows it — an Admin can assign a seat in Team settings." }
}
Returned when the user is not a member of the team.
{
"success": false,
"error": { "code": "NOT_FOUND", "message": "Member not found in team" }
}