---
title: "Get one member access request"
method: GET
path: "/members/access-requests/{requestId}"
tags: ["Approval requests"]
---

# Get one member access request

`GET /members/access-requests/{requestId}`

## Request

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

Returns one member access request for the authenticated Account, including its public history.

The response includes a strong opaque `ETag`. Send the complete value
unchanged in `If-None-Match` on a later detail read. A matching value returns
304 with no body; otherwise the response is 200 with the request details.
Use the same tag in `If-Match` when reviewing the request.

## Path parameters

- `requestId` string, uuid, required

## Headers

- `If-None-Match` string: HTTP entity-tag validators, separated by commas, or '*'. Weak validators are supported.

## Response `200`

The requested member access request and its public history.

- MemberAccessRequestResponse
  - `data` object, 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 the ETag header, not this field, for conditional requests.
    - `createdAt` string, date-time, required
    - `updatedAt` string, date-time, required
    - `events` MemberAccessRequestEvent[], required: Ordered public history, ascending by sequence.
      - `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.

## Other responses

- `304`: The request representation has not changed since the ETag sent in If-None-Match. The body is empty.
- `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/:requestId/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)
