breezeauth.com
EN
Sign inGet started free
SCIM provisioningProvision users

Provision users with SCIM

How the SCIM /Users endpoint creates, updates, deactivates and deletes users, and how each SCIM attribute maps to the user's profile in BreezeAuth.

On this page
  1. What a SCIM user is
  2. How SCIM attributes map to BreezeAuth
  3. Create a user
  4. Find and read users
  5. How statuses appear
  6. Update a user
  7. Replace a user (PUT)
  8. Change some attributes (PATCH)
  9. Change a user’s e-mail address
  10. Deactivate a user
  11. Delete a user
  12. What SCIM can’t change

Through the /Users endpoint, a provisioning system manages the people of your organization: the users you see under Users › Human Users in the admin console. This page explains what each SCIM operation does in BreezeAuth. The protocol details common to users and groups, such as authentication, filtering, pagination and errors, are in the SCIM API reference.

All paths below are relative to your organization’s SCIM base URL.

What a SCIM user is

Each SCIM user is one user of your organization. Its id is the user’s identifier in BreezeAuth, the same value the BreezeAuth API calls membershipsUuid and that webhook events carry. Use it to read, update or delete the user, and to add them to groups.

Service users are not people, so they are never returned by /Users and can’t be changed through SCIM.

How SCIM attributes map to BreezeAuth

SCIM attribute In BreezeAuth
userName Email, the address the person signs in with. Required, and unique in the organization.
name.givenName First name
name.familyName Last name
displayName Used to fill in the first and last name when name is missing. Returned as the full name.
active Status: true for Active, false for Inactive. See Statuses.
externalId The person’s identifier in the provisioning system. Kept by BreezeAuth, not shown in the console. Unique in the organization.
title Job title
emails The address that differs from userName, if any, is kept as a secondary e-mail address.
phoneNumbers with type work Work phone
phoneNumbers with type mobile Phone
addresses The work address, or else the first one with data: streetAddress, locality (city), region (state) and postalCode.
photos The person’s profile picture, from the first URL.
employeeNumber (Enterprise extension) Employee ID
costCenter (Enterprise extension) Cost center
organization (Enterprise extension) Organizational unit
department (Enterprise extension) Department
manager.value (Enterprise extension) The person’s manager, as the SCIM id of another user.

The Enterprise extension attributes go inside the urn:ietf:params:scim:schemas:extension:enterprise:2.0:User object. Other attributes, such as password, roles, groups or locale, are ignored: a user’s groups are managed through /Groups, and roles only in the admin console.

Create a user

POST /Users
Content-Type: application/scim+json
{
  "schemas": [
    "urn:ietf:params:scim:schemas:core:2.0:User",
    "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
  ],
  "userName": "[email protected]",
  "externalId": "00u1a2b3c4",
  "name": { "givenName": "Ana", "familyName": "Souza" },
  "title": "Account Manager",
  "phoneNumbers": [{ "value": "+55 11 99999-9999", "type": "mobile" }],
  "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": {
    "employeeNumber": "4021",
    "department": "Sales"
  }
}

BreezeAuth returns 201 Created with the new user, and its address in the Location header:

{
  "schemas": [
    "urn:ietf:params:scim:schemas:core:2.0:User",
    "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
  ],
  "id": "a3b9c1d2-7e4f-4a6b-8c5d-9e0f1a2b3c4d",
  "userName": "[email protected]",
  "externalId": "00u1a2b3c4",
  "name": { "givenName": "Ana", "familyName": "Souza", "formatted": "Ana Souza" },
  "displayName": "Ana Souza",
  "active": true,
  "title": "Account Manager",
  "emails": [{ "value": "[email protected]", "type": "work", "primary": true }],
  "phoneNumbers": [{ "value": "+55 11 99999-9999", "type": "mobile" }],
  "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": {
    "employeeNumber": "4021",
    "department": "Sales"
  },
  "meta": {
    "resourceType": "User",
    "created": "2026-10-13T14:32:05.000Z",
    "lastModified": "2026-10-13T14:32:05.000Z",
    "location": "https://api.breezeauth.com/organizations/0d5a7e3c-8b1f-4c2e-a6d9-5f4e3b2a1c0d/scim/v2/Users/a3b9c1d2-7e4f-4a6b-8c5d-9e0f1a2b3c4d"
  }
}

userName is required. If name is missing, BreezeAuth splits displayName into a first and a last name, and as a last resort uses the part of the e-mail before the @.

What happens next depends on the e-mail address, exactly as when an administrator adds a user:

E-mail address Result
On one of your verified domains A managed user, Active right away. The person receives a welcome e-mail.
On any other domain A guest, Pending until they accept the invitation they receive by e-mail. Until then, SCIM returns them with active: false. See Invitations.

If active is false in the request, the user is created and then immediately deactivated.

Note: SCIM doesn’t carry passwords. A managed user created through SCIM has no password yet.

Find and read users

Request Returns
GET /Users/{id} One user.
GET /Users All the users of the organization, one page at a time.
GET /Users?filter=userName eq "[email protected]" The user with that e-mail address, if any.
GET /Users?filter=externalId eq "00u1a2b3c4" The user with that external ID, if any.

Provisioning systems usually search with one of these filters before creating a user, to avoid duplicates. Remember to URL-encode the filter in the query string. Pagination and the other query parameters are described in the reference.

How statuses appear

SCIM only knows whether a user is active. BreezeAuth’s statuses appear like this:

Status in BreezeAuth active
Active true
Inactive, Pending, Invite declined, Pending review false

Update a user

Replace a user (PUT)

PUT /Users/{id} replaces the whole user with the body you send, which has the same format as for creation. Any attribute you leave out is cleared in BreezeAuth, and if active is left out, the user becomes Active. Send the complete user every time, or use PATCH to change only some attributes.

Change some attributes (PATCH)

PATCH /Users/{id} applies a list of operations, following the SCIM standard:

{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
  "Operations": [
    { "op": "replace", "path": "title", "value": "Sales Director" },
    {
      "op": "replace",
      "path": "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:department",
      "value": "Commercial"
    },
    { "op": "remove", "path": "phoneNumbers[type eq \"mobile\"].value" }
  ]
}

Each operation has an op (add, replace or remove), a path and, except for remove, a value. The supported paths are:

Path add / replace remove
active Yes No
userName or emails[type eq "work"].value Yes No
name.givenName, name.familyName Yes No
displayName (split into first and last name) Yes No
externalId Yes Yes
title Yes Yes
phoneNumbers[type eq "work"].value, phoneNumbers[type eq "mobile"].value Yes Yes
urn:ietf:params:scim:schemas:extension:enterprise:2.0:User: followed by employeeNumber, costCenter, organization, department, manager or manager.value Yes Yes

An add or replace operation can also leave out path and send an object as value, for example { "op": "replace", "value": { "active": false } }. In that form, BreezeAuth accepts active, userName, externalId, name, displayName, title and the Enterprise extension object. Addresses, secondary e-mails and photos can only be changed with PUT.

All the operations of a request are applied together: if one of them is invalid, nothing is changed.

Change a user’s e-mail address

Changing userName follows the same rules as in the admin console:

  • Managed users: the new address must be on one of your verified domains. The person’s BreezeAuth account is updated too.
  • Guests: the e-mail address can’t be changed, and the request fails with 400 Bad Request. To move a guest to a new address, create a new user and delete the old one.

Deactivate a user

To remove someone’s access while keeping their record, set active to false:

{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
  "Operations": [{ "op": "replace", "path": "active", "value": false }]
}

The user becomes Inactive, with the same effect as deactivating them in the admin console: a managed user can’t sign in to BreezeAuth at all, and a guest can no longer use your organization’s applications. Their groups and application assignments are kept. Set active back to true to restore access.

Delete a user

DELETE /Users/{id}

BreezeAuth returns 204 No Content. As when deleting in the admin console, the user is removed from all their groups and applications and, for a managed user, their BreezeAuth account is deleted too. This can’t be undone.

Tip: if your provisioning system lets you choose, have it deactivate people who leave rather than delete them. You keep their history, and can restore their access if they come back.

What SCIM can’t change

  • Owners. Users with the Owner role can’t be changed or deleted through SCIM: the request fails with 401 Unauthorized. Manage them in the admin console.
  • Roles. SCIM never gives or removes administrative roles.
  • Statuses other than active and inactive. A provisioning system can’t put a user back to Pending or Pending review.
  • Passwords, MFA and sessions. These belong to the person and to your organization’s account security tools.

Last updated: October 13, 2026