---
title: "Remove a member"
method: DELETE
path: "/members/{id}"
tags: ["Roles and members"]
---

# Remove a member

`DELETE /members/{id}`

## Request

- Base URL: `https://api.primitive.dev/v1`
- URL: `https://api.primitive.dev/v1/members/{id}`
- Auth: HTTP bearer

Removes a member from the organization, after transferring what they own (POST /members/{id}/transfer). Only an owner removes an owner; nobody removes someone whose access is wider than their own, or themselves. What they still own is then flagged or suspended for a decision (GET /access-suspensions). When the identity provider no longer has the membership, the local membership is ended here with the same cleanup; a retry while the removal is still finishing completes it. Person only: a dashboard session, or the person's own OAuth or CLI token with a session step-up of purpose `members.remove` (the person confirms at the step_up_url a 403 step_up_required answer carries, which names this client and the member, then send the token in the Primitive-Step-Up header; the token works only with the client it was confirmed for and only for the member it was confirmed for). Needs members:manage. API keys are refused.

## Path parameters

- `id` string, uuid, required

## Response `200`

Remove a member

- object
  - `success` true, required
  - `data` RemoveMemberResult, required
    - `removed` true, required
    - `id` string, required

## Other responses

- `400`: validation_error: you cannot remove yourself.
- `401`: Invalid or missing API key
- `403`: Authenticated caller lacks permission for the operation
- `404`: feature_disabled: the feature is not enabled for the organization; or not_found: the item the path names does not exist.
- `409`: conflict: the member was removed, or removed and added back, while you were removing them.
- `429`: Rate limit exceeded. The `ratelimit-*` headers describe the limiter that rejected this request, with its own limit and window, not the API budget that successful responses report. A limiter that reports only a wait sends `Retry-After` alone.
- `500`: cleanup_incomplete: the membership ended, but revoking what remains of the person's access did not finish.
- `502`: removal_failed: the identity provider refused the removal. Nothing was changed.
- `503`: service_unavailable: the removal could not start, or did not finish; retry to finish it.
- `504`: removal_timeout: the identity provider did not answer in time; the removal may still complete.

---

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