Change a member’s role
const url = 'https://api.sloose.com/orgs/org_9f3c/members/usr_4b19';const options = { method: 'PATCH', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"role":"operator"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request PATCH \ --url https://api.sloose.com/orgs/org_9f3c/members/usr_4b19 \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "role": "operator" }'Sets the role, and marks it as manually assigned so signing in again does not undo it — which matters on an org that follows Zoho profiles, where the next sign-in would otherwise reset what you just decided.
You may lower your own role but not raise it, you cannot change somebody who outranks you, and you cannot leave the org without an owner.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”The org id the session was issued for. A token for one org can never read another.
Example
org_9f3cThe org id the session was issued for. A token for one org can never read another.
The member’s user id, from the member list.
Example
usr_4b19The member’s user id, from the member list.
Request Bodyrequired
Section titled “Request Bodyrequired”object
Ranked: operator < builder < admin < owner.
Responses
Section titled “Responses”The member as they now stand.
object
object
Where the role came from: the CRM profile at sign-in, or set by hand here. A manual role is not reset by signing in again.
How the org’s CRM knows this member — the Zoho user id. Null for someone who joined another way.
When access was revoked. Null while they can still use the org.
Example
{ "member": { "role": "operator" }}The request body did not match the schema. issues carries the Zod issue list.
The error envelope every non-2xx answer uses.
object
Human-readable explanation.
Machine-readable reason. Absent on a few legacy 400s.
Examplegenerated
{ "error": "example", "code": "example"}No bearer, or one that is expired, revoked or no longer resolves to a member.
The error envelope every non-2xx answer uses.
object
Human-readable explanation.
Machine-readable reason. Absent on a few legacy 400s.
Examplegenerated
{ "error": "example", "code": "example"}You tried to raise your own role (SELF_CHANGE), or to change somebody who outranks you or grant a role above your own (OUTRANKED).
The error envelope every non-2xx answer uses.
object
Human-readable explanation.
Machine-readable reason. Absent on a few legacy 400s.
Examplegenerated
{ "error": "example", "code": "example"}That person is not in this org (MEMBER_NOT_FOUND).
The error envelope every non-2xx answer uses.
object
Human-readable explanation.
Machine-readable reason. Absent on a few legacy 400s.
Examplegenerated
{ "error": "example", "code": "example"}The org would be left with no owner (LAST_OWNER), or their access is revoked and must be restored first (ACCESS_REVOKED).
The error envelope every non-2xx answer uses.
object
Human-readable explanation.
Machine-readable reason. Absent on a few legacy 400s.
Examplegenerated
{ "error": "example", "code": "example"}