Appearance
Modeling API
38 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.
| Method | Path | Summary |
|---|---|---|
| GET | /api/v1/workspaces/{workspaceId}/change-requests | Change requests of a workspace (or one model), newest first. |
| GET | /api/v1/workspaces/{workspaceId}/model-generations | Model generations of a workspace, newest first (optionally for one scan run). |
| GET | /api/v1/workspaces/{workspaceId}/models | Semantic models of a workspace. |
| POST | /api/v1/workspaces/{workspaceId}/models | Create a model with an empty first revision on main. |
| GET | /api/v1/workspaces/{workspaceId}/models/{modelId} | A model with its branches and latest release. |
| POST | /api/v1/workspaces/{workspaceId}/models/{modelId}:generate | Generate proposals for a model from a scan (default the latest) onto keel/proposals-{run} with a change request. |
| POST | /api/v1/workspaces/{workspaceId}/models/{modelId}/branches | Create a branch from a branch head (default main) or a revision. |
| DELETE | /api/v1/workspaces/{workspaceId}/models/{modelId}/branches/{name} | Delete a branch (not main); its open change request is closed. |
| POST | /api/v1/workspaces/{workspaceId}/models/{modelId}/change-requests | Propose merging a branch (default into main); the checks run at once. |
| GET | /api/v1/workspaces/{workspaceId}/models/{modelId}/change-requests/{number} | A change request with its diff, checks, reviews, conflicts and merge blockers. |
| POST | /api/v1/workspaces/{workspaceId}/models/{modelId}/change-requests/{number}:acknowledge | Confirm consumers of breaking changes were notified. |
| POST | /api/v1/workspaces/{workspaceId}/models/{modelId}/change-requests/{number}:checks | Re-run the checks against the current branch heads. |
| POST | /api/v1/workspaces/{workspaceId}/models/{modelId}/change-requests/{number}:close | Close without merging. |
| POST | /api/v1/workspaces/{workspaceId}/models/{modelId}/change-requests/{number}:merge | Three-way merge into the target (409 when a branch moved since the checks). |
| POST | /api/v1/workspaces/{workspaceId}/models/{modelId}/change-requests/{number}:review | Approve, request changes or comment. |
| GET | /api/v1/workspaces/{workspaceId}/models/{modelId}/diff | Object-level diff between two branches or revisions. |
| GET | /api/v1/workspaces/{workspaceId}/models/{modelId}/graph | Canvas graph of a branch (or the caller's working copy of it): entities, joins, metrics, domains, issues. |
| GET | /api/v1/workspaces/{workspaceId}/models/{modelId}/history | First-parent history of a branch. |
| POST | /api/v1/workspaces/{workspaceId}/models/{modelId}/metrics:preview | Metric editor preview: compiled SQL, the metric's issues, authoring checks and (with run) its last 12 periods; nothing is stored. |
| POST | /api/v1/workspaces/{workspaceId}/models/{modelId}/query:compile | Compile a semantic query against a release or branch of the model to dialect SQL and its parameters (422 with suggestions for unknown names). |
| POST | /api/v1/workspaces/{workspaceId}/models/{modelId}/query:run | Run a semantic query on the model's source (row limit 1000 by default, 10000 at most; 30 s timeout). |
| GET | /api/v1/workspaces/{workspaceId}/models/{modelId}/releases | Releases of a model, newest first. |
| POST | /api/v1/workspaces/{workspaceId}/models/{modelId}/releases | Tag a main revision (default the head) with the suggested or given version. |
| POST | /api/v1/workspaces/{workspaceId}/models/{modelId}/releases/{releaseId}:rollback | Publish an earlier release's revision as a new release. |
| POST | /api/v1/workspaces/{workspaceId}/models/{modelId}/revisions | Commit a validated model document on a branch (409 when the head moved). |
| GET | /api/v1/workspaces/{workspaceId}/models/{modelId}/revisions/{revisionId} | A revision: document, content hash, parents and validation issues. |
| PUT | /api/v1/workspaces/{workspaceId}/models/{modelId}/settings | Branch protection, required approvals, automatic generation. |
| GET | /api/v1/workspaces/{workspaceId}/models/{modelId}/strategy | The model's strategy report, questionnaire answers and ticked-off actions. |
| POST | /api/v1/workspaces/{workspaceId}/models/{modelId}/strategy:recommend | Recompute the strategy report from the latest discoveries and the model. |
| PUT | /api/v1/workspaces/{workspaceId}/models/{modelId}/strategy/actions/{key} | Tick a next action off, or back on. |
| PUT | /api/v1/workspaces/{workspaceId}/models/{modelId}/strategy/questionnaire | Store the questionnaire answers and recompute the recommendation. |
| POST | /api/v1/workspaces/{workspaceId}/models/{modelId}/validate | Validate a model document against the model's sources (Problems panel); nothing is stored. |
| GET | /api/v1/workspaces/{workspaceId}/models/{modelId}/working-copy | The caller's working copy of a branch (404 when they have none); ETag is its version. |
| PUT | /api/v1/workspaces/{workspaceId}/models/{modelId}/working-copy | Autosave the caller's draft of a branch (412 when the expected version is stale); returns validation. |
| DELETE | /api/v1/workspaces/{workspaceId}/models/{modelId}/working-copy | Discard the caller's draft of a branch. |
| POST | /api/v1/workspaces/{workspaceId}/models/{modelId}/working-copy:commit | Commit the draft as a revision on its branch and clear it; rebases cleanly when the branch moved, else 409 Modeling.WorkingCopyOutdated. |
| GET | /api/v1/workspaces/{workspaceId}/models/{modelId}/working-copy:conflicts | What rebasing the caller's draft onto the branch head conflicts on (target = branch head, source = draft); empty when clean. |
| POST | /api/v1/workspaces/{workspaceId}/models/{modelId}/working-copy:rebase | Merge the branch's new commits into the draft; resolutions pick a side per conflicting path (409 Modeling.WorkingCopyOutdated while any is unresolved). |
ListChangeRequests
http
GET /api/v1/workspaces/{workspaceId}/change-requestsChange requests of a workspace (or one model), newest first.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
modelId | query | uuid | no | |
active | query | boolean | no |
| Status | Description | Body |
|---|---|---|
| 200 | OK | ChangeRequestSummaryDto[] |
ListModelGenerations
http
GET /api/v1/workspaces/{workspaceId}/model-generationsModel generations of a workspace, newest first (optionally for one scan run).
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
runId | query | uuid | no | |
limit | query | int32 | no |
| Status | Description | Body |
|---|---|---|
| 200 | OK | GenerationDto[] |
ListModels
http
GET /api/v1/workspaces/{workspaceId}/modelsSemantic models of a workspace.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes |
| Status | Description | Body |
|---|---|---|
| 200 | OK | ModelSummaryDto[] |
CreateModel
http
POST /api/v1/workspaces/{workspaceId}/modelsCreate a model with an empty first revision on main.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes |
Request body (application/json): CreateModelRequest
| Field | Type | Notes |
|---|---|---|
dataSourceIds | uuid[]? | |
description | string? | |
name | string |
| Status | Description | Body |
|---|---|---|
| 201 | Created | ModelCreatedResult |
Response 201: ModelCreatedResult
| Field | Type | Notes |
|---|---|---|
id | uuid | |
mainRevisionId | uuid |
GetModel
http
GET /api/v1/workspaces/{workspaceId}/models/{modelId}A model with its branches and latest release.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
modelId | path | uuid | yes |
| Status | Description | Body |
|---|---|---|
| 200 | OK | ModelDto |
Response 200: ModelDto
| Field | Type | Notes |
|---|---|---|
allowDirectCommitsToMain | boolean | |
autoGenerate | boolean | |
branches | BranchDto[] | |
dataSourceIds | uuid[] | |
description | string? | |
id | uuid | |
latestRelease | ReleaseDto? | |
name | string | |
requiredApprovals | int32 | |
workspaceId | uuid |
GenerateModel
http
POST /api/v1/workspaces/{workspaceId}/models/{modelId}:generateGenerate proposals for a model from a scan (default the latest) onto keel/proposals-{run} with a change request.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
modelId | path | uuid | yes |
Request body (application/json): GenerateModelRequest
| Field | Type | Notes |
|---|---|---|
includeHighConfidence | boolean? | |
runId | uuid? |
| Status | Description | Body |
|---|---|---|
| 202 | Accepted | GenerationAccepted |
Response 202: GenerationAccepted
| Field | Type | Notes |
|---|---|---|
generationId | uuid | |
jobId | uuid |
CreateBranch
http
POST /api/v1/workspaces/{workspaceId}/models/{modelId}/branchesCreate a branch from a branch head (default main) or a revision.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
modelId | path | uuid | yes |
Request body (application/json): CreateBranchRequest
| Field | Type | Notes |
|---|---|---|
fromBranch | string? | |
fromRevisionId | uuid? | |
name | string |
| Status | Description | Body |
|---|---|---|
| 201 | Created | CreatedResponse |
Response 201: CreatedResponse
| Field | Type | Notes |
|---|---|---|
id | uuid |
DeleteBranch
http
DELETE /api/v1/workspaces/{workspaceId}/models/{modelId}/branches/{name}Delete a branch (not main); its open change request is closed.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
modelId | path | uuid | yes | |
name | path | string | yes |
| Status | Description | Body |
|---|---|---|
| 204 | No Content | — |
OpenChangeRequest
http
POST /api/v1/workspaces/{workspaceId}/models/{modelId}/change-requestsPropose merging a branch (default into main); the checks run at once.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
modelId | path | uuid | yes |
Request body (application/json): OpenChangeRequestRequest
| Field | Type | Notes |
|---|---|---|
description | string? | |
reviewers | string[]? | |
sourceBranch | string | |
targetBranch | string? | |
title | string |
| Status | Description | Body |
|---|---|---|
| 201 | Created | ChangeRequestOpenedResult |
Response 201: ChangeRequestOpenedResult
| Field | Type | Notes |
|---|---|---|
id | uuid | |
number | int32 |
GetChangeRequest
http
GET /api/v1/workspaces/{workspaceId}/models/{modelId}/change-requests/{number}A change request with its diff, checks, reviews, conflicts and merge blockers.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
modelId | path | uuid | yes | |
number | path | int32 | yes |
| Status | Description | Body |
|---|---|---|
| 200 | OK | ChangeRequestDto |
Response 200: ChangeRequestDto
| Field | Type | Notes |
|---|---|---|
acknowledgedBy | string? | |
approvals | int32 | |
checks | CheckDto[] | |
checksCurrent | boolean | |
conflicts | ConflictDto[] | |
description | string? | |
diff | DiffDto | |
id | uuid | |
mergeBlockers | string[] | |
mergedRevisionId | uuid? | |
modelId | uuid | |
modelName | string | |
number | int32 | |
openedAt | date-time | |
openedBy | string | |
openedByName | string | |
release | ReleaseDto? | |
requestedReviewers | RequestedReviewerDto[] | |
requiredApprovals | int32 | |
reviews | ReviewDto[] | |
sourceBranch | string | |
status | ChangeRequestStatus | One of Open, Approved, ChangesRequested, Merged, Closed |
suggestedVersion | string | |
targetBranch | string | |
title | string |
AcknowledgeBreakingChanges
http
POST /api/v1/workspaces/{workspaceId}/models/{modelId}/change-requests/{number}:acknowledgeConfirm consumers of breaking changes were notified.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
modelId | path | uuid | yes | |
number | path | int32 | yes |
| Status | Description | Body |
|---|---|---|
| 204 | No Content | — |
RunChangeRequestChecks
http
POST /api/v1/workspaces/{workspaceId}/models/{modelId}/change-requests/{number}:checksRe-run the checks against the current branch heads.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
modelId | path | uuid | yes | |
number | path | int32 | yes |
| Status | Description | Body |
|---|---|---|
| 204 | No Content | — |
CloseChangeRequest
http
POST /api/v1/workspaces/{workspaceId}/models/{modelId}/change-requests/{number}:closeClose without merging.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
modelId | path | uuid | yes | |
number | path | int32 | yes |
| Status | Description | Body |
|---|---|---|
| 204 | No Content | — |
MergeChangeRequest
http
POST /api/v1/workspaces/{workspaceId}/models/{modelId}/change-requests/{number}:mergeThree-way merge into the target (409 when a branch moved since the checks).
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
modelId | path | uuid | yes | |
number | path | int32 | yes |
Request body (application/json): MergeRequest
| Field | Type | Notes |
|---|---|---|
resolutions | object? |
| Status | Description | Body |
|---|---|---|
| 200 | OK | uuid |
ReviewChangeRequest
http
POST /api/v1/workspaces/{workspaceId}/models/{modelId}/change-requests/{number}:reviewApprove, request changes or comment.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
modelId | path | uuid | yes | |
number | path | int32 | yes |
Request body (application/json): ReviewRequest
| Field | Type | Notes |
|---|---|---|
comment | string? | |
decision | ReviewDecision | One of Approve, RequestChanges, Comment |
| Status | Description | Body |
|---|---|---|
| 204 | No Content | — |
GetDiff
http
GET /api/v1/workspaces/{workspaceId}/models/{modelId}/diffObject-level diff between two branches or revisions.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
modelId | path | uuid | yes | |
base | query | string | yes | |
head | query | string | yes |
| Status | Description | Body |
|---|---|---|
| 200 | OK | DiffDto |
Response 200: DiffDto
| Field | Type | Notes |
|---|---|---|
added | int32 | |
baseRevisionId | uuid | |
changes | ObjectChangeDto[] | |
headRevisionId | uuid | |
modified | int32 | |
removed | int32 | |
suggestedBump | ReleaseBump | One of None, Patch, Minor, Major |
GetModelGraph
http
GET /api/v1/workspaces/{workspaceId}/models/{modelId}/graphCanvas graph of a branch (or the caller's working copy of it): entities, joins, metrics, domains, issues.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
modelId | path | uuid | yes | |
branch | query | string | no | |
includeWorkingCopy | query | boolean | no |
| Status | Description | Body |
|---|---|---|
| 200 | OK | ModelGraphDto |
Response 200: ModelGraphDto
| Field | Type | Notes |
|---|---|---|
branch | string | |
contentHash | string | |
domains | GraphDomain[] | |
edges | GraphEdge[] | |
headRevisionId | uuid | |
issues | ValidationIssue[] | |
metrics | GraphMetric[] | |
modelId | uuid | |
nodes | GraphNode[] | |
workingCopyVersion | int32? |
GetHistory
http
GET /api/v1/workspaces/{workspaceId}/models/{modelId}/historyFirst-parent history of a branch.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
modelId | path | uuid | yes | |
branch | query | string | no | |
limit | query | int32 | no |
| Status | Description | Body |
|---|---|---|
| 200 | OK | RevisionSummaryDto[] |
PreviewMetric
http
POST /api/v1/workspaces/{workspaceId}/models/{modelId}/metrics:previewMetric editor preview: compiled SQL, the metric's issues, authoring checks and (with run) its last 12 periods; nothing is stored.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
modelId | path | uuid | yes |
Request body (application/json): PreviewMetricRequest
| Field | Type | Notes |
|---|---|---|
branch | string? | The branch whose working copy (else head) the metric is previewed on; default main. |
includeWorkingCopy | boolean? | Preview on the caller's draft of the branch (default); false = on the branch head. |
metric | MetricDef | |
previousName | string? | The metric's current name when the edit renames it. |
run | boolean? | Also read the last 12 periods of values from the source (needs QueryServing). |
| Status | Description | Body |
|---|---|---|
| 200 | OK | MetricPreviewDto |
Response 200: MetricPreviewDto
| Field | Type | Notes |
|---|---|---|
checks | MetricCheckDto[] | |
dialect | string? | |
grain | string? | |
issues | ValidationIssue[] | |
series | MetricPreviewPointDto[]? | |
seriesError | string? | |
source | QuerySourceDto | |
sql | string? |
CompileModelQuery
http
POST /api/v1/workspaces/{workspaceId}/models/{modelId}/query:compileCompile a semantic query against a release or branch of the model to dialect SQL and its parameters (422 with suggestions for unknown names).
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
modelId | path | uuid | yes |
Request body (application/json): SemanticQueryBody
| Field | Type | Notes |
|---|---|---|
dimensions | string[]? | |
filters | QueryFilterBody[]? | |
limit | int32? | |
metrics | string[] | |
options | QueryOptionsBody? | |
orderBy | QueryOrderRequest[]? | |
segments | string[]? | |
source | QuerySourceRequest? | |
viewAs | QueryViewAs? |
| Status | Description | Body |
|---|---|---|
| 200 | OK | CompiledQueryDto |
| 422 | Unprocessable Entity | ProblemDetails |
Response 200: CompiledQueryDto
| Field | Type | Notes |
|---|---|---|
columns | QueryColumnDto[] | |
dialect | string | |
limit | int32 | |
parameters | QueryParameterDto[] | |
source | QuerySourceDto | |
sql | string | |
warnings | string[] |
RunModelQuery
http
POST /api/v1/workspaces/{workspaceId}/models/{modelId}/query:runRun a semantic query on the model's source (row limit 1000 by default, 10000 at most; 30 s timeout).
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
modelId | path | uuid | yes |
Request body (application/json): SemanticQueryBody
| Field | Type | Notes |
|---|---|---|
dimensions | string[]? | |
filters | QueryFilterBody[]? | |
limit | int32? | |
metrics | string[] | |
options | QueryOptionsBody? | |
orderBy | QueryOrderRequest[]? | |
segments | string[]? | |
source | QuerySourceRequest? | |
viewAs | QueryViewAs? |
| Status | Description | Body |
|---|---|---|
| 200 | OK | QueryResultDto |
| 422 | Unprocessable Entity | ProblemDetails |
Response 200: QueryResultDto
| Field | Type | Notes |
|---|---|---|
cache | QueryCacheDto | |
columns | QueryColumnDto[] | |
durationMs | int64 | |
rows | none[][] | |
source | QuerySourceDto | |
sql | string? | |
truncated | boolean | |
trust | QueryTrustDto | |
warnings | string[] |
ListReleases
http
GET /api/v1/workspaces/{workspaceId}/models/{modelId}/releasesReleases of a model, newest first.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
modelId | path | uuid | yes |
| Status | Description | Body |
|---|---|---|
| 200 | OK | ReleaseDto[] |
PublishRelease
http
POST /api/v1/workspaces/{workspaceId}/models/{modelId}/releasesTag a main revision (default the head) with the suggested or given version.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
modelId | path | uuid | yes |
Request body (application/json): PublishReleaseRequest
| Field | Type | Notes |
|---|---|---|
notes | string? | |
revisionId | uuid? | |
version | string? |
| Status | Description | Body |
|---|---|---|
| 201 | Created | ReleasePublishedResult |
Response 201: ReleasePublishedResult
| Field | Type | Notes |
|---|---|---|
id | uuid | |
version | string |
RollbackRelease
http
POST /api/v1/workspaces/{workspaceId}/models/{modelId}/releases/{releaseId}:rollbackPublish an earlier release's revision as a new release.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
modelId | path | uuid | yes | |
releaseId | path | uuid | yes |
Request body (application/json): RollbackRequest
| Field | Type | Notes |
|---|---|---|
notes | string? |
| Status | Description | Body |
|---|---|---|
| 201 | Created | ReleasePublishedResult |
Response 201: ReleasePublishedResult
| Field | Type | Notes |
|---|---|---|
id | uuid | |
version | string |
CommitRevision
http
POST /api/v1/workspaces/{workspaceId}/models/{modelId}/revisionsCommit a validated model document on a branch (409 when the head moved).
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
modelId | path | uuid | yes |
Request body (application/json): CommitRequest
| Field | Type | Notes |
|---|---|---|
branch | string | |
definition | ModelDefinition | |
expectedHeadRevisionId | uuid | |
message | string |
| Status | Description | Body |
|---|---|---|
| 201 | Created | CreatedResponse |
Response 201: CreatedResponse
| Field | Type | Notes |
|---|---|---|
id | uuid |
GetRevision
http
GET /api/v1/workspaces/{workspaceId}/models/{modelId}/revisions/{revisionId}A revision: document, content hash, parents and validation issues.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
modelId | path | uuid | yes | |
revisionId | path | uuid | yes |
| Status | Description | Body |
|---|---|---|
| 200 | OK | RevisionDto |
Response 200: RevisionDto
| Field | Type | Notes |
|---|---|---|
author | string | |
committedAt | date-time | |
contentHash | string | |
definition | ModelDefinition | |
id | uuid | |
issues | ValidationIssue[] | |
message | string | |
modelId | uuid | |
parentIds | uuid[] |
UpdateModelSettings
http
PUT /api/v1/workspaces/{workspaceId}/models/{modelId}/settingsBranch protection, required approvals, automatic generation.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
modelId | path | uuid | yes |
Request body (application/json): UpdateModelSettingsRequest
| Field | Type | Notes |
|---|---|---|
allowDirectCommitsToMain | boolean | |
autoGenerate | boolean | |
requiredApprovals | int32 |
| Status | Description | Body |
|---|---|---|
| 204 | No Content | — |
GetStrategy
http
GET /api/v1/workspaces/{workspaceId}/models/{modelId}/strategyThe model's strategy report, questionnaire answers and ticked-off actions.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
modelId | path | uuid | yes |
| Status | Description | Body |
|---|---|---|
| 200 | OK | StrategyDto |
Response 200: StrategyDto
| Field | Type | Notes |
|---|---|---|
answers | StrategyAnswers? | |
doneActions | string[] | |
error | string? | |
generatedAt | date-time? | |
modelId | uuid | |
modelName | string | |
report | StrategyReport? | |
status | string |
RecommendStrategy
http
POST /api/v1/workspaces/{workspaceId}/models/{modelId}/strategy:recommendRecompute the strategy report from the latest discoveries and the model.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
modelId | path | uuid | yes |
| Status | Description | Body |
|---|---|---|
| 202 | Accepted | StrategyQueued |
Response 202: StrategyQueued
| Field | Type | Notes |
|---|---|---|
jobId | uuid |
SetStrategyAction
http
PUT /api/v1/workspaces/{workspaceId}/models/{modelId}/strategy/actions/{key}Tick a next action off, or back on.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
modelId | path | uuid | yes | |
key | path | string | yes |
Request body (application/json): StrategyActionRequest
| Field | Type | Notes |
|---|---|---|
done | boolean |
| Status | Description | Body |
|---|---|---|
| 204 | No Content | — |
AnswerStrategyQuestionnaire
http
PUT /api/v1/workspaces/{workspaceId}/models/{modelId}/strategy/questionnaireStore the questionnaire answers and recompute the recommendation.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
modelId | path | uuid | yes |
Request body (application/json): StrategyAnswers
| Field | Type | Notes |
|---|---|---|
aiUseCases | string[] | |
biTools | string[] | |
latency | string | |
teamSkills | string[] | |
usesDbt | boolean |
| Status | Description | Body |
|---|---|---|
| 202 | Accepted | StrategyQueued |
Response 202: StrategyQueued
| Field | Type | Notes |
|---|---|---|
jobId | uuid |
ValidateModel
http
POST /api/v1/workspaces/{workspaceId}/models/{modelId}/validateValidate a model document against the model's sources (Problems panel); nothing is stored.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
modelId | path | uuid | yes |
Request body (application/json): ValidateModelRequest
| Field | Type | Notes |
|---|---|---|
definition | ModelDefinition |
| Status | Description | Body |
|---|---|---|
| 200 | OK | ValidationReportDto |
Response 200: ValidationReportDto
| Field | Type | Notes |
|---|---|---|
errors | int32 | |
isValid | boolean | |
issues | ValidationIssue[] | |
warnings | int32 |
GetWorkingCopy
http
GET /api/v1/workspaces/{workspaceId}/models/{modelId}/working-copyThe caller's working copy of a branch (404 when they have none); ETag is its version.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
modelId | path | uuid | yes | |
branch | query | string | yes |
| Status | Description | Body |
|---|---|---|
| 200 | OK | WorkingCopyDto |
Response 200: WorkingCopyDto
| Field | Type | Notes |
|---|---|---|
baseRevisionId | uuid | |
branch | string | |
branchHeadRevisionId | uuid | |
branchMoved | boolean | |
contentHash | string | |
definition | ModelDefinition | |
modelId | uuid | |
savedAt | date-time | |
validation | ValidationReportDto | |
version | int32 |
SaveWorkingCopy
http
PUT /api/v1/workspaces/{workspaceId}/models/{modelId}/working-copyAutosave the caller's draft of a branch (412 when the expected version is stale); returns validation.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
modelId | path | uuid | yes | |
branch | query | string | yes |
Request body (application/json): SaveWorkingCopyRequest
| Field | Type | Notes |
|---|---|---|
baseRevisionId | uuid? | First save only: the revision the edits started from (default the branch head). |
definition | ModelDefinition | |
expectedVersion | int32? | The working copy version the client last saw (or send If-Match: "n"); omit on the first save. |
| Status | Description | Body |
|---|---|---|
| 200 | OK | WorkingCopySavedDto |
Response 200: WorkingCopySavedDto
| Field | Type | Notes |
|---|---|---|
baseRevisionId | uuid | |
contentHash | string | |
savedAt | date-time | |
validation | ValidationReportDto | |
version | int32 |
DiscardWorkingCopy
http
DELETE /api/v1/workspaces/{workspaceId}/models/{modelId}/working-copyDiscard the caller's draft of a branch.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
modelId | path | uuid | yes | |
branch | query | string | yes |
| Status | Description | Body |
|---|---|---|
| 204 | No Content | — |
CommitWorkingCopy
http
POST /api/v1/workspaces/{workspaceId}/models/{modelId}/working-copy:commitCommit the draft as a revision on its branch and clear it; rebases cleanly when the branch moved, else 409 Modeling.WorkingCopyOutdated.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
modelId | path | uuid | yes | |
branch | query | string | yes |
Request body (application/json): CommitWorkingCopyRequest
| Field | Type | Notes |
|---|---|---|
expectedVersion | int32? | |
message | string |
| Status | Description | Body |
|---|---|---|
| 201 | Created | WorkingCopyCommittedDto |
Response 201: WorkingCopyCommittedDto
| Field | Type | Notes |
|---|---|---|
contentHash | string | |
parentRevisionId | uuid | |
rebased | boolean | |
revisionId | uuid |
GetWorkingCopyConflicts
http
GET /api/v1/workspaces/{workspaceId}/models/{modelId}/working-copy:conflictsWhat rebasing the caller's draft onto the branch head conflicts on (target = branch head, source = draft); empty when clean.
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
modelId | path | uuid | yes | |
branch | query | string | yes |
| Status | Description | Body |
|---|---|---|
| 200 | OK | WorkingCopyConflictsDto |
Response 200: WorkingCopyConflictsDto
| Field | Type | Notes |
|---|---|---|
baseRevisionId | uuid | |
conflicts | ConflictDto[] | |
headRevisionId | uuid |
RebaseWorkingCopy
http
POST /api/v1/workspaces/{workspaceId}/models/{modelId}/working-copy:rebaseMerge the branch's new commits into the draft; resolutions pick a side per conflicting path (409 Modeling.WorkingCopyOutdated while any is unresolved).
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
workspaceId | path | uuid | yes | |
modelId | path | uuid | yes | |
branch | query | string | yes |
Request body (application/json): RebaseWorkingCopyRequest?
| Status | Description | Body |
|---|---|---|
| 200 | OK | WorkingCopySavedDto |
Response 200: WorkingCopySavedDto
| Field | Type | Notes |
|---|---|---|
baseRevisionId | uuid | |
contentHash | string | |
savedAt | date-time | |
validation | ValidationReportDto | |
version | int32 |