---
title: "List member access requests"
method: GET
path: "/members/access-requests"
tags: ["Approval requests"]
---

# List member access requests

`GET /members/access-requests`

## Request

- Base URL: `https://api.replit.com/v1`
- URL: `https://api.replit.com/v1/members/access-requests`
- Auth: HTTP bearer

Returns member access requests for the authenticated Account. Today these are requests from workspace viewers for a member seat.

Without a status filter, only pending requests are returned. Pass a comma-separated list of statuses to include others. Requests with status `notified` are handled by the Account's identity provider and cannot be reviewed here.

Results are ordered by creation time, newest first. A pagination cursor is valid only with the same effective filters, includeEvents setting, and page size it was issued for. Reusing it with different effective settings returns `invalid_request`. Explicit default values and reordered or repeated statuses do not change these settings.

Every item includes an opaque `reviewEtag` for that request. Copy the
complete quoted value unchanged into `If-Match` on the matching review
route; do not parse it or use the collection HTTP ETag. This enables review
without a detail GET. `includeEvents` changes only whether history is included, not the
`reviewEtag`; a detail GET remains optional when history or the detail ETag
is needed.

## Query parameters

- `status` MemberAccessRequestStatus[]
- `workspaceId` string
- `includeEvents` boolean
- `limit` integer
- `cursor` string

## Response `200`

Member access requests visible to the authenticated Account.

- MemberAccessRequestListResponse
  - `data` MemberAccessRequestListItem[], required
    - `id` string, uuid, required: Stable identifier for this request.
    - `type` 'member_seat_upgrade', required: The access change requested. Today only a viewer asking for a member seat.
    - `status` 'pending' | 'notified' | 'approved' | 'fulfillment_started' | 'fulfilled' | 'fulfillment_failed' | 'denied' | 'canceled', required: Where the request is in its lifecycle. - `pending`: waiting for an admin to approve or deny it. - `approved`: an admin approved it and the seat change is being applied. - `fulfillment_started`: the seat change is in progress. - `fulfilled`: the requester now has a member seat. - `fulfillment_failed`: an admin approved it, but the seat could not be granted, for example because no seat was available or the workspace's roles are managed by an identity provider. No role changed. - `denied`: an admin denied it. - `canceled`: the request was withdrawn. - `notified`: the request was handed to the Account's identity provider, which manages roles for this workspace. Replit does not review these requests.
    - `workspaceId` string, required: Workspace the requester wants a member seat in.
    - `requesterUserId` string, required: Account user who asked for the seat.
    - `requester` ApprovalRequester, required
      - `id` string, required
      - `username` string, required
      - `email` string, email, required
      - `firstName` string, nullable, required
      - `lastName` string, nullable, required
    - `reason` string, nullable, required: The requester's message. Null when the request was recorded without one.
    - `alreadyMember` boolean, nullable, required: True when the requester already held a member seat at approval time, so approval changed nothing. Null until the request is fulfilled.
    - `version` integer, required: Increments with every recorded event. Use reviewEtag, not this field, when reviewing a listed request.
    - `createdAt` string, date-time, required
    - `updatedAt` string, date-time, required
    - `events` MemberAccessRequestEvent[]: Ordered public history, ascending by sequence. Present on list reads only when includeEvents=true.
      - `sequence` integer, required: Position in the request history. Sequence 1 is the creation event.
      - `eventType` 'request_started' | 'request_approved' | 'request_denied' | 'request_canceled' | 'request_fulfillment_started' | 'request_fulfilled' | 'request_fulfillment_failed', required
      - `fromStatus` 'pending' | 'notified' | 'approved' | 'fulfillment_started' | 'fulfilled' | 'fulfillment_failed' | 'denied' | 'canceled', required: Where the request is in its lifecycle. - `pending`: waiting for an admin to approve or deny it. - `approved`: an admin approved it and the seat change is being applied. - `fulfillment_started`: the seat change is in progress. - `fulfilled`: the requester now has a member seat. - `fulfillment_failed`: an admin approved it, but the seat could not be granted, for example because no seat was available or the workspace's roles are managed by an identity provider. No role changed. - `denied`: an admin denied it. - `canceled`: the request was withdrawn. - `notified`: the request was handed to the Account's identity provider, which manages roles for this workspace. Replit does not review these requests.
      - `toStatus` 'pending' | 'notified' | 'approved' | 'fulfillment_started' | 'fulfilled' | 'fulfillment_failed' | 'denied' | 'canceled', required: Where the request is in its lifecycle. - `pending`: waiting for an admin to approve or deny it. - `approved`: an admin approved it and the seat change is being applied. - `fulfillment_started`: the seat change is in progress. - `fulfilled`: the requester now has a member seat. - `fulfillment_failed`: an admin approved it, but the seat could not be granted, for example because no seat was available or the workspace's roles are managed by an identity provider. No role changed. - `denied`: an admin denied it. - `canceled`: the request was withdrawn. - `notified`: the request was handed to the Account's identity provider, which manages roles for this workspace. Replit does not review these requests.
      - `actor` union, required: Who performed the action recorded by this event.
        - object
          - `type` 'user', required
          - `userId` string, required
        - object
          - `type` 'api_key', required
          - `apiKeyId` string, uuid, required
        - object
          - `type` 'system', required
          - `systemId` string, required
      - `publicNote` string, nullable, required: Public note recorded with the event, such as a denial reason.
      - `occurredAt` string, date-time, required: When the event was recorded.
    - `reviewEtag` string, required: Opaque review token for this request. Copy the complete value unchanged into If-Match; do not parse it or use the collection HTTP ETag.
  - `pagination` union, required
    - object
      - `cursor` string, required: Opaque cursor for the next page.
      - `hasMore` true, required
    - object
      - `cursor` unknown, required
      - `hasMore` false, required

## Other responses

- `400`: The request parameters are invalid.
- `401`: The API key is missing, malformed, unknown, revoked, or expired.
- `403`: The API key lacks the required scope or Account entitlement.
- `404`: The requested resource does not exist or is not visible to this key.
- `429`: The API key or operation exceeded its rate limit.
- `500`: The server encountered an unexpected error.
- `503`: A required API dependency is temporarily unavailable.

## Changes

- **2026-09-19** `ba193431df44`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/replit/apis/replit-api/changes/members/access-requests/get.md)

---

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