Remove member
/member/{userId}
Irreversible: revokes the member's access to this organization immediately. Re-adding them means a fresh invite, and their roles and team memberships are not restored. Their personal connections are resolved first — call `GET /member/{userId}/offboarding` to see which ones shared toolboxes depend on, then supply a `connection_actions` entry for each. Personal connections with no entry are DELETED, which destroys the vaulted credential. Nothing is applied unless every referenced connection has a resolution: otherwise the call fails with 409 `connections_need_resolution` and lists the unresolved connections in `error.details`. `transfer` hands a connection to one named member and rewrites `owner_user_id` only (§2) — its existing grants are untouched. There is deliberately no "give it to the team/org" shortcut: that is a grant, a separate act via `POST /connection/{id}/share`, not something offboarding manufactures on an admin's behalf. Requires `member:manage`. A BROWSER SESSION must additionally carry a fresh step-up reauthentication (`X-Step-Up-Token`, obtained from `/auth/step-up`); without one the call answers `428 step_up_required` and `error.details` names the action and resource to prove. An organization API token is not challenged: step-up re-proves the person behind a session, and a token has no person behind it. The gate is demanded LAST, after every resolution refusal above, so an admin never re-authenticates only to be told the removal needs decisions first.
Path Parameters
User id (usr_…) of an org member.
Request Body
One decision per personal connection that a shared toolbox references.
transfer keeps the vaulted credential and the toolbox entries that pin the connection working, moving ownership to target_user_id; delete destroys the credential.
transferdelete
Connection id (conn_…) from the offboarding preflight.
Required for transfer (usr_…) — the member who becomes the connection's new owner. Cannot be the member being removed.
Response Body
curl -X DELETE 'https://api.elaichi.ai/member/<userId>' \
-H 'Authorization: Bearer $ELAICHI_API_TOKEN' \
-H 'Content-Type: application/json'const response = await fetch('https://api.elaichi.ai/member/<userId>', {
method: 'DELETE',
headers: {
'Authorization': 'Bearer ' + process.env.ELAICHI_API_TOKEN,
'Content-Type': 'application/json',
},
});
const data = await response.json();
console.log(data);import os
import requests
url = "https://api.elaichi.ai/member/<userId>"
headers = {
"Authorization": f"Bearer {os.environ['ELAICHI_API_TOKEN']}",
"Content-Type": "application/json",
}
response = requests.delete(url, headers=headers)
print(response.json())