---
title: "Invite workspace members in bulk"
method: POST
path: "/api/workspace/invitations/bulk-invite"
---

# Invite workspace members in bulk

`POST /api/workspace/invitations/bulk-invite`

<Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>

Invites up to 50 people to a workspace at once, the same way as [Invite workspace member](/api-reference/invite-workspace-member).

The whole request is refused when a `role` or `group_id` isn't allowed. Otherwise each invitation succeeds or fails on its own, so a `200` doesn't mean every invitation went out. Check `failed`, which lists existing members, people with a pending invitation, and invitations that couldn't be saved or emailed.

Retrying is safe: invitations that went out the first time come back in `failed` as already pending.

Inviting is limited to 6 requests per minute, shared by [Invite workspace member](/api-reference/invite-workspace-member), [Invite workspace members in bulk](/api-reference/invite-workspace-members-in-bulk), [Resend workspace invitation](/api-reference/resend-workspace-invitation), and [Resend workspace invitations in bulk](/api-reference/resend-workspace-invitations-in-bulk). A signed-in session has its own limit, and every personal access token for the workspace shares one. Some workspaces have a different limit.

<Note>Call this as an owner or admin of the workspace, with a personal access token for that workspace sent as a Bearer token, or from a signed-in session. A read-only token is refused, and workspace API keys aren't accepted.</Note>

## Query parameters

- `workspaceId` string, required — ID of the workspace. With a personal access token, use the token's workspace. Get it from `organization_id` in [Get app](/api-reference/get-app).

## Request body

- BulkInviteRequest — Invitations to send in one request.
  - `invitations` BulkInvitationItem[], required — The people to invite, 1 to 50. Each email can appear once.
    - `email` string, required — Email of the person to invite.
    - `role` 'admin' | 'editor' | 'viewer' — Role the invitee gets when they accept. Defaults to `viewer`. `admin` needs the Business plan or higher.
    - `group_id` string, nullable — ID of a custom group to add the invitee to when they accept. Get it from [List workspace groups](/api-reference/list-workspace-groups). Needs a plan that includes groups.

## Response `200`

Which invitations went out.

- BulkInvitationResult — Which invitations went out.
  - `total_sent` integer, required — Number of invitations sent, the length of `successful`.
  - `successful` string[], required — Emails an invitation was sent to.
  - `failed` FailedInvitation[], required — Invitations that weren't sent, with the reason. Empty when every invitation went out.
    - `email` string, required — Email the invitation was for.
    - `error` string, required — Why it wasn't sent. Its wording can change, so don't parse it.

## Other responses

- `400` — A `group_id` is an identity-provider group.
- `401` — Missing or invalid credentials.
- `402` — A `group_id` is set and the workspace's plan doesn't include groups.
- `403` — You aren't an owner or admin of the workspace, your token is for a different workspace or is read-only, your credential can't be used on this endpoint, or `role` is `admin` and the workspace's plan doesn't allow admins.
- `404` — A `group_id` isn't a group in this workspace.
- `409` — Your workspace requires an unlocked SSO session.
- `422` — Validation Error
- `429` — Rate limit exceeded.

## Changes

- **2026-10-05** `8a09a50ea8c9` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/idealspot/apis/base44-app-management-api/changes/api/workspace/invitations/bulk-invite/post.md)

---

[API](https://skmtc.dev/idealspot/apis/base44-app-management-api.md) · [All operations](https://skmtc.dev/idealspot/apis/base44-app-management-api/llms.txt) · [OpenAPI document](https://skmtc.dev/idealspot/apis/base44-app-management-api/revisions/dddf17e0f9f0?raw)
