Skip to main content
POST
https://sandbox.getcollate.io/api
/
v1
/
users
POST /v1/users
from metadata.sdk import configure
from metadata.sdk.entities import Users
from metadata.generated.schema.api.teams.createUser import CreateUserRequest

configure(
    host="https://your-company.getcollate.io/api",
    jwt_token="your-jwt-token"
)

request = CreateUserRequest(
    name="aaron_johnson0",
    displayName="Aaron Johnson",
    email="[email protected]",
    description="Data analyst in the Sales team",
    teams=["Sales"],
    roles=["DataSteward"]
)

user = Users.create(request)
print(f"Created: {user.fullyQualifiedName}")
{
  "id": "77655e6e-ad33-49da-bbca-db4ba4d4e2cd",
  "name": "aaron_johnson0",
  "fullyQualifiedName": "aaron_johnson0",
  "displayName": "Aaron Johnson",
  "version": 0.1,
  "updatedAt": 1769982624214,
  "updatedBy": "admin",
  "email": "[email protected]",
  "href": "http://localhost:8585/api/v1/users/77655e6e-ad33-49da-bbca-db4ba4d4e2cd",
  "isBot": false,
  "isAdmin": false,
  "allowImpersonation": false,
  "teams": [
    {
      "id": "7a2b921b-f623-4eb5-9736-649788ad842c",
      "type": "team",
      "name": "Sales",
      "fullyQualifiedName": "Sales",
      "displayName": "Sales",
      "deleted": false
    }
  ],
  "personas": [],
  "deleted": false,
  "roles": [
    {
      "id": "761c2bb2-0b77-4bc5-9af9-cf89536d6a12",
      "type": "role",
      "name": "DataSteward",
      "fullyQualifiedName": "DataSteward",
      "displayName": "Data Steward",
      "deleted": false
    }
  ],
  "domains": []
}

Create a User

Create a new user in your organization.

Body Parameters

name
string
required
Username for the user. Must be unique across the organization.
email
string
required
Email address of the user. Must be unique across the organization.
displayName
string
Human-readable display name for the user.
description
string
Description of the user in Markdown format.
isBot
boolean
default:"false"
Whether this user is a bot account.
isAdmin
boolean
default:"false"
Whether this user has admin privileges.
teams
array
Array of team fully qualified names to assign the user to.
roles
array
Array of role fully qualified names to assign to the user.
personas
array
Array of persona references to assign to the user.
domain
string
Fully qualified name of the domain to assign for governance purposes.
profile
object
Profile information for the user.
POST /v1/users
from metadata.sdk import configure
from metadata.sdk.entities import Users
from metadata.generated.schema.api.teams.createUser import CreateUserRequest

configure(
    host="https://your-company.getcollate.io/api",
    jwt_token="your-jwt-token"
)

request = CreateUserRequest(
    name="aaron_johnson0",
    displayName="Aaron Johnson",
    email="[email protected]",
    description="Data analyst in the Sales team",
    teams=["Sales"],
    roles=["DataSteward"]
)

user = Users.create(request)
print(f"Created: {user.fullyQualifiedName}")
{
  "id": "77655e6e-ad33-49da-bbca-db4ba4d4e2cd",
  "name": "aaron_johnson0",
  "fullyQualifiedName": "aaron_johnson0",
  "displayName": "Aaron Johnson",
  "version": 0.1,
  "updatedAt": 1769982624214,
  "updatedBy": "admin",
  "email": "[email protected]",
  "href": "http://localhost:8585/api/v1/users/77655e6e-ad33-49da-bbca-db4ba4d4e2cd",
  "isBot": false,
  "isAdmin": false,
  "allowImpersonation": false,
  "teams": [
    {
      "id": "7a2b921b-f623-4eb5-9736-649788ad842c",
      "type": "team",
      "name": "Sales",
      "fullyQualifiedName": "Sales",
      "displayName": "Sales",
      "deleted": false
    }
  ],
  "personas": [],
  "deleted": false,
  "roles": [
    {
      "id": "761c2bb2-0b77-4bc5-9af9-cf89536d6a12",
      "type": "role",
      "name": "DataSteward",
      "fullyQualifiedName": "DataSteward",
      "displayName": "Data Steward",
      "deleted": false
    }
  ],
  "domains": []
}

Returns

Returns the created user object with all specified properties and system-generated fields.

Response

id
string
Unique identifier for the user (UUID format).
name
string
Username.
fullyQualifiedName
string
Fully qualified name (same as name for users).
displayName
string
Human-readable display name.
email
string
Email address of the user.
isBot
boolean
Whether this user is a bot account.
isAdmin
boolean
Whether this user has admin privileges.
teams
array
Teams the user belongs to.
roles
array
Roles assigned to the user.
personas
array
Personas assigned to the user.
domains
array
Domain assignments for governance.
version
number
Version number for the entity (starts at 0.1).

Create or Update (PUT)

Use PUT /v1/users instead of POST to perform an upsert. If a user with the same fullyQualifiedName already exists, it will be updated; otherwise, a new user is created. The request body is the same as POST.
curl -X PUT "{base_url}/api/v1/users" \
  -H "Authorization: Bearer {access_token}" \
  -H "Content-Type: application/json" \
  -d '{ ... same body as POST ... }'
PUT will not return a 409 conflict error if the entity already exists — it will update the existing entity instead.

Bulk Create or Update (PUT)

Use PUT /v1/users/bulk to create or update multiple users in a single request. The request body is an array of create request objects.
curl -X PUT "{base_url}/api/v1/users/bulk" \
  -H "Authorization: Bearer {access_token}" \
  -H "Content-Type: application/json" \
  -d '[
    { "name": "user_one", "email": "[email protected]" },
    { "name": "user_two", "email": "[email protected]" }
  ]'

Error Handling

CodeError TypeDescription
400BAD_REQUESTInvalid request body or missing required fields
401UNAUTHORIZEDInvalid or missing authentication token
403FORBIDDENUser lacks permission to create users
409ENTITY_ALREADY_EXISTSUser with same name already exists (POST only)