# removeTeamMember

Remove a teammate from the team, the team page's Remove from team. It is a SUSPENSION, not a delete: they lose access at once and stop using a seat, but stay on listTeamMembers as SUSPENDED and restoreTeamMember brings them back. On the way out their open tasks go to YOU (the key owner), their contacts' point-person seats are released (a contact left with no agent gets you), and they are taken out of the workflow steps and lead-routing forms that named them. Restoring does NOT hand any of that back; the person approves it on a card. Optional reason is kept on the member. You cannot remove yourself. Organization admins only. The result reports what the handover did: handover (NOT_NEEDED | REASSIGNED | REMOVED | FAILED), reassignedTaskCount, releasedContactSeatCount, handedOverContactCount, and openWorkTruncated / openWorkFailed when some work is still theirs; tell the user those.

- Call: `POST https://server.goliathdata.com/api/v1/call` with `{ "operationId": "removeTeamMember", "variables": {...} }`
- Scope: `ADMIN`
- Type: mutation
- Idempotency: honors `Idempotency-Key` (24 h)
- Rate-limited: no

## Variables

- `userId`: `ID!` (required)
- `reason`: `String`

## Response (data, an example)

```json
{
  "organizationMutation": {
    "suspendOrganizationMemberWithImpact": {
      "userId": "<ID>",
      "handover": "NOT_NEEDED",
      "handoverSourceCount": 0,
      "intactSourceCount": 0,
      "retainedPartnerGrantCount": 0,
      "reassignedTaskCount": 0,
      "releasedContactSeatCount": 0,
      "handedOverContactCount": 0,
      "openWorkTruncated": true,
      "openWorkFailed": true
    }
  }
}
```

## Example

```bash
curl https://server.goliathdata.com/api/v1/call \
  -H "Authorization: Bearer $GOLIATH_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "operationId": "removeTeamMember",
    "variables": {
      "userId": "<userId>"
    }
  }'
```
