Skip to content

HTTP API / SSO & SCIM

SSO & SCIM API ​

9 operations. Paths are relative to the API host (http://localhost:5080 in local development). Every operation accepts an OIDC bearer token (Authorization: Bearer …) or a workspace API key (X-Api-Key: keel_live_…); errors are RFC 9457 Problem Details with a code (error codes). Permissions: matrix.

MethodPathSummary
GET/api/v1/tenant/scimSCIM provisioning: the endpoint URL, token metadata (never the token), last sync, and provisioned groups with their roles (Owners).
PUT/api/v1/tenant/scim/attribute-mappingsReplace which SCIM user attributes become member attributes for row filters (SCIM values win over manual ones; audited).
PUT/api/v1/tenant/scim/groups/{groupId}/roleMap a provisioned group to a workspace role (null unmaps it); members' access follows at once.
POST/api/v1/tenant/scim/tokenGenerate the SCIM bearer token, shown once. The previous token keeps working for 24 hours.
GET/api/v1/tenant/ssoThe tenant's single sign-on: IdP (OIDC or SAML, never the secret), broker URLs, verified domains, enforcement and the last test (Owners).
POST/api/v1/tenant/sso:testRecord a test sign-in: the token from a sign-in through the tenant's IdP proves the round trip and the claims received.
PUT/api/v1/tenant/sso/enforcementRequire SSO for verified domains (needs a successful test, a verified domain and a break-glass Owner), or stop requiring it.
PUT/api/v1/tenant/sso/oidcSet up the tenant's OpenID Connect IdP: the broker imports its discovery document. The client secret is write-only.
PUT/api/v1/tenant/sso/samlSet up the tenant's SAML 2.0 IdP from its metadata URL (imported by the broker).

GetScimSettings ​

http
GET /api/v1/tenant/scim

SCIM provisioning: the endpoint URL, token metadata (never the token), last sync, and provisioned groups with their roles (Owners).

StatusDescriptionBody
200OKScimSettingsResponse

Response 200: ScimSettingsResponse

FieldTypeNotes
attributeMappingsScimAttributeMappingDto[]
enabledboolean
endpointUrlstring
groupsScimGroupMappingDto[]
lastSyncAtdate-time?
previousTokenValidUntildate-time?
tokenCreatedAtdate-time?
tokenPrefixstring?
usersint32

SetScimAttributeMappings ​

http
PUT /api/v1/tenant/scim/attribute-mappings

Replace which SCIM user attributes become member attributes for row filters (SCIM values win over manual ones; audited).

Request body (application/json): SetScimAttributeMappingsRequest

FieldTypeNotes
mappingsScimAttributeMappingDto[]The whole mapping (replaced): SCIM attribute → Keel member attribute, at most 20.
StatusDescriptionBody
204No Content—

MapScimGroupRole ​

http
PUT /api/v1/tenant/scim/groups/{groupId}/role

Map a provisioned group to a workspace role (null unmaps it); members' access follows at once.

ParameterInTypeRequiredNotes
groupIdpathuuidyes

Request body (application/json): MapScimGroupRoleRequest

FieldTypeNotes
roleWorkspaceRole?Viewer, Analyst, Modeler, Steward or Admin; null unmaps the group. Never Owner.
StatusDescriptionBody
204No Content—

GenerateScimToken ​

http
POST /api/v1/tenant/scim/token

Generate the SCIM bearer token, shown once. The previous token keeps working for 24 hours.

StatusDescriptionBody
200OKScimTokenResponse

Response 200: ScimTokenResponse

FieldTypeNotes
prefixstring
previousTokenValidUntildate-time?
tokenstring

GetSsoSettings ​

http
GET /api/v1/tenant/sso

The tenant's single sign-on: IdP (OIDC or SAML, never the secret), broker URLs, verified domains, enforcement and the last test (Owners).

StatusDescriptionBody
200OKSsoSettingsResponse

Response 200: SsoSettingsResponse

FieldTypeNotes
breakGlassUserIduuid?
brokerIdpBrokerEndpoints?
brokerAvailableboolean
clientIdstring?
configuredboolean
domainsSsoDomainDto[]
enforcedboolean
idpAliasstring
issuerstring?
lastTestSsoTestDto?
metadataUrlstring?
ownersSsoOwnerDto[]
protocolstring?
secretSetAtdate-time?

TestSsoSignIn ​

http
POST /api/v1/tenant/sso:test

Record a test sign-in: the token from a sign-in through the tenant's IdP proves the round trip and the claims received.

Request body (application/json): TestSsoSignInRequest

FieldTypeNotes
accessTokenstringThe access token the test sign-in popup received (validated, never stored).
StatusDescriptionBody
200OKSsoTestResultResponse

Response 200: SsoTestResultResponse

FieldTypeNotes
emailstring?
emailReceivedboolean
failurestring?
groupsReceivedboolean
succeededboolean

SetSsoEnforcement ​

http
PUT /api/v1/tenant/sso/enforcement

Require SSO for verified domains (needs a successful test, a verified domain and a break-glass Owner), or stop requiring it.

Request body (application/json): SetSsoEnforcementRequest

FieldTypeNotes
breakGlassUserIduuid?
enforceboolean
StatusDescriptionBody
204No Content—

ConfigureOidcSso ​

http
PUT /api/v1/tenant/sso/oidc

Set up the tenant's OpenID Connect IdP: the broker imports its discovery document. The client secret is write-only.

Request body (application/json): ConfigureOidcSsoRequest

FieldTypeNotes
clientIdstring
clientSecretstring?Leave empty to keep the current secret. Stored in the secret store and the broker; never returned.
issuerstring
StatusDescriptionBody
204No Content—

ConfigureSamlSso ​

http
PUT /api/v1/tenant/sso/saml

Set up the tenant's SAML 2.0 IdP from its metadata URL (imported by the broker).

Request body (application/json): ConfigureSamlSsoRequest

FieldTypeNotes
metadataUrlstring
StatusDescriptionBody
204No Content—

Anchor Keel is a working product name: one platform, a shared core and licensed modules (Keel Semantic, Keel Migrate). Documentation built from the repository — facts are derived from code, ADRs and the decisions log.