---
title: "Lists the organization's Organization Admin removal requests, pending first."
method: GET
path: "/api/v1/users/removal-requests"
tags: ["UserRemovalRequests"]
---

# Lists the organization's Organization Admin removal requests, pending first.

`GET /api/v1/users/removal-requests`

## Request

- Base URL: `https://app.flexonthejob.com`
- URL: `https://app.flexonthejob.com/api/v1/users/removal-requests`
- Auth: HTTP bearer

Requires `ManageUsers`. Not cursor-paginated: pending requests plus (with
`includeClosed=true`) the latest closed ones, at most 100, in one response with
`nextCursor` always `null`. Sends a weak `ETag`. Example:
`GET /api/v1/users/removal-requests?includeClosed=true`.
Also available as CSV (`Accept: text/csv` or `?format=csv`); paging cursor in `X-Next-Cursor`.

## Query parameters

- `includeClosed` boolean
- `format` 'csv'

## Response `200`

The requests.

- PagedResponseOfAdminRemovalRequestDto: One page of a cursor-paginated /api/v1 collection (API_AND_MCP.md: `?after=<syncId>&limit=`).
  - `items` AdminRemovalRequestDto[]: Items of this page in ascending creation order.
    - `id` integer: Request id. Example: `12`.
    - `targetUserId` string: User id (string GUID) of the Organization Admin being removed. Example: `"8f0c3c1e-2b6d-4c55-9a51-0d3f3c1b7e21"`.
    - `targetEmail` string: E-mail of the admin being removed. Example: `"pat@example.com"`.
    - `targetName` string, nullable: Display name of the admin being removed, when recorded. Example: `"Pat Lee"`.
    - `requestedByUserId` string: User id (string GUID) of the Organization Admin who asked; the same as `targetUserId` for a self-removal.
    - `requestedByEmail` string: E-mail of the admin who asked. Example: `"sam@example.com"`.
    - `requestedByName` string, nullable: Display name of the admin who asked, when recorded. Example: `"Sam Carter"`.
    - `action` 'Demote' | 'Deactivate': What a removal request does to the Organization Admin.
    - `newRole` string, nullable: For `Demote`: `Manager` or `User`; null for `Deactivate`.
    - `reason` string, nullable: The requester's optional note (up to 500 characters). Example: `"Leaving the company on Friday"`.
    - `status` 'Pending' | 'Approved' | 'Contested' | 'Cancelled' | 'Applied': Where a removal request stands. Only `Pending` is open.
    - `createdAt` string, date-time: When it was requested (ISO-8601 UTC). Example: `"2026-09-23T14:05:00Z"`.
    - `effectiveAt` string, date-time: End of the notice period (ISO-8601 UTC, `createdAt` + 14 days; equal to `createdAt` for a self-removal): the target can contest until then, and it is applied shortly after. Example: `"2026-10-07T14:05:00Z"`.
    - `daysRemaining` integer: Whole days left until `effectiveAt`, rounded up; 0 once it has passed or the request is closed. Example: `14`.
    - `resolvedAt` string, date-time, nullable: When the request closed (ISO-8601 UTC); null while `Pending`.
    - `resolvedByEmail` string, nullable: E-mail of whoever closed it; null when the notice period ran out or it lapsed.
    - `resolutionNote` string, nullable: Why a request lapsed or was superseded. Example: `"The requester is no longer an active Organization Admin."`
  - `nextCursor` string, nullable: SyncId of the last item; pass it back as `?after=` to fetch the next page. `null` when this is the last page.

## Other responses

- `304`: Unchanged since the supplied `If-None-Match`.
- `401`: Unauthorized
- `403`: The key's creator is not an Organization Admin.
- `409`: The key's creator is unknown on this server.
- `429`: Too Many Requests
- `502`: The sync server answered with an unexpected error.
- `503`: This server cannot reach the sync server.

---

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