---
title: "POST /users"
method: POST
path: "/users"
tags: ["users"]
---

# POST /users

`POST /users`

## Request

- Base URL: `https://api.opal.dev/v1`
- URL: `https://api.opal.dev/v1/users`
- Auth: HTTP bearer

Invites a user to your organization.

## Request body

- InviteUserInfo: The information required to invite a user.
  - `email` string, email, required
  - `first_name` string, required
  - `last_name` string, required
  - `role` 'MEMBER' | 'ADMIN', required: The product role assigned to a user.

## Response `200`

The invited user.

- User: # User Object ### Description The `User` object is used to represent a user. ### Usage Example Fetch from the `LIST Sessions` endpoint.
  - `user_id` string, uuid, required: The ID of the user.
  - `email` string, required: The email of the user.
  - `full_name` string, required: The full name of the user.
  - `first_name` string, required: The first name of the user.
  - `last_name` string, required: The last name of the user.
  - `position` string, required: The user's position.
  - `manager_id` string, uuid, nullable: The ID of the user's manager. Null if the user has no manager.
  - `hr_idp_status` 'ACTIVE' | 'SUSPENDED' | 'DEPROVISIONED' | 'DELETED' | 'NOT_FOUND': User status pulled from an HR/IDP provider.

## Other responses

- `400`: The invite input is invalid.
- `403`: The caller is not authorized to invite users.
- `409`: The user already belongs to another organization.

## Changes

- **2026-09-19** `3e78facda4c5`: 1 info
  - added the optional property `manager_id` to the response with the `200` status
- **2026-09-09** `1f15df5de3bc`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/opal/apis/opal-api/changes/users/post.md)

---

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