---
title: "Preview what removing a member would break"
method: GET
path: "/member/{userId}/offboarding"
tags: ["Members"]
---

# Preview what removing a member would break

`GET /member/{userId}/offboarding`

## Request

- Base URL: `https://api.elaichi.ai`
- URL: `https://api.elaichi.ai/member/{userId}/offboarding`
- Auth: HTTP bearer

Previews what removing this member would break, before anything is changed. Lists every connection they own (all are deleted on removal), each with `references` (exact counts of the toolboxes and other members' synthetic tools using it, plus at most five names) and up to ten `replacement_candidates` (same connector, active, not the leaver's, usable by you; owner named) beside an exact `replacement_candidate_count`. `credentials` counts the API tokens and AI client logins that removal revokes. Separately, `delegated_entries` lists entries on other members' toolboxes whose pin currently rides on this member's own `use` grant, not their ownership. This is non-blocking, and member removal never refuses over it, but once the member is gone those entries go unmet until somebody with their own `use` on the connection re-pins them; nothing does that automatically. `connectors` lists every custom connector the member owns, each with a short `shared_with` summary and a `connection_count`. Read-only: call it before `DELETE /member/{userId}` to collect the hand-over and replacement decisions that call takes. Requires `member:manage`.

## Path parameters

- `userId` string, required

## Headers

- `X-Organization-Id` string

## Response `200`

OK

- object
  - `user_id` string
  - `connections` object[]: Every connection the member owns: `connection`, `referenced_by`, `private`, `needs_resolution` (informational), `references`, `replacement_candidates`, `replacement_candidate_count`.
  - `no_eligible_successor` boolean: True when the member owns connectors and nobody can receive them: no active member other than the leaver and the caller exists, and the caller lacks `connector:manage` so cannot take them either. `DELETE /member/{userId}` cannot succeed until another member is invited. Always false when `connectors` is empty. A bounded existence check, never a member count.
  - `sole_successor` boolean: True when the member owns connectors, no active member other than the leaver and the caller exists, and the caller holds `connector:manage`: the caller may then name themselves as the connector recipient (audited as `self_assigned_sole_successor`). Connectors only. Mutually exclusive with `no_eligible_successor`; always false when `connectors` is empty.
  - `connectors` object[]: Every custom connector the member owns: `slug`, `name`, `logo`, `owner_user_id`, `private`, the bounded `shared_with` rollup, `connection_count`, `needs_resolution` (always true: every connector needs a new owner) and timestamps. Resolved by `connector_actions` on `DELETE /member/{userId}`.
  - `delegated_entries` object[]: Non-blocking: entries elsewhere in the org whose delegation chain depends on this member, independent of which connections they own.
    - `toolbox_id` string
    - `toolbox_name` string
    - `entry_id` string
    - `connector_slug` string, nullable
    - `tool_name` string, nullable
    - `connection_id` string, nullable

## Other responses

- `400`: Bad request
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not found
- `429`: Rate limited

---

[API](https://skmtc.dev/elaichi/apis/elaichi-api.md) · [All operations](https://skmtc.dev/elaichi/apis/elaichi-api/llms.txt) · [OpenAPI document](https://skmtc.dev/elaichi/apis/elaichi-api/revisions/b22cfb7b6d15?raw)
