Skip to content

HTTP API / Identity

Identity API ​

23 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
POST/api/v1/invitations/{token}:acceptAccept an invitation as the signed-in user.
GET/api/v1/meThe signed-in user, their tenants and usable workspaces.
PUT/api/v1/tenant/features/{feature}Switch a tenant feature flag on or off, e.g. sql-interface (Owners, ADR-0018).
GET/api/v1/tenant/modulesThe platform modules the tenant is licensed for (ADR-0021), e.g. semantic and migrate. Licences are granted by the platform operator.
GET/api/v1/tenant/settingsTenant name, plan, region and AI & privacy settings.
PUT/api/v1/tenant/settingsUpdate tenant settings (Owners).
GET/api/v1/tenant/usageAdmin usage (Owners): scans, served queries, quality rule runs and assistant questions per UTC day over the last 1-90 days (default 30).
POST/api/v1/tenantsOnboarding: create the caller's tenant and first workspace.
GET/api/v1/workspacesWorkspaces the caller can use.
POST/api/v1/workspacesCreate a workspace.
GET/api/v1/workspaces/{workspaceId}One workspace.
PATCH/api/v1/workspaces/{workspaceId}Rename a workspace.
DELETE/api/v1/workspaces/{workspaceId}Archive a workspace (soft delete, audited).
GET/api/v1/workspaces/{workspaceId}/api-keysAPI keys of a workspace (never the key itself).
POST/api/v1/workspaces/{workspaceId}/api-keysCreate an API key. The plaintext key is returned once and never again.
DELETE/api/v1/workspaces/{workspaceId}/api-keys/{apiKeyId}Revoke an API key (rejected everywhere within 60 s).
GET/api/v1/workspaces/{workspaceId}/invitationsPending invitations of a workspace.
GET/api/v1/workspaces/{workspaceId}/membersMembers of a workspace.
POST/api/v1/workspaces/{workspaceId}/membersInvite a person by email (token valid 7 days, single use).
PATCH/api/v1/workspaces/{workspaceId}/members/{userId}Change a member's role.
DELETE/api/v1/workspaces/{workspaceId}/members/{userId}Remove a member from a workspace.
GET/api/v1/workspaces/{workspaceId}/members/{userId}/attributesA member's access-policy attributes (e.g. region): those managed here, and those from SCIM (read-only, they win). Owners and Admins.
PUT/api/v1/workspaces/{workspaceId}/members/{userId}/attributesReplace a member's access-policy attributes, read by row filters such as {{user.attributes.region}} (audited; they win over IdP claims, SCIM values win over them).

AcceptInvitation ​

http
POST /api/v1/invitations/{token}:accept

Accept an invitation as the signed-in user.

ParameterInTypeRequiredNotes
tokenpathstringyes
StatusDescriptionBody
200OKAcceptInvitationResponse

Response 200: AcceptInvitationResponse

FieldTypeNotes
tenantIduuid
workspaceIduuid

GetCurrentUser ​

http
GET /api/v1/me

The signed-in user, their tenants and usable workspaces.

StatusDescriptionBody
200OKCurrentUserResponse

Response 200: CurrentUserResponse

FieldTypeNotes
currentTenantIduuid?
isTenantOwnerboolean
onboardingstring?
platformRolestring?
preferencesUserPreferencesDto?
supportSessionSupportSessionInfoDto?
tenantsTenantSummaryDto[]
userUserDto
workspacesMyWorkspaceDto[]

SetTenantFeature ​

http
PUT /api/v1/tenant/features/{feature}

Switch a tenant feature flag on or off, e.g. sql-interface (Owners, ADR-0018).

ParameterInTypeRequiredNotes
featurepathstringyes

Request body (application/json): SetTenantFeatureRequest

FieldTypeNotes
enabledboolean
StatusDescriptionBody
204No Content—

GetTenantModules ​

http
GET /api/v1/tenant/modules

The platform modules the tenant is licensed for (ADR-0021), e.g. semantic and migrate. Licences are granted by the platform operator.

StatusDescriptionBody
200OKTenantModulesDto

Response 200: TenantModulesDto

FieldTypeNotes
licensedstring[]
modulesTenantModuleDto[]

GetTenantSettings ​

http
GET /api/v1/tenant/settings

Tenant name, plan, region and AI & privacy settings.

StatusDescriptionBody
200OKTenantSettingsDto

Response 200: TenantSettingsDto

FieldTypeNotes
allowSamplesInPromptsboolean
autoAcceptThresholdnumber?
dailyDigestByDefaultboolean
featuresstring[]
llmModelstring
llmProviderstring
namestring
planstring
regionstring
tenantIduuid

UpdateTenantSettings ​

http
PUT /api/v1/tenant/settings

Update tenant settings (Owners).

Request body (application/json): UpdateTenantSettingsRequest

FieldTypeNotes
allowSamplesInPromptsboolean
autoAcceptThresholdnumber?
dailyDigestByDefaultboolean
llmModelstring
llmProviderstring
StatusDescriptionBody
204No Content—

GetTenantUsage ​

http
GET /api/v1/tenant/usage

Admin usage (Owners): scans, served queries, quality rule runs and assistant questions per UTC day over the last 1-90 days (default 30).

ParameterInTypeRequiredNotes
daysqueryint32no
StatusDescriptionBody
200OKTenantUsageDto

Response 200: TenantUsageDto

FieldTypeNotes
daysUsageDayDto[]
fromdate
llmTokensTrackedboolean
todate
totalsUsageTotalsDto
workspacesWorkspaceUsageDto[]

CreateTenant ​

http
POST /api/v1/tenants

Onboarding: create the caller's tenant and first workspace.

Request body (application/json): CreateTenantRequest

FieldTypeNotes
namestring
regionDataRegionOne of US, EU
slugstring
workspaceNamestring
StatusDescriptionBody
201CreatedCreateTenantResponse

Response 201: CreateTenantResponse

FieldTypeNotes
tenantIduuid
workspaceIduuid

ListWorkspaces ​

http
GET /api/v1/workspaces

Workspaces the caller can use.

StatusDescriptionBody
200OKWorkspaceDto[]

CreateWorkspace ​

http
POST /api/v1/workspaces

Create a workspace.

Request body (application/json): CreateWorkspaceRequest

FieldTypeNotes
namestring
StatusDescriptionBody
201CreatedCreatedResponse

Response 201: CreatedResponse

FieldTypeNotes
iduuid

GetWorkspace ​

http
GET /api/v1/workspaces/{workspaceId}

One workspace.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
StatusDescriptionBody
200OKWorkspaceDto

Response 200: WorkspaceDto

FieldTypeNotes
iduuid
memberCountint32
namestring
statusstring

RenameWorkspace ​

http
PATCH /api/v1/workspaces/{workspaceId}

Rename a workspace.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes

Request body (application/json): RenameWorkspaceRequest

FieldTypeNotes
namestring
StatusDescriptionBody
204No Content—

ArchiveWorkspace ​

http
DELETE /api/v1/workspaces/{workspaceId}

Archive a workspace (soft delete, audited).

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
StatusDescriptionBody
204No Content—

ListApiKeys ​

http
GET /api/v1/workspaces/{workspaceId}/api-keys

API keys of a workspace (never the key itself).

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
StatusDescriptionBody
200OKApiKeyDto[]

CreateApiKey ​

http
POST /api/v1/workspaces/{workspaceId}/api-keys

Create an API key. The plaintext key is returned once and never again.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes

Request body (application/json): CreateApiKeyRequest

FieldTypeNotes
expiresAtdate-time?
namestring
scopesstring[]
StatusDescriptionBody
201CreatedCreateApiKeyResponse

Response 201: CreateApiKeyResponse

FieldTypeNotes
expiresAtdate-time?
iduuid
keystring
namestring
prefixstring
scopesstring[]

RevokeApiKey ​

http
DELETE /api/v1/workspaces/{workspaceId}/api-keys/{apiKeyId}

Revoke an API key (rejected everywhere within 60 s).

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
apiKeyIdpathuuidyes
StatusDescriptionBody
204No Content—

ListInvitations ​

http
GET /api/v1/workspaces/{workspaceId}/invitations

Pending invitations of a workspace.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
StatusDescriptionBody
200OKInvitationDto[]

ListMembers ​

http
GET /api/v1/workspaces/{workspaceId}/members

Members of a workspace.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
StatusDescriptionBody
200OKMemberDto[]

InviteMember ​

http
POST /api/v1/workspaces/{workspaceId}/members

Invite a person by email (token valid 7 days, single use).

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes

Request body (application/json): InviteMemberRequest

FieldTypeNotes
emailstring
roleWorkspaceRoleOne of Owner, Admin, Steward, Modeler, Analyst, Viewer
StatusDescriptionBody
201CreatedCreatedResponse

Response 201: CreatedResponse

FieldTypeNotes
iduuid

ChangeMemberRole ​

http
PATCH /api/v1/workspaces/{workspaceId}/members/{userId}

Change a member's role.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
userIdpathuuidyes

Request body (application/json): ChangeMemberRoleRequest

FieldTypeNotes
roleWorkspaceRoleOne of Owner, Admin, Steward, Modeler, Analyst, Viewer
StatusDescriptionBody
204No Content—

RemoveMember ​

http
DELETE /api/v1/workspaces/{workspaceId}/members/{userId}

Remove a member from a workspace.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
userIdpathuuidyes
StatusDescriptionBody
204No Content—

GetMemberAttributes ​

http
GET /api/v1/workspaces/{workspaceId}/members/{userId}/attributes

A member's access-policy attributes (e.g. region): those managed here, and those from SCIM (read-only, they win). Owners and Admins.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
userIdpathuuidyes
StatusDescriptionBody
200OKMemberAttributesResponse

Response 200: MemberAttributesResponse

FieldTypeNotes
attributesobject
fromScimobject

SetMemberAttributes ​

http
PUT /api/v1/workspaces/{workspaceId}/members/{userId}/attributes

Replace a member's access-policy attributes, read by row filters such as {{user.attributes.region}} (audited; they win over IdP claims, SCIM values win over them).

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
userIdpathuuidyes

Request body (application/json): object

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.