breezeauth.com
EN
Sign inGet started free
SCIM provisioningProvision groups

Provision groups with SCIM

How the SCIM /Groups endpoint creates, renames and deletes groups, and keeps their members, including nested groups, in sync.

On this page
  1. How SCIM attributes map to BreezeAuth
  2. Members
  3. Create a group
  4. Find and read groups
  5. Update a group
  6. Replace a group (PUT)
  7. Change some attributes (PATCH)
  8. Delete a group
  9. Give provisioned groups access to applications

Through the /Groups endpoint, a provisioning system manages the groups of your organization and their members. Groups created through SCIM are regular groups: they appear under Groups in the admin console, and you give them access to applications there, like any other group.

All paths below are relative to your organization’s SCIM base URL. The protocol details common to users and groups are in the SCIM API reference.

How SCIM attributes map to BreezeAuth

SCIM attribute In BreezeAuth
id The group’s identifier in BreezeAuth.
displayName Name. Required.
externalId The group’s identifier in the provisioning system. Kept by BreezeAuth, not shown in the console. Unique in the organization.
members The group’s direct members: users and other groups.

The group’s Identifier is generated by BreezeAuth from the name when the group is created, for example sales-team for “Sales Team”, with a number added if it is already taken (sales-team-2). Renaming the group later doesn’t change it. The group’s Description isn’t managed through SCIM: you can fill it in the admin console.

Members

Each member is identified by its SCIM id and its type:

"members": [
  { "value": "a3b9c1d2-7e4f-4a6b-8c5d-9e0f1a2b3c4d", "type": "User" },
  { "value": "9a8b7c6d-5e4f-4321-9876-0fedcba98765", "type": "Group" }
]
Field Description
value The id of a user or of another group.
type User or Group. Required: a member without a valid type is refused with 400 Bad Request.
display Optional, and ignored by BreezeAuth.

A member of type Group makes a nested group: the users of the inner group become indirect members of the outer one, and get the applications assigned to it. A group can’t be a member of itself.

SCIM only ever shows and changes direct members, the ones added to the group itself. The indirect members that come from nested groups are not listed, which is also what the Show only direct associations option shows in the admin console.

Create a group

POST /Groups
Content-Type: application/scim+json
{
  "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
  "displayName": "Sales Team",
  "externalId": "grp-0042",
  "members": [{ "value": "a3b9c1d2-7e4f-4a6b-8c5d-9e0f1a2b3c4d", "type": "User" }]
}

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

{
  "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"],
  "id": "9a8b7c6d-5e4f-4321-9876-0fedcba98765",
  "displayName": "Sales Team",
  "externalId": "grp-0042",
  "members": [{ "value": "a3b9c1d2-7e4f-4a6b-8c5d-9e0f1a2b3c4d", "type": "User" }],
  "meta": {
    "resourceType": "Group",
    "created": "2026-10-13T14:35:12.000Z",
    "lastModified": "2026-10-13T14:35:12.000Z",
    "location": "https://api.breezeauth.com/organizations/0d5a7e3c-8b1f-4c2e-a6d9-5f4e3b2a1c0d/scim/v2/Groups/9a8b7c6d-5e4f-4321-9876-0fedcba98765"
  }
}

members is optional: many provisioning systems create the group first and add the members afterwards.

Find and read groups

Request Returns
GET /Groups/{id} One group, with its direct members.
GET /Groups All the groups of the organization, one page at a time, without members.
GET /Groups?filter=displayName eq "Sales Team" The group with that name, if any.
GET /Groups?filter=externalId eq "grp-0042" The group with that external ID, if any.

To get the members of a group, read the group itself. A group with more than 1,000 direct members can’t be read or updated through SCIM: the request fails with 400 Bad Request and scimType tooMany.

Update a group

Replace a group (PUT)

PUT /Groups/{id} replaces the group’s name, external ID and members with the body you send. The member list you send becomes the group’s complete list of direct members: members that are not in it are removed, and sending no members at all removes every member. If externalId is left out, it is cleared.

Change some attributes (PATCH)

PATCH /Groups/{id} is the usual way to rename a group and to add or remove members without sending the whole list:

{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
  "Operations": [
    {
      "op": "add",
      "path": "members",
      "value": [{ "value": "b4c0d2e3-8f5a-4b7c-9d6e-0f1a2b3c4d5e", "type": "User" }]
    },
    { "op": "remove", "path": "members[value eq \"a3b9c1d2-7e4f-4a6b-8c5d-9e0f1a2b3c4d\"]" }
  ]
}

The supported operations are:

Operation Path Effect
add members Adds the members in value. Members already in the group are ignored.
replace members Replaces all direct members with the ones in value.
remove members[value eq "{id}"] Removes that one member.
remove members Removes all direct members, whatever value contains.
add or replace displayName Renames the group.
add or replace externalId Changes the external ID.
remove externalId Clears the external ID.

An add or replace operation can also leave out path and send an object as value, with displayName, externalId and members. In that form, add adds the members and replace replaces them.

Important: to remove specific members, always use the filtered path members[value eq "{id}"], one operation per member. A remove on the plain members path empties the group, as the SCIM standard defines, even if the request lists only some members in value.

Operations are applied in the order they are listed. If one fails, for example because a member doesn’t exist, the operations before it stay applied: read the group to see its current state before retrying.

Delete a group

DELETE /Groups/{id}

As in the admin console, a group can only be deleted when it has no members. Otherwise the request fails with 409 Conflict. Remove the members first, for example with a remove operation on members, then delete the group.

When the group is deleted, BreezeAuth returns 204 No Content. The group’s application assignments are removed with it. This can’t be undone.

Give provisioned groups access to applications

SCIM doesn’t assign applications. Once a provisioned group exists, assign its applications in the admin console, once. From then on, everyone the provisioning system adds to the group gets access automatically, and loses it when they are removed. See Application access.

Last updated: October 13, 2026