Single sign-on apps

"Sign in with Bramble" for other applications (OpenID Connect). Register an app to get its client ID and secret, choose who may use it, and optionally show it in the app launcher. Bramble's own platform apps can be switched on or off for the organisation.

MethodPathSummary
GET/v1/admin/tenant/oidcGet OIDC SSO status and the tenant's registered OIDC clients
POST/v1/admin/tenant/oidc/enableEnable or disable OIDC SSO for the tenant
POST/v1/admin/tenant/oidc/clientsRegister a single sign-on app
PATCH/v1/admin/tenant/oidc/clients/:idUpdate an OIDC client's settings
POST/v1/admin/tenant/oidc/clients/:id/rotate-secretRotate an OIDC client's secret
DELETE/v1/admin/tenant/oidc/clients/:idDelete an OIDC client
GET/v1/admin/tenant/oidc/clients/:id/accessGet an OIDC client's access-restriction settings and allow-listed subjects
POST/v1/admin/tenant/oidc/clients/:id/access/toggleToggle whether an OIDC client's access is restricted to an allow-list
POST/v1/admin/tenant/oidc/clients/:id/accessAdd a user or group to an OIDC client's access allow-list
DELETE/v1/admin/tenant/oidc/clients/:id/access/:accessIdRemove a subject from an OIDC client's access allow-list
GET/v1/admin/tenant/oidc/platform-appsList Bramble's own platform apps
POST/v1/admin/tenant/oidc/platform-apps/:clientId/enableOpt the tenant into a platform OIDC app
POST/v1/admin/tenant/oidc/platform-apps/:clientId/disableOpt the tenant out of a platform OIDC app
POST/v1/admin/tenant/oidc/clients/:id/iconUpload a drawer/rail icon for an OIDC client
DELETE/v1/admin/tenant/oidc/clients/:id/iconRemove an OIDC client's uploaded icon
GET/v1/admin/tenant/oidc/icons/:idServe an uploaded OIDC client icon

#Get OIDC SSO status and the tenant's registered OIDC clients

GET/v1/admin/tenant/oidc

Get OIDC SSO status and the tenant's registered OIDC clients. Requires the GLOBAL_ADMIN role. Client secrets are never returned here.

Address
https://<your-org>.brambleit.cloud/api/v1/admin/tenant/oidc
Requires
Signed-in session, X-API-Key, or a Bramble app access token (Authorization: Bearer).
Role: GLOBAL_ADMIN.

Response 200

FieldTypeDescription
enabledboolean
clientsarray of any
Example response
JSON
{
  "enabled": true,
  "clients": []
}

Example request

Bash
curl -X GET 'https://<your-org>.brambleit.cloud/api/v1/admin/tenant/oidc' \
  -H "X-API-Key: $BRAMBLE_KEY"

#Enable or disable OIDC SSO for the tenant

POST/v1/admin/tenant/oidc/enable

Enable or disable OIDC SSO for the tenant. Requires the GLOBAL_ADMIN role.

Address
https://<your-org>.brambleit.cloud/api/v1/admin/tenant/oidc/enable
Requires
Signed-in session, X-API-Key, or a Bramble app access token (Authorization: Bearer).
Role: GLOBAL_ADMIN.

Request body JSON

NameTypeDescription
enabledboolean

Response 200

FieldTypeDescription
successboolean
enabledboolean
Example response
JSON
{
  "success": true,
  "enabled": true
}

Example request

Bash
curl -X POST 'https://<your-org>.brambleit.cloud/api/v1/admin/tenant/oidc/enable' \
  -H "X-API-Key: $BRAMBLE_KEY" \
  -H "Content-Type: application/json" \
  -d '{"enabled":true}'

#Register a single sign-on app

POST/v1/admin/tenant/oidc/clients

Returns the new app's client_id and client_secret. The secret is shown only once; rotate it if it's lost.

Address
https://<your-org>.brambleit.cloud/api/v1/admin/tenant/oidc/clients
Requires
Signed-in session, X-API-Key, or a Bramble app access token (Authorization: Bearer).
Role: GLOBAL_ADMIN.

Request body JSON

NameTypeDescription
namerequiredstringThe app's name, shown on the consent screen.
redirect_urisrequiredarray of anyEvery address the app may return to after sign-in (http or https).
launch_urlrequiredstringWhere the launcher opens the app. Required to show it in the launcher.
icon_urlstringAn image for its launcher icon.
show_in_draweranyShow the app in people's launcher.

Response 201

FieldTypeDescription
successboolean
clientobject
client.idinteger
client.client_idinteger
client.client_secretany
client.namestring
client.redirect_urisany
client.launch_urlstring, or null
client.icon_urlstring, or null
client.show_in_drawerinteger
client.is_activeinteger
Example response
JSON
{
  "success": true,
  "client": {
    "id": 42,
    "client_id": 7,
    "client_secret": null,
    "name": "Example name",
    "redirect_uris": null,
    "launch_url": "https://example.com/…",
    "icon_url": "https://example.com/…",
    "show_in_drawer": 1,
    "is_active": 1
  }
}

Errors

StatusMessage
400name and at least one redirect_uri are required
400redirect_uris must be valid http(s) URLs
400launch_url must be a valid http(s) URL
400icon_url must be a valid http(s) URL
400launch_url is required to show this app in the drawer

Example request

Bash
curl -X POST 'https://<your-org>.brambleit.cloud/api/v1/admin/tenant/oidc/clients' \
  -H "X-API-Key: $BRAMBLE_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Example name","redirect_uris":[],"launch_url":"https://example.com/…","icon_url":"https://example.com/…","show_in_drawer":"…"}'

#Update an OIDC client's settings

PATCH/v1/admin/tenant/oidc/clients/:id

Update an OIDC client's settings. Requires the GLOBAL_ADMIN role. All fields optional. groups_claim_name lets the claim key be renamed from the default (e.g. to "roles"); pass an empty string to reset it.

Address
https://<your-org>.brambleit.cloud/api/v1/admin/tenant/oidc/clients/:id
Requires
Signed-in session, X-API-Key, or a Bramble app access token (Authorization: Bearer).
Role: GLOBAL_ADMIN.

Path parameters

NameTypeDescription
idrequiredinteger

Request body JSON

NameTypeDescription
namestring
redirect_urisrequiredarray of any
launch_urlstring
icon_urlstring
show_in_drawerany
groups_claim_namestringName of the claim that carries the person's groups (default groups).
is_activebooleanTurn the app on or off.

Response 200

FieldTypeDescription
successboolean
Example response
JSON
{
  "success": true
}

Errors

StatusMessage
400redirect_uris must be an array of valid http(s) URLs
400launch_url must be a valid http(s) URL
400icon_url must be a valid http(s) URL
400launch_url is required to show this app in the drawer
400groups_claim_name must be a valid claim key (letters, numbers, underscore)
404Client not found

Example request

Bash
curl -X PATCH 'https://<your-org>.brambleit.cloud/api/v1/admin/tenant/oidc/clients/42' \
  -H "X-API-Key: $BRAMBLE_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Example name","redirect_uris":[],"launch_url":"https://example.com/…","icon_url":"https://example.com/…","show_in_drawer":"…","groups_claim_name":"Example groups claim name","is_active":true}'

#Rotate an OIDC client's secret

POST/v1/admin/tenant/oidc/clients/:id/rotate-secret

Rotate an OIDC client's secret. Requires the GLOBAL_ADMIN role. Invalidates the old secret immediately. The new client_secret is returned only in this response, never again.

Address
https://<your-org>.brambleit.cloud/api/v1/admin/tenant/oidc/clients/:id/rotate-secret
Requires
Signed-in session, X-API-Key, or a Bramble app access token (Authorization: Bearer).
Role: GLOBAL_ADMIN.

Path parameters

NameTypeDescription
idrequiredinteger

Response 200

FieldTypeDescription
successboolean
client_secretany
Example response
JSON
{
  "success": true,
  "client_secret": null
}

Errors

StatusMessage
404Client not found

Example request

Bash
curl -X POST 'https://<your-org>.brambleit.cloud/api/v1/admin/tenant/oidc/clients/42/rotate-secret' \
  -H "X-API-Key: $BRAMBLE_KEY"

#Delete an OIDC client

DELETE/v1/admin/tenant/oidc/clients/:id

Delete an OIDC client. Requires the GLOBAL_ADMIN role.

Address
https://<your-org>.brambleit.cloud/api/v1/admin/tenant/oidc/clients/:id
Requires
Signed-in session, X-API-Key, or a Bramble app access token (Authorization: Bearer).
Role: GLOBAL_ADMIN.

Path parameters

NameTypeDescription
idrequiredinteger

Response 200

FieldTypeDescription
successboolean
Example response
JSON
{
  "success": true
}

Errors

StatusMessage
404Client not found

Example request

Bash
curl -X DELETE 'https://<your-org>.brambleit.cloud/api/v1/admin/tenant/oidc/clients/42' \
  -H "X-API-Key: $BRAMBLE_KEY"

#Get an OIDC client's access-restriction settings and allow-listed subjects

GET/v1/admin/tenant/oidc/clients/:id/access

Get an OIDC client's access-restriction settings and allow-listed subjects. Requires the GLOBAL_ADMIN role.

Address
https://<your-org>.brambleit.cloud/api/v1/admin/tenant/oidc/clients/:id/access
Requires
Signed-in session, X-API-Key, or a Bramble app access token (Authorization: Bearer).
Role: GLOBAL_ADMIN.

Path parameters

NameTypeDescription
idrequiredinteger

Response 200

FieldTypeDescription
restrict_accessboolean
entriesarray of object
entries[].idinteger
entries[].subject_typestring: "user" | "group" | "tenant"
entries[].subject_idinteger
entries[].labelboolean
Example response
JSON
{
  "restrict_access": false,
  "entries": [
    {
      "id": 42,
      "subject_type": "user",
      "subject_id": 7,
      "label": false
    }
  ]
}

Errors

StatusMessage
404Client not found

Example request

Bash
curl -X GET 'https://<your-org>.brambleit.cloud/api/v1/admin/tenant/oidc/clients/42/access' \
  -H "X-API-Key: $BRAMBLE_KEY"

#Toggle whether an OIDC client's access is restricted to an allow-list

POST/v1/admin/tenant/oidc/clients/:id/access/toggle

Toggle whether an OIDC client's access is restricted to an allow-list. Requires the GLOBAL_ADMIN role.

Address
https://<your-org>.brambleit.cloud/api/v1/admin/tenant/oidc/clients/:id/access/toggle
Requires
Signed-in session, X-API-Key, or a Bramble app access token (Authorization: Bearer).
Role: GLOBAL_ADMIN.

Path parameters

NameTypeDescription
idrequiredinteger

Request body JSON

NameTypeDescription
restrict_accessbooleantrue: only the people and groups on its access list may use it.

Response 200

FieldTypeDescription
successboolean
restrict_accessboolean
Example response
JSON
{
  "success": true,
  "restrict_access": false
}

Errors

StatusMessage
404Client not found

Example request

Bash
curl -X POST 'https://<your-org>.brambleit.cloud/api/v1/admin/tenant/oidc/clients/42/access/toggle' \
  -H "X-API-Key: $BRAMBLE_KEY" \
  -H "Content-Type: application/json" \
  -d '{"restrict_access":false}'

#Add a user or group to an OIDC client's access allow-list

POST/v1/admin/tenant/oidc/clients/:id/access

Add a user or group to an OIDC client's access allow-list. Requires the GLOBAL_ADMIN role. Validates the subject belongs to the caller's tenant; uses INSERT IGNORE so re-adding an existing entry is a no-op.

Address
https://<your-org>.brambleit.cloud/api/v1/admin/tenant/oidc/clients/:id/access
Requires
Signed-in session, X-API-Key, or a Bramble app access token (Authorization: Bearer).
Role: GLOBAL_ADMIN.

Path parameters

NameTypeDescription
idrequiredinteger

Request body JSON

NameTypeDescription
subject_typestring: "user" | "group"
subject_idrequiredinteger

Response 201

FieldTypeDescription
successboolean
Example response
JSON
{
  "success": true
}

Errors

StatusMessage
400subject_type ('user'|'group') and subject_id are required
400User not found on this tenant
400Group not found on this tenant
404Client not found

Example request

Bash
curl -X POST 'https://<your-org>.brambleit.cloud/api/v1/admin/tenant/oidc/clients/42/access' \
  -H "X-API-Key: $BRAMBLE_KEY" \
  -H "Content-Type: application/json" \
  -d '{"subject_type":"user","subject_id":7}'

#Remove a subject from an OIDC client's access allow-list

DELETE/v1/admin/tenant/oidc/clients/:id/access/:accessId

Remove a subject from an OIDC client's access allow-list. Requires the GLOBAL_ADMIN role.

Address
https://<your-org>.brambleit.cloud/api/v1/admin/tenant/oidc/clients/:id/access/:accessId
Requires
Signed-in session, X-API-Key, or a Bramble app access token (Authorization: Bearer).
Role: GLOBAL_ADMIN.

Path parameters

NameTypeDescription
idrequiredinteger
accessIdrequiredinteger

Response 200

FieldTypeDescription
successboolean
Example response
JSON
{
  "success": true
}

Errors

StatusMessage
404Client not found
404Access entry not found

Example request

Bash
curl -X DELETE 'https://<your-org>.brambleit.cloud/api/v1/admin/tenant/oidc/clients/42/access/1' \
  -H "X-API-Key: $BRAMBLE_KEY"

#List Bramble's own platform apps

GET/v1/admin/tenant/oidc/platform-apps

First-party apps (such as Bramble Sync) the organisation can switch on or off.

Address
https://<your-org>.brambleit.cloud/api/v1/admin/tenant/oidc/platform-apps
Requires
Signed-in session, X-API-Key, or a Bramble app access token (Authorization: Bearer).
Role: GLOBAL_ADMIN.

Response 200

FieldTypeDescription
idinteger
client_idstring
namestring
redirect_urisobject
is_publicboolean
enabledboolean
Example response
JSON
[
  {
    "id": 42,
    "client_id": "string",
    "name": "Example name",
    "redirect_uris": {},
    "is_public": true,
    "enabled": true
  }
]

Example request

Bash
curl -X GET 'https://<your-org>.brambleit.cloud/api/v1/admin/tenant/oidc/platform-apps' \
  -H "X-API-Key: $BRAMBLE_KEY"

#Opt the tenant into a platform OIDC app

POST/v1/admin/tenant/oidc/platform-apps/:clientId/enable

Opt the tenant into a platform OIDC app. Requires the GLOBAL_ADMIN role. Adds a subject_type=tenant row to oidc_client_access for this platform-wide client.

Address
https://<your-org>.brambleit.cloud/api/v1/admin/tenant/oidc/platform-apps/:clientId/enable
Requires
Signed-in session, X-API-Key, or a Bramble app access token (Authorization: Bearer).
Role: GLOBAL_ADMIN.

Path parameters

NameTypeDescription
clientIdrequiredinteger

Response 201

FieldTypeDescription
successboolean
Example response
JSON
{
  "success": true
}

Errors

StatusMessage
404Platform app not found

Example request

Bash
curl -X POST 'https://<your-org>.brambleit.cloud/api/v1/admin/tenant/oidc/platform-apps/1/enable' \
  -H "X-API-Key: $BRAMBLE_KEY"

#Opt the tenant out of a platform OIDC app

POST/v1/admin/tenant/oidc/platform-apps/:clientId/disable

Opt the tenant out of a platform OIDC app. Requires the GLOBAL_ADMIN role. Removes the tenant's oidc_client_access row. Already-issued sessions lose access within their access-token lifetime (~10 minutes) on next refresh, not instantly.

Address
https://<your-org>.brambleit.cloud/api/v1/admin/tenant/oidc/platform-apps/:clientId/disable
Requires
Signed-in session, X-API-Key, or a Bramble app access token (Authorization: Bearer).
Role: GLOBAL_ADMIN.

Path parameters

NameTypeDescription
clientIdrequiredinteger

Response 200

FieldTypeDescription
successboolean
Example response
JSON
{
  "success": true
}

Example request

Bash
curl -X POST 'https://<your-org>.brambleit.cloud/api/v1/admin/tenant/oidc/platform-apps/1/disable' \
  -H "X-API-Key: $BRAMBLE_KEY"

#Upload a drawer/rail icon for an OIDC client

POST/v1/admin/tenant/oidc/clients/:id/icon

Upload a drawer/rail icon for an OIDC client. Requires the GLOBAL_ADMIN role. Multipart upload, field name "icon", 1 MB max, image mimetypes only. Stored as a BLOB in oidc_client_icons; sets the client's icon_url to the public GET /tenant/oidc/icons/{id} URL.

Address
https://<your-org>.brambleit.cloud/api/v1/admin/tenant/oidc/clients/:id/icon
Requires
Signed-in session, X-API-Key, or a Bramble app access token (Authorization: Bearer).
Role: GLOBAL_ADMIN.

Path parameters

NameTypeDescription
idrequiredinteger

Request body

multipart/form-data with the file.

Response 201

FieldTypeDescription
successboolean
icon_urlstring
Example response
JSON
{
  "success": true,
  "icon_url": "https://example.com/…"
}

Errors

StatusMessage
400No image file provided
404Client not found

Example request

Bash
curl -X POST 'https://<your-org>.brambleit.cloud/api/v1/admin/tenant/oidc/clients/42/icon' \
  -H "X-API-Key: $BRAMBLE_KEY"

#Remove an OIDC client's uploaded icon

DELETE/v1/admin/tenant/oidc/clients/:id/icon

Remove an OIDC client's uploaded icon. Requires the GLOBAL_ADMIN role. Deletes the stored BLOB and clears icon_url.

Address
https://<your-org>.brambleit.cloud/api/v1/admin/tenant/oidc/clients/:id/icon
Requires
Signed-in session, X-API-Key, or a Bramble app access token (Authorization: Bearer).
Role: GLOBAL_ADMIN.

Path parameters

NameTypeDescription
idrequiredinteger

Response 200

FieldTypeDescription
successboolean
Example response
JSON
{
  "success": true
}

Errors

StatusMessage
404Client not found

Example request

Bash
curl -X DELETE 'https://<your-org>.brambleit.cloud/api/v1/admin/tenant/oidc/clients/42/icon' \
  -H "X-API-Key: $BRAMBLE_KEY"

#Serve an uploaded OIDC client icon

GET/v1/admin/tenant/oidc/icons/:id

Serve an uploaded OIDC client icon. Public, no authentication — embedded via img src from other apps' origins (Hub drawer/rail). Cached for one year.

Address
https://<your-org>.brambleit.cloud/api/v1/admin/tenant/oidc/icons/:id
Requires
None: public, or protected by a token in the address or body.

Path parameters

NameTypeDescription
idrequiredinteger

Response

A body.

Example request

Bash
curl -X GET 'https://<your-org>.brambleit.cloud/api/v1/admin/tenant/oidc/icons/42' \
  -H "X-API-Key: $BRAMBLE_KEY"