---
title: "Invite a member"
method: POST
path: "/api/space/members"
tags: ["Space Members"]
---

# Invite a member

`POST /api/space/members`

Sends an invitation to join the space. The member exists immediately with
`activated: false` and activates by accepting the invitation.

Only `admin` and `employee` can be assigned; `owner` is rejected with `invalid_role`.
Give a new member access to projects with
[Enable a member for a project](/docs/apis/rest/space/members/enable-member-project).

#### 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.

## Request body

- SpaceCreateMemberRequest — Request body for inviting a member.
  - `email` string, required — The email address to invite. Must be a valid address that does not already belong to a member of the space (`already_a_member`).
  - `role` 'admin' | 'employee', required — The roles that may be assigned through the API. `owner` cannot be assigned, and the owner's role cannot be changed.
  - `name` string — The member's name.

## Response `201`

The request has succeeded and a new resource has been created as a result.

- SpaceMember — A membership in the space.
  - `type` 'member', required — The object type. Always `member`.
  - `id` string, uuid, required — Universal Unique Identifier.
  - `email` string, required — The member's email address.
  - `name` string, nullable, required — The member's name, or `null` when none was given.
  - `role` 'owner' | 'admin' | 'employee' | 'guest', required — A member's role in the space.
  - `job_title` 'entrepreneur' | 'product_manager' | 'developer' | 'other', required — A member's job title.
  - `activated` boolean, required — Whether the member has accepted the invitation. `false` until the invitation is accepted.
  - `last_logged_in` string, date-time, nullable, required — The date and time the member last signed in, or `null` if they never have.
  - `created_at` string, date-time, required — The date and time when the membership was created.
  - `updated_at` string, date-time, required — The date and time when the membership was last updated.

## Other responses

- `400` — The request body is not valid JSON.
- `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`.
- `422` — The invited email already belongs to a member of the space (`already_a_member`), the `role` is not `admin` or `employee` (`invalid_role`), or the `email` is not a valid address.
- `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/post.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)
