Skip to content

HTTP API / Governance

Governance API ​

47 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/workspaces/{workspaceId}/certificationA metric's certification level, dates, at-risk flag and every criterion checked now.
POST/api/v1/workspaces/{workspaceId}/certification:certifyCertify (or renew) a metric that meets every criterion (stewards and admins); it expires after the validity period.
POST/api/v1/workspaces/{workspaceId}/certification:requestRequest certification of a metric; 422 Governance.CertificationCriteriaNotMet lists the unmet criteria in details.
POST/api/v1/workspaces/{workspaceId}/certification:revokeRevoke a certification (back to Draft) or deprecate the metric.
GET/api/v1/workspaces/{workspaceId}/certification/settingsThe tenant's certification criteria and validity period.
PUT/api/v1/workspaces/{workspaceId}/certification/settingsChange the tenant's certification criteria (Owners; audited).
GET/api/v1/workspaces/{workspaceId}/domainsBusiness domains, parents before children.
POST/api/v1/workspaces/{workspaceId}/domainsCreate a business domain, optionally under a parent.
GET/api/v1/workspaces/{workspaceId}/glossary:exportDownload the glossary as CSV (default) or JSON, in the import format.
POST/api/v1/workspaces/{workspaceId}/glossary:importImport terms from CSV or JSON text (stewards and admins); returns counts and row errors.
GET/api/v1/workspaces/{workspaceId}/glossary/searchFull-text and trigram search over terms (a synonym finds its canonical term first) and model assets.
GET/api/v1/workspaces/{workspaceId}/glossary/suggestionsTerm and synonym suggestions (default: awaiting a decision), merges first.
POST/api/v1/workspaces/{workspaceId}/glossary/suggestions:generateRefresh suggestions from the models' business names now (they also refresh on every release).
POST/api/v1/workspaces/{workspaceId}/glossary/suggestions/{suggestionId}:acceptCreate the suggested Draft term, or add the suggested synonyms to the existing term.
POST/api/v1/workspaces/{workspaceId}/glossary/suggestions/{suggestionId}:rejectDismiss a suggestion; it is not proposed again.
GET/api/v1/workspaces/{workspaceId}/glossary/termsGlossary terms by name (Page<T>), optionally by status, domain or a name/synonym filter.
POST/api/v1/workspaces/{workspaceId}/glossary/termsCreate a Draft term.
GET/api/v1/workspaces/{workspaceId}/glossary/terms/{termId}A term with its people, related terms and the assets it is linked to.
PUT/api/v1/workspaces/{workspaceId}/glossary/terms/{termId}Replace a term's content (approved terms: stewards and admins only; deprecated terms are frozen).
POST/api/v1/workspaces/{workspaceId}/glossary/terms/{termId}:approveApprove a term in review (stewards and admins; audited).
POST/api/v1/workspaces/{workspaceId}/glossary/terms/{termId}:deprecateDeprecate a term; 422 Governance.ReplacementRequired when it is linked to certified metrics and no replacement is given.
POST/api/v1/workspaces/{workspaceId}/glossary/terms/{termId}:submitSubmit a Draft term for review.
POST/api/v1/workspaces/{workspaceId}/glossary/terms/{termId}/linksLink the term to a metric, entity, dimension, measure, table or column.
DELETE/api/v1/workspaces/{workspaceId}/glossary/terms/{termId}/linksRemove a link (the asset is a query parameter: asset references contain slashes).
GET/api/v1/workspaces/{workspaceId}/governance/assetsGoverned assets with their effective owner, domain and linked terms (asset picker).
GET/api/v1/workspaces/{workspaceId}/governance/summaryGovernance dashboard counts: unowned assets, terms by status, pending suggestions, certified metrics without an approved term.
GET/api/v1/workspaces/{workspaceId}/metricsThe metrics catalog: every metric with its certification level, trust and owner.
GET/api/v1/workspaces/{workspaceId}/models/{modelId}/metrics/{metric}A metric with its definition, lineage, glossary terms and certification status.
GET/api/v1/workspaces/{workspaceId}/ownershipOwnership assignments (optionally of one asset).
PUT/api/v1/workspaces/{workspaceId}/ownershipAssign the owner, stewards and domain of an asset.
POST/api/v1/workspaces/{workspaceId}/ownership:bulkAssign an owner and stewards to every entity, metric and table of a domain or a source schema.
GET/api/v1/workspaces/{workspaceId}/ownership/unownedEntities, metrics and scanned tables without an owner (Page<T>).
GET/api/v1/workspaces/{workspaceId}/policiesAccess policies and Keel's suggestions, by priority then name (stewards and admins).
POST/api/v1/workspaces/{workspaceId}/policiesCreate a column mask, row filter or deny policy (audited).
POST/api/v1/workspaces/{workspaceId}/policies:apply-defaultOne-click fix: accept (or create) and enable the default Restricted-column mask.
GET/api/v1/workspaces/{workspaceId}/policies:coverageRestricted columns that Analysts still see unmasked.
GET/api/v1/workspaces/{workspaceId}/policies:effectivePolicies on one model object for a user (default: you; others need Govern).
POST/api/v1/workspaces/{workspaceId}/policies:impactBlast radius of a draft policy (nothing is stored): columns, entities and metrics it would touch, and the exports of those models.
POST/api/v1/workspaces/{workspaceId}/policies:simulateView as a member or role: the policies that apply on the model and why, with the effective filters, masks and hidden assets. Compile or run the model's query with viewAs for the SQL and the preview rows.
POST/api/v1/workspaces/{workspaceId}/policies:suggestPropose the default mask for Restricted columns (F11 FR4) when none exists.
GET/api/v1/workspaces/{workspaceId}/policies/{policyId}One access policy.
PUT/api/v1/workspaces/{workspaceId}/policies/{policyId}Replace a policy's definition (before/after audited).
DELETE/api/v1/workspaces/{workspaceId}/policies/{policyId}Delete a policy (audited).
POST/api/v1/workspaces/{workspaceId}/policies/{policyId}:acceptAccept a policy Keel suggested: it is enabled and enforced.
POST/api/v1/workspaces/{workspaceId}/policies/{policyId}:disableStop enforcing a policy (it is kept).
POST/api/v1/workspaces/{workspaceId}/policies/{policyId}:enableEnforce an accepted policy.
POST/api/v1/workspaces/{workspaceId}/policies/{policyId}:rejectReject a policy Keel suggested; it is not proposed again.

GetCertificationStatus ​

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

A metric's certification level, dates, at-risk flag and every criterion checked now.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
assetRefquerystringyes
StatusDescriptionBody
200OKCertificationStatusDto

Response 200: CertificationStatusDto

FieldTypeNotes
assetRefstring
atRiskboolean
certifiedAtdate-time?
certifiedByPersonDto?
criteriaCriterionResult[]
expiresAtdate-time?
levelCertificationLevelOne of Draft, Reviewed, Certified, Deprecated
requestedAtdate-time?
requestedByPersonDto?
revokedReasonstring?
trackedboolean

CertifyMetric ​

http
POST /api/v1/workspaces/{workspaceId}/certification:certify

Certify (or renew) a metric that meets every criterion (stewards and admins); it expires after the validity period.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes

Request body (application/json): CertificationRequest

FieldTypeNotes
assetRefstringA metric: metric:{modelId}/{name}.
StatusDescriptionBody
204No Content—
422Unprocessable EntityProblemDetails

RequestCertification ​

http
POST /api/v1/workspaces/{workspaceId}/certification:request

Request certification of a metric; 422 Governance.CertificationCriteriaNotMet lists the unmet criteria in details.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes

Request body (application/json): CertificationRequest

FieldTypeNotes
assetRefstringA metric: metric:{modelId}/{name}.
StatusDescriptionBody
200OKCertificationRequestedDto
422Unprocessable EntityProblemDetails

Response 200: CertificationRequestedDto

FieldTypeNotes
levelCertificationLevelOne of Draft, Reviewed, Certified, Deprecated

RevokeCertification ​

http
POST /api/v1/workspaces/{workspaceId}/certification:revoke

Revoke a certification (back to Draft) or deprecate the metric.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes

Request body (application/json): RevokeCertificationRequest

FieldTypeNotes
assetRefstring
deprecateboolean?Deprecate the metric instead of returning it to Draft.
reasonstring?
StatusDescriptionBody
204No Content—

GetCertificationSettings ​

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

The tenant's certification criteria and validity period.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
StatusDescriptionBody
200OKCertificationRules

Response 200: CertificationRules

FieldTypeNotes
minTrustScoreint32?
requireApprovedTermboolean
requireDescriptionboolean
requireOwnerboolean
requirePassingCriticalRulesboolean
requireStewardApprovalboolean
validityDaysint32

UpdateCertificationSettings ​

http
PUT /api/v1/workspaces/{workspaceId}/certification/settings

Change the tenant's certification criteria (Owners; audited).

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes

Request body (application/json): CertificationRules

FieldTypeNotes
minTrustScoreint32?
requireApprovedTermboolean
requireDescriptionboolean
requireOwnerboolean
requirePassingCriticalRulesboolean
requireStewardApprovalboolean
validityDaysint32
StatusDescriptionBody
204No Content—

ListDomains ​

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

Business domains, parents before children.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
StatusDescriptionBody
200OKDomainDto[]

CreateDomain ​

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

Create a business domain, optionally under a parent.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes

Request body (application/json): CreateDomainRequest

FieldTypeNotes
descriptionstring?
namestring
ownersstring[]?
parentIduuid?
StatusDescriptionBody
201CreatedCreatedResponse

Response 201: CreatedResponse

FieldTypeNotes
iduuid

ExportGlossary ​

http
GET /api/v1/workspaces/{workspaceId}/glossary:export

Download the glossary as CSV (default) or JSON, in the import format.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
formatqueryGlossaryFileFormatno
StatusDescriptionBody
200OKstring

ImportGlossary ​

http
POST /api/v1/workspaces/{workspaceId}/glossary:import

Import terms from CSV or JSON text (stewards and admins); returns counts and row errors.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes

Request body (application/json): ImportGlossaryRequest

FieldTypeNotes
contentstring
formatGlossaryFileFormatOne of Csv, Json
StatusDescriptionBody
200OKImportResultDto

Response 200: ImportResultDto

FieldTypeNotes
createdint32
errorsstring[]
skippedint32
updatedint32

SearchGlossary ​

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

Full-text and trigram search over terms (a synonym finds its canonical term first) and model assets.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
qquerystringyes
limitqueryint32no
StatusDescriptionBody
200OKGlossarySearchDto

Response 200: GlossarySearchDto

FieldTypeNotes
assetsAssetHitDto[]
querystring
termsTermHitDto[]

ListTermSuggestions ​

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

Term and synonym suggestions (default: awaiting a decision), merges first.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
statusqueryProposalStatusno
StatusDescriptionBody
200OKTermSuggestionDto[]

GenerateTermSuggestions ​

http
POST /api/v1/workspaces/{workspaceId}/glossary/suggestions:generate

Refresh suggestions from the models' business names now (they also refresh on every release).

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
StatusDescriptionBody
202AcceptedSuggestionsQueuedDto

Response 202: SuggestionsQueuedDto

FieldTypeNotes
jobIduuid

AcceptTermSuggestion ​

http
POST /api/v1/workspaces/{workspaceId}/glossary/suggestions/{suggestionId}:accept

Create the suggested Draft term, or add the suggested synonyms to the existing term.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
suggestionIdpathuuidyes
StatusDescriptionBody
200OKSuggestionAcceptedDto

Response 200: SuggestionAcceptedDto

FieldTypeNotes
termIduuid

RejectTermSuggestion ​

http
POST /api/v1/workspaces/{workspaceId}/glossary/suggestions/{suggestionId}:reject

Dismiss a suggestion; it is not proposed again.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
suggestionIdpathuuidyes
StatusDescriptionBody
204No Content—

ListGlossaryTerms ​

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

Glossary terms by name (Page<T>), optionally by status, domain or a name/synonym filter.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
statusqueryTermStatusno
domainIdqueryuuidno
filterquerystringno
pagequeryint32no
pageSizequeryint32no
StatusDescriptionBody
200OKPagedResultOfTermSummaryDto

Response 200: PagedResultOfTermSummaryDto

FieldTypeNotes
hasNextboolean
itemsTermSummaryDto[]
pageint32
pageSizeint32
totalCountint64

CreateGlossaryTerm ​

http
POST /api/v1/workspaces/{workspaceId}/glossary/terms

Create a Draft term.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes

Request body (application/json): TermRequest

FieldTypeNotes
definitionstring?
domainIduuid?
namestring
ownerstring?
relatedTermIdsuuid[]?
stewardsstring[]?
synonymsstring[]?
StatusDescriptionBody
201CreatedCreatedResponse

Response 201: CreatedResponse

FieldTypeNotes
iduuid

GetGlossaryTerm ​

http
GET /api/v1/workspaces/{workspaceId}/glossary/terms/{termId}

A term with its people, related terms and the assets it is linked to.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
termIdpathuuidyes
StatusDescriptionBody
200OKTermDto

Response 200: TermDto

FieldTypeNotes
approvedAtdate-time?
approvedByPersonDto?
createdAtdate-time
definitionstring
deprecationReasonstring?
domainstring?
domainIduuid?
iduuid
linksTermLinkDto[]
namestring
originOriginOne of Discovered, Inferred, LlmSuggested, UserDefined, Imported
ownerPersonDto?
relatedRelatedTermDto[]
replacementRelatedTermDto?
statusTermStatusOne of Draft, InReview, Approved, Deprecated
stewardsPersonDto[]
submittedAtdate-time?
submittedByPersonDto?
synonymsstring[]
updatedAtdate-time?

UpdateGlossaryTerm ​

http
PUT /api/v1/workspaces/{workspaceId}/glossary/terms/{termId}

Replace a term's content (approved terms: stewards and admins only; deprecated terms are frozen).

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
termIdpathuuidyes

Request body (application/json): TermRequest

FieldTypeNotes
definitionstring?
domainIduuid?
namestring
ownerstring?
relatedTermIdsuuid[]?
stewardsstring[]?
synonymsstring[]?
StatusDescriptionBody
204No Content—

ApproveGlossaryTerm ​

http
POST /api/v1/workspaces/{workspaceId}/glossary/terms/{termId}:approve

Approve a term in review (stewards and admins; audited).

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
termIdpathuuidyes
StatusDescriptionBody
204No Content—

DeprecateGlossaryTerm ​

http
POST /api/v1/workspaces/{workspaceId}/glossary/terms/{termId}:deprecate

Deprecate a term; 422 Governance.ReplacementRequired when it is linked to certified metrics and no replacement is given.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
termIdpathuuidyes

Request body (application/json): DeprecateTermRequest

FieldTypeNotes
reasonstring?
replacementTermIduuid?Required when the term is linked to certified metrics (F09 AC2).
StatusDescriptionBody
204No Content—
422Unprocessable EntityProblemDetails

SubmitGlossaryTerm ​

http
POST /api/v1/workspaces/{workspaceId}/glossary/terms/{termId}:submit

Submit a Draft term for review.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
termIdpathuuidyes
StatusDescriptionBody
204No Content—

LinkGlossaryTerm ​

http
POST /api/v1/workspaces/{workspaceId}/glossary/terms/{termId}/links

Link the term to a metric, entity, dimension, measure, table or column.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
termIdpathuuidyes

Request body (application/json): LinkTermRequest

FieldTypeNotes
assetRefstringSee docs/02 §6, e.g. metric:{modelId}/net_revenue or model:{modelId}/entity:customer.
StatusDescriptionBody
204No Content—

UnlinkGlossaryTerm ​

http
DELETE /api/v1/workspaces/{workspaceId}/glossary/terms/{termId}/links

Remove a link (the asset is a query parameter: asset references contain slashes).

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
termIdpathuuidyes
assetRefquerystringyes
StatusDescriptionBody
204No Content—

ListGovernedAssets ​

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

Governed assets with their effective owner, domain and linked terms (asset picker).

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
filterquerystringno
kindqueryAssetKindno
unownedquerybooleanno
pagequeryint32no
pageSizequeryint32no
StatusDescriptionBody
200OKPagedResultOfGovernedAssetDto

Response 200: PagedResultOfGovernedAssetDto

FieldTypeNotes
hasNextboolean
itemsGovernedAssetDto[]
pageint32
pageSizeint32
totalCountint64

GetGovernanceSummary ​

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

Governance dashboard counts: unowned assets, terms by status, pending suggestions, certified metrics without an approved term.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
StatusDescriptionBody
200OKGovernanceSummaryDto

Response 200: GovernanceSummaryDto

FieldTypeNotes
assetsint32
certifiedMetricsint32
certifiedMetricsWithoutApprovedTermint32
domainsint32
pendingSuggestionsint32
termsTermCountsDto
unownedAssetsint32

ListCatalogMetrics ​

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

The metrics catalog: every metric with its certification level, trust and owner.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
modelIdqueryuuidno
filterquerystringno
levelqueryCertificationLevelno
StatusDescriptionBody
200OKMetricSummaryDto[]

GetCatalogMetric ​

http
GET /api/v1/workspaces/{workspaceId}/models/{modelId}/metrics/{metric}

A metric with its definition, lineage, glossary terms and certification status.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
modelIdpathuuidyes
metricpathstringyes
StatusDescriptionBody
200OKMetricDetailDto

Response 200: MetricDetailDto

FieldTypeNotes
certificationCertificationStatusDto
definitionstring?
dimensionsint32
domainstring?
lineagestring[]
metricMetricSummaryDto
termLinksRelatedTermDto[]

ListOwnership ​

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

Ownership assignments (optionally of one asset).

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
assetRefquerystringno
StatusDescriptionBody
200OKOwnershipDto[]

AssignOwnership ​

http
PUT /api/v1/workspaces/{workspaceId}/ownership

Assign the owner, stewards and domain of an asset.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes

Request body (application/json): AssignOwnershipRequest

FieldTypeNotes
assetRefstring
domainIduuid?
ownerstring?
stewardsstring[]?
StatusDescriptionBody
204No Content—

BulkAssignOwnership ​

http
POST /api/v1/workspaces/{workspaceId}/ownership:bulk

Assign an owner and stewards to every entity, metric and table of a domain or a source schema.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes

Request body (application/json): BulkAssignOwnershipRequest

FieldTypeNotes
dataSourceIduuid?
domainIduuid?
overwriteboolean?
ownerstring?
schemastring?
stewardsstring[]?
StatusDescriptionBody
200OKBulkAssignedDto

Response 200: BulkAssignedDto

FieldTypeNotes
assignedint32
unchangedint32

ListUnownedAssets ​

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

Entities, metrics and scanned tables without an owner (Page<T>).

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
kindqueryAssetKindno
pagequeryint32no
pageSizequeryint32no
StatusDescriptionBody
200OKPagedResultOfGovernedAssetDto

Response 200: PagedResultOfGovernedAssetDto

FieldTypeNotes
hasNextboolean
itemsGovernedAssetDto[]
pageint32
pageSizeint32
totalCountint64

ListAccessPolicies ​

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

Access policies and Keel's suggestions, by priority then name (stewards and admins).

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
includeRejectedquerybooleanno
StatusDescriptionBody
200OKPolicyDto[]

CreateAccessPolicy ​

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

Create a column mask, row filter or deny policy (audited).

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes

Request body (application/json): PolicyRequest

FieldTypeNotes
appliesTostring[]?
descriptionstring?
enabledboolean?
exemptstring[]?
keepint32?
maskPolicyMask?
namestring
priorityint32?
rowFilterRowFilterInput?
scopestring
scopeKindPolicyScopeKindOne of Asset, Tag, Domain, Sensitivity
typePolicyTypeOne of ColumnMask, RowFilter, Deny
StatusDescriptionBody
201CreatedCreatedResponse

Response 201: CreatedResponse

FieldTypeNotes
iduuid

ApplyDefaultMaskPolicy ​

http
POST /api/v1/workspaces/{workspaceId}/policies:apply-default

One-click fix: accept (or create) and enable the default Restricted-column mask.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
StatusDescriptionBody
200OKDefaultMaskAppliedDto

Response 200: DefaultMaskAppliedDto

FieldTypeNotes
columnsint32
namestring
policyIduuid

GetPolicyCoverage ​

http
GET /api/v1/workspaces/{workspaceId}/policies:coverage

Restricted columns that Analysts still see unmasked.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
StatusDescriptionBody
200OKPolicyCoverageDto

Response 200: PolicyCoverageDto

FieldTypeNotes
restrictedint32
suggestionIduuid?
uncoveredRestrictedDimension[]

GetEffectivePolicies ​

http
GET /api/v1/workspaces/{workspaceId}/policies:effective

Policies on one model object for a user (default: you; others need Govern).

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
assetRefquerystringyes
userIdqueryuuidno
StatusDescriptionBody
200OKEffectivePoliciesDto

Response 200: EffectivePoliciesDto

FieldTypeNotes
assetRefstring
hiddenboolean
masksEffectiveMaskDto[]
policiesPolicyTraceDto[]
rolesstring[]
rowFiltersEffectiveRowFilterDto[]
userIduuid?

GetAccessPolicyImpact ​

http
POST /api/v1/workspaces/{workspaceId}/policies:impact

Blast radius of a draft policy (nothing is stored): columns, entities and metrics it would touch, and the exports of those models.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes

Request body (application/json): PolicyRequest

FieldTypeNotes
appliesTostring[]?
descriptionstring?
enabledboolean?
exemptstring[]?
keepint32?
maskPolicyMask?
namestring
priorityint32?
rowFilterRowFilterInput?
scopestring
scopeKindPolicyScopeKindOne of Asset, Tag, Domain, Sensitivity
typePolicyTypeOne of ColumnMask, RowFilter, Deny
StatusDescriptionBody
200OKPolicyImpactDto

Response 200: PolicyImpactDto

FieldTypeNotes
columnsint32
entitiesint32
exportsint32
metricsint32
modelsint32
targetsPolicyImpactTargetDto[]

SimulateAccessPolicies ​

http
POST /api/v1/workspaces/{workspaceId}/policies:simulate

View as a member or role: the policies that apply on the model and why, with the effective filters, masks and hidden assets. Compile or run the model's query with viewAs for the SQL and the preview rows.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes

Request body (application/json): SimulatePolicyRequest

FieldTypeNotes
attributesobject?
modelIduuid
rolestring?
userIduuid?
StatusDescriptionBody
200OKPolicySimulationDto

Response 200: PolicySimulationDto

FieldTypeNotes
deniedAssetsstring[]
masksEffectiveMaskDto[]
missingAttributesstring[]
modelIduuid
principalSimulatedPrincipalDto
rowFiltersEffectiveRowFilterDto[]
tracePolicyTraceDto[]

SuggestAccessPolicies ​

http
POST /api/v1/workspaces/{workspaceId}/policies:suggest

Propose the default mask for Restricted columns (F11 FR4) when none exists.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
StatusDescriptionBody
200OKPolicySuggestionsDto

Response 200: PolicySuggestionsDto

FieldTypeNotes
proposeduuid[]

GetAccessPolicy ​

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

One access policy.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
policyIdpathuuidyes
StatusDescriptionBody
200OKPolicyDto

Response 200: PolicyDto

FieldTypeNotes
appliesTostring[]
confidencenumber
createdAtdate-time
descriptionstring?
enabledboolean
evidenceEvidence[]
exemptstring[]
iduuid
keepint32?
maskPolicyMask?
namestring
originOriginOne of Discovered, Inferred, LlmSuggested, UserDefined, Imported
priorityint32
rowFilterRowFilterDto?
rulestring
scopestring
scopeKindPolicyScopeKindOne of Asset, Tag, Domain, Sensitivity
statusProposalStatusOne of Proposed, Accepted, Rejected, Superseded
typePolicyTypeOne of ColumnMask, RowFilter, Deny
updatedAtdate-time?

UpdateAccessPolicy ​

http
PUT /api/v1/workspaces/{workspaceId}/policies/{policyId}

Replace a policy's definition (before/after audited).

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
policyIdpathuuidyes

Request body (application/json): PolicyRequest

FieldTypeNotes
appliesTostring[]?
descriptionstring?
enabledboolean?
exemptstring[]?
keepint32?
maskPolicyMask?
namestring
priorityint32?
rowFilterRowFilterInput?
scopestring
scopeKindPolicyScopeKindOne of Asset, Tag, Domain, Sensitivity
typePolicyTypeOne of ColumnMask, RowFilter, Deny
StatusDescriptionBody
204No Content—

DeleteAccessPolicy ​

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

Delete a policy (audited).

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
policyIdpathuuidyes
StatusDescriptionBody
204No Content—

AcceptAccessPolicySuggestion ​

http
POST /api/v1/workspaces/{workspaceId}/policies/{policyId}:accept

Accept a policy Keel suggested: it is enabled and enforced.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
policyIdpathuuidyes
StatusDescriptionBody
204No Content—

DisableAccessPolicy ​

http
POST /api/v1/workspaces/{workspaceId}/policies/{policyId}:disable

Stop enforcing a policy (it is kept).

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
policyIdpathuuidyes
StatusDescriptionBody
204No Content—

EnableAccessPolicy ​

http
POST /api/v1/workspaces/{workspaceId}/policies/{policyId}:enable

Enforce an accepted policy.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
policyIdpathuuidyes
StatusDescriptionBody
204No Content—

RejectAccessPolicySuggestion ​

http
POST /api/v1/workspaces/{workspaceId}/policies/{policyId}:reject

Reject a policy Keel suggested; it is not proposed again.

ParameterInTypeRequiredNotes
workspaceIdpathuuidyes
policyIdpathuuidyes
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.