---
title: "Enable a member for a project"
method: PUT
path: "/api/space/members/{member_id}/projects/{project_id}"
tags: ["Space Members"]
---

# Enable a member for a project

`PUT /api/space/members/{member_id}/projects/{project_id}`

Gives a member access to a root project and, through it, to all of the project's
subprojects. The call is idempotent: repeating it leaves the same single enablement in
place and returns `200` again.

Enablement applies to root projects only. Naming a subproject is rejected with
`subproject_access_is_inherited_from_root`, and the message names the root project to
enable instead.

#### Permissions

Authenticate with a [Personal access token](/docs/apis/authorization#personal-access-tokens) whose holder is an owner or admin of the space. A project API token is not accepted on this endpoint, and a Personal access token has no scopes: the holder's role in the space is the whole authorization decision.

## Path parameters

- `member_id` string, uuid, required — Universal Unique Identifier.
- `project_id` string, uuid, required — Universal Unique Identifier.

## Response `200`

The request has succeeded.

- SpaceMemberProject — A root project a member is enabled for, with the subprojects reached through that enablement.
  - `type` 'project', required — The object type. Always `project`.
  - `id` string, uuid, required — Universal Unique Identifier.
  - `name` string, required — The name of the project.
  - `created_at` string, date-time, required — The date and time when the project was created.
  - `updated_at` string, date-time, required — The date and time when the project was last updated.
  - `subprojects` SpaceSpaceProject[], required — The subprojects reached through this enablement. Present on the enablement endpoints only, not on the nested entries.
    - `type` 'project', required — The object type. Always `project`.
    - `id` string, uuid, required — Universal Unique Identifier.
    - `name` string, required — The name of the project.
    - `created_at` string, date-time, required — The date and time when the project was created.
    - `updated_at` string, date-time, required — The date and time when the project was last updated.

## Other responses

- `401` — The credential is missing, unknown, or revoked; its holder is not a member of the space in the subdomain; or the member is not an owner or admin. The body is the plain text `Unauthorized`. An unverified space instead receives the JSON body `{"message": "Please validate a phone number to access your account."}` on every endpoint under `/api/space`.
- `404` — The member, project, or payment method does not exist in this space. The body is the plain text `Not Found`.
- `422` — The path named a subproject (`subproject_access_is_inherited_from_root`). The message names the root project to enable or disable instead.
- `500` — An internal server error occurred.

## Changes

> 161 revisions in range; 3 could not be searched.

- **2026-09-15** `45bac4fd93ab` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/signalwire/apis/signalwire-rest-api/changes/api/space/members/:member_id/projects/:project_id/put.md)

---

[API](https://skmtc.dev/signalwire/apis/signalwire-rest-api.md) · [All operations](https://skmtc.dev/signalwire/apis/signalwire-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/signalwire/apis/signalwire-rest-api/revisions/20ee0f568ece?raw)
