---
title: "Add multiple members to organization"
method: POST
path: "/v1/people/bulk"
tags: ["People"]
---

# Add multiple members to organization

`POST /v1/people/bulk`

Bulk adds multiple members to the authenticated organization. Each member must have a valid user ID that exists in the system. Members who already exist in the organization or have invalid data will be skipped with error details returned. Supports both API key authentication (X-API-Key header) and session authentication (Bearer token or cookies).

## Request body

- BulkCreatePeopleDto
  - `members` CreatePeopleDto[], required — Array of members to create
    - `userId` string, required — User ID to associate with this member
    - `role` string, required — Role for the member (built-in role name or custom role ID)
    - `department` 'none' | 'admin' | 'gov' | 'hr' | 'it' | 'itsm' | 'qms' — Member department
    - `isActive` boolean — Whether member is active
    - `fleetDmLabelId` number — FleetDM label ID for member devices
    - `jobTitle` string — Job title for the member

## Response `201`

Bulk member creation completed

- object
  - `created` PeopleResponseDto[] — Successfully created members
    - `id` string, required — Member ID
    - `organizationId` string, required — Organization ID this member belongs to
    - `userId` string, required — User ID associated with member
    - `role` string, required — Member role
    - `createdAt` string, date-time, required — When the member was created
    - `department` 'none' | 'admin' | 'gov' | 'hr' | 'it' | 'itsm' | 'qms', required — Member department
    - `jobTitle` object, nullable, required — Job title for the member
    - `isActive` boolean, required — Whether member is active
    - `deactivated` boolean, required — Whether member is deactivated
    - `fleetDmLabelId` object, nullable, required — FleetDM label ID for member devices
    - `user` UserResponseDto, required
      - `id` string, required — User ID
      - `name` string, required — User name
      - `email` string, required — User email
      - `emailVerified` boolean, required — Whether email is verified
      - `image` object, nullable, required — User profile image URL
      - `createdAt` string, date-time, required — When the user was created
      - `updatedAt` string, date-time, required — When the user was last updated
      - `lastLogin` object, nullable, required — Last login time
      - `role` object, nullable, required — Platform role of the user (managed by Better Auth admin plugin)
  - `errors` object[] — Members that failed to be created with error details
    - `index` number — Index in the original array where the error occurred
    - `userId` string — User ID that failed to be added
    - `error` string — Error message explaining why the member could not be created
  - `summary` object
    - `total` number — Total number of members in the request
    - `successful` number — Number of members successfully created
    - `failed` number — Number of members that failed to be created
  - `authType` 'api-key' | 'session' — How the request was authenticated
  - `authenticatedUser` object
    - `id` string — User ID
    - `email` string — User email

## Other responses

- `400` — Bad Request - Invalid bulk data or validation errors
- `401` — Unauthorized - Invalid authentication or insufficient permissions
- `404` — Organization not found
- `500` — Internal server error

## Changes

- **2026-04-03** `805d5411bc33` — 1 info
  - added the required property `created/items/deactivated` to the response with the `201` status

[Change history](https://skmtc.dev/trycompai/apis/comp-ai-api/changes/v1/people/bulk/post.md)

---

[API](https://skmtc.dev/trycompai/apis/comp-ai-api.md) · [All operations](https://skmtc.dev/trycompai/apis/comp-ai-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/trycompai/comp-ai-api/revisions/ac8d1e4e2e79/schema)
