> For the complete documentation index, see [llms.txt](https://docs.vomevolunteer.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.vomevolunteer.com/resources/editor-7/write-operations/remove-users-from-sites.md).

# Remove users from sites

This endpoint removes one or more users from one or more sites. It uses an identical body to the assign endpoint, and supports single or bulk input.

**Endpoint Description:**

* **Endpoint**: `POST /api/sites/unassign/`
* **Base URL**: `https://api.vomevolunteer.com`

**API specification:**

* **user\_ids** (`array`): List of Vome IDs.
* **site\_ids** (`array`): List of site ids.
* **user\_id** (`string`): Single Vome ID; normalized into `user_ids`.
* **site\_id** (`string`): Single site id; normalized into `site_ids`.

**Authorization:**

Requests to this endpoint must include an `API-KEY` in the header for authentication.

```python
headers = {
    "API-KEY": "your_unique_api_key_here"
}
response = requests.post("https://api.vomevolunteer.com/api/sites/unassign/", headers=headers)
```

**Example Request Payload:**

```json
{
    "user_ids": ["<VOME_ID_1>", "<VOME_ID_2>"],
    "site_ids": ["<SITE_ID_A>", "<SITE_ID_B>"]
}
```

**Response Structure:**

```json
{
    "removed": [
        { "user_id": "<VOME_ID_1>", "removed": 2 }
    ],
    "skipped_user_ids": []
}
```

*Note: `removed` is the count of membership rows deleted for that user. As with assign, unknown users are returned in `skipped_user_ids` and are not fatal; only unknown sites produce a `400`.*
