---
title: "Invite people by email (bulk)"
method: POST
path: "/v1/workspaces/{workspaceId}/members/invite"
tags: ["Workspaces"]
---

# Invite people by email (bulk)

`POST /v1/workspaces/{workspaceId}/members/invite`

## Request

- Base URL: `https://shareout.site`
- URL: `https://shareout.site/v1/workspaces/{workspaceId}/members/invite`
- Auth: HTTP bearer

Owner or admin only. `emails` is an array or one string of pasted text — commas, semicolons, spaces, newlines, `Name <email>` and spreadsheet columns all work; tokens without `@` are ignored, duplicates collapse. Up to 100 valid addresses per call (`400 TOO_MANY_EMAILS` beyond that — batch). New or not-yet-active people get a 7-day join link by email; people with an account are added and notified. Existing members keep their role (change roles with `POST /members`). Re-inviting a pending person retires their older links.

## Request body

- object
  - `emails` union, required
    - string[]
    - string
  - `role` 'member' | 'admin'
  - `message` string: Optional personal note passed to the invite email.

## Response `200`

Per-email results

- object
  - `results` object[]
    - `email` string
    - `code` 'invited' | 'added' | 'already_member' | 'invalid_email' | 'domain_not_allowed'
    - `status` 'invited' | 'added' | 'updated' | 'skipped': Legacy status; prefer `code`.
    - `email_sent` boolean: For `invited` — whether the invite email went out.
    - `invite_url` string: Join link, present only when the email did not go out. Share it by hand.
  - `summary` object: Count per `code`.

## Other responses

- `400`: Invalid request
- `403`: Access denied

## Changes

- **2026-10-09** `1069d922d239`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/shareout/apis/shareout-rest-api/changes/v1/workspaces/:workspaceId/members/invite/post.md)

---

[API](https://skmtc.dev/shareout/apis/shareout-rest-api.md) - [All operations](https://skmtc.dev/shareout/apis/shareout-rest-api/llms.txt) - [OpenAPI document](https://skmtc.dev/shareout/apis/shareout-rest-api/revisions/1e3f7fd34f6d?raw)
