---
title: "Create Users"
method: POST
path: "/api/platform/users/bulk"
tags: ["platform"]
---

# Create Users

`POST /api/platform/users/bulk`

## Request

- Base URL: `https://app.gocrisp.com` (the document declares no server; this is the origin it was published from)
- URL: `https://app.gocrisp.com/api/platform/users/bulk`
- Auth: OAuth 2
  - Authorization code: `https://login.gocrisp.com/authorize`
  - Token URL: `https://login.gocrisp.com/oauth/token`
- TypeScript: <https://skmtc.dev/gocrisp/apis/crisp-app-dock/docs/api/platform/users/bulk/post.ts> (a function with typed inputs; its response is checked against the schema)

Create many Auth0 users in one organization.

Requires ``editor`` on the ``members-users`` module instance (POST maps to
editor). Each email uses the same native Auth0 flow as ``POST /users``.
Per-email failures (duplicates, rejected addresses) are returned so one
bad address does not abort the rest of the batch.

When ``groupId`` / ``groupIds`` are provided every created user is added to
those groups; group validation happens once before any Auth0 writes.

## Request body

- BulkCreatePlatformUsersRequest: Create many Auth0 users in one organization, optionally adding them to groups. Each email is provisioned with the same native Auth0 flow as :class:`CreatePlatformUserRequest` (random password + invite email). Failures are returned per address so a duplicate does not abort the rest of the batch.
  - `emails` string[], required
  - `organizationId` string, required
  - `groupId` string, nullable
  - `groupIds` string[]

## Response `200`

Successful response, including any rejected FGA tuple operations.

- BulkCreatePlatformUsersResponseWithFgaWriteReport
  - `created` User[]
    - `userId` string, required
    - `email` string, nullable
    - `name` string, nullable
    - `picture` string, nullable
    - `loginCount` integer
    - `lastLogin` string, nullable
    - `createdAt` string, nullable
    - `emailVerified` boolean, nullable
    - `needsInvitation` boolean, nullable
    - `inviteEmailStatus` 'sent' | 'unconfirmed' | 'failed': Whether Auth0's logs confirm a Change Password email was queued. ``POST /dbconnections/change_password`` returns 200 even when no mail is sent. ``sent`` means a later ``scpr`` log; ``unconfirmed`` means Auth0 accepted the call but no ``scpr``/``fcpr`` log appeared; ``failed`` means Auth0 rejected the call or logged ``fcpr``.
  - `failed` BulkUserCreateFailure[]
    - `email` string, required
    - `error` string, required
  - `total` integer
  - `rejectedTuples` RejectedTuple[]: Tuple operations rejected by Auth0 FGA during this request.
    - `operation` 'write' | 'delete', required
    - `tuple` RejectedTupleKey, required: Public tuple identity for a rejected write operation.
      - `user` string, required
      - `relation` string, required
      - `object` string, required
    - `reason` string, required

## Other responses

- `422`: Validation Error

## Changes

- **2026-10-30** `b36a1c387280`: 3 info
  - added the optional property `created/items/emailVerified` to the response with the `200` status
  - added the optional property `created/items/inviteEmailStatus` to the response with the `200` status
  - added the optional property `created/items/needsInvitation` to the response with the `200` status
- **2026-10-09** `2d5570083be4`: 1 info
  - added the optional property `rejectedTuples` to the response with the `200` status
- **2026-10-06** `37edc110d0bd`: 1 warning
  - removed the optional property `created/items/linkedSubs` from the response with the `200` status
- **2026-09-10** `f1b2c5c20471`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/gocrisp/apis/crisp-app-dock/changes/api/platform/users/bulk/post.md)

---

[API](https://skmtc.dev/gocrisp/apis/crisp-app-dock.md) - [All operations](https://skmtc.dev/gocrisp/apis/crisp-app-dock/llms.txt) - [OpenAPI document](https://skmtc.dev/gocrisp/apis/crisp-app-dock/revisions/4318325a93bd?raw)
