Integrating with SCIM new - Huddle/huddle-apis GitHub Wiki

Summary

The Membership service exposes SCIM 2.0 resources under **/scim/v2**. When calling through the API gateway, use the **/membership** virtual path prefix (same pattern as Users and other Membership docs): **/membership/scim/v2/...**.

Content type for SCIM requests and responses is **application/scim+json** unless noted otherwise.

For a full end-to-end walkthrough (create company, account, user, patch groups, workspace, teams), see **Membership/docs/ScimSchema.md** in the Membership service repository—that document is the canonical step-by-step reference.

Authentication

Obtain a bearer token with the client credentials flow (see OAuth integration). Send Authorization: Bearer <access_token> on SCIM requests.

Operations

Method Path Purpose Details
POST /membership/scim/v2/users Create a SCIM user Jump
GET /membership/scim/v2/users/{scimId} Retrieve a SCIM user Jump
POST /membership/scim/v2/groups Create a group (company, account, workspace, team, etc.) Jump
GET /membership/scim/v2/groups/{scimId} Retrieve a group by SCIM id Jump
PATCH /membership/scim/v2/groups/{scimId} Patch a group (e.g. add members) Jump
GET /membership/scim/v2/me SCIM representation of the authenticated user Me

Direct host URLs (for example https://membership.<host>/scim/v2/...) may appear in responses (Location, $ref). Gateway callers should still use the **/membership** prefix on the API host they integrate with.

Users

Create and read SCIM users via **POST** and **GET /users/{scimId}**. User resources use the core SCIM User schema plus Huddle extensions (see ScimSchema).

Example: create user

POST /membership/scim/v2/users HTTP/1.1
Host: api.huddle.net
Authorization: Bearer frootymcnooty/vonbootycherooty
Content-Type: application/scim+json
Accept: application/scim+json

{
  "schemas": [
    "urn:ietf:params:scim:schemas:core:2.0:User",
    "urn:huddle:params:scim:schemas:extension:2.0:User"
  ],
  "userName": "[email protected]",
  "password": "t1meMa$heen"
}

Successful creation returns 201 Created with a SCIM user body and a **Location** header for the new user.

Groups

Groups carry Huddle-specific types via schema extensions: Company, Account, Workspace, Team, and nested roles (company managers, company accounts, account managers, workspace managers, etc.). You create the top-level resource with **POST**, then **PATCH** subgroup resources to add members (accounts, users, workspaces, teams) using SCIM Patch operations on **members**.

Example: create company

POST /membership/scim/v2/groups HTTP/1.1
Host: api.huddle.net
Authorization: Bearer frootymcnooty/vonbootycherooty
Content-Type: application/scim+json
Accept: application/scim+json

{
  "schemas": [
    "urn:ietf:params:scim:schemas:core:2.0:Group",
    "urn:huddle:params:scim:schemas:extension:2.0:Company"
  ],
  "displayName": "MyCompany"
}

Example: patch members onto a group

PATCH /membership/scim/v2/groups/92f6583c-95a5-4151-ab68-a60f5d80bf39 HTTP/1.1
Host: api.huddle.net
Authorization: Bearer frootymcnooty/vonbootycherooty
Content-Type: application/scim+json
Accept: application/scim+json

{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
  "Operations": [{
    "op": "add",
    "path": "members",
    "value": [{ "value": "a875f67e-8b7e-4458-9565-3a09bb3bfea9" }]
  }]
}

Additional examples (account creation, workspace creation, team membership, and subgroup ids) are in **Membership/docs/ScimSchema.md**.

Me

**GET /membership/scim/v2/me** returns the SCIM user for the caller’s identity (same shape as **GET /users/{scimId}** for that user).

GET /membership/scim/v2/me HTTP/1.1
Host: api.huddle.net
Accept: application/scim+json
Authorization: Bearer frootymcnooty/vonbootycherooty

People SCIM vs Membership SCIM

The Integrating with SCIM wiki page documents the older People SCIM API under **/people/companies/{companyId}/users**, including PUT, DELETE, filter queries, and XML payloads.

Membership SCIM is not a URL-prefix swap for that API. It centers on **/scim/v2/users, **/scim/v2/groups**, and **PATCH**-driven membership, and reflects the current Membership provisioning model. Use the People page when you must integrate with **/people** SCIM; use this page and ScimSchema for **/membership SCIM.

⚠️ **GitHub.com Fallback** ⚠️