From 42c489b78313d6cf8275c36d56c8b06305184534 Mon Sep 17 00:00:00 2001 From: Amin Chirazi Date: Wed, 29 Jul 2026 05:47:12 +0000 Subject: [PATCH] chore: sync the spec and regenerate response types `spec/openapi.json` was vendored before the API's response-typing work and had 209 of 239 operations describing no response body. openapi-typescript turns a bodyless operation into `responses: never`, and extracting a 200 body from that infers `unknown` - so most of this SDK's surface typed its return values as `unknown`, which is the drift the 1.0 rewrite was meant to end. Copied the current spec from datamaker@next and ran `pnpm generate`: - 178 operations gain a real response type (30 typed -> 209 of 240) - components.schemas grows 15 -> 123 - GET /scenarios/jobs is new Additive only. All 15 pre-existing schemas are byte-identical, so nothing that compiles today stops compiling - hence a minor, not a major. Verified with a type-level proof (not committed) asserting exact types rather than assignability, since `unknown` and `never` both swallow a loose assignability check and make such a test vacuous. It confirms `GET /scenarios` yields Scenario[]; that the environment-variable asymmetry survives generation (GET is an array of {key, value}, the writes are a Record - collapsing them upstream would have broken exactly one); and that PlanRun.files is optional rather than nullable. Run against the OLD schema every one of those assertions fails, so the proof is not vacuous. 31 operations stay untyped upstream on purpose and still resolve to `unknown`: the Tosca/Jira/SAP pass-throughs, and the routes that return credentials. This does NOT extend the resource clients - dm.projects, dm.templates and friends still cover what they covered before. The win here is in the exported `paths` and `components` types; widening the clients is separate work. Co-Authored-By: Claude Opus 5 --- .changeset/spec-sync-response-types.md | 11 + spec/openapi.json | 15352 +++++++++++++++++++++-- src/generated/schema.ts | 13963 ++++++++++++++++----- 3 files changed, 25288 insertions(+), 4038 deletions(-) create mode 100644 .changeset/spec-sync-response-types.md diff --git a/.changeset/spec-sync-response-types.md b/.changeset/spec-sync-response-types.md new file mode 100644 index 0000000..4c8d7d9 --- /dev/null +++ b/.changeset/spec-sync-response-types.md @@ -0,0 +1,11 @@ +--- +"@automators/datamaker": minor +--- + +Sync `spec/openapi.json` with the API and regenerate. 178 operations that previously returned `unknown` now carry a real response type, and `components["schemas"]` grows from 15 entries to 123. + +Additive only: all 15 schemas that existed before are byte-identical, so nothing that compiles today stops compiling. `GET /scenarios/jobs` is new. + +This widens the generated `paths` and `components` types, which are exported and usable directly. It does not by itself add methods to the resource clients (`dm.projects`, `dm.templates`, ...) - those still cover the resources they covered before, and extending them is separate work. + +31 operations remain deliberately untyped upstream and still resolve to `unknown`: the Tosca/Jira/SAP pass-throughs, whose bodies belong to those systems rather than to DataMaker, and a handful of routes that return credentials and so are kept out of the published contract. diff --git a/spec/openapi.json b/spec/openapi.json index dd4834e..5b8f222 100644 --- a/spec/openapi.json +++ b/spec/openapi.json @@ -1,6 +1,17 @@ { "components": { "schemas": { + "AddressAvailability": { + "properties": { + "available": { + "type": "boolean" + } + }, + "required": [ + "available" + ], + "type": "object" + }, "ApiError": { "properties": { "code": { @@ -18,77 +29,44 @@ ], "type": "object" }, - "DeletedResult": { + "ApiKey": { "properties": { - "message": { + "createdAt": { + "description": "ISO-8601 timestamp", "type": "string" - } - }, - "required": [ - "message" - ], - "type": "object" - }, - "KeyMapDeleteResult": { - "properties": { - "deleted": { - "description": "Entries removed", - "type": "integer" }, - "message": { + "id": { "type": "string" - } - }, - "required": [ - "message", - "deleted" - ], - "type": "object" - }, - "KeyMapEntriesPage": { - "properties": { - "entries": { - "items": { - "$ref": "#/components/schemas/KeyMapEntry" - }, - "type": "array" }, - "mapName": { + "key": { + "description": "The key value itself - secret", "type": "string" }, - "page": { - "description": "1-based", - "type": "integer" - }, - "pageSize": { - "type": "integer" - }, - "total": { - "description": "Entries matching the filter, not this page", - "type": "integer" - } - }, - "required": [ - "mapName", - "page", - "pageSize", - "total", - "entries" - ], - "type": "object" - }, - "KeyMapEntry": { - "properties": { - "newKey": { + "name": { "type": "string" }, - "object": { - "type": "string" + "projectId": { + "type": [ + "string", + "null" + ] }, - "oldKey": { - "type": "string" + "role": { + "anyOf": [ + { + "enum": [ + "READ", + "READ_WRITE", + "SCENARIO" + ], + "type": "string" + }, + { + "type": "string" + } + ] }, - "runId": { + "teamId": { "type": [ "string", "null" @@ -97,900 +75,6276 @@ "updatedAt": { "description": "ISO-8601 timestamp", "type": "string" + }, + "userId": { + "type": [ + "string", + "null" + ] } }, "required": [ - "object", - "oldKey", - "newKey", - "runId", - "updatedAt" + "id", + "key", + "name", + "role", + "createdAt", + "updatedAt", + "userId", + "teamId", + "projectId" ], "type": "object" }, - "KeyMapLookupResult": { + "ApiKeyValidation": { "properties": { - "mapName": { + "message": { + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + }, + "ApiMessageError": { + "properties": { + "error": { "type": "string" }, - "mappings": { - "additionalProperties": { - "type": "string" - }, - "type": "object" - }, - "missing": { - "items": { - "type": "string" - }, - "type": "array" - }, - "object": { + "message": { "type": "string" } }, "required": [ - "mapName", - "object", - "mappings", - "missing" + "message" ], "type": "object" }, - "KeyMapSummary": { + "ApprovalDecision": { "properties": { - "entryCount": { - "type": "integer" + "created": { + "type": "boolean" }, - "mapName": { + "decision": { + "enum": [ + "allow", + "pending" + ], "type": "string" }, - "object": { - "description": "The domain object type, e.g. Material", + "id": { "type": "string" - }, - "updatedAt": { - "description": "ISO-8601 timestamp", - "type": [ - "string", - "null" - ] } }, "required": [ - "mapName", - "object", - "entryCount", - "updatedAt" + "decision", + "id" ], "type": "object" }, - "KeyMapUpsertResult": { + "ApprovalStatus": { "properties": { - "mapName": { + "id": { "type": "string" }, - "object": { + "status": { "type": "string" - }, - "upserted": { - "description": "Rows inserted or updated", - "type": "integer" } }, "required": [ - "mapName", - "object", - "upserted" + "id", + "status" ], "type": "object" }, - "MaskingPolicy": { + "AuditEvent": { "properties": { - "consistent": { - "type": "boolean" + "category": { + "enum": [ + "READ", + "WRITE", + "DESTRUCTIVE", + "EXEC" + ], + "type": "string" + }, + "chatId": { + "description": "Correlation only; no FK, so audit survives chat deletion", + "type": [ + "string", + "null" + ] }, "createdAt": { "description": "ISO-8601 timestamp", "type": "string" }, - "createdBy": { + "decision": { + "enum": [ + "AUTO", + "ALLOWED", + "DENIED", + "APPROVED" + ], + "type": "string" + }, + "durationMs": { + "type": [ + "integer", + "null" + ] + }, + "error": { "type": [ "string", "null" ] }, - "description": { + "finishedAt": { + "description": "ISO-8601 timestamp", "type": [ "string", "null" ] }, - "fields": {}, "id": { "type": "string" }, - "keyMapName": { + "inputDigest": { + "description": "Masked shape and hash of the arguments; never raw values", + "type": "null" + }, + "principal": { + "description": "Resolved server-side from the verified JWT", "type": [ "string", "null" ] }, - "name": { - "type": "string" - }, "projectId": { - "type": "string" - }, - "reversible": { - "type": "boolean" + "type": [ + "string", + "null" + ] }, - "teamId": { - "type": "string" + "sdkSessionId": { + "type": [ + "string", + "null" + ] }, - "updatedAt": { + "startedAt": { "description": "ISO-8601 timestamp", "type": "string" - } - }, - "required": [ - "id", - "name", - "description", - "consistent", - "reversible", - "keyMapName", - "createdAt", - "updatedAt", - "createdBy", - "projectId", - "teamId" - ], - "type": "object" - }, - "Plan": { - "properties": { - "createdAt": { - "description": "ISO-8601 timestamp", + }, + "status": { + "enum": [ + "ok", + "error" + ], "type": "string" }, - "createdBy": { + "targetKind": { "type": [ "string", "null" ] }, - "createdFrom": { + "targetRef": { "type": [ "string", "null" ] }, - "env": { + "teamId": { "type": [ "string", "null" ] }, - "history": { - "items": { - "properties": { - "by": { - "type": "string" - }, - "note": { - "default": "", - "type": "string" - }, - "status": { - "enum": [ - "draft", - "approved", - "running", - "completed", - "failed" - ], - "type": "string" - }, - "when": { - "type": "string" - } - }, - "required": [ - "status", - "when", - "note" - ], - "type": "object" - }, - "type": "array" + "tool": { + "type": "string" + }, + "trackingId": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "chatId", + "sdkSessionId", + "trackingId", + "teamId", + "projectId", + "principal", + "tool", + "category", + "targetKind", + "targetRef", + "decision", + "status", + "error", + "startedAt", + "finishedAt", + "durationMs", + "createdAt" + ], + "type": "object" + }, + "AuditEventRef": { + "properties": { + "id": { + "type": "string" + } + }, + "required": [ + "id" + ], + "type": "object" + }, + "BuiltinSkill": { + "properties": { + "appliedCount": { + "type": "integer" + }, + "by": { + "type": "string" + }, + "description": { + "type": "string" + }, + "enabled": { + "type": "boolean" }, "id": { + "description": "Prefixed \"builtin:\"", "type": "string" }, - "origin": { - "enum": [ - "chat", - "blueprint", - "intake", - "gap analysis", - null - ], + "name": { + "type": "string" + }, + "scope": { + "const": "builtin", + "type": "string" + }, + "slug": { + "type": "string" + } + }, + "required": [ + "id", + "slug", + "name", + "description", + "enabled", + "appliedCount", + "scope", + "by" + ], + "type": "object" + }, + "CapabilityCatalogItem": { + "properties": { + "group": { + "description": "The template folder's name, if any", + "type": "string" + }, + "hidden": { + "const": false, + "type": "boolean" + }, + "key": { + "description": "The template id", + "type": "string" + }, + "name": { + "type": "string" + }, + "note": { + "type": "string" + }, + "source": { + "const": "derived", + "type": "string" + }, + "template": { + "type": "string" + }, + "templateId": { + "type": "string" + } + }, + "required": [ + "key", + "name", + "source", + "hidden", + "templateId", + "template", + "note" + ], + "type": "object" + }, + "Chat": { + "properties": { + "createdAt": { + "description": "ISO-8601 timestamp", + "type": "string" + }, + "createdBy": { "type": [ "string", "null" ] }, - "owner": { + "id": { + "type": "string" + }, + "messages": { + "description": "The transcript; JSON column" + }, + "projectId": { "type": [ "string", "null" ] }, - "projectId": { + "title": { "type": "string" }, - "rows": { - "type": "integer" + "updatedAt": { + "description": "ISO-8601 timestamp", + "type": "string" + } + }, + "required": [ + "id", + "title", + "createdBy", + "projectId", + "createdAt", + "updatedAt" + ], + "type": "object" + }, + "ChatAsset": { + "properties": { + "chatId": { + "type": "string" }, - "spec": { - "properties": { - "approval": { - "properties": { - "reason": { - "type": "string" - }, - "role": { - "type": "string" - } - }, - "required": [ - "role", - "reason" - ], - "type": "object" - }, - "capabilities": { - "items": { - "properties": { - "expectedCount": { - "minimum": 0, - "type": "integer" - }, - "expectedSumCents": { - "type": "integer" - }, - "group": { - "type": "string" - }, - "hidden": { - "default": false, - "type": "boolean" - }, - "key": { - "type": "string" - }, - "name": { - "type": "string" - }, - "note": { - "default": "", - "type": "string" - }, - "setId": { - "type": "string" - }, - "source": { - "default": "derived", - "enum": [ - "derived", - "manual" - ], - "type": "string" - }, - "sumField": { - "type": "string" - }, - "template": { - "type": "string" - }, - "templateId": { - "type": "string" - } - }, - "required": [ - "key", - "name", - "source", - "hidden", - "note" - ], - "type": "object" + "createdAt": { + "description": "ISO-8601 timestamp", + "type": "string" + }, + "filename": { + "type": "string" + }, + "id": { + "type": "string" + }, + "mimeType": { + "type": [ + "string", + "null" + ] + }, + "presignedUrl": { + "description": "Short-lived download URL", + "type": [ + "string", + "null" + ] + }, + "s3Key": { + "type": "string" + }, + "size": { + "type": [ + "integer", + "null" + ] + }, + "source": { + "description": "Who produced it, e.g. \"agent\"", + "type": "string" + }, + "updatedAt": { + "description": "ISO-8601 timestamp", + "type": "string" + } + }, + "required": [ + "id", + "chatId", + "filename", + "s3Key", + "presignedUrl", + "size", + "mimeType", + "source", + "createdAt", + "updatedAt" + ], + "type": "object" + }, + "ClassifiedFields": { + "items": { + "additionalProperties": true, + "properties": { + "name": { + "type": "string" + }, + "sensitive": { + "description": "Absent when this field's classification call failed", + "type": "boolean" + } + }, + "type": "object" + }, + "type": "array" + }, + "ConnectionTable": { + "properties": { + "columns": { + "items": { + "properties": { + "column_name": { + "type": "string" }, - "type": "array" + "data_type": { + "type": "string" + } }, - "constraints": { - "default": [], - "items": { + "required": [ + "column_name", + "data_type" + ], + "type": "object" + }, + "type": "array" + }, + "dependencies": { + "description": "Foreign keys pointing AT this table", + "items": { + "properties": { + "dependent_column": { "type": "string" }, - "type": "array" - }, - "coverage": { - "items": { - "properties": { - "count": { - "minimum": 0, - "type": "integer" - }, - "family": { - "type": "string" - }, - "items": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "family", - "count", - "items" - ], - "type": "object" + "dependent_table": { + "type": "string" }, - "type": "array" + "referenced_column": { + "type": "string" + } }, - "coverageConfig": { - "properties": { - "freshnessDays": { - "default": 14, - "minimum": 1, - "type": "integer" - }, - "mode": { - "default": "release", - "enum": [ - "release", - "migration" - ], - "type": "string" - }, - "sourceSystem": { - "type": "string" - }, - "sumToleranceCents": { - "default": 0, - "minimum": 0, - "type": "integer" - }, - "targetSystem": { - "type": "string" - } - }, - "required": [ - "mode", - "freshnessDays", - "sumToleranceCents" - ], - "type": "object" + "required": [ + "dependent_table", + "dependent_column", + "referenced_column" + ], + "type": "object" + }, + "type": "array" + }, + "rows": { + "description": "One element; the row count is at `rows[0].total_count`", + "items": { + "properties": { + "total_count": {} }, - "entities": { - "default": [], - "items": { - "properties": { - "endpointId": { - "type": "string" - }, - "key": { - "type": "string" - }, - "name": { - "type": "string" - }, - "note": { - "default": "", - "type": "string" - }, - "template": { - "type": "string" - }, - "templateId": { - "type": "string" - }, - "volume": { - "minimum": 0, - "type": "integer" - } - }, - "required": [ - "name", - "template", - "volume", - "key", - "note" - ], - "type": "object" + "type": "object" + }, + "type": "array" + }, + "table_name": { + "type": "string" + } + }, + "required": [ + "table_name", + "columns", + "rows", + "dependencies" + ], + "type": "object" + }, + "ConnectionVerdict": { + "properties": { + "message": { + "type": "string" + }, + "ok": { + "type": "boolean" + }, + "status": { + "description": "Upstream HTTP status, when one was received", + "type": "integer" + } + }, + "required": [ + "ok", + "message" + ], + "type": "object" + }, + "CsrfToken": { + "properties": { + "cookie": { + "description": "The full Cookie header value; absent when none was set", + "type": "string" + }, + "cookie_name": { + "type": "string" + }, + "cookie_value": { + "type": "string" + }, + "csrf_token": { + "type": "string" + } + }, + "required": [ + "cookie_name", + "cookie_value", + "csrf_token" + ], + "type": "object" + }, + "CsvBatchUploadError": { + "properties": { + "error": { + "type": "string" + }, + "ok": { + "const": false, + "type": "boolean" + } + }, + "required": [ + "ok", + "error" + ], + "type": "object" + }, + "CsvBatchUploadResult": { + "properties": { + "files": { + "items": { + "properties": { + "deduped": { + "type": "boolean" }, - "type": "array" - }, - "expectations": { - "default": [], - "items": { + "key": { + "description": "The storage key", "type": "string" }, - "type": "array" + "name": { + "description": "Sanitised filename, path stripped", + "type": "string" + }, + "url": { + "description": "Presigned download URL, valid 7 days", + "type": "string" + } }, - "flow": { - "items": { - "properties": { - "loop": { - "type": [ - "string", - "null" - ] - }, - "phase": { - "type": "string" - }, - "steps": { - "items": { - "properties": { - "fields": { - "items": { - "type": "string" - }, - "type": "array" - }, - "from": { - "type": "string" - }, - "iface": { - "type": "string" - }, - "kind": { - "type": "string" - }, - "msg": { - "type": "string" - }, - "reachable": { - "type": "boolean" - }, - "scaffold": { - "properties": { - "entity": { - "type": "string" - }, - "fields": { - "items": { - "type": "string" - }, - "type": "array" - }, - "ops": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "entity", - "ops", - "fields" - ], - "type": "object" - }, - "status": { - "enum": [ - "mapped", - "likely", - "custom", - "unknown" - ], - "type": "string" - }, - "to": { - "type": "string" - }, - "why": { - "type": "string" - } - }, - "required": [ - "from", - "to", - "msg", - "iface", - "kind", - "status" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "phase", - "steps" - ], - "type": "object" + "required": [ + "name", + "key", + "url", + "deduped" + ], + "type": "object" + }, + "type": "array" + }, + "folderName": { + "description": "As sent by the caller; null when none was given", + "type": [ + "string", + "null" + ] + }, + "folderPrefix": { + "description": "The storage prefix the files landed under", + "type": "string" + }, + "ok": { + "const": true, + "type": "boolean" + } + }, + "required": [ + "ok", + "folderName", + "folderPrefix", + "files" + ], + "type": "object" + }, + "CurrentUser": { + "additionalProperties": true, + "properties": { + "avatar": { + "type": [ + "string", + "null" + ] + }, + "email": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "picture": { + "type": [ + "string", + "null" + ] + } + }, + "type": "object" + }, + "CustomDataType": { + "properties": { + "createdBy": { + "type": "string" + }, + "fieldConfig": { + "description": "Field configuration; JSON column" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectId": { + "type": "string" + }, + "teamId": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "teamId", + "projectId", + "createdBy" + ], + "type": "object" + }, + "DatabaseExportResult": { + "properties": { + "command": { + "description": "e.g. \"INSERT\", \"SELECT\"", + "type": "string" + }, + "fields": { + "items": { + "properties": { + "columnID": { + "type": "integer" }, - "type": "array" - }, - "gaps": { - "default": [], - "items": { - "properties": { - "action": { - "type": "string" - }, - "iface": { - "type": "string" - }, - "note": { - "default": "", - "type": "string" - }, - "scaffold": { - "properties": { - "entity": { - "type": "string" - }, - "fields": { - "items": { - "type": "string" - }, - "type": "array" - }, - "ops": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "entity", - "ops", - "fields" - ], - "type": "object" - }, - "title": { - "type": "string" - }, - "type": { - "enum": [ - "connect", - "custom", - "input", - "blocker", - "gap", - "stale" - ], - "type": "string" - } - }, - "required": [ - "type", - "title", - "note" - ], - "type": "object" + "dataTypeID": { + "description": "Postgres type OID", + "type": "integer" }, - "type": "array" - }, - "integrations": { - "default": [], - "items": { - "properties": { - "access": { - "enum": [ - "read", - "write" - ], - "type": "string" - }, - "detail": { - "default": "", - "type": "string" - }, - "system": { - "type": "string" - }, - "via": { - "type": "string" - } - }, - "required": [ - "system", - "via", - "access", - "detail" - ], - "type": "object" + "dataTypeModifier": { + "type": "integer" }, - "type": "array" - }, - "kind": { - "enum": [ - "entity", - "flow", - "task", - "mapping" - ], - "type": "string" - }, - "lanes": { - "default": [], - "items": { - "type": "string" + "dataTypeSize": { + "type": "integer" }, - "type": "array" - }, - "lifecycle": { - "properties": { - "mode": { - "type": "string" - }, - "refresh": { - "type": "string" - }, - "replenish": { - "type": "string" - } + "format": { + "type": "string" }, - "required": [ - "mode", - "refresh", - "replenish" - ], - "type": "object" - }, - "mappingConfig": { - "properties": { - "keyMapName": { - "type": "string" - }, - "maskingPolicyId": { - "type": "string" - }, - "maskingPolicyName": { - "type": "string" - }, - "sourceObject": { - "type": "string" - }, - "sourceSystem": { - "type": "string" - }, - "targetObject": { - "type": "string" - }, - "targetSystem": { - "type": "string" - } + "name": { + "type": "string" }, - "type": "object" + "tableID": { + "type": "integer" + } }, - "mappings": { - "items": { - "properties": { - "generate": { - "default": false, - "type": "boolean" - }, - "keyMapName": { - "type": "string" - }, - "maskingPolicyId": { - "type": "string" - }, - "note": { - "default": "", - "type": "string" - }, - "sourceField": { - "type": "string" - }, - "status": { - "default": "open", - "enum": [ - "mapped", - "open", - "needs-review" - ], - "type": "string" - }, - "targetField": { - "type": "string" - }, - "transform": { - "default": "", - "type": "string" - } - }, - "required": [ - "targetField", - "transform", - "generate", - "status", - "note" - ], - "type": "object" + "required": [ + "name", + "tableID", + "columnID", + "dataTypeID", + "dataTypeSize", + "dataTypeModifier", + "format" + ], + "type": "object" + }, + "type": "array" + }, + "oid": { + "type": [ + "integer", + "null" + ] + }, + "rowCount": { + "type": [ + "integer", + "null" + ] + }, + "rows": { + "items": {}, + "type": "array" + } + }, + "required": [ + "command", + "rowCount", + "oid", + "rows", + "fields" + ], + "type": "object" + }, + "DatabaseTemplatesProposal": { + "properties": { + "ai_prompts": { + "description": "Per-table prompts for refining the proposal with the model", + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + }, + "data_generation_order": { + "description": "Table names in dependency order; null if a cycle was found", + "items": { + "type": "string" + }, + "type": [ + "array", + "null" + ] + }, + "templates": { + "items": { + "properties": { + "createdBy": { + "type": "string" }, - "type": "array" - }, - "steps": { - "default": [], - "items": { + "dbOrderIdx": { + "description": "Position in `data_generation_order`, or -1", + "type": "integer" + }, + "fields": { + "items": {}, + "type": "array" + }, + "name": { + "description": "The table name", "type": "string" }, - "type": "array" - }, - "tasks": { - "items": { - "properties": { - "note": { - "type": "string" - }, - "phase": { - "type": "string" - }, - "tasks": { - "items": { - "properties": { - "deps": { - "default": [], - "items": { - "type": "string" - }, - "type": "array" - }, - "detail": { - "default": "", - "type": "string" - }, - "key": { - "type": "string" - }, - "priority": { - "enum": [ - "P0", - "P1", - "P2", - "P3" - ], - "type": "string" - }, - "title": { - "type": "string" - } - }, - "required": [ - "title", - "detail", - "deps" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "phase", - "tasks" - ], - "type": "object" + "projectId": { + "type": "string" }, - "type": "array" - }, - "version": { - "properties": { - "by": { - "type": "string" - }, - "n": { - "minimum": 1, - "type": "integer" - }, - "when": { - "type": "string" - } + "teamId": { + "type": "string" }, - "required": [ - "n", - "by", - "when" - ], - "type": "object" - } + "templateFolderId": { + "type": "string" + } + }, + "required": [ + "name", + "fields", + "templateFolderId", + "dbOrderIdx" + ], + "type": "object" }, - "required": [ - "lanes", - "entities", - "gaps", - "integrations", - "constraints", - "steps", - "expectations" - ], - "type": "object" + "type": "array" + } + }, + "required": [ + "templates", + "ai_prompts", + "data_generation_order" + ], + "type": "object" + }, + "DatamakerConfig": { + "properties": { + "aiGatewayUrl": { + "description": "\"\" when the server calls providers directly", + "type": "string" + }, + "allowedModels": { + "description": "An EMPTY array means no restriction, not none allowed", + "items": { + "type": "string" + }, + "type": "array" + }, + "apiContractVersion": { + "description": "So a desktop build can detect a major mismatch", + "type": "string" + }, + "defaultModel": { + "description": "\"\" when none is configured", + "type": "string" + }, + "opencodeUrl": { + "description": "\"\" to use the /opencode convention", + "type": "string" + }, + "quantityLimit": { + "description": "Max rows per generation call", + "type": "integer" + } + }, + "required": [ + "quantityLimit", + "aiGatewayUrl", + "opencodeUrl", + "defaultModel", + "allowedModels", + "apiContractVersion" + ], + "type": "object" + }, + "DeletedResult": { + "properties": { + "message": { + "type": "string" + } + }, + "required": [ + "message" + ], + "type": "object" + }, + "EffectivePermissions": { + "properties": { + "permissions": { + "items": { + "type": "string" + }, + "type": "array" + }, + "role": { + "description": "Base team role, null if not a member", + "type": [ + "string", + "null" + ] + }, + "teamId": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "teamId", + "role", + "permissions" + ], + "type": "object" + }, + "Endpoint": { + "properties": { + "auth": { + "description": "Masked for ordinary callers", + "type": "null" + }, + "createdAt": { + "description": "ISO-8601 timestamp", + "type": "string" + }, + "createdBy": { + "type": [ + "string", + "null" + ] + }, + "endpointFolderId": { + "type": [ + "string", + "null" + ] + }, + "headers": { + "description": "Masked for ordinary callers", + "type": "null" + }, + "id": { + "type": "string" + }, + "method": { + "enum": [ + "GET", + "POST", + "PUT", + "PATCH", + "DELETE" + ], + "type": "string" + }, + "name": { + "type": "string" + }, + "projectId": { + "type": [ + "string", + "null" + ] + }, + "queryParams": { + "type": "null" + }, + "teamId": { + "type": [ + "string", + "null" + ] + }, + "url": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "method", + "url", + "createdAt", + "createdBy", + "endpointFolderId", + "projectId", + "teamId" + ], + "type": "object" + }, + "EndpointFolder": { + "properties": { + "createdAt": { + "description": "ISO-8601 timestamp", + "type": "string" + }, + "createdBy": { + "type": [ + "string", + "null" + ] + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectId": { + "type": "string" + }, + "teamId": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "createdAt", + "createdBy", + "projectId", + "teamId" + ], + "type": "object" + }, + "Feedback": { + "properties": { + "comment": { + "type": "string" + }, + "createdAt": { + "description": "ISO-8601 timestamp", + "type": "string" + }, + "createdBy": { + "type": [ + "string", + "null" + ] + }, + "feeling": { + "description": "FeedbackFeelings enum value", + "type": "string" + }, + "id": { + "type": "string" + } + }, + "required": [ + "id", + "comment", + "feeling", + "createdAt", + "createdBy" + ], + "type": "object" + }, + "FieldType": { + "properties": { + "meta": { + "additionalProperties": {}, + "description": "Display metadata for the field picker", + "type": "object" + }, + "options": { + "additionalProperties": {}, + "description": "Option keys differ per type", + "type": "object" + }, + "type": { + "description": "The generator name", + "type": "string" + } + }, + "required": [ + "type", + "options", + "meta" + ], + "type": "object" + }, + "GeneratedData": { + "properties": { + "dependencies": { + "additionalProperties": {}, + "description": "Resolved reference data used while generating", + "type": "object" + }, + "live_data": { + "additionalProperties": {}, + "description": "Generated values, keyed by field name", + "type": "object" + } + }, + "required": [ + "live_data", + "dependencies" + ], + "type": "object" + }, + "GeneratedTemplateField": { + "properties": { + "active": { + "type": "boolean" + }, + "function": { + "type": "string" + }, + "name": { + "type": "string" + }, + "nested": { + "items": { + "$ref": "#/components/schemas/GeneratedTemplateField" + }, + "type": "array" + }, + "optional": {}, + "options": { + "description": "Generator-specific settings" + }, + "textCase": { + "type": "string" + }, + "type": { + "description": "A DataMaker generator type", + "type": "string" + } + }, + "required": [ + "name", + "type" + ], + "type": "object" + }, + "GeneratedTemplateFields": { + "items": { + "$ref": "#/components/schemas/GeneratedTemplateField" + }, + "type": "array" + }, + "ImageAnalysisResult": { + "properties": { + "description": { + "description": "Model-generated description of the image", + "type": "string" + }, + "success": { + "const": true, + "type": "boolean" + } + }, + "required": [ + "success", + "description" + ], + "type": "object" + }, + "Integration": { + "properties": { + "auth": { + "type": "null" + }, + "createdAt": { + "description": "ISO-8601 timestamp", + "type": "string" + }, + "createdBy": { + "type": [ + "string", + "null" + ] + }, + "endpointFolderId": { + "type": [ + "string", + "null" + ] + }, + "headers": { + "type": "null" + }, + "id": { + "type": "string" + }, + "kind": { + "description": "e.g. \"sap\", \"tosca-cloud\", \"tosca-onprem\", \"jira\"", + "type": "string" + }, + "name": { + "type": "string" + }, + "origin": { + "description": "Base URL of the external system", + "type": "string" + }, + "projectId": { + "type": [ + "string", + "null" + ] + }, + "scope": { + "type": [ + "string", + "null" + ] + }, + "teamId": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "name", + "kind", + "origin", + "scope", + "createdAt", + "createdBy", + "endpointFolderId", + "projectId", + "teamId" + ], + "type": "object" + }, + "KeyMapDeleteResult": { + "properties": { + "deleted": { + "description": "Entries removed", + "type": "integer" + }, + "message": { + "type": "string" + } + }, + "required": [ + "message", + "deleted" + ], + "type": "object" + }, + "KeyMapEntriesPage": { + "properties": { + "entries": { + "items": { + "$ref": "#/components/schemas/KeyMapEntry" + }, + "type": "array" + }, + "mapName": { + "type": "string" + }, + "page": { + "description": "1-based", + "type": "integer" + }, + "pageSize": { + "type": "integer" + }, + "total": { + "description": "Entries matching the filter, not this page", + "type": "integer" + } + }, + "required": [ + "mapName", + "page", + "pageSize", + "total", + "entries" + ], + "type": "object" + }, + "KeyMapEntry": { + "properties": { + "newKey": { + "type": "string" + }, + "object": { + "type": "string" + }, + "oldKey": { + "type": "string" + }, + "runId": { + "type": [ + "string", + "null" + ] + }, + "updatedAt": { + "description": "ISO-8601 timestamp", + "type": "string" + } + }, + "required": [ + "object", + "oldKey", + "newKey", + "runId", + "updatedAt" + ], + "type": "object" + }, + "KeyMapLookupResult": { + "properties": { + "mapName": { + "type": "string" + }, + "mappings": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + "missing": { + "items": { + "type": "string" + }, + "type": "array" + }, + "object": { + "type": "string" + } + }, + "required": [ + "mapName", + "object", + "mappings", + "missing" + ], + "type": "object" + }, + "KeyMapSummary": { + "properties": { + "entryCount": { + "type": "integer" + }, + "mapName": { + "type": "string" + }, + "object": { + "description": "The domain object type, e.g. Material", + "type": "string" + }, + "updatedAt": { + "description": "ISO-8601 timestamp", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "mapName", + "object", + "entryCount", + "updatedAt" + ], + "type": "object" + }, + "KeyMapUpsertResult": { + "properties": { + "mapName": { + "type": "string" + }, + "object": { + "type": "string" + }, + "upserted": { + "description": "Rows inserted or updated", + "type": "integer" + } + }, + "required": [ + "mapName", + "object", + "upserted" + ], + "type": "object" + }, + "License": { + "properties": { + "captured": { + "description": "The verified claims, as captured at activation", + "type": "null" + }, + "expiresAt": { + "description": "ISO-8601 timestamp", + "type": [ + "string", + "null" + ] + }, + "id": { + "type": "string" + }, + "issuedAt": { + "description": "ISO-8601 timestamp", + "type": "string" + }, + "issuer": { + "type": "string" + }, + "keyId": { + "type": [ + "string", + "null" + ] + }, + "keyMasked": { + "description": "Masked rendering; never the usable key", + "type": "string" + }, + "offline": { + "type": "boolean" + }, + "revokedAt": { + "description": "ISO-8601 timestamp", + "type": [ + "string", + "null" + ] + }, + "seats": { + "type": [ + "integer", + "null" + ] + }, + "status": { + "description": "Derived: active, expired, revoked or superseded", + "type": "string" + }, + "supersededById": { + "type": [ + "string", + "null" + ] + }, + "teamId": { + "type": [ + "string", + "null" + ] + }, + "type": { + "description": "\"server\" or \"desktop\"", + "type": "string" + } + }, + "required": [ + "id", + "type", + "issuer", + "keyMasked", + "keyId", + "seats", + "offline", + "issuedAt", + "expiresAt", + "revokedAt", + "supersededById", + "teamId", + "status" + ], + "type": "object" + }, + "LicenseStatus": { + "properties": { + "code": { + "type": [ + "string", + "null" + ] + }, + "graceDays": { + "type": [ + "integer", + "null" + ] + }, + "graceEndsAt": { + "description": "ISO-8601 timestamp", + "type": [ + "string", + "null" + ] + }, + "issuer": { + "type": [ + "string", + "null" + ] + }, + "message": { + "type": [ + "string", + "null" + ] + }, + "mode": { + "description": "\"ok\" or a degraded mode", + "type": "string" + }, + "readOnlyReason": { + "type": [ + "string", + "null" + ] + }, + "required": { + "description": "Whether this deployment demands a license at all", + "type": "boolean" + } + }, + "required": [ + "required", + "mode", + "code", + "message", + "graceDays", + "graceEndsAt", + "issuer", + "readOnlyReason" + ], + "type": "object" + }, + "LogCleanupResult": { + "properties": { + "cutoffDate": { + "description": "ISO-8601 timestamp; logs older than this were removed", + "type": "string" + }, + "deletedCount": { + "type": "integer" + }, + "message": { + "type": "string" + } + }, + "required": [ + "message", + "deletedCount", + "cutoffDate" + ], + "type": "object" + }, + "LogoutResult": { + "properties": { + "ok": { + "const": true, + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" + }, + "MaskingPolicy": { + "properties": { + "consistent": { + "type": "boolean" + }, + "createdAt": { + "description": "ISO-8601 timestamp", + "type": "string" + }, + "createdBy": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "fields": {}, + "id": { + "type": "string" + }, + "keyMapName": { + "type": [ + "string", + "null" + ] + }, + "name": { + "type": "string" + }, + "projectId": { + "type": "string" + }, + "reversible": { + "type": "boolean" + }, + "teamId": { + "type": "string" + }, + "updatedAt": { + "description": "ISO-8601 timestamp", + "type": "string" + } + }, + "required": [ + "id", + "name", + "description", + "consistent", + "reversible", + "keyMapName", + "createdAt", + "updatedAt", + "createdBy", + "projectId", + "teamId" + ], + "type": "object" + }, + "MemberInviteResult": { + "properties": { + "newMember": { + "allOf": [ + { + "$ref": "#/components/schemas/TeamMember" + } + ], + "properties": { + "firstName": { + "type": [ + "string", + "null" + ] + }, + "lastName": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "firstName", + "lastName" + ] + }, + "success": { + "const": true, + "type": "boolean" + } + }, + "required": [ + "success", + "newMember" + ], + "type": "object" + }, + "MemberRoleAssignment": { + "properties": { + "createdAt": { + "description": "ISO-8601 timestamp", + "type": "string" + }, + "id": { + "type": "string" + }, + "roleId": { + "type": "string" + }, + "teamMemberId": { + "type": "string" + } + }, + "required": [ + "id", + "teamMemberId", + "roleId", + "createdAt" + ], + "type": "object" + }, + "PackCatalog": { + "additionalProperties": true, + "properties": { + "enabled": { + "type": "boolean" + }, + "packs": { + "items": {}, + "type": "array" + } + }, + "required": [ + "enabled" + ], + "type": "object" + }, + "PackCreatedCounts": { + "properties": { + "datatypes": { + "type": "integer" + }, + "plans": { + "type": "integer" + }, + "scenarios": { + "type": "integer" + }, + "skills": { + "type": "integer" + }, + "templates": { + "type": "integer" + } + }, + "required": [ + "templates", + "skills", + "plans", + "datatypes", + "scenarios" + ], + "type": "object" + }, + "PackExportResult": { + "properties": { + "pack": { + "properties": { + "assets": { + "properties": { + "datatypes": { + "default": [], + "items": { + "properties": { + "fieldConfig": {}, + "name": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "type": "array" + }, + "plans": { + "default": [], + "items": { + "properties": { + "spec": { + "properties": { + "approval": { + "properties": { + "reason": { + "type": "string" + }, + "role": { + "type": "string" + } + }, + "required": [ + "role", + "reason" + ], + "type": "object" + }, + "capabilities": { + "items": { + "properties": { + "expectedCount": { + "minimum": 0, + "type": "integer" + }, + "expectedSumCents": { + "type": "integer" + }, + "group": { + "type": "string" + }, + "hidden": { + "default": false, + "type": "boolean" + }, + "key": { + "type": "string" + }, + "name": { + "type": "string" + }, + "note": { + "default": "", + "type": "string" + }, + "setId": { + "type": "string" + }, + "source": { + "default": "derived", + "enum": [ + "derived", + "manual" + ], + "type": "string" + }, + "sumField": { + "type": "string" + }, + "template": { + "type": "string" + }, + "templateId": { + "type": "string" + } + }, + "required": [ + "key", + "name", + "source", + "hidden", + "note" + ], + "type": "object" + }, + "type": "array" + }, + "constraints": { + "default": [], + "items": { + "type": "string" + }, + "type": "array" + }, + "coverage": { + "items": { + "properties": { + "count": { + "minimum": 0, + "type": "integer" + }, + "family": { + "type": "string" + }, + "items": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "family", + "count", + "items" + ], + "type": "object" + }, + "type": "array" + }, + "coverageConfig": { + "properties": { + "freshnessDays": { + "default": 14, + "minimum": 1, + "type": "integer" + }, + "mode": { + "default": "release", + "enum": [ + "release", + "migration" + ], + "type": "string" + }, + "sourceSystem": { + "type": "string" + }, + "sumToleranceCents": { + "default": 0, + "minimum": 0, + "type": "integer" + }, + "targetSystem": { + "type": "string" + } + }, + "required": [ + "mode", + "freshnessDays", + "sumToleranceCents" + ], + "type": "object" + }, + "entities": { + "default": [], + "items": { + "properties": { + "endpointId": { + "type": "string" + }, + "key": { + "type": "string" + }, + "name": { + "type": "string" + }, + "note": { + "default": "", + "type": "string" + }, + "template": { + "type": "string" + }, + "templateId": { + "type": "string" + }, + "volume": { + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "name", + "template", + "volume", + "key", + "note" + ], + "type": "object" + }, + "type": "array" + }, + "expectations": { + "default": [], + "items": { + "type": "string" + }, + "type": "array" + }, + "flow": { + "items": { + "properties": { + "loop": { + "type": [ + "string", + "null" + ] + }, + "phase": { + "type": "string" + }, + "steps": { + "items": { + "properties": { + "fields": { + "items": { + "type": "string" + }, + "type": "array" + }, + "from": { + "type": "string" + }, + "iface": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "msg": { + "type": "string" + }, + "reachable": { + "type": "boolean" + }, + "scaffold": { + "properties": { + "entity": { + "type": "string" + }, + "fields": { + "items": { + "type": "string" + }, + "type": "array" + }, + "ops": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "entity", + "ops", + "fields" + ], + "type": "object" + }, + "status": { + "enum": [ + "mapped", + "likely", + "custom", + "unknown" + ], + "type": "string" + }, + "to": { + "type": "string" + }, + "why": { + "type": "string" + } + }, + "required": [ + "from", + "to", + "msg", + "iface", + "kind", + "status" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "phase", + "steps" + ], + "type": "object" + }, + "type": "array" + }, + "gaps": { + "default": [], + "items": { + "properties": { + "action": { + "type": "string" + }, + "iface": { + "type": "string" + }, + "note": { + "default": "", + "type": "string" + }, + "scaffold": { + "properties": { + "entity": { + "type": "string" + }, + "fields": { + "items": { + "type": "string" + }, + "type": "array" + }, + "ops": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "entity", + "ops", + "fields" + ], + "type": "object" + }, + "title": { + "type": "string" + }, + "type": { + "enum": [ + "connect", + "custom", + "input", + "blocker", + "gap", + "stale" + ], + "type": "string" + } + }, + "required": [ + "type", + "title", + "note" + ], + "type": "object" + }, + "type": "array" + }, + "integrations": { + "default": [], + "items": { + "properties": { + "access": { + "enum": [ + "read", + "write" + ], + "type": "string" + }, + "detail": { + "default": "", + "type": "string" + }, + "system": { + "type": "string" + }, + "via": { + "type": "string" + } + }, + "required": [ + "system", + "via", + "access", + "detail" + ], + "type": "object" + }, + "type": "array" + }, + "kind": { + "enum": [ + "entity", + "flow", + "task", + "mapping" + ], + "type": "string" + }, + "lanes": { + "default": [], + "items": { + "type": "string" + }, + "type": "array" + }, + "lifecycle": { + "properties": { + "mode": { + "type": "string" + }, + "refresh": { + "type": "string" + }, + "replenish": { + "type": "string" + } + }, + "required": [ + "mode", + "refresh", + "replenish" + ], + "type": "object" + }, + "mappingConfig": { + "properties": { + "keyMapName": { + "type": "string" + }, + "maskingPolicyId": { + "type": "string" + }, + "maskingPolicyName": { + "type": "string" + }, + "sourceObject": { + "type": "string" + }, + "sourceSystem": { + "type": "string" + }, + "targetObject": { + "type": "string" + }, + "targetSystem": { + "type": "string" + } + }, + "type": "object" + }, + "mappings": { + "items": { + "properties": { + "generate": { + "default": false, + "type": "boolean" + }, + "keyMapName": { + "type": "string" + }, + "maskingPolicyId": { + "type": "string" + }, + "note": { + "default": "", + "type": "string" + }, + "sourceField": { + "type": "string" + }, + "status": { + "default": "open", + "enum": [ + "mapped", + "open", + "needs-review" + ], + "type": "string" + }, + "targetField": { + "type": "string" + }, + "transform": { + "default": "", + "type": "string" + } + }, + "required": [ + "targetField", + "transform", + "generate", + "status", + "note" + ], + "type": "object" + }, + "type": "array" + }, + "steps": { + "default": [], + "items": { + "type": "string" + }, + "type": "array" + }, + "tasks": { + "items": { + "properties": { + "note": { + "type": "string" + }, + "phase": { + "type": "string" + }, + "tasks": { + "items": { + "properties": { + "deps": { + "default": [], + "items": { + "type": "string" + }, + "type": "array" + }, + "detail": { + "default": "", + "type": "string" + }, + "key": { + "type": "string" + }, + "priority": { + "enum": [ + "P0", + "P1", + "P2", + "P3" + ], + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": [ + "title", + "detail", + "deps" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "phase", + "tasks" + ], + "type": "object" + }, + "type": "array" + }, + "version": { + "properties": { + "by": { + "type": "string" + }, + "n": { + "minimum": 1, + "type": "integer" + }, + "when": { + "type": "string" + } + }, + "required": [ + "n", + "by", + "when" + ], + "type": "object" + } + }, + "required": [ + "lanes", + "entities", + "gaps", + "integrations", + "constraints", + "steps", + "expectations" + ], + "type": "object" + }, + "summary": { + "type": "string" + }, + "title": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "title", + "spec" + ], + "type": "object" + }, + "type": "array" + }, + "scenarios": { + "default": [], + "items": { + "properties": { + "description": { + "type": "string" + }, + "files": { + "items": { + "properties": { + "content": { + "type": "string" + }, + "name": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "name", + "content" + ], + "type": "object" + }, + "minItems": 1, + "type": "array" + }, + "name": { + "minLength": 1, + "type": "string" + }, + "params": { + "default": [], + "items": { + "properties": { + "default": { + "type": "string" + }, + "description": { + "type": "string" + }, + "name": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "name" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "name", + "files", + "params" + ], + "type": "object" + }, + "type": "array" + }, + "skills": { + "default": [], + "items": { + "properties": { + "body": { + "minLength": 1, + "type": "string" + }, + "description": { + "minLength": 1, + "type": "string" + }, + "name": { + "minLength": 1, + "type": "string" + }, + "slug": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "slug", + "name", + "description", + "body" + ], + "type": "object" + }, + "type": "array" + }, + "templates": { + "default": [], + "items": { + "properties": { + "fields": {}, + "name": { + "minLength": 1, + "type": "string" + }, + "seed": { + "type": "integer" + }, + "simulationConfig": {} + }, + "required": [ + "name" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "templates", + "skills", + "plans", + "datatypes", + "scenarios" + ], + "type": "object" + }, + "checksum": { + "type": "string" + }, + "format": { + "const": "dmpack@1", + "type": "string" + }, + "manifest": { + "properties": { + "createdAt": { + "type": "string" + }, + "description": { + "minLength": 1, + "type": "string" + }, + "license": { + "type": "string" + }, + "name": { + "pattern": "^[a-z0-9][a-z0-9-]*\\/[a-z0-9][a-z0-9-]*$", + "type": "string" + }, + "publisher": { + "minLength": 1, + "type": "string" + }, + "requires": { + "default": [], + "items": { + "properties": { + "kind": { + "const": "integration", + "type": "string" + }, + "note": { + "type": "string" + }, + "type": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "type" + ], + "type": "object" + }, + "type": "array" + }, + "version": { + "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(-[0-9A-Za-z.-]+)?$", + "type": "string" + } + }, + "required": [ + "name", + "version", + "description", + "publisher", + "requires" + ], + "type": "object" + }, + "publicKeyId": { + "type": "string" + }, + "signature": { + "type": "string" + } + }, + "required": [ + "format", + "manifest", + "assets" + ], + "type": "object" + }, + "warnings": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "pack", + "warnings" + ], + "type": "object" + }, + "PackImportDiff": { + "properties": { + "containsScenarios": { + "type": "boolean" + }, + "entries": { + "items": { + "properties": { + "action": { + "enum": [ + "create", + "skip" + ], + "type": "string" + }, + "conflict": { + "description": "Only on skips: the existing asset's content differs", + "type": "boolean" + }, + "key": { + "description": "Template/plan/datatype/scenario name, or skill slug", + "type": "string" + }, + "kind": { + "enum": [ + "template", + "skill", + "plan", + "datatype", + "scenario" + ], + "type": "string" + } + }, + "required": [ + "kind", + "key", + "action" + ], + "type": "object" + }, + "type": "array" + }, + "missingRequirements": { + "items": { + "properties": { + "kind": { + "const": "integration", + "type": "string" + }, + "note": { + "type": "string" + }, + "type": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "type" + ], + "type": "object" + }, + "type": "array" + }, + "pack": { + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "name", + "version" + ], + "type": "object" + }, + "signature": { + "enum": [ + "valid", + "invalid", + "unsigned" + ], + "type": "string" + } + }, + "required": [ + "pack", + "entries", + "containsScenarios", + "missingRequirements", + "signature" + ], + "type": "object" + }, + "PackInstall": { + "properties": { + "created": { + "$ref": "#/components/schemas/PackCreatedCounts" + }, + "createdAt": { + "description": "ISO-8601 timestamp", + "type": "string" + }, + "id": { + "type": "string" + }, + "installedBy": { + "description": "A TeamMembers id", + "type": [ + "string", + "null" + ] + }, + "manifest": { + "properties": { + "createdAt": { + "type": "string" + }, + "description": { + "minLength": 1, + "type": "string" + }, + "license": { + "type": "string" + }, + "name": { + "pattern": "^[a-z0-9][a-z0-9-]*\\/[a-z0-9][a-z0-9-]*$", + "type": "string" + }, + "publisher": { + "minLength": 1, + "type": "string" + }, + "requires": { + "default": [], + "items": { + "properties": { + "kind": { + "const": "integration", + "type": "string" + }, + "note": { + "type": "string" + }, + "type": { + "minLength": 1, + "type": "string" + } + }, + "required": [ + "kind", + "type" + ], + "type": "object" + }, + "type": "array" + }, + "version": { + "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(-[0-9A-Za-z.-]+)?$", + "type": "string" + } + }, + "required": [ + "name", + "version", + "description", + "publisher", + "requires" + ], + "type": "object" + }, + "name": { + "description": "`publisher/slug`", + "type": "string" + }, + "projectId": { + "type": [ + "string", + "null" + ] + }, + "signature": { + "description": "\"valid\" or \"unsigned\" at install time", + "type": "string" + }, + "source": { + "enum": [ + "catalog", + "file" + ], + "type": "string" + }, + "teamId": { + "type": [ + "string", + "null" + ] + }, + "version": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "version", + "manifest", + "source", + "signature", + "created", + "createdAt", + "installedBy", + "projectId", + "teamId" + ], + "type": "object" + }, + "PackInstallListItem": { + "allOf": [ + { + "$ref": "#/components/schemas/PackInstall" + } + ], + "properties": { + "installedByName": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "installedByName" + ] + }, + "PackInstallResult": { + "properties": { + "created": { + "$ref": "#/components/schemas/PackCreatedCounts", + "description": "Absent on a dry run" + }, + "diff": { + "$ref": "#/components/schemas/PackImportDiff" + }, + "install": { + "$ref": "#/components/schemas/PackInstall", + "description": "Absent on a dry run" + } + }, + "required": [ + "diff" + ], + "type": "object" + }, + "PdfAnalysisResult": { + "properties": { + "documentInfo": { + "additionalProperties": {}, + "description": "Model-extracted fields; no key is guaranteed", + "type": "object" + }, + "downloadUrl": { + "description": "Presigned URL for the uploaded file", + "type": "string" + }, + "method": { + "description": "Which extraction path produced `documentInfo`", + "enum": [ + "text_extraction", + "image_analysis" + ], + "type": "string" + }, + "success": { + "const": true, + "type": "boolean" + }, + "textLength": { + "description": "Characters extracted; absent on the image path", + "type": "integer" + } + }, + "required": [ + "success", + "documentInfo", + "method", + "downloadUrl" + ], + "type": "object" + }, + "PermissionCatalogue": { + "properties": { + "all": { + "items": { + "type": "string" + }, + "type": "array" + }, + "grouped": { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": "object" + } + }, + "required": [ + "all", + "grouped" + ], + "type": "object" + }, + "Plan": { + "properties": { + "createdAt": { + "description": "ISO-8601 timestamp", + "type": "string" + }, + "createdBy": { + "type": [ + "string", + "null" + ] + }, + "createdFrom": { + "type": [ + "string", + "null" + ] + }, + "env": { + "type": [ + "string", + "null" + ] + }, + "history": { + "items": { + "properties": { + "by": { + "type": "string" + }, + "note": { + "default": "", + "type": "string" + }, + "status": { + "enum": [ + "draft", + "approved", + "running", + "completed", + "failed" + ], + "type": "string" + }, + "when": { + "type": "string" + } + }, + "required": [ + "status", + "when", + "note" + ], + "type": "object" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "origin": { + "enum": [ + "chat", + "blueprint", + "intake", + "gap analysis", + null + ], + "type": [ + "string", + "null" + ] + }, + "owner": { + "type": [ + "string", + "null" + ] + }, + "projectId": { + "type": "string" + }, + "rows": { + "type": "integer" + }, + "spec": { + "properties": { + "approval": { + "properties": { + "reason": { + "type": "string" + }, + "role": { + "type": "string" + } + }, + "required": [ + "role", + "reason" + ], + "type": "object" + }, + "capabilities": { + "items": { + "properties": { + "expectedCount": { + "minimum": 0, + "type": "integer" + }, + "expectedSumCents": { + "type": "integer" + }, + "group": { + "type": "string" + }, + "hidden": { + "default": false, + "type": "boolean" + }, + "key": { + "type": "string" + }, + "name": { + "type": "string" + }, + "note": { + "default": "", + "type": "string" + }, + "setId": { + "type": "string" + }, + "source": { + "default": "derived", + "enum": [ + "derived", + "manual" + ], + "type": "string" + }, + "sumField": { + "type": "string" + }, + "template": { + "type": "string" + }, + "templateId": { + "type": "string" + } + }, + "required": [ + "key", + "name", + "source", + "hidden", + "note" + ], + "type": "object" + }, + "type": "array" + }, + "constraints": { + "default": [], + "items": { + "type": "string" + }, + "type": "array" + }, + "coverage": { + "items": { + "properties": { + "count": { + "minimum": 0, + "type": "integer" + }, + "family": { + "type": "string" + }, + "items": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "family", + "count", + "items" + ], + "type": "object" + }, + "type": "array" + }, + "coverageConfig": { + "properties": { + "freshnessDays": { + "default": 14, + "minimum": 1, + "type": "integer" + }, + "mode": { + "default": "release", + "enum": [ + "release", + "migration" + ], + "type": "string" + }, + "sourceSystem": { + "type": "string" + }, + "sumToleranceCents": { + "default": 0, + "minimum": 0, + "type": "integer" + }, + "targetSystem": { + "type": "string" + } + }, + "required": [ + "mode", + "freshnessDays", + "sumToleranceCents" + ], + "type": "object" + }, + "entities": { + "default": [], + "items": { + "properties": { + "endpointId": { + "type": "string" + }, + "key": { + "type": "string" + }, + "name": { + "type": "string" + }, + "note": { + "default": "", + "type": "string" + }, + "template": { + "type": "string" + }, + "templateId": { + "type": "string" + }, + "volume": { + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "name", + "template", + "volume", + "key", + "note" + ], + "type": "object" + }, + "type": "array" + }, + "expectations": { + "default": [], + "items": { + "type": "string" + }, + "type": "array" + }, + "flow": { + "items": { + "properties": { + "loop": { + "type": [ + "string", + "null" + ] + }, + "phase": { + "type": "string" + }, + "steps": { + "items": { + "properties": { + "fields": { + "items": { + "type": "string" + }, + "type": "array" + }, + "from": { + "type": "string" + }, + "iface": { + "type": "string" + }, + "kind": { + "type": "string" + }, + "msg": { + "type": "string" + }, + "reachable": { + "type": "boolean" + }, + "scaffold": { + "properties": { + "entity": { + "type": "string" + }, + "fields": { + "items": { + "type": "string" + }, + "type": "array" + }, + "ops": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "entity", + "ops", + "fields" + ], + "type": "object" + }, + "status": { + "enum": [ + "mapped", + "likely", + "custom", + "unknown" + ], + "type": "string" + }, + "to": { + "type": "string" + }, + "why": { + "type": "string" + } + }, + "required": [ + "from", + "to", + "msg", + "iface", + "kind", + "status" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "phase", + "steps" + ], + "type": "object" + }, + "type": "array" + }, + "gaps": { + "default": [], + "items": { + "properties": { + "action": { + "type": "string" + }, + "iface": { + "type": "string" + }, + "note": { + "default": "", + "type": "string" + }, + "scaffold": { + "properties": { + "entity": { + "type": "string" + }, + "fields": { + "items": { + "type": "string" + }, + "type": "array" + }, + "ops": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "entity", + "ops", + "fields" + ], + "type": "object" + }, + "title": { + "type": "string" + }, + "type": { + "enum": [ + "connect", + "custom", + "input", + "blocker", + "gap", + "stale" + ], + "type": "string" + } + }, + "required": [ + "type", + "title", + "note" + ], + "type": "object" + }, + "type": "array" + }, + "integrations": { + "default": [], + "items": { + "properties": { + "access": { + "enum": [ + "read", + "write" + ], + "type": "string" + }, + "detail": { + "default": "", + "type": "string" + }, + "system": { + "type": "string" + }, + "via": { + "type": "string" + } + }, + "required": [ + "system", + "via", + "access", + "detail" + ], + "type": "object" + }, + "type": "array" + }, + "kind": { + "enum": [ + "entity", + "flow", + "task", + "mapping" + ], + "type": "string" + }, + "lanes": { + "default": [], + "items": { + "type": "string" + }, + "type": "array" + }, + "lifecycle": { + "properties": { + "mode": { + "type": "string" + }, + "refresh": { + "type": "string" + }, + "replenish": { + "type": "string" + } + }, + "required": [ + "mode", + "refresh", + "replenish" + ], + "type": "object" + }, + "mappingConfig": { + "properties": { + "keyMapName": { + "type": "string" + }, + "maskingPolicyId": { + "type": "string" + }, + "maskingPolicyName": { + "type": "string" + }, + "sourceObject": { + "type": "string" + }, + "sourceSystem": { + "type": "string" + }, + "targetObject": { + "type": "string" + }, + "targetSystem": { + "type": "string" + } + }, + "type": "object" + }, + "mappings": { + "items": { + "properties": { + "generate": { + "default": false, + "type": "boolean" + }, + "keyMapName": { + "type": "string" + }, + "maskingPolicyId": { + "type": "string" + }, + "note": { + "default": "", + "type": "string" + }, + "sourceField": { + "type": "string" + }, + "status": { + "default": "open", + "enum": [ + "mapped", + "open", + "needs-review" + ], + "type": "string" + }, + "targetField": { + "type": "string" + }, + "transform": { + "default": "", + "type": "string" + } + }, + "required": [ + "targetField", + "transform", + "generate", + "status", + "note" + ], + "type": "object" + }, + "type": "array" + }, + "steps": { + "default": [], + "items": { + "type": "string" + }, + "type": "array" + }, + "tasks": { + "items": { + "properties": { + "note": { + "type": "string" + }, + "phase": { + "type": "string" + }, + "tasks": { + "items": { + "properties": { + "deps": { + "default": [], + "items": { + "type": "string" + }, + "type": "array" + }, + "detail": { + "default": "", + "type": "string" + }, + "key": { + "type": "string" + }, + "priority": { + "enum": [ + "P0", + "P1", + "P2", + "P3" + ], + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": [ + "title", + "detail", + "deps" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "phase", + "tasks" + ], + "type": "object" + }, + "type": "array" + }, + "version": { + "properties": { + "by": { + "type": "string" + }, + "n": { + "minimum": 1, + "type": "integer" + }, + "when": { + "type": "string" + } + }, + "required": [ + "n", + "by", + "when" + ], + "type": "object" + } + }, + "required": [ + "lanes", + "entities", + "gaps", + "integrations", + "constraints", + "steps", + "expectations" + ], + "type": "object" + }, + "status": { + "enum": [ + "draft", + "approved", + "running", + "completed", + "failed" + ], + "type": "string" + }, + "summary": { + "type": [ + "string", + "null" + ] + }, + "targets": { + "items": { + "type": "string" + }, + "type": "array" + }, + "teamId": { + "type": "string" + }, + "title": { + "type": "string" + }, + "updatedAt": { + "description": "ISO-8601 timestamp", + "type": "string" + }, + "write": { + "type": "boolean" + } + }, + "required": [ + "id", + "title", + "summary", + "status", + "origin", + "createdFrom", + "owner", + "env", + "write", + "rows", + "targets", + "spec", + "history", + "createdAt", + "updatedAt", + "createdBy", + "projectId", + "teamId" + ], + "type": "object" + }, + "PlanDeleteResult": { + "properties": { + "success": { + "type": "boolean" + } + }, + "required": [ + "success" + ], + "type": "object" + }, + "PlanRun": { + "properties": { + "completedAt": { + "description": "ISO-8601 timestamp", + "type": [ + "string", + "null" + ] + }, + "error": { + "type": [ + "string", + "null" + ] + }, + "files": { + "description": "Only on GET /plans/:planId/runs/:runId", + "items": { + "$ref": "#/components/schemas/PlanRunFile" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "logs": { + "items": {}, + "type": "array" + }, + "mode": { + "description": "generate | release | migration", + "type": "string" + }, + "planId": { + "type": "string" + }, + "results": { + "description": "The graded check result; null on generate runs", + "properties": { + "config": { + "properties": { + "freshnessDays": { + "default": 14, + "minimum": 1, + "type": "integer" + }, + "mode": { + "default": "release", + "enum": [ + "release", + "migration" + ], + "type": "string" + }, + "sourceSystem": { + "type": "string" + }, + "sumToleranceCents": { + "default": 0, + "minimum": 0, + "type": "integer" + }, + "targetSystem": { + "type": "string" + } + }, + "required": [ + "mode", + "freshnessDays", + "sumToleranceCents" + ], + "type": "object" + }, + "gaps": { + "default": [], + "items": { + "properties": { + "action": { + "type": "string" + }, + "iface": { + "type": "string" + }, + "note": { + "default": "", + "type": "string" + }, + "scaffold": { + "properties": { + "entity": { + "type": "string" + }, + "fields": { + "items": { + "type": "string" + }, + "type": "array" + }, + "ops": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "entity", + "ops", + "fields" + ], + "type": "object" + }, + "title": { + "type": "string" + }, + "type": { + "enum": [ + "connect", + "custom", + "input", + "blocker", + "gap", + "stale" + ], + "type": "string" + } + }, + "required": [ + "type", + "title", + "note" + ], + "type": "object" + }, + "type": "array" + }, + "items": { + "default": [], + "items": { + "properties": { + "checks": { + "default": [], + "items": { + "properties": { + "detail": { + "default": "", + "type": "string" + }, + "id": { + "type": "string" + }, + "label": { + "type": "string" + }, + "status": { + "enum": [ + "pass", + "warn", + "fail", + "skip" + ], + "type": "string" + } + }, + "required": [ + "id", + "label", + "status", + "detail" + ], + "type": "object" + }, + "type": "array" + }, + "group": { + "type": "string" + }, + "key": { + "type": "string" + }, + "name": { + "type": "string" + }, + "status": { + "enum": [ + "ready", + "partial", + "missing", + "reconciled", + "discrepancy" + ], + "type": "string" + } + }, + "required": [ + "key", + "name", + "status", + "checks" + ], + "type": "object" + }, + "type": "array" + }, + "mode": { + "enum": [ + "release", + "migration" + ], + "type": "string" + }, + "summary": { + "properties": { + "failing": { + "minimum": 0, + "type": "integer" + }, + "partial": { + "minimum": 0, + "type": "integer" + }, + "passing": { + "minimum": 0, + "type": "integer" + }, + "scorePct": { + "maximum": 100, + "minimum": 0, + "type": "integer" + }, + "total": { + "minimum": 0, + "type": "integer" + } + }, + "required": [ + "total", + "passing", + "partial", + "failing", + "scorePct" + ], + "type": "object" + }, + "verdict": { + "enum": [ + "ready", + "partial", + "blocked", + "reconciled", + "discrepancy" + ], + "type": "string" + } + }, + "required": [ + "mode", + "config", + "items", + "gaps", + "summary", + "verdict" + ], + "type": [ + "object", + "null" + ] + }, + "rows": { + "type": "integer" + }, + "source": { + "description": "\"manual\", \"agent\" or \"mcp\"", + "type": "string" + }, + "startedAt": { + "description": "ISO-8601 timestamp", + "type": "string" + }, + "status": { + "description": "queued | running | completed | failed", + "type": "string" + }, + "verdict": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "planId", + "status", + "source", + "mode", + "rows", + "logs", + "results", + "verdict", + "error", + "startedAt", + "completedAt" + ], + "type": "object" + }, + "PlanRunAccepted": { + "properties": { + "runId": { + "type": "string" + }, + "status": { + "const": "running", + "type": "string" + } + }, + "required": [ + "runId", + "status" + ], + "type": "object" + }, + "PlanRunAck": { + "properties": { + "ok": { + "const": true, + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" + }, + "PlanRunFile": { + "properties": { + "entity": { + "type": "string" + }, + "filename": { + "type": "string" + }, + "id": { + "type": "string" + }, + "mimeType": { + "type": [ + "string", + "null" + ] + }, + "presignedUrl": { + "type": [ + "string", + "null" + ] + }, + "size": { + "type": "integer" + } + }, + "required": [ + "id", + "entity", + "filename", + "size", + "mimeType", + "presignedUrl" + ], + "type": "object" + }, + "PlanRunFileAck": { + "properties": { + "file": { + "properties": { + "entity": { + "type": "string" + }, + "filename": { + "type": "string" + }, + "id": { + "type": "string" + }, + "key": { + "description": "The S3 key", + "type": "string" + }, + "mimeType": { + "type": [ + "string", + "null" + ] + }, + "size": { + "type": "integer" + } + }, + "required": [ + "id", + "entity", + "filename", + "key", + "size", + "mimeType" + ], + "type": "object" + }, + "ok": { + "const": true, + "type": "boolean" + } + }, + "required": [ + "ok", + "file" + ], + "type": "object" + }, + "PlanSignoff": { + "properties": { + "createdAt": { + "description": "ISO-8601 timestamp", + "type": "string" + }, + "id": { + "type": "string" + }, + "note": { + "type": [ + "string", + "null" + ] + }, + "planId": { + "type": "string" + }, + "planRunId": { + "type": "string" + }, + "report": { + "description": "Immutable snapshot: run results + the definition of done" + }, + "reportHash": { + "description": "sha256 hex of the canonical report JSON", + "type": "string" + }, + "signedBy": { + "description": "Display name, stamped server-side", + "type": "string" + }, + "verdict": { + "description": "The covered run's verdict at sign-off time", + "type": "string" + } + }, + "required": [ + "id", + "planId", + "planRunId", + "signedBy", + "note", + "verdict", + "reportHash", + "createdAt" + ], + "type": "object" + }, + "PreferencesUpdateError": { + "properties": { + "error": { + "description": "Absent on the 401", + "type": "string" + }, + "ok": { + "const": false, + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "type": "object" + }, + "PreferencesUpdateResult": { + "properties": { + "ok": { + "const": true, + "type": "boolean" + }, + "theme": { + "type": "string" + } + }, + "required": [ + "ok", + "theme" + ], + "type": "object" + }, + "PreviewResult": { + "properties": { + "data": { + "description": "Parsed JSON when `isJson`, raw text otherwise" + }, + "headers": { + "additionalProperties": { + "type": "string" + }, + "description": "The upstream RESPONSE headers, lowercased", + "type": "object" + }, + "isJson": { + "type": "boolean" + }, + "responseTime": { + "description": "Milliseconds", + "type": "integer" + }, + "status": { + "description": "The upstream HTTP status", + "type": "integer" + }, + "statusText": { + "type": "string" + } + }, + "required": [ + "status", + "statusText", + "headers", + "responseTime", + "isJson" + ], + "type": "object" + }, + "Project": { + "properties": { + "avatar": { + "type": [ + "string", + "null" + ] + }, + "createdAt": { + "description": "ISO-8601 timestamp", + "type": "string" + }, + "createdBy": { + "type": "string" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "teamId": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "avatar", + "description", + "createdAt", + "createdBy", + "teamId" + ], + "type": "object" + }, + "PythonExecutionError": { + "properties": { + "error": { + "type": "string" + }, + "executionTime": { + "type": "number" + }, + "jobId": { + "type": "string" + }, + "logs": { + "items": {}, + "type": "array" + }, + "result": {}, + "status": { + "type": "string" + }, + "success": { + "const": false, + "type": "boolean" + } + }, + "required": [ + "success", + "error" + ], + "type": "object" + }, + "PythonExecutionResult": { + "properties": { + "executionTime": { + "description": "Milliseconds", + "type": "number" + }, + "jobId": { + "type": "string" + }, + "logs": { + "items": {}, + "type": "array" + }, + "message": { + "description": "Only on the async path, where the job was merely queued", + "type": "string" + }, + "result": { + "description": "The worker's return value; absent on the async path" + }, + "status": { + "description": "\"completed\" on the sync paths; the queue state otherwise", + "type": "string" + }, + "success": { + "const": true, + "type": "boolean" + } + }, + "required": [ + "success", + "jobId", + "status" + ], + "type": "object" + }, + "Role": { + "properties": { + "baseRole": { + "description": "TeamRole this role derives from, for system roles", + "type": [ + "string", + "null" + ] + }, + "createdAt": { + "description": "ISO-8601 timestamp", + "type": "string" + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "id": { + "type": "string" + }, + "isSystem": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "teamId": { + "type": "string" + }, + "updatedAt": { + "description": "ISO-8601 timestamp", + "type": "string" + } + }, + "required": [ + "id", + "teamId", + "name", + "description", + "isSystem", + "baseRole", + "createdAt", + "updatedAt" + ], + "type": "object" + }, + "SapServiceCatalog": { + "properties": { + "activeCount": { + "type": "integer" + }, + "inactiveCount": { + "type": "integer" + }, + "probed": { + "type": "boolean" + }, + "probedCount": { + "type": "integer" + }, + "services": { + "items": { + "properties": { + "description": { + "type": "string" + }, + "id": { + "type": "string" + }, + "isActive": { + "type": "boolean" + }, + "metadataUrl": { + "type": "string" + }, + "serviceUrl": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "id", + "description", + "serviceUrl", + "metadataUrl" + ], + "type": "object" + }, + "type": "array" + }, + "status": { + "enum": [ + "active", + "inactive" + ], + "type": "string" + }, + "total": { + "description": "The count AFTER filtering and ?limit=", + "type": "integer" + }, + "truncated": { + "description": "The system has more services than one call will probe", + "type": "boolean" + } + }, + "required": [ + "services", + "total", + "probed" + ], + "type": "object" + }, + "Scenario": { + "properties": { + "createdAt": { + "description": "ISO-8601 timestamp", + "type": "string" + }, + "createdBy": { + "type": [ + "string", + "null" + ] + }, + "description": { + "type": [ + "string", + "null" + ] + }, + "diagram": { + "type": [ + "string", + "null" + ] + }, + "diagramBusiness": { + "type": [ + "string", + "null" + ] + }, + "diagramError": { + "type": [ + "string", + "null" + ] + }, + "diagramSourceHash": { + "type": [ + "string", + "null" + ] + }, + "diagramStatus": { + "type": "string" + }, + "diagramUpdatedAt": { + "description": "ISO-8601 timestamp", + "type": [ + "string", + "null" + ] + }, + "environmentVariables": { + "description": "Name/value map; JSON column" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "presignedUrl": { + "description": "Short-lived S3 URL for the script", + "type": [ + "string", + "null" + ] + }, + "projectId": { + "type": "string" + }, + "requirementsUrl": { + "description": "Short-lived S3 URL for requirements.txt", + "type": [ + "string", + "null" + ] + }, + "storageUsed": { + "type": "integer" + }, + "teamId": { + "type": "string" + }, + "timeoutSeconds": { + "type": "integer" + }, + "updatedAt": { + "description": "ISO-8601 timestamp", + "type": "string" + } + }, + "required": [ + "id", + "name", + "description", + "presignedUrl", + "requirementsUrl", + "storageUsed", + "timeoutSeconds", + "diagram", + "diagramBusiness", + "diagramStatus", + "diagramUpdatedAt", + "diagramError", + "diagramSourceHash", + "createdAt", + "updatedAt", + "createdBy", + "projectId", + "teamId" + ], + "type": "object" + }, + "ScenarioDiagramRegenerateAccepted": { + "properties": { + "status": { + "const": "pending", + "type": "string" + } + }, + "required": [ + "status" + ], + "type": "object" + }, + "ScenarioEnvironmentVariableList": { + "properties": { + "environmentVariables": { + "items": { + "properties": { + "key": { + "type": "string" + }, + "value": { + "type": "string" + } + }, + "required": [ + "key", + "value" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "environmentVariables" + ], + "type": "object" + }, + "ScenarioEnvironmentVariables": { + "properties": { + "environmentVariables": { + "additionalProperties": { + "type": "string" + }, + "type": "object" + } + }, + "required": [ + "environmentVariables" + ], + "type": "object" + }, + "ScenarioFile": { + "properties": { + "createdAt": { + "description": "ISO-8601 timestamp", + "type": "string" + }, + "createdBy": { + "type": [ + "string", + "null" + ] + }, + "filename": { + "type": "string" + }, + "folder": { + "enum": [ + "uploads", + "outputs" + ], + "type": "string" + }, + "id": { + "type": "string" + }, + "key": { + "description": "Storage key; unique", + "type": "string" + }, + "mimeType": { + "type": [ + "string", + "null" + ] + }, + "presignedUrl": { + "description": "Short-lived download URL", + "type": [ + "string", + "null" + ] + }, + "scenarioId": { + "type": "string" + }, + "size": { + "description": "Bytes", + "type": "integer" + }, + "updatedAt": { + "description": "ISO-8601 timestamp", + "type": "string" + } + }, + "required": [ + "id", + "scenarioId", + "filename", + "key", + "presignedUrl", + "size", + "mimeType", + "folder", + "createdAt", + "updatedAt", + "createdBy" + ], + "type": "object" + }, + "ScenarioFileCreated": { + "properties": { + "createdAt": { + "description": "ISO-8601 timestamp", + "type": "string" + }, + "filePath": { + "description": "The stored `key`", + "type": "string" + }, + "folder": { + "description": "\"uploads\" or \"outputs\"", + "type": "string" + }, + "id": { + "type": "string" + }, + "mimeType": { + "type": [ + "string", + "null" + ] + }, + "name": { + "description": "The stored `filename`", + "type": "string" + }, + "size": { + "description": "Bytes", + "type": "integer" + }, + "updatedAt": { + "description": "ISO-8601 timestamp", + "type": "string" + } + }, + "required": [ + "id", + "name", + "size", + "mimeType", + "filePath", + "folder", + "createdAt", + "updatedAt" + ], + "type": "object" + }, + "ScenarioJob": { + "properties": { + "createdAt": { + "description": "Epoch milliseconds", + "type": [ + "number", + "null" + ] + }, + "finishedAt": { + "description": "Epoch milliseconds", + "type": [ + "number", + "null" + ] + }, + "jobId": { + "type": [ + "string", + "null" + ] + }, + "processedAt": { + "description": "Epoch milliseconds", + "type": [ + "number", + "null" + ] + }, + "projectId": { + "type": [ + "string", + "null" + ] + }, + "scenarioId": { + "type": [ + "string", + "null" + ] + }, + "scenarioName": { + "type": [ + "string", + "null" + ] + }, + "state": { + "description": "e.g. \"active\", \"waiting\", \"completed\", \"failed\", \"cancelled\"", + "type": "string" + }, + "teamId": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "jobId", + "state", + "scenarioId", + "scenarioName", + "projectId", + "teamId", + "createdAt", + "processedAt", + "finishedAt" + ], + "type": "object" + }, + "ScenarioJobStatus": { + "properties": { + "error": { + "type": [ + "string", + "null" + ] + }, + "logs": { + "properties": { + "count": { + "type": "integer" + }, + "logs": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "logs", + "count" + ], + "type": "object" + }, + "output": { + "type": [ + "string", + "null" + ] + }, + "progress": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "additionalProperties": {}, + "type": "object" + } + ], + "description": "BullMQ's job progress; always 0 on the local-run fallback" + }, + "state": { + "description": "Normalised: \"active\", \"completed\" or \"failed\" (see above)", + "type": "string" + } + }, + "required": [ + "state", + "progress", + "output", + "error", + "logs" + ], + "type": "object" + }, + "ScenarioJobs": { + "properties": { + "jobs": { + "items": { + "$ref": "#/components/schemas/ScenarioJob" + }, + "type": "array" + } + }, + "required": [ + "jobs" + ], + "type": "object" + }, + "ScenarioLog": { + "properties": { + "completedAt": { + "description": "ISO-8601 timestamp", + "type": [ + "string", + "null" + ] + }, + "createdBy": { + "type": "string" + }, + "error": { + "type": [ + "string", + "null" + ] + }, + "id": { + "type": "string" + }, + "jobId": { + "description": "BullMQ job id; unique", + "type": "string" + }, + "logs": { + "description": "Normalised log lines", + "items": {}, + "type": "array" + }, + "output": { + "type": [ + "string", + "null" + ] + }, + "scenarioId": { + "type": "string" + }, + "source": { + "description": "How the run was started, e.g. \"manual\"", + "type": "string" + }, + "startedAt": { + "description": "ISO-8601 timestamp", + "type": "string" + }, + "status": { + "description": "\"queued\", \"running\", \"completed\" or \"failed\"", + "type": "string" + } + }, + "required": [ + "id", + "scenarioId", + "jobId", + "status", + "source", + "logs", + "output", + "error", + "startedAt", + "completedAt", + "createdBy" + ], + "type": "object" + }, + "SchemaGraphChange": { + "anyOf": [ + { + "properties": { + "entity": { + "$ref": "#/components/schemas/SchemaGraphEntity" + }, + "kind": { + "const": "entity", + "type": "string" + }, + "status": { + "enum": [ + "added", + "removed" + ], + "type": "string" + } + }, + "required": [ + "kind", + "status", + "entity" + ], + "type": "object" + }, + { + "properties": { + "creatable": { + "properties": { + "cached": { + "type": "boolean" + }, + "live": { + "type": "boolean" + } + }, + "required": [ + "cached", + "live" + ], + "type": "object" + }, + "entitySet": { + "properties": { + "cached": { + "type": "string" + }, + "live": { + "type": "string" + } + }, + "type": "object" + }, + "keys": { + "properties": { + "cached": { + "items": { + "type": "string" + }, + "type": "array" + }, + "live": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "cached", + "live" + ], + "type": "object" + }, + "kind": { + "const": "entity", + "type": "string" + }, + "label": { + "properties": { + "cached": { + "type": "string" + }, + "live": { + "type": "string" + } + }, + "required": [ + "cached", + "live" + ], + "type": "object" + }, + "name": { + "type": "string" + }, + "properties": { + "items": { + "anyOf": [ + { + "properties": { + "kind": { + "const": "property", + "type": "string" + }, + "property": { + "$ref": "#/components/schemas/SchemaGraphProperty" + }, + "status": { + "enum": [ + "added", + "removed" + ], + "type": "string" + } + }, + "required": [ + "kind", + "status", + "property" + ], + "type": "object" + }, + { + "properties": { + "changes": { + "properties": { + "creatable": { + "properties": { + "cached": { + "type": "boolean" + }, + "live": { + "type": "boolean" + } + }, + "required": [ + "cached", + "live" + ], + "type": "object" + }, + "label": { + "properties": { + "cached": { + "type": "string" + }, + "live": { + "type": "string" + } + }, + "type": "object" + }, + "maxLength": { + "properties": { + "cached": { + "type": "integer" + }, + "live": { + "type": "integer" + } + }, + "type": "object" + }, + "nullable": { + "properties": { + "cached": { + "type": "boolean" + }, + "live": { + "type": "boolean" + } + }, + "required": [ + "cached", + "live" + ], + "type": "object" + }, + "type": { + "properties": { + "cached": { + "type": "string" + }, + "live": { + "type": "string" + } + }, + "required": [ + "cached", + "live" + ], + "type": "object" + }, + "updatable": { + "properties": { + "cached": { + "type": "boolean" + }, + "live": { + "type": "boolean" + } + }, + "required": [ + "cached", + "live" + ], + "type": "object" + } + }, + "type": "object" + }, + "kind": { + "const": "property", + "type": "string" + }, + "name": { + "type": "string" + }, + "status": { + "const": "modified", + "type": "string" + } + }, + "required": [ + "kind", + "status", + "name", + "changes" + ], + "type": "object" + } + ] + }, + "type": "array" + }, + "status": { + "const": "modified", + "type": "string" + }, + "updatable": { + "properties": { + "cached": { + "type": "boolean" + }, + "live": { + "type": "boolean" + } + }, + "required": [ + "cached", + "live" + ], + "type": "object" + } + }, + "required": [ + "kind", + "status", + "name", + "properties" + ], + "type": "object" + }, + { + "properties": { + "kind": { + "const": "navigation", + "type": "string" + }, + "navigation": { + "$ref": "#/components/schemas/SchemaGraphNavigation" + }, + "status": { + "enum": [ + "added", + "removed" + ], + "type": "string" + } + }, + "required": [ + "kind", + "status", + "navigation" + ], + "type": "object" + }, + { + "properties": { + "changes": { + "properties": { + "cardinality": { + "properties": { + "cached": { + "type": "string" + }, + "live": { + "type": "string" + } + }, + "required": [ + "cached", + "live" + ], + "type": "object" + }, + "to": { + "properties": { + "cached": { + "type": "string" + }, + "live": { + "type": "string" + } + }, + "required": [ + "cached", + "live" + ], + "type": "object" + } + }, + "type": "object" + }, + "from": { + "type": "string" + }, + "kind": { + "const": "navigation", + "type": "string" + }, + "name": { + "type": "string" + }, + "status": { + "const": "modified", + "type": "string" + } + }, + "required": [ + "kind", + "status", + "from", + "name", + "changes" + ], + "type": "object" + } + ] + }, + "SchemaGraphConnectResult": { + "properties": { + "endpointId": { + "description": "The NEW bridge endpoint that was created", + "type": "string" + }, + "endpointName": { + "type": "string" + }, + "entity": { + "type": "string" + }, + "fieldsUpgraded": { + "type": "integer" + }, + "templateId": { + "type": "string" + }, + "upgraded": { + "description": "Names of the upgraded fields", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "templateId", + "endpointId", + "endpointName", + "entity", + "fieldsUpgraded", + "upgraded" + ], + "type": "object" + }, + "SchemaGraphDiffResult": { + "properties": { + "cachedRefreshedAt": { + "description": "ISO-8601 timestamp: when the cached graph was last refreshed", + "type": "string" + }, + "changes": { + "items": { + "$ref": "#/components/schemas/SchemaGraphChange" + }, + "type": "array" + }, + "drifted": { + "type": "boolean" + }, + "endpointId": { + "type": "string" + }, + "metadataUrl": { + "type": "string" + }, + "namespace": { + "properties": { + "cached": { + "type": "string" + }, + "live": { + "type": "string" + } + }, + "required": [ + "cached", + "live" + ], + "type": "object" + }, + "odataVersion": { + "properties": { + "cached": { + "type": "string" + }, + "live": { + "type": "string" + } + }, + "required": [ + "cached", + "live" + ], + "type": "object" + }, + "summary": { + "properties": { + "entitiesAdded": { + "type": "integer" + }, + "entitiesModified": { + "type": "integer" + }, + "entitiesRemoved": { + "type": "integer" + }, + "navigationsAdded": { + "type": "integer" + }, + "navigationsChanged": { + "type": "integer" + }, + "navigationsRemoved": { + "type": "integer" + }, + "propertiesAdded": { + "type": "integer" + }, + "propertiesChanged": { + "type": "integer" + }, + "propertiesRemoved": { + "type": "integer" + } + }, + "required": [ + "entitiesAdded", + "entitiesRemoved", + "entitiesModified", + "propertiesAdded", + "propertiesRemoved", + "propertiesChanged", + "navigationsAdded", + "navigationsRemoved", + "navigationsChanged" + ], + "type": "object" + } + }, + "required": [ + "endpointId", + "metadataUrl", + "cachedRefreshedAt", + "drifted", + "namespace", + "odataVersion", + "summary", + "changes" + ], + "type": "object" + }, + "SchemaGraphEntity": { + "properties": { + "creatable": { + "type": "boolean" + }, + "entitySet": { + "description": "Only when the type is bound", + "type": "string" + }, + "keys": { + "items": { + "type": "string" + }, + "type": "array" + }, + "kind": { + "const": "entity", + "type": "string" + }, + "label": { + "description": "sap:label, falling back to the name", + "type": "string" + }, + "name": { + "description": "EntityType name, e.g. \"SalesOrder\"", + "type": "string" + }, + "properties": { + "items": { + "$ref": "#/components/schemas/SchemaGraphProperty" + }, + "type": "array" + }, + "updatable": { + "type": "boolean" + } + }, + "required": [ + "kind", + "name", + "label", + "creatable", + "updatable", + "keys", + "properties" + ], + "type": "object" + }, + "SchemaGraphEntityContext": { + "properties": { + "entity": { + "$ref": "#/components/schemas/SchemaGraphEntity" + }, + "navigatedFrom": { + "items": { + "properties": { + "cardinality": { + "type": "string" + }, + "from": { + "type": "string" + }, + "name": { + "type": "string" + } + }, + "required": [ + "name", + "from", + "cardinality" + ], + "type": "object" + }, + "type": "array" + }, + "navigatesTo": { + "items": { + "properties": { + "cardinality": { + "type": "string" + }, + "name": { + "type": "string" + }, + "to": { + "type": "string" + } + }, + "required": [ + "name", + "to", + "cardinality" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "entity", + "navigatesTo", + "navigatedFrom" + ], + "type": "object" + }, + "SchemaGraphMinedField": { + "properties": { + "counts": { + "description": "Occurrence count per value, same order as `values`", + "items": { + "type": "integer" + }, + "type": "array" + }, + "distinct": { + "type": "integer" + }, + "enumLike": { + "description": "Few distinct values AND repeats observed: treat as a SAP code-list", + "type": "boolean" + }, + "name": { + "type": "string" + }, + "sampled": { + "description": "Non-empty values seen for this field", + "type": "integer" + }, + "values": { + "description": "Capped, most frequent first", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "name", + "sampled", + "distinct", + "values", + "counts", + "enumLike" + ], + "type": "object" + }, + "SchemaGraphNavigation": { + "properties": { + "cardinality": { + "description": "\"1\", \"0..1\" or \"*\"", + "type": "string" + }, + "from": { + "type": "string" + }, + "kind": { + "const": "navigation", + "type": "string" + }, + "name": { + "description": "NavigationProperty name on the source", + "type": "string" + }, + "to": { + "type": "string" + } + }, + "required": [ + "kind", + "from", + "to", + "name", + "cardinality" + ], + "type": "object" + }, + "SchemaGraphPathResult": { + "properties": { + "path": { + "items": { + "properties": { + "from": { + "type": "string" + }, + "to": { + "type": "string" + }, + "via": { + "type": "string" + } + }, + "required": [ + "from", + "via", + "to" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "path" + ], + "type": "object" + }, + "SchemaGraphPreviewResult": { + "properties": { + "count": { + "type": "integer" + }, + "entity": { + "type": "string" + }, + "entitySet": { + "type": "string" + }, + "rows": { + "description": "Business fields only; OData bookkeeping keys are stripped", + "items": { + "additionalProperties": {}, + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "entity", + "entitySet", + "count", + "rows" + ], + "type": "object" + }, + "SchemaGraphProperty": { + "properties": { + "creatable": { + "type": "boolean" + }, + "label": { + "description": "From sap:label when present", + "type": "string" + }, + "maxLength": { + "type": "integer" + }, + "name": { + "type": "string" + }, + "nullable": { + "type": "boolean" + }, + "type": { + "description": "EDM type, e.g. \"Edm.String\"", + "type": "string" + }, + "updatable": { + "type": "boolean" + } + }, + "required": [ + "name", + "type", + "nullable", + "creatable", + "updatable" + ], + "type": "object" + }, + "SchemaGraphRefreshResult": { + "properties": { + "entities": { + "type": "integer" + }, + "metadataUrl": { + "type": "string" + }, + "namespace": { + "type": "string" + }, + "navigations": { + "type": "integer" + }, + "odataVersion": { + "description": "\"2.0\" or \"4.0\"", + "type": "string" + }, + "schemaChanged": { + "description": "The EDMX hash moved since the last refresh; false on a first refresh", + "type": "boolean" + } + }, + "required": [ + "namespace", + "odataVersion", + "entities", + "navigations", + "schemaChanged", + "metadataUrl" + ], + "type": "object" + }, + "SchemaGraphSampleResult": { + "properties": { + "entity": { + "type": "string" + }, + "fields": { + "items": { + "$ref": "#/components/schemas/SchemaGraphMinedField" + }, + "type": "array" + }, + "rowsSampled": { + "type": "integer" + }, + "valueHelpSets": { + "description": "Entity sets that look like value-help / code-list sets", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "entity", + "rowsSampled", + "fields", + "valueHelpSets" + ], + "type": "object" + }, + "SchemaGraphSearchResult": { + "properties": { + "results": { + "items": { + "properties": { + "entitySet": { + "type": "string" + }, + "label": { + "type": "string" + }, + "name": { + "type": "string" + }, + "score": { + "type": "integer" + } + }, + "required": [ + "name", + "label", + "score" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "results" + ], + "type": "object" + }, + "SchemaGraphTemplateResult": { + "properties": { + "entity": { + "type": "string" + }, + "fieldCount": { + "type": "integer" + }, + "id": { + "type": "string" + }, + "minedFields": { + "description": "Fields turned into Custom generators from sampled values; empty unless `useSamples` was sent", + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "type": "string" + } + }, + "required": [ + "id", + "name", + "fieldCount", + "entity", + "minedFields" + ], + "type": "object" + }, + "SessionTokens": { + "properties": { + "accessToken": { + "description": "Short-lived JWT - secret", + "type": "string" + }, + "expiresIn": { + "description": "Access token lifetime, in seconds", + "type": "integer" + }, + "refreshExpiresAt": { + "description": "ISO-8601 timestamp the refresh token expires at", + "type": "string" + }, + "refreshToken": { + "description": "Rotated on every use - secret", + "type": "string" + } + }, + "required": [ + "accessToken", + "refreshToken", + "expiresIn", + "refreshExpiresAt" + ], + "type": "object" + }, + "Set": { + "properties": { + "createdAt": { + "description": "ISO-8601 timestamp", + "type": "string" + }, + "createdBy": { + "type": [ + "string", + "null" + ] + }, + "data": {}, + "description": { + "type": [ + "string", + "null" + ] + }, + "id": { + "type": "string" + }, + "locked": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "projectId": { + "type": "string" + }, + "rowCount": { + "type": "integer" + }, + "teamId": { + "type": "string" + }, + "updatedAt": { + "description": "ISO-8601 timestamp", + "type": "string" + } + }, + "required": [ + "id", + "name", + "description", + "rowCount", + "locked", + "createdAt", + "updatedAt", + "createdBy", + "projectId", + "teamId" + ], + "type": "object" + }, + "SetDetail": { + "allOf": [ + { + "$ref": "#/components/schemas/Set" + } + ], + "properties": { + "createdByName": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "createdByName" + ] + }, + "Shortcut": { + "properties": { + "context": { + "description": "ShortcutsContext enum value", + "type": "string" + }, + "createdAt": { + "description": "ISO-8601 timestamp", + "type": "string" + }, + "function": { + "description": "The action the binding triggers", + "type": "string" + }, + "id": { + "type": "string" + }, + "keys": { + "items": { + "type": "string" + }, + "type": "array" + }, + "updatedAt": { + "description": "ISO-8601 timestamp", + "type": "string" + }, + "userId": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "userId", + "function", + "context", + "keys", + "createdAt", + "updatedAt" + ], + "type": "object" + }, + "Skill": { + "discriminator": { + "mapping": { + "builtin": "#/components/schemas/BuiltinSkill", + "team": "#/components/schemas/TeamSkill" + }, + "propertyName": "scope" + }, + "oneOf": [ + { + "$ref": "#/components/schemas/TeamSkill" + }, + { + "$ref": "#/components/schemas/BuiltinSkill" + } + ] + }, + "StringList": { + "items": { + "type": "string" + }, + "type": "array" + }, + "SuccessResult": { + "properties": { + "success": { + "type": "boolean" + } + }, + "required": [ + "success" + ], + "type": "object" + }, + "Team": { + "properties": { + "avatar": { + "type": [ + "string", + "null" + ] }, - "status": { - "enum": [ - "draft", - "approved", - "running", - "completed", - "failed" - ], + "createdAt": { + "description": "ISO-8601 timestamp", "type": "string" }, - "summary": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "updatedAt": { + "description": "ISO-8601 timestamp", + "type": "string" + } + }, + "required": [ + "id", + "name", + "avatar", + "createdAt", + "updatedAt" + ], + "type": "object" + }, + "TeamMember": { + "properties": { + "id": { + "type": "string" + }, + "role": { + "description": "TeamRole enum value, e.g. OWNER / ADMIN / MEMBER", + "type": "string" + }, + "teamId": { + "type": "string" + }, + "userId": { + "type": "string" + } + }, + "required": [ + "id", + "userId", + "teamId", + "role" + ], + "type": "object" + }, + "TeamSetupResult": { + "properties": { + "project": { + "$ref": "#/components/schemas/Project" + }, + "team": { + "$ref": "#/components/schemas/Team" + }, + "teamMember": { + "$ref": "#/components/schemas/TeamMember" + } + }, + "required": [ + "team", + "teamMember", + "project" + ], + "type": "object" + }, + "TeamSkill": { + "properties": { + "appliedCount": { + "type": "integer" + }, + "body": { + "description": "The SKILL.md body", + "type": "string" + }, + "createdAt": { + "description": "ISO-8601 timestamp", + "type": "string" + }, + "createdBy": { "type": [ "string", "null" ] }, - "targets": { - "items": { - "type": "string" - }, - "type": "array" + "description": { + "type": "string" }, - "teamId": { + "enabled": { + "type": "boolean" + }, + "id": { "type": "string" }, - "title": { + "name": { + "type": "string" + }, + "scope": { + "const": "team", + "type": "string" + }, + "slug": { "type": "string" }, "updatedAt": { "description": "ISO-8601 timestamp", "type": "string" + } + }, + "required": [ + "id", + "slug", + "name", + "description", + "body", + "enabled", + "appliedCount", + "scope", + "createdBy", + "createdAt", + "updatedAt" + ], + "type": "object" + }, + "Template": { + "properties": { + "createdAt": { + "description": "ISO-8601 timestamp", + "type": "string" }, - "write": { + "createdBy": { + "type": [ + "string", + "null" + ] + }, + "dbOrderIdx": { + "type": "integer" + }, + "fields": {}, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "projectId": { + "type": [ + "string", + "null" + ] + }, + "seed": { + "type": [ + "integer", + "null" + ] + }, + "simulationConfig": { + "type": "null" + }, + "teamId": { + "type": [ + "string", + "null" + ] + }, + "templateFolderId": { + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "id", + "name", + "dbOrderIdx", + "seed", + "createdAt", + "createdBy", + "templateFolderId", + "projectId", + "teamId" + ], + "type": "object" + }, + "TemplateFolder": { + "properties": { + "createdAt": { + "description": "ISO-8601 timestamp", + "type": "string" + }, + "createdBy": { + "type": [ + "string", + "null" + ] + }, + "id": { + "type": "string" + }, + "isDatabase": { "type": "boolean" + }, + "name": { + "type": "string" + }, + "projectId": { + "type": [ + "string", + "null" + ] + }, + "teamId": { + "type": [ + "string", + "null" + ] } }, "required": [ "id", - "title", - "summary", - "status", - "origin", - "createdFrom", - "owner", - "env", - "write", - "rows", - "targets", - "spec", - "history", + "name", + "isDatabase", "createdAt", - "updatedAt", "createdBy", "projectId", "teamId" ], "type": "object" }, - "PlanDeleteResult": { + "ToscaOnPremWorkspaces": { + "properties": { + "workspaces": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "workspaces" + ], + "type": "object" + }, + "ToscaWorkspaces": { + "properties": { + "kind": { + "enum": [ + "tosca-onprem", + "tosca-cloud" + ], + "type": "string" + }, + "workspaces": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "workspaces", + "kind" + ], + "type": "object" + }, + "UploadResult": { + "properties": { + "downloadUrl": { + "description": "Short-lived download URL", + "type": "string" + }, + "fileName": { + "description": "The storage key, not the original filename", + "type": "string" + }, + "success": { + "type": "boolean" + } + }, + "required": [ + "success", + "downloadUrl", + "fileName" + ], + "type": "object" + }, + "UploadTextResult": { "properties": { + "chatAssetId": { + "description": "Only when a chatId was supplied and the asset was recorded", + "type": "string" + }, + "fileName": { + "description": "The storage key, not the original filename", + "type": "string" + }, "success": { + "const": true, "type": "boolean" + }, + "url": { + "description": "Presigned download URL", + "type": "string" } }, "required": [ - "success" + "success", + "url", + "fileName" ], "type": "object" }, - "Project": { + "User": { "properties": { + "autoSave": { + "type": [ + "boolean", + "null" + ] + }, "avatar": { "type": [ "string", @@ -1001,170 +6355,294 @@ "description": "ISO-8601 timestamp", "type": "string" }, - "createdBy": { + "creationPurpose": { "type": "string" }, - "description": { - "type": [ - "string", - "null" - ] + "email": { + "type": "string" + }, + "firstName": { + "type": "string" }, "id": { "type": "string" }, - "name": { + "lastLogin": { + "description": "ISO-8601 timestamp", "type": "string" }, - "teamId": { + "lastName": { "type": "string" } }, "required": [ "id", - "name", + "email", + "firstName", + "lastName", "avatar", - "description", - "createdAt", - "createdBy", - "teamId" + "autoSave", + "creationPurpose", + "lastLogin", + "createdAt" ], "type": "object" }, - "Set": { + "UserPreferences": { "properties": { - "createdAt": { - "description": "ISO-8601 timestamp", - "type": "string" - }, - "createdBy": { - "type": [ - "string", - "null" - ] - }, - "data": {}, - "description": { + "theme": { "type": [ "string", "null" ] + } + }, + "required": [ + "theme" + ], + "type": "object" + }, + "WorkerWorkspaceInfo": { + "properties": { + "fileCount": { + "type": "integer" }, - "id": { - "type": "string" + "maxFileSize": { + "description": "Bytes", + "type": "integer" }, - "locked": { - "type": "boolean" + "paths": { + "properties": { + "outputs": { + "type": "string" + }, + "uploads": { + "type": "string" + } + }, + "required": [ + "uploads", + "outputs" + ], + "type": "object" }, - "name": { + "projectId": { "type": "string" }, - "projectId": { + "scenarioId": { "type": "string" }, - "rowCount": { + "storageLimit": { + "description": "Bytes", "type": "integer" }, - "teamId": { - "type": "string" + "storageUsed": { + "description": "Bytes", + "type": "integer" }, - "updatedAt": { - "description": "ISO-8601 timestamp", + "teamId": { "type": "string" } }, "required": [ - "id", - "name", - "description", - "rowCount", - "locked", - "createdAt", - "updatedAt", - "createdBy", + "scenarioId", + "teamId", "projectId", - "teamId" + "storageUsed", + "storageLimit", + "maxFileSize", + "fileCount", + "paths" ], "type": "object" }, - "SetDetail": { - "allOf": [ - { - "$ref": "#/components/schemas/Set" + "WorkerWorkspaceListing": { + "properties": { + "files": { + "items": { + "properties": { + "downloadUrl": { + "description": "Freshly signed, 1 hour; the stored URL if re-signing failed", + "type": [ + "string", + "null" + ] + }, + "filename": { + "type": "string" + }, + "folder": { + "description": "\"uploads\" or \"outputs\"", + "type": "string" + }, + "id": { + "type": "string" + }, + "key": { + "description": "The S3 key", + "type": "string" + }, + "mimeType": { + "type": [ + "string", + "null" + ] + }, + "size": { + "description": "Bytes", + "type": "integer" + } + }, + "required": [ + "id", + "filename", + "key", + "folder", + "size", + "mimeType", + "downloadUrl" + ], + "type": "object" + }, + "type": "array" + }, + "scenarioId": { + "type": "string" } + }, + "required": [ + "scenarioId", + "files" ], + "type": "object" + }, + "WorkerWorkspaceSyncResult": { "properties": { - "createdByName": { - "type": [ - "string", - "null" - ] + "results": { + "properties": { + "errors": { + "description": "One line per file that could not be synced", + "items": { + "type": "string" + }, + "type": "array" + }, + "synced": { + "type": "integer" + } + }, + "required": [ + "synced", + "errors" + ], + "type": "object" + }, + "success": { + "const": true, + "type": "boolean" } }, "required": [ - "createdByName" - ] + "success", + "results" + ], + "type": "object" }, - "Template": { + "WorkerWorkspaceUploadResult": { "properties": { - "createdAt": { - "description": "ISO-8601 timestamp", - "type": "string" + "file": { + "properties": { + "filename": { + "type": "string" + }, + "id": { + "type": "string" + }, + "key": { + "type": "string" + }, + "size": { + "description": "Bytes", + "type": "integer" + } + }, + "required": [ + "id", + "filename", + "key", + "size" + ], + "type": "object" }, - "createdBy": { - "type": [ - "string", - "null" - ] + "success": { + "const": true, + "type": "boolean" + } + }, + "required": [ + "success", + "file" + ], + "type": "object" + }, + "WorkspaceListing": { + "properties": { + "files": { + "items": { + "$ref": "#/components/schemas/ScenarioFile" + }, + "type": "array" }, - "dbOrderIdx": { + "storageLimit": { + "description": "Bytes", "type": "integer" }, - "fields": {}, - "id": { - "type": "string" - }, - "name": { - "type": "string" - }, - "projectId": { - "type": [ - "string", - "null" - ] - }, - "seed": { - "type": [ - "integer", - "null" - ] + "storageUsed": { + "description": "Bytes", + "type": "integer" + } + }, + "required": [ + "files", + "storageUsed", + "storageLimit" + ], + "type": "object" + }, + "WorkspaceStorage": { + "properties": { + "storageLimit": { + "description": "Bytes", + "type": "integer" }, - "simulationConfig": { - "type": "null" + "storageUsed": { + "description": "Bytes", + "type": "integer" }, - "teamId": { - "type": [ - "string", - "null" - ] + "storageUsedPercent": { + "description": "Rounded percentage", + "type": "integer" + } + }, + "required": [ + "storageUsed", + "storageLimit", + "storageUsedPercent" + ], + "type": "object" + }, + "WorkspaceUploadResult": { + "properties": { + "file": { + "$ref": "#/components/schemas/ScenarioFile" }, - "templateFolderId": { - "type": [ - "string", - "null" - ] + "success": { + "type": "boolean" } }, "required": [ - "id", - "name", - "dbOrderIdx", - "seed", - "createdAt", - "createdBy", - "templateFolderId", - "projectId", - "teamId" + "success", + "file" ], "type": "object" } @@ -1182,7 +6660,38 @@ "description": "Whether the address dataset is configured and available", "operationId": "getAddressAvailability", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AddressAvailability" + } + } + }, + "description": "Whether the address dataset is configured and queryable" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Address" ] @@ -1193,7 +6702,38 @@ "description": "List distinct cities for a country (code or name)", "operationId": "getAddressCities", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StringList" + } + } + }, + "description": "Distinct cities for the country and optional region. Empty array when unavailable" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Address" ] @@ -1204,7 +6744,38 @@ "description": "List distinct countries available in the address dataset", "operationId": "getAddressCountries", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StringList" + } + } + }, + "description": "Distinct countries in the dataset. Empty array when the dataset is unavailable, never an error" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Address" ] @@ -1215,7 +6786,38 @@ "description": "List distinct postcodes for a country (code or name)", "operationId": "getAddressPostcodes", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StringList" + } + } + }, + "description": "Distinct postcodes for the country and optional region. Empty array when unavailable" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Address" ] @@ -1226,7 +6828,38 @@ "description": "List distinct regions for a country (code or name)", "operationId": "getAddressRegions", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/StringList" + } + } + }, + "description": "Distinct regions for the country. Empty array when unavailable" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Address" ] @@ -1237,7 +6870,41 @@ "description": "List pending approval requests for a chat", "operationId": "getAgentApprovals", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/ApprovalDecision" + }, + "type": "array" + } + } + }, + "description": "Pending approval requests for the chat; empty when none" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Approvals" ] @@ -1276,7 +6943,38 @@ } } }, - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApprovalDecision" + } + } + }, + "description": "Whether the write may proceed, or the pending request blocking it" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Approvals" ] @@ -1296,7 +6994,48 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApprovalStatus" + } + } + }, + "description": "The request after denying" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No pending approval with that id" + } + }, "tags": [ "Approvals" ] @@ -1315,8 +7054,49 @@ "type": "string" } } - ], - "responses": {}, + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApprovalStatus" + } + } + }, + "description": "The request after granting" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No pending approval with that id" + } + }, "tags": [ "Approvals" ] @@ -1327,7 +7107,58 @@ "description": "Analyze image and return description", "operationId": "postAnalyze-image", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ImageAnalysisResult" + } + } + }, + "description": "A model-generated description of the image" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No image URL in the body" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The model returned nothing, or the analysis threw" + } + }, "tags": [ "Analyze" ] @@ -1338,7 +7169,58 @@ "description": "Analyze PDF documents by extracting structured key information like dates, titles, invoice numbers, and other business document fields", "operationId": "postAnalyze-pdf", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PdfAnalysisResult" + } + } + }, + "description": "The extracted fields, plus which of the three extraction paths produced them" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No file in the form data" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Every extraction path failed, or the request threw" + } + }, "tags": [ "PDF Analysis" ] @@ -1349,7 +7231,61 @@ "description": "Get API keys filtered by scope", "operationId": "getApiKeys", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/ApiKey" + }, + "type": "array" + } + } + }, + "description": "API keys in the requested scope" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The scope needs a team or project id" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Project not found" + } + }, "tags": [ "API Keys" ] @@ -1358,7 +7294,48 @@ "description": "Create a new API key", "operationId": "postApiKeys", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiKey" + } + } + }, + "description": "The created key, including its secret value" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Invalid payload" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "API Keys" ] @@ -1378,7 +7355,38 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeletedResult" + } + } + }, + "description": "The key was deleted" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Scenario keys cannot be deleted here" + } + }, "tags": [ "API Keys" ] @@ -1395,8 +7403,49 @@ "type": "string" } } - ], - "responses": {}, + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiKey" + } + } + }, + "description": "The updated key" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Invalid payload" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "API Keys" ] @@ -1407,7 +7456,41 @@ "description": "List recent agent audit events for the current team", "operationId": "getAuditEvents", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/AuditEvent" + }, + "type": "array" + } + } + }, + "description": "Recent agent audit events for the team, empty when none" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Audit" ] @@ -1470,7 +7553,38 @@ } } }, - "responses": {}, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AuditEventRef" + } + } + }, + "description": "The recorded event's id" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Audit" ] @@ -1481,7 +7595,38 @@ "description": "Revoke a refresh token and its rotation family.", "operationId": "postAuthLogout", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LogoutResult" + } + } + }, + "description": "The token and its whole rotation family were revoked. Answers ok for an unknown token too" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Auth" ] @@ -1492,7 +7637,48 @@ "description": "Rotate a refresh token for a new access token (+ rotated refresh token).", "operationId": "postAuthRefresh", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SessionTokens" + } + } + }, + "description": "A new access token and a ROTATED refresh token - the submitted one is now spent" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "No refreshToken in the body" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "The token is unknown, expired, or already spent (reuse revokes the whole family)" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Auth" ] @@ -1503,7 +7689,38 @@ "description": "Exchange the current login for a desktop access + refresh token pair (stay-signed-in).", "operationId": "postAuthSession", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SessionTokens" + } + } + }, + "description": "A fresh access + refresh pair for the authenticated caller" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Auth" ] @@ -1523,7 +7740,49 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/octet-stream": { + "schema": { + "format": "binary", + "type": "string" + } + } + }, + "description": "The blob's bytes, served under the stored object's own Content-Type" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No blob key in the path" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No blob under that key, or the deployment is not in filesystem-blob mode" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The blob could not be read from disk" + } + }, "tags": [ "Blob" ] @@ -1534,7 +7793,41 @@ "description": "List assets for a chat", "operationId": "getChat-assets", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/ChatAsset" + }, + "type": "array" + } + } + }, + "description": "Assets for the chat, each with a freshly signed download URL" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Chat Assets" ] @@ -1581,7 +7874,38 @@ } } }, - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ChatAsset" + } + } + }, + "description": "The asset, created or already present" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Chat Assets" ] @@ -1601,7 +7925,38 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeletedResult" + } + } + }, + "description": "The asset was deleted" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Chat Assets" ] @@ -1612,7 +7967,41 @@ "description": "Get all chats for the current user", "operationId": "getChats", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/Chat" + }, + "type": "array" + } + } + }, + "description": "Chats the caller can see in scope" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Chats" ] @@ -1643,7 +8032,48 @@ } } }, - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Chat" + } + } + }, + "description": "The created chat" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not a member of the project's team" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Project not found" + } + }, "tags": [ "Chats" ] @@ -1663,7 +8093,48 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeletedResult" + } + } + }, + "description": "The chat was deleted" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No chat with that id" + } + }, "tags": [ "Chats" ] @@ -1681,7 +8152,48 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Chat" + } + } + }, + "description": "The chat, including its full transcript" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No chat with that id" + } + }, "tags": [ "Chats" ] @@ -1711,10 +8223,51 @@ }, "type": "object" } - } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Chat" + } + } + }, + "description": "The updated chat" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No chat with that id" } }, - "responses": {}, "tags": [ "Chats" ] @@ -1725,7 +8278,38 @@ "description": "Get shared datamaker config", "operationId": "getConfig", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatamakerConfig" + } + } + }, + "description": "Server-owned limits and the AI/agent endpoints a desktop should route through" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Config" ] @@ -1813,7 +8397,61 @@ "description": "Get tables and metadata for a specific connection", "operationId": "getConnectionsTables", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/ConnectionTable" + }, + "type": "array" + } + } + }, + "description": "Every table in the public schema with its columns, row count and inbound foreign keys" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "No connection with that id in the caller's scope" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "The query failed, or the database type is not supported" + } + }, "tags": [ "Tables" ] @@ -1977,7 +8615,41 @@ "description": "Get all custom data types", "operationId": "getCustomDataTypes", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/CustomDataType" + }, + "type": "array" + } + } + }, + "description": "Custom data types in scope" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Custom Data Types" ] @@ -2019,7 +8691,38 @@ } } }, - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomDataType" + } + } + }, + "description": "The created custom data type" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Custom Data Types" ] @@ -2039,7 +8742,38 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeletedResult" + } + } + }, + "description": "The custom data type was deleted" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Custom Data Types" ] @@ -2087,21 +8821,113 @@ ], "type": "object" } - } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CustomDataType" + } + } + }, + "description": "The updated custom data type" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, + "tags": [ + "Custom Data Types" + ] + } + }, + "/datamaker": { + "post": { + "description": "Generate data based on template fields", + "operationId": "postDatamaker", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GeneratedData" + } + } + }, + "description": "The generated rows plus the reference data they were built from" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "No fields in the body, or a quantity outside the configured limit" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "No project with that id in the caller's scope" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "Generation failed" } }, - "responses": {}, - "tags": [ - "Custom Data Types" - ] - } - }, - "/datamaker": { - "post": { - "description": "Generate data based on template fields", - "operationId": "postDatamaker", - "parameters": [], - "responses": {}, "tags": [ "DataMaker" ] @@ -2112,7 +8938,41 @@ "description": "Route to get all endpoint folders", "operationId": "getEndpointFolders", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/EndpointFolder" + }, + "type": "array" + } + } + }, + "description": "Endpoint folders in scope" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Endpoint Folders" ] @@ -2155,7 +9015,48 @@ } } }, - "responses": {}, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EndpointFolder" + } + } + }, + "description": "The created folder" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The folder name is already in use" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Endpoint Folders" ] @@ -2175,7 +9076,38 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EndpointFolder" + } + } + }, + "description": "The deleted folder is returned, not a message" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Endpoint Folders" ] @@ -2193,7 +9125,48 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EndpointFolder" + } + } + }, + "description": "The updated folder" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The folder name is already in use" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Endpoint Folders" ] @@ -2204,7 +9177,41 @@ "description": "Get all endpoints", "operationId": "getEndpoints", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/Endpoint" + }, + "type": "array" + } + } + }, + "description": "Endpoints in scope. Credentials are masked unless the caller used a scenario execution key" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Endpoints" ] @@ -2275,7 +9282,48 @@ } } }, - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Endpoint" + } + } + }, + "description": "The created endpoint, credentials masked" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The referenced integration is not usable" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Endpoints" ] @@ -2305,8 +9353,39 @@ "type": "string" } } - ], - "responses": {}, + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeletedResult" + } + } + }, + "description": "The endpoint was deleted" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Endpoints" ] @@ -2324,7 +9403,48 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Endpoint" + } + } + }, + "description": "The endpoint. Credentials are masked unless the caller used a scenario execution key" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No endpoint with that id in the caller's scope" + } + }, "tags": [ "Endpoints" ] @@ -2404,7 +9524,48 @@ } } }, - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Endpoint" + } + } + }, + "description": "The updated endpoint, credentials masked" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The referenced integration is not usable" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Endpoints" ] @@ -2444,7 +9605,68 @@ } } }, - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PythonExecutionResult" + } + } + }, + "description": "The run. `async=true` answers as soon as the job is queued, carrying only `jobId`, `status` and `message`" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PythonExecutionError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PythonExecutionError" + } + } + }, + "description": "The script or requirements URL is not reachable from this project" + }, + "408": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PythonExecutionError" + } + } + }, + "description": "The run did not finish inside the poll window" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PythonExecutionError" + } + } + }, + "description": "The run failed" + }, + "502": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PythonExecutionError" + } + } + }, + "description": "The local runner is unreachable" + } + }, "tags": [ "Execution" ] @@ -2455,7 +9677,58 @@ "description": "Export to Database", "operationId": "postExportDb", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatabaseExportResult" + } + } + }, + "description": "The driver's query result, returned verbatim" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "The connection is marked read-only, or the caller lacks the permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "No connection with that id in the caller's scope" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "The query failed, or the database type is not supported" + } + }, "tags": [ "Export" ] @@ -2477,7 +9750,41 @@ "description": "Get all feedback", "operationId": "getFeedback", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/Feedback" + }, + "type": "array" + } + } + }, + "description": "All feedback" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Feedback" ] @@ -2516,10 +9823,41 @@ ], "type": "object" } - } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Feedback" + } + } + }, + "description": "The created feedback" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" } }, - "responses": {}, "tags": [ "Feedback" ] @@ -2539,7 +9877,48 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeletedResult" + } + } + }, + "description": "The feedback was deleted" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No feedback with that id" + } + }, "tags": [ "Feedback" ] @@ -2590,7 +9969,48 @@ } } }, - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Feedback" + } + } + }, + "description": "The updated feedback" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No feedback with that id" + } + }, "tags": [ "Feedback" ] @@ -2601,7 +10021,41 @@ "description": "Get all fields", "operationId": "getFields", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/FieldType" + }, + "type": "array" + } + } + }, + "description": "Every generator type with its options and display metadata" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Fields" ] @@ -2612,7 +10066,68 @@ "description": "Analyze a relational database and propose DataMaker templates + prompts", "operationId": "postGenerateDatabase-templates", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DatabaseTemplatesProposal" + } + } + }, + "description": "One proposed template per table, plus the dependency-safe population order" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "No database connection in the body" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "No connection with that id in the caller's scope" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "The database could not be analyzed" + } + }, "tags": [ "DataMaker" ] @@ -2631,19 +10146,121 @@ "type": "string" } } - ], - "responses": {}, - "tags": [ - "OpenAPI" - ] - } - }, - "/generate/sensitive": { - "post": { - "description": "Classify template fields as sensitive (PII) data", - "operationId": "postGenerateSensitive", - "parameters": [], - "responses": {}, + ], + "responses": { + "200": { + "content": { + "text/plain": { + "schema": { + "type": "string" + } + } + }, + "description": "A stream of concatenated JSON template objects, one per operation in the spec" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "A format other than json or yaml, or a body that is not a parseable OpenAPI spec" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "500": { + "content": { + "text/plain": { + "schema": { + "type": "string" + } + } + }, + "description": "Generation threw; the body is the raw error text" + } + }, + "tags": [ + "OpenAPI" + ] + } + }, + "/generate/sensitive": { + "post": { + "description": "Classify template fields as sensitive (PII) data", + "operationId": "postGenerateSensitive", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ClassifiedFields" + } + } + }, + "description": "The submitted fields echoed back with `sensitive` set. A field whose classification failed comes back unchanged rather than failing the batch" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "The body is not an array of fields" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "Classification failed outright" + } + }, "tags": [ "DataMaker" ] @@ -2654,7 +10271,58 @@ "description": "Generate a template from JSON or CSV data.", "operationId": "postGenerateTemplate", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GeneratedTemplateFields" + } + } + }, + "description": "A bare ARRAY of generated fields - not a template object wrapping them" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "The feature is not enabled for this deployment" + }, + "405": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "Method not allowed" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "The template could not be generated" + } + }, "tags": [ "Templates" ] @@ -2688,7 +10356,48 @@ } } }, - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CsrfToken" + } + } + }, + "description": "The token and the session cookie it is bound to - SAP rejects the token without the cookie" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "Fetching the token from the SAP system failed" + } + }, "tags": [ "CSRF" ] @@ -2699,7 +10408,41 @@ "description": "Get all integrations", "operationId": "getIntegrations", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/Integration" + }, + "type": "array" + } + } + }, + "description": "Integrations in scope, credentials masked" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Integrations" ] @@ -2761,7 +10504,38 @@ } } }, - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Integration" + } + } + }, + "description": "The created integration, credentials masked" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Integrations" ] @@ -2796,7 +10570,48 @@ } } }, - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ConnectionVerdict" + } + } + }, + "description": "Probe verdict. Answers 200 with ok:false for a reachable system that rejected the credentials, so callers read `ok`, not the status" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Origin missing or not a valid URL" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Integrations" ] @@ -2815,8 +10630,49 @@ "type": "string" } } - ], - "responses": {}, + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeletedResult" + } + } + }, + "description": "The integration was deleted" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No integration with that id in the caller's scope" + } + }, "tags": [ "Integrations" ] @@ -2834,7 +10690,48 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Integration" + } + } + }, + "description": "The integration, credentials masked" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No integration with that id in the caller's scope" + } + }, "tags": [ "Integrations" ] @@ -2905,7 +10802,48 @@ } } }, - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Integration" + } + } + }, + "description": "The updated integration, credentials masked" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No integration with that id in the caller's scope" + } + }, "tags": [ "Integrations" ] @@ -3489,7 +11427,48 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ToscaOnPremWorkspaces" + } + } + }, + "description": "Workspace names on the connected Tosca On-Prem system" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "502": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The Tosca system could not be reached" + } + }, "tags": [ "Integrations" ] @@ -3705,7 +11684,48 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ToscaWorkspaces" + } + } + }, + "description": "Workspaces, plus the kind of Tosca system they came from" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "502": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The Tosca system could not be reached" + } + }, "tags": [ "Integrations" ] @@ -3725,7 +11745,58 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkerWorkspaceListing" + } + } + }, + "description": "The scenario's workspace files, newest first, with freshly signed download URLs" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No scenario with that id in the caller's scope" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Listing the files failed" + } + }, "tags": [ "Internal Workspace" ] @@ -3744,8 +11815,59 @@ "type": "string" } } - ], - "responses": {}, + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkerWorkspaceInfo" + } + } + }, + "description": "The scenario's workspace quota, usage and worker-side paths" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No scenario with that id in the caller's scope" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Reading the workspace info failed" + } + }, "tags": [ "Internal Workspace" ] @@ -3809,7 +11931,58 @@ } } }, - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkerWorkspaceSyncResult" + } + } + }, + "description": "Metadata synced. PARTIAL FAILURES STILL ANSWER 200 - check `results.errors`" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No scenario with that id in the caller's scope" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The sync failed outright" + } + }, "tags": [ "Internal Workspace" ] @@ -3829,7 +12002,68 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkerWorkspaceUploadResult" + } + } + }, + "description": "The file was stored and recorded against the scenario" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No file in the form data, a folder other than 'outputs', a file over the size cap, or the workspace quota is exhausted" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No scenario with that id in the caller's scope" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The upload to blob storage failed" + } + }, "tags": [ "Internal Workspace" ] @@ -4190,7 +12424,41 @@ "description": "Get all licenses activated for a team (keys are masked)", "operationId": "getLicenses", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/License" + }, + "type": "array" + } + } + }, + "description": "Licenses activated for the team. The key is masked; only `keyMasked` and `keyId` are returned" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Licenses" ] @@ -4223,7 +12491,48 @@ } } }, - "responses": {}, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/License" + } + } + }, + "description": "The activated license, key masked" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The key is invalid, expired, revoked, of the wrong type, or issued for another product" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Licenses" ] @@ -4234,7 +12543,38 @@ "description": "Effective license status for this deployment and (optionally) a team, including seat usage", "operationId": "getLicensesStatus", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LicenseStatus" + } + } + }, + "description": "Effective licensing state for this deployment" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Licenses" ] @@ -4245,7 +12585,41 @@ "description": "Get all scenario execution logs", "operationId": "getLogs", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/ScenarioLog" + }, + "type": "array" + } + } + }, + "description": "Execution logs in scope, log lines normalised" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Scenario Logs" ] @@ -4304,7 +12678,58 @@ } } }, - "responses": {}, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ScenarioLog" + } + } + }, + "description": "The created log entry" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The creating team member could not be resolved" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The log could not be created" + } + }, "tags": [ "Scenario Logs" ] @@ -4315,7 +12740,38 @@ "description": "Delete scenario logs older than specified days (default 90)", "operationId": "deleteLogsCleanup", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LogCleanupResult" + } + } + }, + "description": "How many logs the retention sweep removed, and the cutoff it used" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Scenario Logs" ] @@ -4335,7 +12791,48 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ScenarioLog" + } + } + }, + "description": "The execution log for that BullMQ job" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No scenario log with that identifier" + } + }, "tags": [ "Scenario Logs" ] @@ -4389,7 +12886,48 @@ } } }, - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ScenarioLog" + } + } + }, + "description": "The log with its terminal state applied" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No scenario log for that job" + } + }, "tags": [ "Scenario Logs" ] @@ -4434,7 +12972,58 @@ } } }, - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ScenarioLog" + } + } + }, + "description": "The log with the appended lines" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No scenario log for that job" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The lines could not be appended" + } + }, "tags": [ "Scenario Logs" ] @@ -4454,7 +13043,41 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/ScenarioLog" + }, + "type": "array" + } + } + }, + "description": "Every execution of that scenario" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Scenario Logs" ] @@ -4473,8 +13096,49 @@ "type": "string" } } - ], - "responses": {}, + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeletedResult" + } + } + }, + "description": "The log entry was deleted" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No scenario log with that id" + } + }, "tags": [ "Scenario Logs" ] @@ -4492,7 +13156,48 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ScenarioLog" + } + } + }, + "description": "The execution log" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No scenario log with that identifier" + } + }, "tags": [ "Scenario Logs" ] @@ -4945,7 +13650,48 @@ "description": "Proxy the Hub catalog index (static file on the downloads host). Returns { enabled: false } when HUB_CATALOG_URL is not configured (air-gapped deployments).", "operationId": "getPacksCatalog", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PackCatalog" + } + } + }, + "description": "The catalog index, or `{ enabled: false, packs: [] }` when HUB_CATALOG_URL is unset" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "502": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The catalog host is unreachable or answered non-2xx (that body also carries `enabled: true`)" + } + }, "tags": [ "Packs" ] @@ -4986,7 +13732,78 @@ } } }, - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PackInstallResult" + } + } + }, + "description": "The diff alone on a dry run; the diff plus `created` and `install` when `confirm: true` wrote" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "`confirm: true` was not sent, so nothing was written (that body also carries `diff`)" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The Hub catalog is not configured, or no project with that id in the caller's scope" + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The pack does not carry a valid signature; catalog installs require one" + }, + "502": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The pack could not be fetched from the catalog, or it served an invalid pack" + } + }, "tags": [ "Packs" ] @@ -5104,7 +13921,48 @@ } } }, - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PackExportResult" + } + } + }, + "description": "The portable pack with its checksum, plus one warning per asset that could not be included" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No project with that id in the caller's scope" + } + }, "tags": [ "Packs" ] @@ -5138,10 +13996,71 @@ ], "type": "object" } - } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PackInstallResult" + } + } + }, + "description": "The diff alone on a dry run; the diff plus `created` and `install` when `confirm: true` wrote" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "`confirm: true` was not sent, so nothing was written (that body also carries `diff`)" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No project with that id in the caller's scope" + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not a valid .dmpack file, or the pack claims a signature that fails verification" } }, - "responses": {}, "tags": [ "Packs" ] @@ -5152,7 +14071,41 @@ "description": "List Hub packs installed for the current scope.", "operationId": "getPacksInstalled", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/PackInstallListItem" + }, + "type": "array" + } + } + }, + "description": "Installed packs in scope, newest first" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Packs" ] @@ -5163,7 +14116,38 @@ "description": "Get the catalogue of assignable permission strings", "operationId": "getPermissions", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PermissionCatalogue" + } + } + }, + "description": "Every assignable permission string, flat and grouped by resource" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Roles" ] @@ -5219,7 +14203,41 @@ "description": "Derive a plan's capability-catalog baseline from the project's templates", "operationId": "getPlansCapability-catalog", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/CapabilityCatalogItem" + }, + "type": "array" + } + } + }, + "description": "One candidate per project template, name-ordered. Curation lives on the plan, never here" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Plans" ] @@ -6719,15 +15737,167 @@ } }, "responses": { - "200": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Plan" + } + } + }, + "description": "The updated plan" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No plan with that id in the caller's scope" + } + }, + "tags": [ + "Plans" + ] + } + }, + "/plans/{planId}/check": { + "post": { + "description": "Run a plan's coverage checks and store the graded result as a check run", + "operationId": "postPlansByPlanIdCheck", + "parameters": [ + { + "in": "path", + "name": "planId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PlanRun" + } + } + }, + "description": "The completed check run, graded synchronously - no polling needed" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The plan has no capabilities in scope; derive the catalog and save it to the spec first" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No plan with that id in the caller's scope" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The check engine failed; the run is persisted as failed" + } + }, + "tags": [ + "Plans" + ] + } + }, + "/plans/{planId}/run": { + "post": { + "description": "Execute an entity plan and produce artifacts", + "operationId": "postPlansByPlanIdRun", + "parameters": [ + { + "in": "path", + "name": "planId", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "202": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Plan" + "$ref": "#/components/schemas/PlanRunAccepted" } } }, - "description": "The updated plan" + "description": "The run was created and dispatched; poll GET /plans/:planId/runs/:runId" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The plan is not runnable: a task plan, a mapping plan, a flow plan, one with no entities, or one whose entities have no matching template (that body also carries `entities`, the unresolved names)" }, "401": { "content": { @@ -6765,46 +15935,6 @@ ] } }, - "/plans/{planId}/check": { - "post": { - "description": "Run a plan's coverage checks and store the graded result as a check run", - "operationId": "postPlansByPlanIdCheck", - "parameters": [ - { - "in": "path", - "name": "planId", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": {}, - "tags": [ - "Plans" - ] - } - }, - "/plans/{planId}/run": { - "post": { - "description": "Execute an entity plan and produce artifacts", - "operationId": "postPlansByPlanIdRun", - "parameters": [ - { - "in": "path", - "name": "planId", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": {}, - "tags": [ - "Plans" - ] - } - }, "/plans/{planId}/runs": { "get": { "description": "List a plan's runs", @@ -6819,7 +15949,51 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/PlanRun" + }, + "type": "array" + } + } + }, + "description": "The plan's runs, newest first. `files` is never present here" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No plan with that id in the caller's scope" + } + }, "tags": [ "Plans" ] @@ -6847,7 +16021,48 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PlanRun" + } + } + }, + "description": "The run, including `files` with freshly re-signed download URLs" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No plan with that id in the caller's scope, or no run with that id on the plan" + } + }, "tags": [ "Plans" ] @@ -6904,7 +16119,48 @@ } } }, - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PlanRunAck" + } + } + }, + "description": "The run was finalized and rolled up to the plan" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No plan with that id in the caller's scope, or no run with that id on the plan" + } + }, "tags": [ "Plans" ] @@ -6963,7 +16219,58 @@ } } }, - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PlanRunFileAck" + } + } + }, + "description": "The artifact was stored and recorded against the run" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No plan with that id in the caller's scope, or no run with that id on the plan" + }, + "502": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The artifact could not be uploaded to blob storage" + } + }, "tags": [ "Plans" ] @@ -7015,10 +16322,51 @@ ], "type": "object" } - } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PlanRunAck" + } + } + }, + "description": "The log line was appended" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No plan with that id in the caller's scope, or no run with that id on the plan" } }, - "responses": {}, "tags": [ "Plans" ] @@ -7038,7 +16386,51 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/PlanSignoff" + }, + "type": "array" + } + } + }, + "description": "The plan's sign-offs, newest first" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No plan with that id in the caller's scope" + } + }, "tags": [ "Plans" ] @@ -7078,7 +16470,68 @@ } } }, - "responses": {}, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PlanSignoff" + } + } + }, + "description": "The recorded sign-off. Sign-offs are immutable" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The run is not a check run, or a non-green verdict was signed off without a waiver note" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No plan with that id in the caller's scope, or no run with that id on the plan" + }, + "409": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The check run has not completed, carries no readable results, or is already signed off" + } + }, "tags": [ "Plans" ] @@ -7151,7 +16604,48 @@ } } }, - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Plan" + } + } + }, + "description": "The plan at its new status, with the appended history entry" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No plan with that id in the caller's scope" + } + }, "tags": [ "Plans" ] @@ -7162,7 +16656,78 @@ "description": "Preview external endpoint (proxy for mixed content)", "operationId": "postPreview", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PreviewResult" + } + } + }, + "description": "The upstream response. Note the 200 here means the PROXY succeeded - read `status` for what the endpoint itself answered" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "URL or method missing, a malformed URL, or a malformed JSON body" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "An endpointId was supplied but no endpoint with that id exists" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "The proxy threw" + }, + "502": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "Could not connect to the external endpoint (that body carries `error: \"FETCH_ERROR\"`)" + } + }, "tags": [ "Preview" ] @@ -7497,7 +17062,41 @@ "description": "Get all roles for a team", "operationId": "getRoles", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/Role" + }, + "type": "array" + } + } + }, + "description": "System and custom roles for the team" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Roles" ] @@ -7537,10 +17136,51 @@ ], "type": "object" } - } + } + } + }, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Role" + } + } + }, + "description": "The created custom role" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "A role with that name already exists on the team" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" } }, - "responses": {}, "tags": [ "Roles" ] @@ -7560,7 +17200,38 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeletedResult" + } + } + }, + "description": "The custom role was deleted" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Roles" ] @@ -7607,7 +17278,38 @@ } } }, - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Role" + } + } + }, + "description": "The updated custom role" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Roles" ] @@ -7663,7 +17365,68 @@ } } }, - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ScenarioFileCreated" + } + } + }, + "description": "The stored file, under this endpoint's own field names (`name`, `filePath`)" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The decoded content is over the size cap, or the workspace quota is exhausted" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The authenticated scope does not cover the scenario's team or project" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No scenario with that id" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The upload to blob storage failed" + } + }, "tags": [ "Internal Workspace" ] @@ -7674,7 +17437,41 @@ "description": "Get all scenarios", "operationId": "getScenarios", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/Scenario" + }, + "type": "array" + } + } + }, + "description": "Scenarios in scope, with freshly signed script URLs" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Scenarios" ] @@ -7731,7 +17528,48 @@ } } }, - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Scenario" + } + } + }, + "description": "The created scenario" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The creating team member could not be resolved" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Scenarios" ] @@ -7852,10 +17690,123 @@ ], "type": "object" } - } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Scenario" + } + } + }, + "description": "The scenario created from the chat thread" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No team member for the caller, or the chat has no completed agent turns to package" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No chat with that id in this project" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Generation, upload or persistence failed" + } + }, + "tags": [ + "Scenarios" + ] + } + }, + "/scenarios/jobs": { + "get": { + "description": "List active and recent scenario executions from the queue", + "operationId": "getScenariosJobs", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ScenarioJobs" + } + } + }, + "description": "Queued and running executions, active first" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The job queue could not be read" } }, - "responses": {}, "tags": [ "Scenarios" ] @@ -7875,7 +17826,68 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeletedResult" + } + } + }, + "description": "Cancellation was accepted; `message` describes what happened" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No job id, or the job is not in a cancellable state" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The job is not in the caller's scope" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Cancellation failed" + } + }, "tags": [ "Scenarios" ] @@ -7895,7 +17907,48 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "text/event-stream": { + "schema": { + "type": "string" + } + } + }, + "description": "An SSE stream of `log` events (data: one log line) terminated by a single `end` event" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No job id in the path" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Scenarios" ] @@ -7915,7 +17968,68 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ScenarioJobStatus" + } + } + }, + "description": "The run's current state, output and log lines" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No job id in the path" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No such job on the queue and no ScenarioLog row for it" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Reading the job status failed" + } + }, "tags": [ "Scenarios" ] @@ -7949,10 +18063,61 @@ ], "type": "object" } - } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Scenario" + } + } + }, + "description": "The saved scenario" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The creating team member could not be resolved" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The scenario could not be saved" } }, - "responses": {}, "tags": [ "Scenarios" ] @@ -7972,7 +18137,58 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeletedResult" + } + } + }, + "description": "The scenario and its stored script files were deleted" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No scenario with that id in the caller's scope" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Deleting the scenario or its S3 files failed" + } + }, "tags": [ "Scenarios" ] @@ -7990,7 +18206,48 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Scenario" + } + } + }, + "description": "The scenario, with freshly signed script URLs" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No scenario with that id in the caller's scope" + } + }, "tags": [ "Scenarios" ] @@ -8056,7 +18313,68 @@ } } }, - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Scenario" + } + } + }, + "description": "The updated scenario" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No team member for the caller in the scenario's team" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No scenario with that id in the caller's scope" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The update failed" + } + }, "tags": [ "Scenarios" ] @@ -8076,7 +18394,68 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ScenarioDiagramRegenerateAccepted" + } + } + }, + "description": "Regeneration was queued; poll the scenario for `diagramStatus`" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The scenario has no code to diagram yet" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No scenario with that id in the caller's scope" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Regeneration could not be started" + } + }, "tags": [ "Scenarios" ] @@ -8095,8 +18474,59 @@ "type": "string" } } - ], - "responses": {}, + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ScenarioEnvironmentVariableList" + } + } + }, + "description": "The scenario's environment variables, as an array of key/value pairs" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No scenario with that id in the caller's scope" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Reading the variables failed" + } + }, "tags": [ "Scenarios" ] @@ -8134,7 +18564,58 @@ } } }, - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ScenarioEnvironmentVariables" + } + } + }, + "description": "The merged variable map after the update (a map, not the array the GET returns)" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No scenario with that id in the caller's scope" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The update failed" + } + }, "tags": [ "Scenarios" ] @@ -8174,7 +18655,58 @@ } } }, - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ScenarioEnvironmentVariables" + } + } + }, + "description": "The full variable map after the addition (a map, not the array the GET returns)" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No scenario with that id in the caller's scope" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The variable could not be added" + } + }, "tags": [ "Scenarios" ] @@ -8202,7 +18734,68 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ScenarioEnvironmentVariables" + } + } + }, + "description": "The remaining variable map after the removal (a map, not the array the GET returns)" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No variable key in the path" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No scenario with that id in the caller's scope" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The variable could not be removed" + } + }, "tags": [ "Scenarios" ] @@ -8222,7 +18815,58 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkspaceListing" + } + } + }, + "description": "Workspace files, with the storage quota they count against" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not a member of the scenario's team" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Scenario not found" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The files could not be listed" + } + }, "tags": [ "Workspace Files" ] @@ -8241,8 +18885,69 @@ "type": "string" } } - ], - "responses": {}, + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkspaceUploadResult" + } + } + }, + "description": "The stored file" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No file, an unknown folder, an oversized file, or the workspace quota is exhausted" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not a member of the scenario's team" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Scenario not found" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The upload failed" + } + }, "tags": [ "Workspace Files" ] @@ -8270,7 +18975,58 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResult" + } + } + }, + "description": "The file was deleted" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not a member of the scenario's team" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "File not found" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The delete failed" + } + }, "tags": [ "Workspace Files" ] @@ -8296,7 +19052,58 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ScenarioFile" + } + } + }, + "description": "File metadata with a freshly signed download URL" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not a member of the scenario's team" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "File not found" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The file could not be read" + } + }, "tags": [ "Workspace Files" ] @@ -8316,7 +19123,58 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/WorkspaceStorage" + } + } + }, + "description": "Bytes used, the limit, and the rounded percentage" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not a member of the scenario's team" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Scenario not found" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Storage info could not be read" + } + }, "tags": [ "Workspace Files" ] @@ -8336,7 +19194,68 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SchemaGraphDiffResult" + } + } + }, + "description": "The cached graph compared against live $metadata. The cache is NOT updated" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No endpoint with that id in the caller's scope, or no graph cached for it yet" + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The live document is not parseable as EDMX (that body also carries `metadataUrl`)" + }, + "502": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The $metadata fetch failed (that body also carries `metadataUrl`)" + } + }, "tags": [ "SchemaGraph" ] @@ -8355,16 +19274,57 @@ "type": "string" } }, - { - "in": "path", - "name": "name", - "required": true, - "schema": { - "type": "string" - } + { + "in": "path", + "name": "name", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SchemaGraphEntityContext" + } + } + }, + "description": "The entity plus its incoming and outgoing navigations" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No endpoint with that id in the caller's scope, no graph cached for it, or no such entity in the graph" } - ], - "responses": {}, + }, "tags": [ "SchemaGraph" ] @@ -8392,7 +19352,58 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SchemaGraphConnectResult" + } + } + }, + "description": "The bridge endpoint that was created and the template fields wired to it" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "templateId was not sent" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No endpoint with that id in the caller's scope, no graph cached for it, no such entity in the graph, or no such template in this project" + } + }, "tags": [ "SchemaGraph" ] @@ -8420,7 +19431,58 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SchemaGraphPreviewResult" + } + } + }, + "description": "Real rows with OData bookkeeping keys stripped" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No endpoint with that id in the caller's scope, no graph cached for it, or no such entity in the graph" + }, + "502": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Reading live rows from the entity set failed" + } + }, "tags": [ "SchemaGraph" ] @@ -8448,7 +19510,58 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SchemaGraphSampleResult" + } + } + }, + "description": "Per-field value statistics over the sampled rows, plus the system's value-help sets" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No endpoint with that id in the caller's scope, no graph cached for it, or no such entity in the graph" + }, + "502": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Sampling live rows from the entity set failed" + } + }, "tags": [ "SchemaGraph" ] @@ -8476,7 +19589,58 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SchemaGraphTemplateResult" + } + } + }, + "description": "The created template's identity - fetch GET /templates/:id for the fields themselves" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No endpoint with that id in the caller's scope, no graph cached for it, or no such entity in the graph" + }, + "502": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "`useSamples` was sent and sampling live rows failed" + } + }, "tags": [ "SchemaGraph" ] @@ -8495,8 +19659,59 @@ "type": "string" } } - ], - "responses": {}, + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SchemaGraphPathResult" + } + } + }, + "description": "The hop list. An empty array means `from` and `to` resolved to the same entity" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "?from= or ?to= is missing" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No endpoint with that id in the caller's scope, no graph cached for it, or the two entities are not connected" + } + }, "tags": [ "SchemaGraph" ] @@ -8516,7 +19731,68 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SchemaGraphRefreshResult" + } + } + }, + "description": "The graph was parsed and cached" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No endpoint with that id in the caller's scope" + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The document fetched is not parseable as EDMX (that body also carries `metadataUrl`)" + }, + "502": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The $metadata fetch failed (that body also carries `metadataUrl`)" + } + }, "tags": [ "SchemaGraph" ] @@ -8536,7 +19812,48 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SchemaGraphSearchResult" + } + } + }, + "description": "Up to 10 hits, best first. An empty or missing ?q= returns no results rather than everything" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No endpoint with that id in the caller's scope, or no graph cached for it yet" + } + }, "tags": [ "SchemaGraph" ] @@ -8556,7 +19873,58 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SapServiceCatalog" + } + } + }, + "description": "The Gateway catalog, mapped into DataMaker's shape. The probe counts are present only when ?status= asked for a live reachability probe" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No endpoint with that id in the caller's scope" + }, + "502": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The catalog fetch failed - probably not a SAP Gateway system (that body also carries `catalogUrl`)" + } + }, "tags": [ "SchemaGraph" ] @@ -8949,7 +20317,38 @@ "description": "Create a new team while also creating teamMember and project", "operationId": "postSetupTeams", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TeamSetupResult" + } + } + }, + "description": "The team, the caller's membership and the first project, all created in one transaction" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No user id on the authenticated scope" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Teams" ] @@ -8960,7 +20359,41 @@ "description": "Get all shortcuts", "operationId": "getShortcuts", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/Shortcut" + }, + "type": "array" + } + } + }, + "description": "The caller's shortcut bindings" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Shortcuts" ] @@ -9007,10 +20440,41 @@ ], "type": "object" } - } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Shortcut" + } + } + }, + "description": "The created binding" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" } }, - "responses": {}, "tags": [ "Shortcuts" ] @@ -9030,7 +20494,48 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeletedResult" + } + } + }, + "description": "The binding was deleted" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No shortcut with that id" + } + }, "tags": [ "Shortcuts" ] @@ -9089,7 +20594,38 @@ } } }, - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Shortcut" + } + } + }, + "description": "The updated binding" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Shortcuts" ] @@ -9100,7 +20636,41 @@ "description": "List the team's skills (reusable agent instructions) plus the read-only built-in skills. Skills are team-wide. Query: ?teamId= (required).", "operationId": "getSkills", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/Skill" + }, + "type": "array" + } + } + }, + "description": "Team skills followed by the built-ins. Mixed list - discriminate on `scope`" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Skills" ] @@ -9150,7 +20720,38 @@ } } }, - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TeamSkill" + } + } + }, + "description": "The created skill" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Skills" ] @@ -9192,7 +20793,48 @@ } } }, - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TeamSkill" + } + } + }, + "description": "The skill created from the uploaded SKILL.md" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The file could not be parsed as SKILL.md" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Skills" ] @@ -9212,7 +20854,48 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeletedResult" + } + } + }, + "description": "The skill was deleted" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No skill with that id for this team" + } + }, "tags": [ "Skills" ] @@ -9229,8 +20912,49 @@ "type": "string" } } - ], - "responses": {}, + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TeamSkill" + } + } + }, + "description": "The team skill" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No skill with that id for this team" + } + }, "tags": [ "Skills" ] @@ -9274,7 +20998,48 @@ } } }, - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TeamSkill" + } + } + }, + "description": "The updated skill" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No skill with that id for this team" + } + }, "tags": [ "Skills" ] @@ -9294,7 +21059,48 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "text/markdown": { + "schema": { + "type": "string" + } + } + }, + "description": "The SKILL.md document: YAML frontmatter followed by the markdown body" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No skill with that id in the caller's scope" + } + }, "tags": [ "Skills" ] @@ -9305,7 +21111,41 @@ "description": "Get all team members", "operationId": "getTeamMembers", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/TeamMember" + }, + "type": "array" + } + } + }, + "description": "Memberships in the caller's accessible teams. Each also carries its Team, Shortcuts, User and CustomRoles relations" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Team Members" ] @@ -9347,7 +21187,38 @@ } } }, - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TeamMember" + } + } + }, + "description": "The created membership" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No seat available on the team's plan" + } + }, "tags": [ "Team Members" ] @@ -9389,7 +21260,58 @@ } } }, - "responses": {}, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MemberInviteResult" + } + } + }, + "description": "The created membership, flattened with the invited user's first and last name" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "That user is already a member of the team" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "The team has no seat available under its current license" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiMessageError" + } + } + }, + "description": "No user with that email" + } + }, "tags": [ "Team Members" ] @@ -9409,7 +21331,48 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeletedResult" + } + } + }, + "description": "The membership was removed" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No team member with that id" + } + }, "tags": [ "Team Members" ] @@ -9446,10 +21409,41 @@ ], "type": "object" } - } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TeamMember" + } + } + }, + "description": "The updated membership" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" } }, - "responses": {}, "tags": [ "Team Members" ] @@ -9486,7 +21480,58 @@ } } }, - "responses": {}, + "responses": { + "201": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/MemberRoleAssignment" + } + } + }, + "description": "The role assignment. Idempotent - re-assigning an existing role returns the same row" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "That role is a system role, which is governed by the member's base role instead" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No role with that id on this team" + } + }, "tags": [ "Team Members" ] @@ -9514,7 +21559,38 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeletedResult" + } + } + }, + "description": "The custom role was unassigned" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Team Members" ] @@ -9525,7 +21601,41 @@ "description": "Get all teams", "operationId": "getTeams", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/Team" + }, + "type": "array" + } + } + }, + "description": "Teams the caller belongs to" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Teams" ] @@ -9563,7 +21673,38 @@ } } }, - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Team" + } + } + }, + "description": "The created team" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Teams" ] @@ -9583,7 +21724,38 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeletedResult" + } + } + }, + "description": "The team was deleted" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Teams" ] @@ -9627,21 +21799,86 @@ ], "type": "object" } - } + } + } + }, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Team" + } + } + }, + "description": "The updated team" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, + "tags": [ + "Teams" + ] + } + }, + "/templateFolders": { + "get": { + "description": "Get all template folders", + "operationId": "getTemplateFolders", + "parameters": [], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/TemplateFolder" + }, + "type": "array" + } + } + }, + "description": "Template folders in scope" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" } }, - "responses": {}, - "tags": [ - "Teams" - ] - } - }, - "/templateFolders": { - "get": { - "description": "Get all template folders", - "operationId": "getTemplateFolders", - "parameters": [], - "responses": {}, "tags": [ "Template Folders" ] @@ -9685,7 +21922,38 @@ } } }, - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TemplateFolder" + } + } + }, + "description": "The created folder" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Template Folders" ] @@ -9705,7 +21973,38 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeletedResult" + } + } + }, + "description": "The folder was deleted" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Template Folders" ] @@ -9755,7 +22054,38 @@ } } }, - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/TemplateFolder" + } + } + }, + "description": "The updated folder" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Template Folders" ] @@ -10232,7 +22562,58 @@ "description": "Upload an image, PDF, or JSON file to R2 storage", "operationId": "postUpload", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UploadResult" + } + } + }, + "description": "Where the file landed and a short-lived URL to fetch it" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No file, an unsupported type, an oversized file, or no determinable extension" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The upload failed" + } + }, "tags": [ "Upload" ] @@ -10243,7 +22624,58 @@ "description": "Upload a CSV file to R2 storage and return a presigned URL", "operationId": "postUpload-csv", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UploadResult" + } + } + }, + "description": "The stored key and a presigned download URL" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No file in the form data, a file that is not a CSV, or one over 10MB" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The upload to blob storage failed" + } + }, "tags": [ "Upload" ] @@ -10254,7 +22686,68 @@ "description": "Upload multiple CSV files (e.g. a folder) to R2 with content-hash deduplication. Re-uploading identical content is a no-op.", "operationId": "postUpload-csv-batch", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CsvBatchUploadResult" + } + } + }, + "description": "One entry per file, with `deduped` true where identical content was already stored" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CsvBatchUploadError" + } + } + }, + "description": "Malformed JSON body, no files, or more than 30 files" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CsvBatchUploadError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CsvBatchUploadError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "413": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CsvBatchUploadError" + } + } + }, + "description": "A single file is over 10MB, or the batch is over 50MB in total" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CsvBatchUploadError" + } + } + }, + "description": "R2_BUCKET_NAME is unset, or the upload failed" + } + }, "tags": [ "Upload" ] @@ -10301,7 +22794,58 @@ } } }, - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UploadTextResult" + } + } + }, + "description": "The stored key and a presigned URL, plus the chat asset id when a chatId was given" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "A chatId was supplied but no chat with that id exists" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The upload to blob storage failed" + } + }, "tags": [ "Upload" ] @@ -10312,7 +22856,41 @@ "description": "Get all users", "operationId": "getUsers", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "items": { + "$ref": "#/components/schemas/User" + }, + "type": "array" + } + } + }, + "description": "The caller's own user record. Credential columns are omitted client-wide (#2898)" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Users" ] @@ -10360,7 +22938,38 @@ } } }, - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/User" + } + } + }, + "description": "The created user" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Users" ] @@ -10371,7 +22980,38 @@ "description": "Logout user and clear authentication cookie", "operationId": "postUsersLogout", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeletedResult" + } + } + }, + "description": "The auth cookie was cleared" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Users" ] @@ -10382,7 +23022,38 @@ "description": "Get the current user", "operationId": "getUsersMe", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CurrentUser" + } + } + }, + "description": "The caller's identity from the auth scope, with avatar filled from the token's picture claim" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Users" ] @@ -10393,7 +23064,38 @@ "description": "Get the current user's effective permissions for a team", "operationId": "getUsersMePermissions", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EffectivePermissions" + } + } + }, + "description": "Effective permissions for the requested or default team" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Users" ] @@ -10404,7 +23106,38 @@ "description": "Get the current user's UI preferences", "operationId": "getUsersMePreferences", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UserPreferences" + } + } + }, + "description": "The caller's UI preferences; theme is null when unset" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Users" ] @@ -10413,7 +23146,58 @@ "description": "Update the current user's UI preferences", "operationId": "patchUsersMePreferences", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PreferencesUpdateResult" + } + } + }, + "description": "The stored theme" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PreferencesUpdateError" + } + } + }, + "description": "No theme in the body" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PreferencesUpdateError" + } + } + }, + "description": "No user id on the authenticated scope (this body is a bare `{ ok: false }`)" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PreferencesUpdateError" + } + } + }, + "description": "The caller lacks the required permission" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PreferencesUpdateError" + } + } + }, + "description": "The write failed" + } + }, "tags": [ "Users" ] @@ -10424,7 +23208,48 @@ "description": "Handle user account provisioning", "operationId": "postUsersProvision", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeletedResult" + } + } + }, + "description": "Provisioning outcome as a message; the status carries the meaning" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "No user information on the request" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not a user-scoped API key, or the account was recently deleted" + }, + "500": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Re-provisioning failed" + } + }, "tags": [ "Users" ] @@ -10444,7 +23269,38 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DeletedResult" + } + } + }, + "description": "The user was deleted" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Users" ] @@ -10462,7 +23318,38 @@ } } ], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/User" + } + } + }, + "description": "The updated user" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Users" ] @@ -10519,7 +23406,38 @@ } } }, - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/User" + } + } + }, + "description": "The updated user" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Users" ] @@ -10530,7 +23448,38 @@ "description": "Test API key authentication", "operationId": "getValidateApiKey", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiKeyValidation" + } + } + }, + "description": "The key authenticated. Only `message` is returned - no key details" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "The caller lacks the required permission" + } + }, "tags": [ "Validate" ] @@ -10541,7 +23490,58 @@ "description": "Get a workspace file by its storage key with presigned URL", "operationId": "getWorkspace-filesBy-key", "parameters": [], - "responses": {}, + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ScenarioFile" + } + } + }, + "description": "The file for that storage key, with a freshly signed URL" + }, + "400": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Missing the key query parameter" + }, + "401": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not authenticated" + }, + "403": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "Not a member of the scenario's team" + }, + "404": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiError" + } + } + }, + "description": "File not found" + } + }, "tags": [ "Workspace Files" ] diff --git a/src/generated/schema.ts b/src/generated/schema.ts index 8a5da65..a2a72e4 100644 --- a/src/generated/schema.ts +++ b/src/generated/schema.ts @@ -2066,6 +2066,23 @@ export interface paths { patch?: never; trace?: never; }; + "/scenarios/jobs": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** @description List active and recent scenario executions from the queue */ + get: operations["getScenariosJobs"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; "/scenarios/jobs/{jobId}/cancel": { parameters: { query?: never; @@ -3031,14 +3048,365 @@ export interface paths { export type webhooks = Record; export interface components { schemas: { + AddressAvailability: { + available: boolean; + }; ApiError: { code?: string; details?: string; error: string; }; + ApiKey: { + /** @description ISO-8601 timestamp */ + createdAt: string; + id: string; + /** @description The key value itself - secret */ + key: string; + name: string; + projectId: string | null; + role: ("READ" | "READ_WRITE" | "SCENARIO") | string; + teamId: string | null; + /** @description ISO-8601 timestamp */ + updatedAt: string; + userId: string | null; + }; + ApiKeyValidation: { + message: string; + }; + ApiMessageError: { + error?: string; + message: string; + }; + ApprovalDecision: { + created?: boolean; + /** @enum {string} */ + decision: "allow" | "pending"; + id: string; + }; + ApprovalStatus: { + id: string; + status: string; + }; + AuditEvent: { + /** @enum {string} */ + category: "READ" | "WRITE" | "DESTRUCTIVE" | "EXEC"; + /** @description Correlation only; no FK, so audit survives chat deletion */ + chatId: string | null; + /** @description ISO-8601 timestamp */ + createdAt: string; + /** @enum {string} */ + decision: "AUTO" | "ALLOWED" | "DENIED" | "APPROVED"; + durationMs: number | null; + error: string | null; + /** @description ISO-8601 timestamp */ + finishedAt: string | null; + id: string; + /** @description Masked shape and hash of the arguments; never raw values */ + inputDigest?: null; + /** @description Resolved server-side from the verified JWT */ + principal: string | null; + projectId: string | null; + sdkSessionId: string | null; + /** @description ISO-8601 timestamp */ + startedAt: string; + /** @enum {string} */ + status: "ok" | "error"; + targetKind: string | null; + targetRef: string | null; + teamId: string | null; + tool: string; + trackingId: string | null; + }; + AuditEventRef: { + id: string; + }; + BuiltinSkill: { + appliedCount: number; + by: string; + description: string; + enabled: boolean; + /** @description Prefixed "builtin:" */ + id: string; + name: string; + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + scope: "builtin"; + slug: string; + }; + CapabilityCatalogItem: { + /** @description The template folder's name, if any */ + group?: string; + /** @constant */ + hidden: false; + /** @description The template id */ + key: string; + name: string; + note: string; + /** @constant */ + source: "derived"; + template: string; + templateId: string; + }; + Chat: { + /** @description ISO-8601 timestamp */ + createdAt: string; + createdBy: string | null; + id: string; + /** @description The transcript; JSON column */ + messages?: unknown; + projectId: string | null; + title: string; + /** @description ISO-8601 timestamp */ + updatedAt: string; + }; + ChatAsset: { + chatId: string; + /** @description ISO-8601 timestamp */ + createdAt: string; + filename: string; + id: string; + mimeType: string | null; + /** @description Short-lived download URL */ + presignedUrl: string | null; + s3Key: string; + size: number | null; + /** @description Who produced it, e.g. "agent" */ + source: string; + /** @description ISO-8601 timestamp */ + updatedAt: string; + }; + ClassifiedFields: ({ + name?: string; + /** @description Absent when this field's classification call failed */ + sensitive?: boolean; + } & { + [key: string]: unknown; + })[]; + ConnectionTable: { + columns: { + column_name: string; + data_type: string; + }[]; + /** @description Foreign keys pointing AT this table */ + dependencies: { + dependent_column: string; + dependent_table: string; + referenced_column: string; + }[]; + /** @description One element; the row count is at `rows[0].total_count` */ + rows: { + total_count?: unknown; + }[]; + table_name: string; + }; + ConnectionVerdict: { + message: string; + ok: boolean; + /** @description Upstream HTTP status, when one was received */ + status?: number; + }; + CsrfToken: { + /** @description The full Cookie header value; absent when none was set */ + cookie?: string; + cookie_name: string; + cookie_value: string; + csrf_token: string; + }; + CsvBatchUploadError: { + error: string; + /** @constant */ + ok: false; + }; + CsvBatchUploadResult: { + files: { + deduped: boolean; + /** @description The storage key */ + key: string; + /** @description Sanitised filename, path stripped */ + name: string; + /** @description Presigned download URL, valid 7 days */ + url: string; + }[]; + /** @description As sent by the caller; null when none was given */ + folderName: string | null; + /** @description The storage prefix the files landed under */ + folderPrefix: string; + /** @constant */ + ok: true; + }; + CurrentUser: { + avatar?: string | null; + email?: string; + id?: string; + name?: string; + picture?: string | null; + } & { + [key: string]: unknown; + }; + CustomDataType: { + createdBy: string; + /** @description Field configuration; JSON column */ + fieldConfig?: unknown; + id: string; + name: string; + projectId: string; + teamId: string; + }; + DatabaseExportResult: { + /** @description e.g. "INSERT", "SELECT" */ + command: string; + fields: { + columnID: number; + /** @description Postgres type OID */ + dataTypeID: number; + dataTypeModifier: number; + dataTypeSize: number; + format: string; + name: string; + tableID: number; + }[]; + oid: number | null; + rowCount: number | null; + rows: unknown[]; + }; + DatabaseTemplatesProposal: { + /** @description Per-table prompts for refining the proposal with the model */ + ai_prompts: { + [key: string]: unknown; + }[]; + /** @description Table names in dependency order; null if a cycle was found */ + data_generation_order: string[] | null; + templates: { + createdBy?: string; + /** @description Position in `data_generation_order`, or -1 */ + dbOrderIdx: number; + fields: unknown[]; + /** @description The table name */ + name: string; + projectId?: string; + teamId?: string; + templateFolderId: string; + }[]; + }; + DatamakerConfig: { + /** @description "" when the server calls providers directly */ + aiGatewayUrl: string; + /** @description An EMPTY array means no restriction, not none allowed */ + allowedModels: string[]; + /** @description So a desktop build can detect a major mismatch */ + apiContractVersion: string; + /** @description "" when none is configured */ + defaultModel: string; + /** @description "" to use the /opencode convention */ + opencodeUrl: string; + /** @description Max rows per generation call */ + quantityLimit: number; + }; DeletedResult: { message: string; }; + EffectivePermissions: { + permissions: string[]; + /** @description Base team role, null if not a member */ + role: string | null; + teamId: string | null; + }; + Endpoint: { + /** @description Masked for ordinary callers */ + auth?: null; + /** @description ISO-8601 timestamp */ + createdAt: string; + createdBy: string | null; + endpointFolderId: string | null; + /** @description Masked for ordinary callers */ + headers?: null; + id: string; + /** @enum {string} */ + method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE"; + name: string; + projectId: string | null; + queryParams?: null; + teamId: string | null; + url: string; + }; + EndpointFolder: { + /** @description ISO-8601 timestamp */ + createdAt: string; + createdBy: string | null; + id: string; + name: string; + projectId: string; + teamId: string; + }; + Feedback: { + comment: string; + /** @description ISO-8601 timestamp */ + createdAt: string; + createdBy: string | null; + /** @description FeedbackFeelings enum value */ + feeling: string; + id: string; + }; + FieldType: { + /** @description Display metadata for the field picker */ + meta: { + [key: string]: unknown; + }; + /** @description Option keys differ per type */ + options: { + [key: string]: unknown; + }; + /** @description The generator name */ + type: string; + }; + GeneratedData: { + /** @description Resolved reference data used while generating */ + dependencies: { + [key: string]: unknown; + }; + /** @description Generated values, keyed by field name */ + live_data: { + [key: string]: unknown; + }; + }; + GeneratedTemplateField: { + active?: boolean; + function?: string; + name: string; + nested?: components["schemas"]["GeneratedTemplateField"][]; + optional?: unknown; + /** @description Generator-specific settings */ + options?: unknown; + textCase?: string; + /** @description A DataMaker generator type */ + type: string; + }; + GeneratedTemplateFields: components["schemas"]["GeneratedTemplateField"][]; + ImageAnalysisResult: { + /** @description Model-generated description of the image */ + description: string; + /** @constant */ + success: true; + }; + Integration: { + auth?: null; + /** @description ISO-8601 timestamp */ + createdAt: string; + createdBy: string | null; + endpointFolderId: string | null; + headers?: null; + id: string; + /** @description e.g. "sap", "tosca-cloud", "tosca-onprem", "jira" */ + kind: string; + name: string; + /** @description Base URL of the external system */ + origin: string; + projectId: string | null; + scope: string | null; + teamId: string | null; + }; KeyMapDeleteResult: { /** @description Entries removed */ deleted: number; @@ -3083,6 +3451,52 @@ export interface components { /** @description Rows inserted or updated */ upserted: number; }; + License: { + /** @description The verified claims, as captured at activation */ + captured?: null; + /** @description ISO-8601 timestamp */ + expiresAt: string | null; + id: string; + /** @description ISO-8601 timestamp */ + issuedAt: string; + issuer: string; + keyId: string | null; + /** @description Masked rendering; never the usable key */ + keyMasked: string; + offline: boolean; + /** @description ISO-8601 timestamp */ + revokedAt: string | null; + seats: number | null; + /** @description Derived: active, expired, revoked or superseded */ + status: string; + supersededById: string | null; + teamId: string | null; + /** @description "server" or "desktop" */ + type: string; + }; + LicenseStatus: { + code: string | null; + graceDays: number | null; + /** @description ISO-8601 timestamp */ + graceEndsAt: string | null; + issuer: string | null; + message: string | null; + /** @description "ok" or a degraded mode */ + mode: string; + readOnlyReason: string | null; + /** @description Whether this deployment demands a license at all */ + required: boolean; + }; + LogCleanupResult: { + /** @description ISO-8601 timestamp; logs older than this were removed */ + cutoffDate: string; + deletedCount: number; + message: string; + }; + LogoutResult: { + /** @constant */ + ok: true; + }; MaskingPolicy: { consistent: boolean; /** @description ISO-8601 timestamp */ @@ -3099,6 +3513,350 @@ export interface components { /** @description ISO-8601 timestamp */ updatedAt: string; }; + MemberInviteResult: { + newMember: { + firstName: string | null; + lastName: string | null; + } & components["schemas"]["TeamMember"]; + /** @constant */ + success: true; + }; + MemberRoleAssignment: { + /** @description ISO-8601 timestamp */ + createdAt: string; + id: string; + roleId: string; + teamMemberId: string; + }; + PackCatalog: { + enabled: boolean; + packs?: unknown[]; + } & { + [key: string]: unknown; + }; + PackCreatedCounts: { + datatypes: number; + plans: number; + scenarios: number; + skills: number; + templates: number; + }; + PackExportResult: { + pack: { + assets: { + /** @default [] */ + datatypes: { + fieldConfig?: unknown; + name: string; + }[]; + /** @default [] */ + plans: { + spec: { + approval?: { + reason: string; + role: string; + }; + capabilities?: { + expectedCount?: number; + expectedSumCents?: number; + group?: string; + /** @default false */ + hidden: boolean; + key: string; + name: string; + /** @default */ + note: string; + setId?: string; + /** + * @default derived + * @enum {string} + */ + source: "derived" | "manual"; + sumField?: string; + template?: string; + templateId?: string; + }[]; + /** @default [] */ + constraints: string[]; + coverage?: { + count: number; + family: string; + items: string[]; + }[]; + coverageConfig?: { + /** @default 14 */ + freshnessDays: number; + /** + * @default release + * @enum {string} + */ + mode: "release" | "migration"; + sourceSystem?: string; + /** @default 0 */ + sumToleranceCents: number; + targetSystem?: string; + }; + /** @default [] */ + entities: { + endpointId?: string; + key: string; + name: string; + /** @default */ + note: string; + template: string; + templateId?: string; + volume: number; + }[]; + /** @default [] */ + expectations: string[]; + flow?: { + loop?: string | null; + phase: string; + steps: { + fields?: string[]; + from: string; + iface: string; + kind: string; + msg: string; + reachable?: boolean; + scaffold?: { + entity: string; + fields: string[]; + ops: string[]; + }; + /** @enum {string} */ + status: "mapped" | "likely" | "custom" | "unknown"; + to: string; + why?: string; + }[]; + }[]; + /** @default [] */ + gaps: { + action?: string; + iface?: string; + /** @default */ + note: string; + scaffold?: { + entity: string; + fields: string[]; + ops: string[]; + }; + title: string; + /** @enum {string} */ + type: "connect" | "custom" | "input" | "blocker" | "gap" | "stale"; + }[]; + /** @default [] */ + integrations: { + /** @enum {string} */ + access: "read" | "write"; + /** @default */ + detail: string; + system: string; + via: string; + }[]; + /** @enum {string} */ + kind?: "entity" | "flow" | "task" | "mapping"; + /** @default [] */ + lanes: string[]; + lifecycle?: { + mode: string; + refresh: string; + replenish: string; + }; + mappingConfig?: { + keyMapName?: string; + maskingPolicyId?: string; + maskingPolicyName?: string; + sourceObject?: string; + sourceSystem?: string; + targetObject?: string; + targetSystem?: string; + }; + mappings?: { + /** @default false */ + generate: boolean; + keyMapName?: string; + maskingPolicyId?: string; + /** @default */ + note: string; + sourceField?: string; + /** + * @default open + * @enum {string} + */ + status: "mapped" | "open" | "needs-review"; + targetField: string; + /** @default */ + transform: string; + }[]; + /** @default [] */ + steps: string[]; + tasks?: { + note?: string; + phase: string; + tasks: { + /** @default [] */ + deps: string[]; + /** @default */ + detail: string; + key?: string; + /** @enum {string} */ + priority?: "P0" | "P1" | "P2" | "P3"; + title: string; + }[]; + }[]; + version?: { + by: string; + n: number; + when: string; + }; + }; + summary?: string; + title: string; + }[]; + /** @default [] */ + scenarios: { + description?: string; + files: { + content: string; + name: string; + }[]; + name: string; + /** @default [] */ + params: { + default?: string; + description?: string; + name: string; + }[]; + }[]; + /** @default [] */ + skills: { + body: string; + description: string; + name: string; + slug: string; + }[]; + /** @default [] */ + templates: { + fields?: unknown; + name: string; + seed?: number; + simulationConfig?: unknown; + }[]; + }; + checksum?: string; + /** @constant */ + format: "dmpack@1"; + manifest: { + createdAt?: string; + description: string; + license?: string; + name: string; + publisher: string; + /** @default [] */ + requires: { + /** @constant */ + kind: "integration"; + note?: string; + type: string; + }[]; + version: string; + }; + publicKeyId?: string; + signature?: string; + }; + warnings: string[]; + }; + PackImportDiff: { + containsScenarios: boolean; + entries: { + /** @enum {string} */ + action: "create" | "skip"; + /** @description Only on skips: the existing asset's content differs */ + conflict?: boolean; + /** @description Template/plan/datatype/scenario name, or skill slug */ + key: string; + /** @enum {string} */ + kind: "template" | "skill" | "plan" | "datatype" | "scenario"; + }[]; + missingRequirements: { + /** @constant */ + kind: "integration"; + note?: string; + type: string; + }[]; + pack: { + name: string; + version: string; + }; + /** @enum {string} */ + signature: "valid" | "invalid" | "unsigned"; + }; + PackInstall: { + created: components["schemas"]["PackCreatedCounts"]; + /** @description ISO-8601 timestamp */ + createdAt: string; + id: string; + /** @description A TeamMembers id */ + installedBy: string | null; + manifest: { + createdAt?: string; + description: string; + license?: string; + name: string; + publisher: string; + /** @default [] */ + requires: { + /** @constant */ + kind: "integration"; + note?: string; + type: string; + }[]; + version: string; + }; + /** @description `publisher/slug` */ + name: string; + projectId: string | null; + /** @description "valid" or "unsigned" at install time */ + signature: string; + /** @enum {string} */ + source: "catalog" | "file"; + teamId: string | null; + version: string; + }; + PackInstallListItem: { + installedByName: string | null; + } & components["schemas"]["PackInstall"]; + PackInstallResult: { + /** @description Absent on a dry run */ + created?: components["schemas"]["PackCreatedCounts"]; + diff: components["schemas"]["PackImportDiff"]; + /** @description Absent on a dry run */ + install?: components["schemas"]["PackInstall"]; + }; + PdfAnalysisResult: { + /** @description Model-extracted fields; no key is guaranteed */ + documentInfo: { + [key: string]: unknown; + }; + /** @description Presigned URL for the uploaded file */ + downloadUrl: string; + /** + * @description Which extraction path produced `documentInfo` + * @enum {string} + */ + method: "text_extraction" | "image_analysis"; + /** @constant */ + success: true; + /** @description Characters extracted; absent on the image path */ + textLength?: number; + }; + PermissionCatalogue: { + all: string[]; + grouped: { + [key: string]: string[]; + }; + }; Plan: { /** @description ISO-8601 timestamp */ createdAt: string; @@ -3292,38 +4050,683 @@ export interface components { PlanDeleteResult: { success: boolean; }; - Project: { - avatar: string | null; - /** @description ISO-8601 timestamp */ - createdAt: string; - createdBy: string; - description: string | null; - id: string; - name: string; - teamId: string; - }; - Set: { + PlanRun: { /** @description ISO-8601 timestamp */ - createdAt: string; - createdBy: string | null; - data?: unknown; - description: string | null; + completedAt: string | null; + error: string | null; + /** @description Only on GET /plans/:planId/runs/:runId */ + files?: components["schemas"]["PlanRunFile"][]; id: string; - locked: boolean; - name: string; - projectId: string; - rowCount: number; - teamId: string; - /** @description ISO-8601 timestamp */ - updatedAt: string; - }; - SetDetail: { - createdByName: string | null; - } & components["schemas"]["Set"]; - Template: { - /** @description ISO-8601 timestamp */ - createdAt: string; - createdBy: string | null; + logs: unknown[]; + /** @description generate | release | migration */ + mode: string; + planId: string; + /** @description The graded check result; null on generate runs */ + results: { + config: { + /** @default 14 */ + freshnessDays: number; + /** + * @default release + * @enum {string} + */ + mode: "release" | "migration"; + sourceSystem?: string; + /** @default 0 */ + sumToleranceCents: number; + targetSystem?: string; + }; + /** @default [] */ + gaps: { + action?: string; + iface?: string; + /** @default */ + note: string; + scaffold?: { + entity: string; + fields: string[]; + ops: string[]; + }; + title: string; + /** @enum {string} */ + type: "connect" | "custom" | "input" | "blocker" | "gap" | "stale"; + }[]; + /** @default [] */ + items: { + /** @default [] */ + checks: { + /** @default */ + detail: string; + id: string; + label: string; + /** @enum {string} */ + status: "pass" | "warn" | "fail" | "skip"; + }[]; + group?: string; + key: string; + name: string; + /** @enum {string} */ + status: "ready" | "partial" | "missing" | "reconciled" | "discrepancy"; + }[]; + /** @enum {string} */ + mode: "release" | "migration"; + summary: { + failing: number; + partial: number; + passing: number; + scorePct: number; + total: number; + }; + /** @enum {string} */ + verdict: "ready" | "partial" | "blocked" | "reconciled" | "discrepancy"; + } | null; + rows: number; + /** @description "manual", "agent" or "mcp" */ + source: string; + /** @description ISO-8601 timestamp */ + startedAt: string; + /** @description queued | running | completed | failed */ + status: string; + verdict: string | null; + }; + PlanRunAccepted: { + runId: string; + /** @constant */ + status: "running"; + }; + PlanRunAck: { + /** @constant */ + ok: true; + }; + PlanRunFile: { + entity: string; + filename: string; + id: string; + mimeType: string | null; + presignedUrl: string | null; + size: number; + }; + PlanRunFileAck: { + file: { + entity: string; + filename: string; + id: string; + /** @description The S3 key */ + key: string; + mimeType: string | null; + size: number; + }; + /** @constant */ + ok: true; + }; + PlanSignoff: { + /** @description ISO-8601 timestamp */ + createdAt: string; + id: string; + note: string | null; + planId: string; + planRunId: string; + /** @description Immutable snapshot: run results + the definition of done */ + report?: unknown; + /** @description sha256 hex of the canonical report JSON */ + reportHash: string; + /** @description Display name, stamped server-side */ + signedBy: string; + /** @description The covered run's verdict at sign-off time */ + verdict: string; + }; + PreferencesUpdateError: { + /** @description Absent on the 401 */ + error?: string; + /** @constant */ + ok: false; + }; + PreferencesUpdateResult: { + /** @constant */ + ok: true; + theme: string; + }; + PreviewResult: { + /** @description Parsed JSON when `isJson`, raw text otherwise */ + data?: unknown; + /** @description The upstream RESPONSE headers, lowercased */ + headers: { + [key: string]: string; + }; + isJson: boolean; + /** @description Milliseconds */ + responseTime: number; + /** @description The upstream HTTP status */ + status: number; + statusText: string; + }; + Project: { + avatar: string | null; + /** @description ISO-8601 timestamp */ + createdAt: string; + createdBy: string; + description: string | null; + id: string; + name: string; + teamId: string; + }; + PythonExecutionError: { + error: string; + executionTime?: number; + jobId?: string; + logs?: unknown[]; + result?: unknown; + status?: string; + /** @constant */ + success: false; + }; + PythonExecutionResult: { + /** @description Milliseconds */ + executionTime?: number; + jobId: string; + logs?: unknown[]; + /** @description Only on the async path, where the job was merely queued */ + message?: string; + /** @description The worker's return value; absent on the async path */ + result?: unknown; + /** @description "completed" on the sync paths; the queue state otherwise */ + status: string; + /** @constant */ + success: true; + }; + Role: { + /** @description TeamRole this role derives from, for system roles */ + baseRole: string | null; + /** @description ISO-8601 timestamp */ + createdAt: string; + description: string | null; + id: string; + isSystem: boolean; + name: string; + teamId: string; + /** @description ISO-8601 timestamp */ + updatedAt: string; + }; + SapServiceCatalog: { + activeCount?: number; + inactiveCount?: number; + probed: boolean; + probedCount?: number; + services: { + description: string; + id: string; + isActive?: boolean; + metadataUrl: string; + serviceUrl: string; + version?: string; + }[]; + /** @enum {string} */ + status?: "active" | "inactive"; + /** @description The count AFTER filtering and ?limit= */ + total: number; + /** @description The system has more services than one call will probe */ + truncated?: boolean; + }; + Scenario: { + /** @description ISO-8601 timestamp */ + createdAt: string; + createdBy: string | null; + description: string | null; + diagram: string | null; + diagramBusiness: string | null; + diagramError: string | null; + diagramSourceHash: string | null; + diagramStatus: string; + /** @description ISO-8601 timestamp */ + diagramUpdatedAt: string | null; + /** @description Name/value map; JSON column */ + environmentVariables?: unknown; + id: string; + name: string; + /** @description Short-lived S3 URL for the script */ + presignedUrl: string | null; + projectId: string; + /** @description Short-lived S3 URL for requirements.txt */ + requirementsUrl: string | null; + storageUsed: number; + teamId: string; + timeoutSeconds: number; + /** @description ISO-8601 timestamp */ + updatedAt: string; + }; + ScenarioDiagramRegenerateAccepted: { + /** @constant */ + status: "pending"; + }; + ScenarioEnvironmentVariableList: { + environmentVariables: { + key: string; + value: string; + }[]; + }; + ScenarioEnvironmentVariables: { + environmentVariables: { + [key: string]: string; + }; + }; + ScenarioFile: { + /** @description ISO-8601 timestamp */ + createdAt: string; + createdBy: string | null; + filename: string; + /** @enum {string} */ + folder: "uploads" | "outputs"; + id: string; + /** @description Storage key; unique */ + key: string; + mimeType: string | null; + /** @description Short-lived download URL */ + presignedUrl: string | null; + scenarioId: string; + /** @description Bytes */ + size: number; + /** @description ISO-8601 timestamp */ + updatedAt: string; + }; + ScenarioFileCreated: { + /** @description ISO-8601 timestamp */ + createdAt: string; + /** @description The stored `key` */ + filePath: string; + /** @description "uploads" or "outputs" */ + folder: string; + id: string; + mimeType: string | null; + /** @description The stored `filename` */ + name: string; + /** @description Bytes */ + size: number; + /** @description ISO-8601 timestamp */ + updatedAt: string; + }; + ScenarioJob: { + /** @description Epoch milliseconds */ + createdAt: number | null; + /** @description Epoch milliseconds */ + finishedAt: number | null; + jobId: string | null; + /** @description Epoch milliseconds */ + processedAt: number | null; + projectId: string | null; + scenarioId: string | null; + scenarioName: string | null; + /** @description e.g. "active", "waiting", "completed", "failed", "cancelled" */ + state: string; + teamId: string | null; + }; + ScenarioJobStatus: { + error: string | null; + logs: { + count: number; + logs: string[]; + }; + output: string | null; + /** @description BullMQ's job progress; always 0 on the local-run fallback */ + progress: number | string | boolean | { + [key: string]: unknown; + }; + /** @description Normalised: "active", "completed" or "failed" (see above) */ + state: string; + }; + ScenarioJobs: { + jobs: components["schemas"]["ScenarioJob"][]; + }; + ScenarioLog: { + /** @description ISO-8601 timestamp */ + completedAt: string | null; + createdBy: string; + error: string | null; + id: string; + /** @description BullMQ job id; unique */ + jobId: string; + /** @description Normalised log lines */ + logs: unknown[]; + output: string | null; + scenarioId: string; + /** @description How the run was started, e.g. "manual" */ + source: string; + /** @description ISO-8601 timestamp */ + startedAt: string; + /** @description "queued", "running", "completed" or "failed" */ + status: string; + }; + SchemaGraphChange: { + entity: components["schemas"]["SchemaGraphEntity"]; + /** @constant */ + kind: "entity"; + /** @enum {string} */ + status: "added" | "removed"; + } | { + creatable?: { + cached: boolean; + live: boolean; + }; + entitySet?: { + cached?: string; + live?: string; + }; + keys?: { + cached: string[]; + live: string[]; + }; + /** @constant */ + kind: "entity"; + label?: { + cached: string; + live: string; + }; + name: string; + properties: ({ + /** @constant */ + kind: "property"; + property: components["schemas"]["SchemaGraphProperty"]; + /** @enum {string} */ + status: "added" | "removed"; + } | { + changes: { + creatable?: { + cached: boolean; + live: boolean; + }; + label?: { + cached?: string; + live?: string; + }; + maxLength?: { + cached?: number; + live?: number; + }; + nullable?: { + cached: boolean; + live: boolean; + }; + type?: { + cached: string; + live: string; + }; + updatable?: { + cached: boolean; + live: boolean; + }; + }; + /** @constant */ + kind: "property"; + name: string; + /** @constant */ + status: "modified"; + })[]; + /** @constant */ + status: "modified"; + updatable?: { + cached: boolean; + live: boolean; + }; + } | { + /** @constant */ + kind: "navigation"; + navigation: components["schemas"]["SchemaGraphNavigation"]; + /** @enum {string} */ + status: "added" | "removed"; + } | { + changes: { + cardinality?: { + cached: string; + live: string; + }; + to?: { + cached: string; + live: string; + }; + }; + from: string; + /** @constant */ + kind: "navigation"; + name: string; + /** @constant */ + status: "modified"; + }; + SchemaGraphConnectResult: { + /** @description The NEW bridge endpoint that was created */ + endpointId: string; + endpointName: string; + entity: string; + fieldsUpgraded: number; + templateId: string; + /** @description Names of the upgraded fields */ + upgraded: string[]; + }; + SchemaGraphDiffResult: { + /** @description ISO-8601 timestamp: when the cached graph was last refreshed */ + cachedRefreshedAt: string; + changes: components["schemas"]["SchemaGraphChange"][]; + drifted: boolean; + endpointId: string; + metadataUrl: string; + namespace: { + cached: string; + live: string; + }; + odataVersion: { + cached: string; + live: string; + }; + summary: { + entitiesAdded: number; + entitiesModified: number; + entitiesRemoved: number; + navigationsAdded: number; + navigationsChanged: number; + navigationsRemoved: number; + propertiesAdded: number; + propertiesChanged: number; + propertiesRemoved: number; + }; + }; + SchemaGraphEntity: { + creatable: boolean; + /** @description Only when the type is bound */ + entitySet?: string; + keys: string[]; + /** @constant */ + kind: "entity"; + /** @description sap:label, falling back to the name */ + label: string; + /** @description EntityType name, e.g. "SalesOrder" */ + name: string; + properties: components["schemas"]["SchemaGraphProperty"][]; + updatable: boolean; + }; + SchemaGraphEntityContext: { + entity: components["schemas"]["SchemaGraphEntity"]; + navigatedFrom: { + cardinality: string; + from: string; + name: string; + }[]; + navigatesTo: { + cardinality: string; + name: string; + to: string; + }[]; + }; + SchemaGraphMinedField: { + /** @description Occurrence count per value, same order as `values` */ + counts: number[]; + distinct: number; + /** @description Few distinct values AND repeats observed: treat as a SAP code-list */ + enumLike: boolean; + name: string; + /** @description Non-empty values seen for this field */ + sampled: number; + /** @description Capped, most frequent first */ + values: string[]; + }; + SchemaGraphNavigation: { + /** @description "1", "0..1" or "*" */ + cardinality: string; + from: string; + /** @constant */ + kind: "navigation"; + /** @description NavigationProperty name on the source */ + name: string; + to: string; + }; + SchemaGraphPathResult: { + path: { + from: string; + to: string; + via: string; + }[]; + }; + SchemaGraphPreviewResult: { + count: number; + entity: string; + entitySet: string; + /** @description Business fields only; OData bookkeeping keys are stripped */ + rows: { + [key: string]: unknown; + }[]; + }; + SchemaGraphProperty: { + creatable: boolean; + /** @description From sap:label when present */ + label?: string; + maxLength?: number; + name: string; + nullable: boolean; + /** @description EDM type, e.g. "Edm.String" */ + type: string; + updatable: boolean; + }; + SchemaGraphRefreshResult: { + entities: number; + metadataUrl: string; + namespace: string; + navigations: number; + /** @description "2.0" or "4.0" */ + odataVersion: string; + /** @description The EDMX hash moved since the last refresh; false on a first refresh */ + schemaChanged: boolean; + }; + SchemaGraphSampleResult: { + entity: string; + fields: components["schemas"]["SchemaGraphMinedField"][]; + rowsSampled: number; + /** @description Entity sets that look like value-help / code-list sets */ + valueHelpSets: string[]; + }; + SchemaGraphSearchResult: { + results: { + entitySet?: string; + label: string; + name: string; + score: number; + }[]; + }; + SchemaGraphTemplateResult: { + entity: string; + fieldCount: number; + id: string; + /** @description Fields turned into Custom generators from sampled values; empty unless `useSamples` was sent */ + minedFields: string[]; + name: string; + }; + SessionTokens: { + /** @description Short-lived JWT - secret */ + accessToken: string; + /** @description Access token lifetime, in seconds */ + expiresIn: number; + /** @description ISO-8601 timestamp the refresh token expires at */ + refreshExpiresAt: string; + /** @description Rotated on every use - secret */ + refreshToken: string; + }; + Set: { + /** @description ISO-8601 timestamp */ + createdAt: string; + createdBy: string | null; + data?: unknown; + description: string | null; + id: string; + locked: boolean; + name: string; + projectId: string; + rowCount: number; + teamId: string; + /** @description ISO-8601 timestamp */ + updatedAt: string; + }; + SetDetail: { + createdByName: string | null; + } & components["schemas"]["Set"]; + Shortcut: { + /** @description ShortcutsContext enum value */ + context: string; + /** @description ISO-8601 timestamp */ + createdAt: string; + /** @description The action the binding triggers */ + function: string; + id: string; + keys: string[]; + /** @description ISO-8601 timestamp */ + updatedAt: string; + userId: string | null; + }; + Skill: components["schemas"]["TeamSkill"] | components["schemas"]["BuiltinSkill"]; + StringList: string[]; + SuccessResult: { + success: boolean; + }; + Team: { + avatar: string | null; + /** @description ISO-8601 timestamp */ + createdAt: string; + id: string; + name: string; + /** @description ISO-8601 timestamp */ + updatedAt: string; + }; + TeamMember: { + id: string; + /** @description TeamRole enum value, e.g. OWNER / ADMIN / MEMBER */ + role: string; + teamId: string; + userId: string; + }; + TeamSetupResult: { + project: components["schemas"]["Project"]; + team: components["schemas"]["Team"]; + teamMember: components["schemas"]["TeamMember"]; + }; + TeamSkill: { + appliedCount: number; + /** @description The SKILL.md body */ + body: string; + /** @description ISO-8601 timestamp */ + createdAt: string; + createdBy: string | null; + description: string; + enabled: boolean; + id: string; + name: string; + /** + * @description discriminator enum property added by openapi-typescript + * @enum {string} + */ + scope: "team"; + slug: string; + /** @description ISO-8601 timestamp */ + updatedAt: string; + }; + Template: { + /** @description ISO-8601 timestamp */ + createdAt: string; + createdBy: string | null; dbOrderIdx: number; fields?: unknown; id: string; @@ -3334,6 +4737,128 @@ export interface components { teamId: string | null; templateFolderId: string | null; }; + TemplateFolder: { + /** @description ISO-8601 timestamp */ + createdAt: string; + createdBy: string | null; + id: string; + isDatabase: boolean; + name: string; + projectId: string | null; + teamId: string | null; + }; + ToscaOnPremWorkspaces: { + workspaces: string[]; + }; + ToscaWorkspaces: { + /** @enum {string} */ + kind: "tosca-onprem" | "tosca-cloud"; + workspaces: string[]; + }; + UploadResult: { + /** @description Short-lived download URL */ + downloadUrl: string; + /** @description The storage key, not the original filename */ + fileName: string; + success: boolean; + }; + UploadTextResult: { + /** @description Only when a chatId was supplied and the asset was recorded */ + chatAssetId?: string; + /** @description The storage key, not the original filename */ + fileName: string; + /** @constant */ + success: true; + /** @description Presigned download URL */ + url: string; + }; + User: { + autoSave: boolean | null; + avatar: string | null; + /** @description ISO-8601 timestamp */ + createdAt: string; + creationPurpose: string; + email: string; + firstName: string; + id: string; + /** @description ISO-8601 timestamp */ + lastLogin: string; + lastName: string; + }; + UserPreferences: { + theme: string | null; + }; + WorkerWorkspaceInfo: { + fileCount: number; + /** @description Bytes */ + maxFileSize: number; + paths: { + outputs: string; + uploads: string; + }; + projectId: string; + scenarioId: string; + /** @description Bytes */ + storageLimit: number; + /** @description Bytes */ + storageUsed: number; + teamId: string; + }; + WorkerWorkspaceListing: { + files: { + /** @description Freshly signed, 1 hour; the stored URL if re-signing failed */ + downloadUrl: string | null; + filename: string; + /** @description "uploads" or "outputs" */ + folder: string; + id: string; + /** @description The S3 key */ + key: string; + mimeType: string | null; + /** @description Bytes */ + size: number; + }[]; + scenarioId: string; + }; + WorkerWorkspaceSyncResult: { + results: { + /** @description One line per file that could not be synced */ + errors: string[]; + synced: number; + }; + /** @constant */ + success: true; + }; + WorkerWorkspaceUploadResult: { + file: { + filename: string; + id: string; + key: string; + /** @description Bytes */ + size: number; + }; + /** @constant */ + success: true; + }; + WorkspaceListing: { + files: components["schemas"]["ScenarioFile"][]; + /** @description Bytes */ + storageLimit: number; + /** @description Bytes */ + storageUsed: number; + }; + WorkspaceStorage: { + /** @description Bytes */ + storageLimit: number; + /** @description Bytes */ + storageUsed: number; + /** @description Rounded percentage */ + storageUsedPercent: number; + }; + WorkspaceUploadResult: { + file: components["schemas"]["ScenarioFile"]; + success: boolean; + }; }; responses: never; parameters: never; @@ -3351,17 +4876,73 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; - }; - getAddressCities: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; + responses: { + /** @description Whether the address dataset is configured and queryable */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["AddressAvailability"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + getAddressCities: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; requestBody?: never; - responses: never; + responses: { + /** @description Distinct cities for the country and optional region. Empty array when unavailable */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["StringList"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; }; getAddressCountries: { parameters: { @@ -3371,7 +4952,35 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; + responses: { + /** @description Distinct countries in the dataset. Empty array when the dataset is unavailable, never an error */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["StringList"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; }; getAddressPostcodes: { parameters: { @@ -3381,7 +4990,35 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; + responses: { + /** @description Distinct postcodes for the country and optional region. Empty array when unavailable */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["StringList"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; }; getAddressRegions: { parameters: { @@ -3391,7 +5028,35 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; + responses: { + /** @description Distinct regions for the country. Empty array when unavailable */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["StringList"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; }; getAgentApprovals: { parameters: { @@ -3401,7 +5066,35 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; + responses: { + /** @description Pending approval requests for the chat; empty when none */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApprovalDecision"][]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; }; postAgentApprovals: { parameters: { @@ -3421,7 +5114,35 @@ export interface operations { }; }; }; - responses: never; + responses: { + /** @description Whether the write may proceed, or the pending request blocking it */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApprovalDecision"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; }; postAgentApprovalsByIdDeny: { parameters: { @@ -3433,7 +5154,44 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; + responses: { + /** @description The request after denying */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApprovalStatus"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No pending approval with that id */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; }; postAgentApprovalsByIdGrant: { parameters: { @@ -3445,27 +5203,156 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; - }; - "postAnalyze-image": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - "postAnalyze-pdf": { - parameters: { - query?: never; - header?: never; - path?: never; + responses: { + /** @description The request after granting */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApprovalStatus"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No pending approval with that id */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + "postAnalyze-image": { + parameters: { + query?: never; + header?: never; + path?: never; cookie?: never; }; requestBody?: never; - responses: never; + responses: { + /** @description A model-generated description of the image */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ImageAnalysisResult"]; + }; + }; + /** @description No image URL in the body */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The model returned nothing, or the analysis threw */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + "postAnalyze-pdf": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description The extracted fields, plus which of the three extraction paths produced them */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PdfAnalysisResult"]; + }; + }; + /** @description No file in the form data */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Every extraction path failed, or the request threw */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; }; getApiKeys: { parameters: { @@ -3475,7 +5362,53 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; + responses: { + /** @description API keys in the requested scope */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiKey"][]; + }; + }; + /** @description The scope needs a team or project id */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Project not found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; }; postApiKeys: { parameters: { @@ -3485,7 +5418,44 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; + responses: { + /** @description The created key, including its secret value */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiKey"]; + }; + }; + /** @description Invalid payload */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; }; putApiKeysById: { parameters: { @@ -3497,7 +5467,44 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; + responses: { + /** @description The updated key */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiKey"]; + }; + }; + /** @description Invalid payload */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; }; deleteApiKeysById: { parameters: { @@ -3509,9 +5516,37 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; - }; - getAuditEvents: { + responses: { + /** @description The key was deleted */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["DeletedResult"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Scenario keys cannot be deleted here */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + getAuditEvents: { parameters: { query?: never; header?: never; @@ -3519,7 +5554,35 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; + responses: { + /** @description Recent agent audit events for the team, empty when none */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["AuditEvent"][]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; }; postAuditEvents: { parameters: { @@ -3548,367 +5611,5912 @@ export interface operations { }; }; }; - responses: never; - }; - postAuthLogout: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: never; + responses: { + /** @description The recorded event's id */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["AuditEventRef"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + postAuthLogout: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description The token and its whole rotation family were revoked. Answers ok for an unknown token too */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["LogoutResult"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + }; + }; + postAuthRefresh: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description A new access token and a ROTATED refresh token - the submitted one is now spent */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["SessionTokens"]; + }; + }; + /** @description No refreshToken in the body */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + /** @description The token is unknown, expired, or already spent (reuse revokes the whole family) */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + }; + }; + postAuthSession: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description A fresh access + refresh pair for the authenticated caller */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["SessionTokens"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + }; + }; + getBlobByKey: { + parameters: { + query?: never; + header?: never; + path: { + key: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description The blob's bytes, served under the stored object's own Content-Type */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/octet-stream": string; + }; + }; + /** @description No blob key in the path */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No blob under that key, or the deployment is not in filesystem-blob mode */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The blob could not be read from disk */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + "getChat-assets": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Assets for the chat, each with a freshly signed download URL */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ChatAsset"][]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + "postChat-assets": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + chatId: string; + filename: string; + mimeType?: string; + s3Key: string; + size?: number; + /** @enum {string} */ + source?: "agent" | "upload"; + }; + }; + }; + responses: { + /** @description The asset, created or already present */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ChatAsset"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + "deleteChat-assetsById": { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description The asset was deleted */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["DeletedResult"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + getChats: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Chats the caller can see in scope */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Chat"][]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + postChats: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + id: string; + messages?: unknown; + /** @default New Chat */ + title?: string; + }; + }; + }; + responses: { + /** @description The created chat */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Chat"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not a member of the project's team */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Project not found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + getChatsById: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description The chat, including its full transcript */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Chat"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No chat with that id */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + putChatsById: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + messages?: unknown; + title?: string; + }; + }; + }; + responses: { + /** @description The updated chat */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Chat"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No chat with that id */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + deleteChatsById: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description The chat was deleted */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["DeletedResult"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No chat with that id */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + getConfig: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Server-owned limits and the AI/agent endpoints a desktop should route through */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["DatamakerConfig"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + getConnections: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: never; + }; + postConnections: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + connectionString: string; + createdBy: string; + endpointFolderId?: string | null; + id?: string; + name: string; + projectId: string; + readOnly?: boolean; + teamId: string; + /** @enum {string} */ + type: "db2" | "postgresql" | "mysql" | "mssql" | "mongodb" | "oracle"; + }; + }; + }; + responses: never; + }; + getConnectionsTables: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Every table in the public schema with its columns, row count and inbound foreign keys */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ConnectionTable"][]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + /** @description No connection with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + /** @description The query failed, or the database type is not supported */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + }; + }; + postConnectionsTest: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + connectionString: string; + /** @enum {string} */ + type: "db2" | "postgresql" | "mysql" | "mssql" | "mongodb" | "oracle"; + }; + }; + }; + responses: never; + }; + getConnectionsById: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: never; + }; + putConnectionsById: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + connectionString: string; + createdBy: string; + endpointFolderId?: string | null; + id?: string; + name: string; + projectId: string; + readOnly?: boolean; + teamId: string; + /** @enum {string} */ + type: "db2" | "postgresql" | "mysql" | "mssql" | "mongodb" | "oracle"; + }; + }; + }; + responses: never; + }; + deleteConnectionsById: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: never; + }; + getCustomDataTypes: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Custom data types in scope */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["CustomDataType"][]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + postCustomDataTypes: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + createdBy: string; + fieldConfig?: unknown; + id?: string; + name: string; + projectId: string; + teamId: string; + }; + }; + }; + responses: { + /** @description The created custom data type */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["CustomDataType"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + putCustomDataTypesById: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + createdBy: string; + fieldConfig?: unknown; + id?: string; + name: string; + projectId: string; + teamId: string; + }; + }; + }; + responses: { + /** @description The updated custom data type */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["CustomDataType"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + deleteCustomDataTypesById: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description The custom data type was deleted */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["DeletedResult"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + postDatamaker: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description The generated rows plus the reference data they were built from */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["GeneratedData"]; + }; + }; + /** @description No fields in the body, or a quantity outside the configured limit */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + /** @description No project with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + /** @description Generation failed */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + }; + }; + getEndpointFolders: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Endpoint folders in scope */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["EndpointFolder"][]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + postEndpointFolders: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + createdAt?: string; + createdBy?: string; + id?: string; + name: string; + projectId: string; + teamId: string; + }; + }; + }; + responses: { + /** @description The created folder */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["EndpointFolder"]; + }; + }; + /** @description The folder name is already in use */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + putEndpointFoldersById: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description The updated folder */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["EndpointFolder"]; + }; + }; + /** @description The folder name is already in use */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + deleteEndpointFoldersById: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description The deleted folder is returned, not a message */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["EndpointFolder"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + getEndpoints: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Endpoints in scope. Credentials are masked unless the caller used a scenario execution key */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Endpoint"][]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + postEndpoints: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + createdBy: string; + endpointFolderId?: string | null; + headers?: unknown; + id?: string; + integrationId?: string | null; + meta?: unknown; + /** @enum {string} */ + method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE"; + name: string; + projectId: string; + queryParams?: unknown; + teamId: string; + url: string; + }; + }; + }; + responses: { + /** @description The created endpoint, credentials masked */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Endpoint"]; + }; + }; + /** @description The referenced integration is not usable */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + "postEndpointsAuth-resolve": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: never; + }; + getEndpointsById: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description The endpoint. Credentials are masked unless the caller used a scenario execution key */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Endpoint"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No endpoint with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + putEndpointsById: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + createdBy: string; + endpointFolderId?: string | null; + headers?: unknown; + id?: string; + integrationId?: string | null; + meta?: unknown; + /** @enum {string} */ + method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE"; + name: string; + projectId: string; + queryParams?: unknown; + teamId: string; + url: string; + }; + }; + }; + responses: { + /** @description The updated endpoint, credentials masked */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Endpoint"]; + }; + }; + /** @description The referenced integration is not usable */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + deleteEndpointsById: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description The endpoint was deleted */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["DeletedResult"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + "postExecute-python": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + /** @default false */ + async?: boolean; + projectId?: string; + /** Format: uri */ + requirementsUrl?: string; + /** Format: uri */ + url: string; + }; + }; + }; + responses: { + /** @description The run. `async=true` answers as soon as the job is queued, carrying only `jobId`, `status` and `message` */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PythonExecutionResult"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PythonExecutionError"]; + }; + }; + /** @description The script or requirements URL is not reachable from this project */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PythonExecutionError"]; + }; + }; + /** @description The run did not finish inside the poll window */ + 408: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PythonExecutionError"]; + }; + }; + /** @description The run failed */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PythonExecutionError"]; + }; + }; + /** @description The local runner is unreachable */ + 502: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PythonExecutionError"]; + }; + }; + }; + }; + postExportDb: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description The driver's query result, returned verbatim */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["DatabaseExportResult"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + /** @description The connection is marked read-only, or the caller lacks the permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + /** @description No connection with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + /** @description The query failed, or the database type is not supported */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + }; + }; + postExportRest: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: never; + }; + getFeedback: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description All feedback */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Feedback"][]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + postFeedback: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + comment?: string; + createdBy: string; + /** @enum {string} */ + feeling: "EXCITED" | "HAPPY" | "SAD" | "HATE"; + id?: string; + }; + }; + }; + responses: { + /** @description The created feedback */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Feedback"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + putFeedbackById: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + comment?: string; + createdBy: string; + /** @enum {string} */ + feeling: "EXCITED" | "HAPPY" | "SAD" | "HATE"; + id?: string; + }; + }; + }; + responses: { + /** @description The updated feedback */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Feedback"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No feedback with that id */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + deleteFeedbackById: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description The feedback was deleted */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["DeletedResult"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No feedback with that id */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + getFields: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Every generator type with its options and display metadata */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["FieldType"][]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + "postGenerateDatabase-templates": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description One proposed template per table, plus the dependency-safe population order */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["DatabaseTemplatesProposal"]; + }; + }; + /** @description No database connection in the body */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + /** @description No connection with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + /** @description The database could not be analyzed */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + }; + }; + postGenerateOpenapiByFormat: { + parameters: { + query?: never; + header?: never; + path: { + format: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description A stream of concatenated JSON template objects, one per operation in the spec */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": string; + }; + }; + /** @description A format other than json or yaml, or a body that is not a parseable OpenAPI spec */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Generation threw; the body is the raw error text */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "text/plain": string; + }; + }; + }; + }; + postGenerateSensitive: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description The submitted fields echoed back with `sensitive` set. A field whose classification failed comes back unchanged rather than failing the batch */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ClassifiedFields"]; + }; + }; + /** @description The body is not an array of fields */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + /** @description Classification failed outright */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + }; + }; + postGenerateTemplate: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description A bare ARRAY of generated fields - not a template object wrapping them */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["GeneratedTemplateFields"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + /** @description The feature is not enabled for this deployment */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + /** @description Method not allowed */ + 405: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + /** @description The template could not be generated */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + }; + }; + postGetcsrftoken: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + authorization?: unknown; + endpointId?: string; + /** Format: uri */ + sapUrl: string; + }; + }; + }; + responses: { + /** @description The token and the session cookie it is bound to - SAP rejects the token without the cookie */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["CsrfToken"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + /** @description Fetching the token from the SAP system failed */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + }; + }; + getIntegrations: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Integrations in scope, credentials masked */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Integration"][]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + postIntegrations: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + auth?: unknown; + createdBy: string; + endpointFolderId?: string | null; + headers?: unknown; + id?: string; + kind?: string; + name: string; + origin: string; + projectId: string; + scope?: string | null; + teamId: string; + }; + }; + }; + responses: { + /** @description The created integration, credentials masked */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Integration"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + postIntegrationsTest: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + auth?: unknown; + id?: string; + kind?: string; + origin: string; + }; + }; + }; + responses: { + /** @description Probe verdict. Answers 200 with ok:false for a reachable system that rejected the credentials, so callers read `ok`, not the status */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ConnectionVerdict"]; + }; + }; + /** @description Origin missing or not a valid URL */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + getIntegrationsById: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description The integration, credentials masked */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Integration"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No integration with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + putIntegrationsById: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + auth?: unknown; + createdBy: string; + endpointFolderId?: string | null; + headers?: unknown; + id?: string; + kind?: string; + name: string; + origin: string; + projectId: string; + scope?: string | null; + teamId: string; + }; + }; + }; + responses: { + /** @description The updated integration, credentials masked */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Integration"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No integration with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + deleteIntegrationsById: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description The integration was deleted */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["DeletedResult"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No integration with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + postIntegrationsByIdEndpoints: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + entitySet?: string; + name?: string; + service: string; + }; + }; + }; + responses: never; + }; + getIntegrationsByIdJiraCreatemeta: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: never; + }; + postIntegrationsByIdJiraIssues: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + description?: string; + issueType: string; + labels?: string[]; + priority?: string; + projectKey: string; + summary: string; + }; + }; + }; + responses: never; + }; + getIntegrationsByIdJiraIssuesByIssueKey: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + issueKey: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: never; + }; + postIntegrationsByIdJiraIssuesByIssueKeyComment: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + issueKey: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + text: string; + }; + }; + }; + responses: never; + }; + getIntegrationsByIdJiraIssuesByIssueKeyTransitions: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + issueKey: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: never; + }; + postIntegrationsByIdJiraIssuesByIssueKeyTransitions: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + issueKey: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + transitionId: string; + }; + }; + }; + responses: never; + }; + getIntegrationsByIdJiraProjects: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: never; + }; + getIntegrationsByIdJiraSearch: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: never; + }; + getIntegrationsByIdServices: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: never; + }; + "postIntegrationsByIdToscaOnpremCheckin-all": { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + comment?: string; + workspace: string; + }; + }; + }; + responses: never; + }; + "postIntegrationsByIdToscaOnpremExecution-entries": { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + comment?: string; + executionListId: string; + testCaseId: string; + workspace: string; + }; + }; + }; + responses: never; + }; + postIntegrationsByIdToscaOnpremObjects: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + attributes?: { + Name: string; + Value: string; + }[]; + comment?: string; + objType: string; + parentId: string; + workspace: string; + }; + }; + }; + responses: never; + }; + getIntegrationsByIdToscaOnpremObjectsByObjectId: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + objectId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: never; + }; + postIntegrationsByIdToscaOnpremQuery: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + from?: string; + tql: string; + workspace: string; + }; + }; + }; + responses: never; + }; + getIntegrationsByIdToscaOnpremWorkspaces: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Workspace names on the connected Tosca On-Prem system */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ToscaOnPremWorkspaces"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The Tosca system could not be reached */ + 502: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + "getIntegrationsByIdToscaPlaylist-runsByPlaylistRunIdTestcase-runs": { + parameters: { + query?: never; + header?: never; + path: { + id: string; + playlistRunId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: never; + }; + getIntegrationsByIdToscaPlaylists: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: never; + }; + getIntegrationsByIdToscaPlaylistsByPlaylistIdRuns: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + playlistId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: never; + }; + "getIntegrationsByIdToscaTestcase-runsByTestCaseRunIdSteps": { + parameters: { + query?: never; + header?: never; + path: { + id: string; + testCaseRunId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: never; + }; + getIntegrationsByIdToscaTestcases: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: never; + }; + postIntegrationsByIdToscaTestcases: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + design: { + [key: string]: unknown; + }; + name: string; + space?: string; + }; + }; + }; + responses: never; + }; + getIntegrationsByIdToscaTestcasesByTestCaseId: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + testCaseId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: never; + }; + getIntegrationsByIdToscaWorkspaces: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Workspaces, plus the kind of Tosca system they came from */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ToscaWorkspaces"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The Tosca system could not be reached */ + 502: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + getInternalWorkspaceByScenarioIdFiles: { + parameters: { + query?: never; + header?: never; + path: { + scenarioId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description The scenario's workspace files, newest first, with freshly signed download URLs */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["WorkerWorkspaceListing"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No scenario with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Listing the files failed */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + getInternalWorkspaceByScenarioIdInfo: { + parameters: { + query?: never; + header?: never; + path: { + scenarioId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description The scenario's workspace quota, usage and worker-side paths */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["WorkerWorkspaceInfo"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No scenario with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Reading the workspace info failed */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + postInternalWorkspaceByScenarioIdSync: { + parameters: { + query?: never; + header?: never; + path: { + scenarioId: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + files: { + /** @enum {string} */ + action: "created" | "updated" | "deleted"; + filename: string; + mimeType?: string; + size: number; + }[]; + }; + }; + }; + responses: { + /** @description Metadata synced. PARTIAL FAILURES STILL ANSWER 200 - check `results.errors` */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["WorkerWorkspaceSyncResult"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No scenario with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The sync failed outright */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + postInternalWorkspaceByScenarioIdUpload: { + parameters: { + query?: never; + header?: never; + path: { + scenarioId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description The file was stored and recorded against the scenario */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["WorkerWorkspaceUploadResult"]; + }; + }; + /** @description No file in the form data, a folder other than 'outputs', a file over the size cap, or the workspace quota is exhausted */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No scenario with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The upload to blob storage failed */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + getKeymaps: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description One row per (mapName, object), ordered by both */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["KeyMapSummary"][]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + postKeymapsEntries: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + /** @description Old-to-new key pairs to upsert */ + entries: { + /** @description The key minted in the target system */ + newKey: string; + /** @description The key in the source system */ + oldKey: string; + }[]; + /** @description Logical map name grouping entries, e.g. 'sap-material-migration' */ + mapName: string; + /** @description The domain object type, e.g. 'Material' or 'BusinessPartner' */ + object: string; + /** @description The project this map belongs to (falls back to the key/session scope) */ + projectId?: string; + /** @description Optional run/source metadata: the scenario run or job that minted the keys */ + runId?: string; + }; + }; + }; + responses: { + /** @description How many rows were inserted or updated */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["KeyMapUpsertResult"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The entries could not be upserted */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + postKeymapsLookup: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + /** @description The map to look up in */ + mapName: string; + /** @description The domain object type */ + object: string; + /** @description Source-system keys to translate */ + oldKeys: string[]; + /** @description The project the map belongs to (falls back to the key/session scope) */ + projectId?: string; + }; + }; + }; + responses: { + /** @description Resolved mappings, plus the keys with no mapping yet */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["KeyMapLookupResult"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + deleteKeymapsByMapName: { + parameters: { + query?: never; + header?: never; + path: { + mapName: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description The map was dropped, with the number of entries removed */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["KeyMapDeleteResult"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The key map could not be deleted */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + getKeymapsByMapNameEntries: { + parameters: { + query?: never; + header?: never; + path: { + mapName: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description One page of entries, with the total for the filter */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["KeyMapEntriesPage"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + getLicenses: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Licenses activated for the team. The key is masked; only `keyMasked` and `keyId` are returned */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["License"][]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + postLicensesActivate: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + key: string; + teamId: string; + }; + }; + }; + responses: { + /** @description The activated license, key masked */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["License"]; + }; + }; + /** @description The key is invalid, expired, revoked, of the wrong type, or issued for another product */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + getLicensesStatus: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Effective licensing state for this deployment */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["LicenseStatus"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + getLogs: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Execution logs in scope, log lines normalised */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ScenarioLog"][]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + postLogs: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + /** @description Error message if failed */ + error?: string; + /** @description The BullMQ job ID */ + jobId: string; + /** + * @description Log entries + * @default [] + */ + logs?: string[]; + /** @description Final execution output */ + output?: string; + /** @description The scenario ID being executed */ + scenarioId: string; + /** + * @description Current status of the scenario run + * @enum {string} + */ + status: "queued" | "running" | "completed" | "failed"; + }; + }; + }; + responses: { + /** @description The created log entry */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ScenarioLog"]; + }; + }; + /** @description The creating team member could not be resolved */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The log could not be created */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + deleteLogsCleanup: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description How many logs the retention sweep removed, and the cutoff it used */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["LogCleanupResult"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + getLogsJobByJobId: { + parameters: { + query?: never; + header?: never; + path: { + jobId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description The execution log for that BullMQ job */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ScenarioLog"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No scenario log with that identifier */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + patchLogsJobByJobId: { + parameters: { + query?: never; + header?: never; + path: { + jobId: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + /** @description ISO timestamp the run finished */ + completedAt?: string | null; + /** @description Error message, if failed */ + error?: string | null; + /** @description Final run output */ + output?: string | null; + /** @description Terminal status (completed/failed) */ + status?: string; + }; + }; + }; + responses: { + /** @description The log with its terminal state applied */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ScenarioLog"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No scenario log for that job */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + patchLogsJobByJobIdAppend: { + parameters: { + query?: never; + header?: never; + path: { + jobId: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + /** @description New log entries to append */ + logs: string[]; + /** @description Updated status */ + status?: string; + }; + }; + }; + responses: { + /** @description The log with the appended lines */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ScenarioLog"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No scenario log for that job */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The lines could not be appended */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + getLogsScenarioByScenarioId: { + parameters: { + query?: never; + header?: never; + path: { + scenarioId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Every execution of that scenario */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ScenarioLog"][]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + getLogsById: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description The execution log */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ScenarioLog"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No scenario log with that identifier */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + deleteLogsById: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description The log entry was deleted */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["DeletedResult"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No scenario log with that id */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + "getMasking-policies": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Policies in scope */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MaskingPolicy"][]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + "postMasking-policies": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + /** @description Default: same source value masks to the same output */ + consistent?: boolean; + /** @description Short description of the policy (e.g. GDPR profile) */ + description?: string; + /** @description Per-field strategy rows: field matcher + strategy + overrides */ + fields?: { + consistent?: boolean; + detectedAs?: string; + field: string; + note?: string; + reversible?: boolean; + /** @enum {string} */ + strategy: "faker-replace" | "hash" | "tokenize" | "redact" | "preserve-format"; + }[]; + /** @description Key map name (#2787) scoping consistency to one run's key space */ + keyMapName?: string; + name: string; + /** @description The project ID this policy belongs to */ + projectId?: string; + /** @description Default: masked values can be translated back (tokenization) */ + reversible?: boolean; + }; + }; + }; + responses: { + /** @description The created policy */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MaskingPolicy"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The policy could not be created */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + "getMasking-policiesById": { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description The policy */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MaskingPolicy"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No policy with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + "deleteMasking-policiesById": { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description The policy was deleted */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["DeletedResult"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No policy with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The policy could not be deleted */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + "patchMasking-policiesById": { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + consistent?: boolean; + description?: string | null; + fields?: { + consistent?: boolean; + detectedAs?: string; + field: string; + note?: string; + reversible?: boolean; + /** @enum {string} */ + strategy: "faker-replace" | "hash" | "tokenize" | "redact" | "preserve-format"; + }[]; + keyMapName?: string | null; + name?: string; + reversible?: boolean; + }; + }; + }; + responses: { + /** @description The updated policy */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MaskingPolicy"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No policy with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The policy could not be updated */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + getPacksCatalog: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description The catalog index, or `{ enabled: false, packs: [] }` when HUB_CATALOG_URL is unset */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PackCatalog"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The catalog host is unreachable or answered non-2xx (that body also carries `enabled: true`) */ + 502: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + postPacksCatalogInstall: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + /** @default false */ + confirm?: boolean; + /** @default false */ + dryRun?: boolean; + name: string; + projectId: string; + }; + }; + }; + responses: { + /** @description The diff alone on a dry run; the diff plus `created` and `install` when `confirm: true` wrote */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PackInstallResult"]; + }; + }; + /** @description `confirm: true` was not sent, so nothing was written (that body also carries `diff`) */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The Hub catalog is not configured, or no project with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The pack does not carry a valid signature; catalog installs require one */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The pack could not be fetched from the catalog, or it served an invalid pack */ + 502: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + postPacksExport: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + /** @default [] */ + datatypeIds?: string[]; + manifest: { + description: string; + license?: string; + name: string; + publisher: string; + /** @default [] */ + requires?: { + /** @constant */ + kind: "integration"; + note?: string; + type: string; + }[]; + version: string; + }; + /** @default [] */ + planIds?: string[]; + projectId: string; + /** @default [] */ + scenarioIds?: string[]; + /** @default [] */ + skillIds?: string[]; + /** @default [] */ + templateIds?: string[]; + }; + }; + }; + responses: { + /** @description The portable pack with its checksum, plus one warning per asset that could not be included */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PackExportResult"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No project with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + postPacksImport: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + /** @default false */ + confirm?: boolean; + /** @default false */ + dryRun?: boolean; + pack?: unknown; + projectId: string; + }; + }; + }; + responses: { + /** @description The diff alone on a dry run; the diff plus `created` and `install` when `confirm: true` wrote */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PackInstallResult"]; + }; + }; + /** @description `confirm: true` was not sent, so nothing was written (that body also carries `diff`) */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No project with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not a valid .dmpack file, or the pack claims a signature that fails verification */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + getPacksInstalled: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Installed packs in scope, newest first */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PackInstallListItem"][]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + getPermissions: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Every assignable permission string, flat and grouped by resource */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PermissionCatalogue"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + getPlans: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Plans in the active project */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Plan"][]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + "getPlansCapability-catalog": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description One candidate per project template, name-ordered. Curation lives on the plan, never here */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["CapabilityCatalogItem"][]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + postPlansSave: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + createdFrom?: string; + env?: string; + /** @default [] */ + history?: { + by?: string; + /** @default */ + note?: string; + /** @enum {string} */ + status: "draft" | "approved" | "running" | "completed" | "failed"; + when: string; + }[]; + /** @enum {string} */ + origin?: "chat" | "blueprint" | "intake" | "gap analysis"; + owner?: string; + spec?: { + approval?: { + reason: string; + role: string; + }; + capabilities?: { + expectedCount?: number; + expectedSumCents?: number; + group?: string; + /** @default false */ + hidden?: boolean; + key: string; + name: string; + /** @default */ + note?: string; + setId?: string; + /** + * @default derived + * @enum {string} + */ + source?: "derived" | "manual"; + sumField?: string; + template?: string; + templateId?: string; + }[]; + /** @default [] */ + constraints?: string[]; + coverage?: { + count: number; + family: string; + items: string[]; + }[]; + coverageConfig?: { + /** @default 14 */ + freshnessDays?: number; + /** + * @default release + * @enum {string} + */ + mode?: "release" | "migration"; + sourceSystem?: string; + /** @default 0 */ + sumToleranceCents?: number; + targetSystem?: string; + }; + /** @default [] */ + entities?: { + endpointId?: string; + key: string; + name: string; + /** @default */ + note?: string; + template: string; + templateId?: string; + volume: number; + }[]; + /** @default [] */ + expectations?: string[]; + flow?: { + loop?: string | null; + phase: string; + steps: { + fields?: string[]; + from: string; + iface: string; + kind: string; + msg: string; + reachable?: boolean; + scaffold?: { + entity: string; + fields: string[]; + ops: string[]; + }; + /** @enum {string} */ + status: "mapped" | "likely" | "custom" | "unknown"; + to: string; + why?: string; + }[]; + }[]; + /** @default [] */ + gaps?: { + action?: string; + iface?: string; + /** @default */ + note?: string; + scaffold?: { + entity: string; + fields: string[]; + ops: string[]; + }; + title: string; + /** @enum {string} */ + type: "connect" | "custom" | "input" | "blocker" | "gap" | "stale"; + }[]; + /** @default [] */ + integrations?: { + /** @enum {string} */ + access: "read" | "write"; + /** @default */ + detail?: string; + system: string; + via: string; + }[]; + /** @enum {string} */ + kind?: "entity" | "flow" | "task" | "mapping"; + /** @default [] */ + lanes?: string[]; + lifecycle?: { + mode: string; + refresh: string; + replenish: string; + }; + mappingConfig?: { + keyMapName?: string; + maskingPolicyId?: string; + maskingPolicyName?: string; + sourceObject?: string; + sourceSystem?: string; + targetObject?: string; + targetSystem?: string; + }; + mappings?: { + /** @default false */ + generate?: boolean; + keyMapName?: string; + maskingPolicyId?: string; + /** @default */ + note?: string; + sourceField?: string; + /** + * @default open + * @enum {string} + */ + status?: "mapped" | "open" | "needs-review"; + targetField: string; + /** @default */ + transform?: string; + }[]; + /** @default [] */ + steps?: string[]; + tasks?: { + note?: string; + phase: string; + tasks: { + /** @default [] */ + deps?: string[]; + /** @default */ + detail?: string; + key?: string; + /** @enum {string} */ + priority?: "P0" | "P1" | "P2" | "P3"; + title: string; + }[]; + }[]; + version?: { + by: string; + n: number; + when: string; + }; + }; + /** + * @default draft + * @enum {string} + */ + status?: "draft" | "approved" | "running" | "completed" | "failed"; + summary?: string; + /** @default [] */ + targets?: string[]; + title: string; + /** @default false */ + write?: boolean; + }; + }; + }; + responses: { + /** @description The created plan */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Plan"]; + }; + }; + /** @description The creating team member could not be resolved */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + getPlansById: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description The plan */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Plan"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No plan with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + deletePlansByPlanId: { + parameters: { + query?: never; + header?: never; + path: { + planId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description The plan was deleted */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PlanDeleteResult"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No plan with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; + }; + patchPlansByPlanId: { + parameters: { + query?: never; + header?: never; + path: { + planId: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + createdFrom?: string; + env?: string; + /** @default [] */ + history?: { + by?: string; + /** @default */ + note?: string; + /** @enum {string} */ + status: "draft" | "approved" | "running" | "completed" | "failed"; + when: string; + }[]; + /** @enum {string} */ + origin?: "chat" | "blueprint" | "intake" | "gap analysis"; + owner?: string; + spec?: { + approval?: { + reason: string; + role: string; + }; + capabilities?: { + expectedCount?: number; + expectedSumCents?: number; + group?: string; + /** @default false */ + hidden?: boolean; + key: string; + name: string; + /** @default */ + note?: string; + setId?: string; + /** + * @default derived + * @enum {string} + */ + source?: "derived" | "manual"; + sumField?: string; + template?: string; + templateId?: string; + }[]; + /** @default [] */ + constraints?: string[]; + coverage?: { + count: number; + family: string; + items: string[]; + }[]; + coverageConfig?: { + /** @default 14 */ + freshnessDays?: number; + /** + * @default release + * @enum {string} + */ + mode?: "release" | "migration"; + sourceSystem?: string; + /** @default 0 */ + sumToleranceCents?: number; + targetSystem?: string; + }; + /** @default [] */ + entities?: { + endpointId?: string; + key: string; + name: string; + /** @default */ + note?: string; + template: string; + templateId?: string; + volume: number; + }[]; + /** @default [] */ + expectations?: string[]; + flow?: { + loop?: string | null; + phase: string; + steps: { + fields?: string[]; + from: string; + iface: string; + kind: string; + msg: string; + reachable?: boolean; + scaffold?: { + entity: string; + fields: string[]; + ops: string[]; + }; + /** @enum {string} */ + status: "mapped" | "likely" | "custom" | "unknown"; + to: string; + why?: string; + }[]; + }[]; + /** @default [] */ + gaps?: { + action?: string; + iface?: string; + /** @default */ + note?: string; + scaffold?: { + entity: string; + fields: string[]; + ops: string[]; + }; + title: string; + /** @enum {string} */ + type: "connect" | "custom" | "input" | "blocker" | "gap" | "stale"; + }[]; + /** @default [] */ + integrations?: { + /** @enum {string} */ + access: "read" | "write"; + /** @default */ + detail?: string; + system: string; + via: string; + }[]; + /** @enum {string} */ + kind?: "entity" | "flow" | "task" | "mapping"; + /** @default [] */ + lanes?: string[]; + lifecycle?: { + mode: string; + refresh: string; + replenish: string; + }; + mappingConfig?: { + keyMapName?: string; + maskingPolicyId?: string; + maskingPolicyName?: string; + sourceObject?: string; + sourceSystem?: string; + targetObject?: string; + targetSystem?: string; + }; + mappings?: { + /** @default false */ + generate?: boolean; + keyMapName?: string; + maskingPolicyId?: string; + /** @default */ + note?: string; + sourceField?: string; + /** + * @default open + * @enum {string} + */ + status?: "mapped" | "open" | "needs-review"; + targetField: string; + /** @default */ + transform?: string; + }[]; + /** @default [] */ + steps?: string[]; + tasks?: { + note?: string; + phase: string; + tasks: { + /** @default [] */ + deps?: string[]; + /** @default */ + detail?: string; + key?: string; + /** @enum {string} */ + priority?: "P0" | "P1" | "P2" | "P3"; + title: string; + }[]; + }[]; + version?: { + by: string; + n: number; + when: string; + }; + }; + /** + * @default draft + * @enum {string} + */ + status?: "draft" | "approved" | "running" | "completed" | "failed"; + summary?: string; + /** @default [] */ + targets?: string[]; + title?: string; + /** @default false */ + write?: boolean; + }; + }; + }; + responses: { + /** @description The updated plan */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Plan"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No plan with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; }; - postAuthRefresh: { + postPlansByPlanIdCheck: { parameters: { query?: never; header?: never; - path?: never; + path: { + planId: string; + }; cookie?: never; }; requestBody?: never; - responses: never; - }; - postAuthSession: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; + responses: { + /** @description The completed check run, graded synchronously - no polling needed */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PlanRun"]; + }; + }; + /** @description The plan has no capabilities in scope; derive the catalog and save it to the spec first */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No plan with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The check engine failed; the run is persisted as failed */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; }; - requestBody?: never; - responses: never; }; - getBlobByKey: { + postPlansByPlanIdRun: { parameters: { query?: never; header?: never; path: { - key: string; + planId: string; }; cookie?: never; }; requestBody?: never; - responses: never; - }; - "getChat-assets": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - "postChat-assets": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - chatId: string; - filename: string; - mimeType?: string; - s3Key: string; - size?: number; - /** @enum {string} */ - source?: "agent" | "upload"; + responses: { + /** @description The run was created and dispatched; poll GET /plans/:planId/runs/:runId */ + 202: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PlanRunAccepted"]; + }; + }; + /** @description The plan is not runnable: a task plan, a mapping plan, a flow plan, one with no entities, or one whose entities have no matching template (that body also carries `entities`, the unresolved names) */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No plan with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; }; }; }; - responses: never; }; - "deleteChat-assetsById": { + getPlansByPlanIdRuns: { parameters: { query?: never; header?: never; path: { - id: string; + planId: string; }; cookie?: never; }; requestBody?: never; - responses: never; - }; - getChats: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; + responses: { + /** @description The plan's runs, newest first. `files` is never present here */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PlanRun"][]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No plan with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; }; - requestBody?: never; - responses: never; }; - postChats: { + getPlansByPlanIdRunsByRunId: { parameters: { query?: never; header?: never; - path?: never; + path: { + planId: string; + runId: string; + }; cookie?: never; }; - requestBody?: { - content: { - "application/json": { - id: string; - messages?: unknown; - /** @default New Chat */ - title?: string; + requestBody?: never; + responses: { + /** @description The run, including `files` with freshly re-signed download URLs */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PlanRun"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No plan with that id in the caller's scope, or no run with that id on the plan */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; }; }; }; - responses: never; - }; - getChatsById: { - parameters: { - query?: never; - header?: never; - path: { - id: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: never; }; - putChatsById: { + postPlansByPlanIdRunsByRunIdComplete: { parameters: { query?: never; header?: never; path: { - id: string; + planId: string; + runId: string; }; cookie?: never; }; requestBody?: { content: { "application/json": { - messages?: unknown; - title?: string; + error?: string; + /** @default 0 */ + rows?: number; + /** @enum {string} */ + status: "completed" | "failed"; }; }; }; - responses: never; - }; - deleteChatsById: { - parameters: { - query?: never; - header?: never; - path: { - id: string; + responses: { + /** @description The run was finalized and rolled up to the plan */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PlanRunAck"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No plan with that id in the caller's scope, or no run with that id on the plan */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; }; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - getConfig: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - getConnections: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; }; - requestBody?: never; - responses: never; }; - postConnections: { + postPlansByPlanIdRunsByRunIdFiles: { parameters: { query?: never; header?: never; - path?: never; + path: { + planId: string; + runId: string; + }; cookie?: never; }; requestBody?: { content: { "application/json": { - connectionString: string; - createdBy: string; - endpointFolderId?: string | null; - id?: string; - name: string; - projectId: string; - readOnly?: boolean; - teamId: string; - /** @enum {string} */ - type: "db2" | "postgresql" | "mysql" | "mssql" | "mongodb" | "oracle"; + content: string; + entity: string; + filename: string; + /** @default application/json */ + mimeType?: string; }; }; }; - responses: never; - }; - getConnectionsTables: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; + responses: { + /** @description The artifact was stored and recorded against the run */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PlanRunFileAck"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No plan with that id in the caller's scope, or no run with that id on the plan */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The artifact could not be uploaded to blob storage */ + 502: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; }; - requestBody?: never; - responses: never; }; - postConnectionsTest: { + postPlansByPlanIdRunsByRunIdLog: { parameters: { query?: never; header?: never; - path?: never; + path: { + planId: string; + runId: string; + }; cookie?: never; }; requestBody?: { content: { "application/json": { - connectionString: string; - /** @enum {string} */ - type: "db2" | "postgresql" | "mysql" | "mssql" | "mongodb" | "oracle"; + /** + * @default info + * @enum {string} + */ + level?: "info" | "warn" | "error"; + message: string; + }; + }; + }; + responses: { + /** @description The log line was appended */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PlanRunAck"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No plan with that id in the caller's scope, or no run with that id on the plan */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; }; }; }; - responses: never; }; - getConnectionsById: { + getPlansByPlanIdSignoffs: { parameters: { query?: never; header?: never; path: { - id: string; + planId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description The plan's sign-offs, newest first */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PlanSignoff"][]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No plan with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; }; - cookie?: never; }; - requestBody?: never; - responses: never; }; - putConnectionsById: { + postPlansByPlanIdSignoffs: { parameters: { query?: never; header?: never; path: { - id: string; + planId: string; }; cookie?: never; }; requestBody?: { content: { "application/json": { - connectionString: string; - createdBy: string; - endpointFolderId?: string | null; - id?: string; - name: string; - projectId: string; - readOnly?: boolean; - teamId: string; - /** @enum {string} */ - type: "db2" | "postgresql" | "mysql" | "mssql" | "mongodb" | "oracle"; + note?: string; + runId: string; }; }; }; - responses: never; - }; - deleteConnectionsById: { - parameters: { - query?: never; - header?: never; - path: { - id: string; + responses: { + /** @description The recorded sign-off. Sign-offs are immutable */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PlanSignoff"]; + }; }; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - getCustomDataTypes: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - postCustomDataTypes: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - createdBy: string; - fieldConfig?: unknown; - id?: string; - name: string; - projectId: string; - teamId: string; + /** @description The run is not a check run, or a non-green verdict was signed off without a waiver note */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No plan with that id in the caller's scope, or no run with that id on the plan */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The check run has not completed, carries no readable results, or is already signed off */ + 409: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; }; }; }; - responses: never; }; - putCustomDataTypesById: { + postPlansByPlanIdStatus: { parameters: { query?: never; header?: never; path: { - id: string; + planId: string; }; cookie?: never; }; requestBody?: { content: { "application/json": { - createdBy: string; - fieldConfig?: unknown; - id?: string; - name: string; - projectId: string; - teamId: string; + history?: { + by?: string; + /** @default */ + note?: string; + /** @enum {string} */ + status: "draft" | "approved" | "running" | "completed" | "failed"; + when: string; + }; + /** @enum {string} */ + status: "draft" | "approved" | "running" | "completed" | "failed"; }; }; }; - responses: never; - }; - deleteCustomDataTypesById: { - parameters: { - query?: never; - header?: never; - path: { - id: string; + responses: { + /** @description The plan at its new status, with the appended history entry */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Plan"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No plan with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; }; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - postDatamaker: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; }; - requestBody?: never; - responses: never; }; - getEndpointFolders: { + postPreview: { parameters: { query?: never; header?: never; @@ -3916,54 +11524,73 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; - }; - postEndpointFolders: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - createdAt?: string; - createdBy?: string; - id?: string; - name: string; - projectId: string; - teamId: string; + responses: { + /** @description The upstream response. Note the 200 here means the PROXY succeeded - read `status` for what the endpoint itself answered */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PreviewResult"]; }; }; - }; - responses: never; - }; - putEndpointFoldersById: { - parameters: { - query?: never; - header?: never; - path: { - id: string; + /** @description URL or method missing, a malformed URL, or a malformed JSON body */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + /** @description An endpointId was supplied but no endpoint with that id exists */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + /** @description The proxy threw */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; }; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - deleteEndpointFoldersById: { - parameters: { - query?: never; - header?: never; - path: { - id: string; + /** @description Could not connect to the external endpoint (that body carries `error: "FETCH_ERROR"`) */ + 502: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; }; - cookie?: never; }; - requestBody?: never; - responses: never; }; - getEndpoints: { + getProjects: { parameters: { query?: never; header?: never; @@ -3971,9 +11598,37 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; + responses: { + /** @description Projects the caller can access */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Project"][]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; }; - postEndpoints: { + postProjects: { parameters: { query?: never; header?: never; @@ -3983,35 +11638,45 @@ export interface operations { requestBody?: { content: { "application/json": { - createdBy: string; - endpointFolderId?: string | null; - headers?: unknown; + avatar?: string; + description?: string; id?: string; - integrationId?: string | null; - meta?: unknown; - /** @enum {string} */ - method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE"; name: string; - projectId: string; - queryParams?: unknown; teamId: string; - url: string; }; }; }; - responses: never; - }; - "postEndpointsAuth-resolve": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; + responses: { + /** @description The created project */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Project"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; }; - requestBody?: never; - responses: never; }; - getEndpointsById: { + getProjectsById: { parameters: { query?: never; header?: never; @@ -4021,9 +11686,46 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; + responses: { + /** @description The project */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Project"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No project with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; }; - putEndpointsById: { + putProjectsById: { parameters: { query?: never; header?: never; @@ -4035,25 +11737,54 @@ export interface operations { requestBody?: { content: { "application/json": { - createdBy: string; - endpointFolderId?: string | null; - headers?: unknown; + avatar?: string; + description?: string; id?: string; - integrationId?: string | null; - meta?: unknown; - /** @enum {string} */ - method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE"; name: string; - projectId: string; - queryParams?: unknown; teamId: string; - url: string; }; }; }; - responses: never; + responses: { + /** @description The updated project */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Project"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No project with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; }; - deleteEndpointsById: { + deleteProjectsById: { parameters: { query?: never; header?: never; @@ -4063,41 +11794,46 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; - }; - "postExecute-python": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - /** @default false */ - async?: boolean; - projectId?: string; - /** Format: uri */ - requirementsUrl?: string; - /** Format: uri */ - url: string; + responses: { + /** @description The project was deleted */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["DeletedResult"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No project with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; }; }; }; - responses: never; - }; - postExportDb: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: never; }; - postExportRest: { + getRoles: { parameters: { query?: never; header?: never; @@ -4105,19 +11841,37 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; - }; - getFeedback: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; + responses: { + /** @description System and custom roles for the team */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Role"][]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; }; - requestBody?: never; - responses: never; }; - postFeedback: { + postRoles: { parameters: { query?: never; header?: never; @@ -4127,17 +11881,54 @@ export interface operations { requestBody?: { content: { "application/json": { - comment?: string; - createdBy: string; - /** @enum {string} */ - feeling: "EXCITED" | "HAPPY" | "SAD" | "HATE"; - id?: string; + description?: string; + name: string; + /** @default [] */ + permissions?: string[]; + teamId: string; + }; + }; + }; + responses: { + /** @description The created custom role */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Role"]; + }; + }; + /** @description A role with that name already exists on the team */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; }; }; }; - responses: never; }; - putFeedbackById: { + putRolesById: { parameters: { query?: never; header?: never; @@ -4149,17 +11940,43 @@ export interface operations { requestBody?: { content: { "application/json": { - comment?: string; - createdBy: string; - /** @enum {string} */ - feeling: "EXCITED" | "HAPPY" | "SAD" | "HATE"; - id?: string; + description?: string | null; + name?: string; + permissions?: string[]; + }; + }; + }; + responses: { + /** @description The updated custom role */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Role"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; }; }; }; - responses: never; }; - deleteFeedbackById: { + deleteRolesById: { parameters: { query?: never; header?: never; @@ -4169,51 +11986,116 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; - }; - getFields: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; + responses: { + /** @description The custom role was deleted */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["DeletedResult"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; }; - requestBody?: never; - responses: never; }; - "postGenerateDatabase-templates": { + "postScenario-files": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; - requestBody?: never; - responses: never; - }; - postGenerateOpenapiByFormat: { - parameters: { - query?: never; - header?: never; - path: { - format: string; + requestBody?: { + content: { + "application/json": { + content: string; + description?: string; + folderId?: string; + mimeType?: string; + name: string; + projectId?: string; + scenarioId: string; + size: number; + teamId: string; + }; + }; + }; + responses: { + /** @description The stored file, under this endpoint's own field names (`name`, `filePath`) */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ScenarioFileCreated"]; + }; + }; + /** @description The decoded content is over the size cap, or the workspace quota is exhausted */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The authenticated scope does not cover the scenario's team or project */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No scenario with that id */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The upload to blob storage failed */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; }; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - postGenerateSensitive: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; }; - requestBody?: never; - responses: never; }; - postGenerateTemplate: { + getScenarios: { parameters: { query?: never; header?: never; @@ -4221,9 +12103,37 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; + responses: { + /** @description Scenarios in scope, with freshly signed script URLs */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Scenario"][]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; }; - postGetcsrftoken: { + postScenarios: { parameters: { query?: never; header?: never; @@ -4233,26 +12143,63 @@ export interface operations { requestBody?: { content: { "application/json": { - authorization?: unknown; - endpointId?: string; - /** Format: uri */ - sapUrl: string; + createdAt?: string; + /** @description A valid team member id */ + createdBy?: string; + /** @description Short description of what this scenario does */ + description?: string; + name: string; + presignedUrl?: string; + /** @description The project ID this scenario belongs to */ + projectId?: string; + requirementsUrl?: string; + /** @description The team ID this scenario belongs to */ + teamId?: string; + /** @description Execution timeout in seconds (60–3600) */ + timeoutSeconds?: number; }; }; }; - responses: never; - }; - getIntegrations: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; + responses: { + /** @description The created scenario */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Scenario"]; + }; + }; + /** @description The creating team member could not be resolved */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; }; - requestBody?: never; - responses: never; }; - postIntegrations: { + postScenariosExecute: { parameters: { query?: never; header?: never; @@ -4262,23 +12209,26 @@ export interface operations { requestBody?: { content: { "application/json": { - auth?: unknown; - createdBy: string; - endpointFolderId?: string | null; - headers?: unknown; - id?: string; - kind?: string; - name: string; - origin: string; + /** @default false */ + async?: boolean; + /** @description Optional inline code to execute instead of saved script */ + code?: string; + /** @description The project ID this scenario belongs to */ projectId: string; - scope?: string | null; - teamId: string; + /** @description The scenario ID to execute */ + scenarioId?: string; + /** + * @description What initiated the run. UI clients omit this (defaults to 'manual'). The chat agent must send 'agent' so the run can be visually distinguished in scenario history. + * @default manual + * @enum {string} + */ + source?: "manual" | "agent" | "mcp"; }; }; }; responses: never; }; - postIntegrationsTest: { + "postScenariosFrom-chat": { parameters: { query?: never; header?: never; @@ -4288,187 +12238,376 @@ export interface operations { requestBody?: { content: { "application/json": { - auth?: unknown; - id?: string; - kind?: string; - origin: string; + /** @description The chat whose thread should become a scenario */ + chatId: string; + /** @description The project the chat and scenario belong to */ + projectId: string; + /** @description Optional client-side thread snapshot (richer than the persisted row: includes tool-call summaries) */ + thread?: { + turns: { + prompt: string; + reply: string; + toolSummaries?: string[]; + }[]; + }; + /** @description Execution timeout in seconds (60–3600) */ + timeoutSeconds?: number; }; }; }; - responses: never; - }; - getIntegrationsById: { - parameters: { - query?: never; - header?: never; - path: { - id: string; + responses: { + /** @description The scenario created from the chat thread */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Scenario"]; + }; + }; + /** @description No team member for the caller, or the chat has no completed agent turns to package */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No chat with that id in this project */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Generation, upload or persistence failed */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; }; - cookie?: never; }; - requestBody?: never; - responses: never; }; - putIntegrationsById: { + getScenariosJobs: { parameters: { query?: never; header?: never; - path: { - id: string; - }; + path?: never; cookie?: never; }; - requestBody?: { - content: { - "application/json": { - auth?: unknown; - createdBy: string; - endpointFolderId?: string | null; - headers?: unknown; - id?: string; - kind?: string; - name: string; - origin: string; - projectId: string; - scope?: string | null; - teamId: string; + requestBody?: never; + responses: { + /** @description Queued and running executions, active first */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ScenarioJobs"]; }; }; - }; - responses: never; - }; - deleteIntegrationsById: { - parameters: { - query?: never; - header?: never; - path: { - id: string; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The job queue could not be read */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; }; - cookie?: never; }; - requestBody?: never; - responses: never; }; - postIntegrationsByIdEndpoints: { + postScenariosJobsByJobIdCancel: { parameters: { query?: never; header?: never; path: { - id: string; + jobId: string; }; cookie?: never; }; - requestBody?: { - content: { - "application/json": { - entitySet?: string; - name?: string; - service: string; + requestBody?: never; + responses: { + /** @description Cancellation was accepted; `message` describes what happened */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["DeletedResult"]; + }; + }; + /** @description No job id, or the job is not in a cancellable state */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The job is not in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Cancellation failed */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; }; }; }; - responses: never; }; - getIntegrationsByIdJiraCreatemeta: { + getScenariosJobsByJobIdLogsStream: { parameters: { query?: never; header?: never; path: { - id: string; + jobId: string; }; cookie?: never; }; requestBody?: never; - responses: never; - }; - postIntegrationsByIdJiraIssues: { - parameters: { - query?: never; - header?: never; - path: { - id: string; + responses: { + /** @description An SSE stream of `log` events (data: one log line) terminated by a single `end` event */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/event-stream": string; + }; }; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - description?: string; - issueType: string; - labels?: string[]; - priority?: string; - projectKey: string; - summary: string; + /** @description No job id in the path */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; }; }; }; - responses: never; }; - getIntegrationsByIdJiraIssuesByIssueKey: { + getScenariosJobsByJobIdStatus: { parameters: { query?: never; header?: never; path: { - id: string; - issueKey: string; + jobId: string; }; cookie?: never; }; requestBody?: never; - responses: never; - }; - postIntegrationsByIdJiraIssuesByIssueKeyComment: { - parameters: { - query?: never; - header?: never; - path: { - id: string; - issueKey: string; + responses: { + /** @description The run's current state, output and log lines */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ScenarioJobStatus"]; + }; }; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - text: string; + /** @description No job id in the path */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; }; }; - }; - responses: never; - }; - getIntegrationsByIdJiraIssuesByIssueKeyTransitions: { - parameters: { - query?: never; - header?: never; - path: { - id: string; - issueKey: string; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No such job on the queue and no ScenarioLog row for it */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Reading the job status failed */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; }; - cookie?: never; }; - requestBody?: never; - responses: never; }; - postIntegrationsByIdJiraIssuesByIssueKeyTransitions: { + postScenariosSave: { parameters: { query?: never; header?: never; - path: { - id: string; - issueKey: string; - }; + path?: never; cookie?: never; }; requestBody?: { content: { "application/json": { - transitionId: string; + code: string; + name?: string; + /** @description Execution timeout in seconds (60–3600) */ + timeoutSeconds?: number; + }; + }; + }; + responses: { + /** @description The saved scenario */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Scenario"]; + }; + }; + /** @description The creating team member could not be resolved */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The scenario could not be saved */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; }; }; }; - responses: never; }; - getIntegrationsByIdJiraProjects: { + getScenariosById: { parameters: { query?: never; header?: never; @@ -4478,21 +12617,46 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; - }; - getIntegrationsByIdJiraSearch: { - parameters: { - query?: never; - header?: never; - path: { - id: string; + responses: { + /** @description The scenario, with freshly signed script URLs */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Scenario"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No scenario with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; }; - cookie?: never; }; - requestBody?: never; - responses: never; }; - getIntegrationsByIdServices: { + deleteScenariosById: { parameters: { query?: never; header?: never; @@ -4502,28 +12666,55 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; - }; - "postIntegrationsByIdToscaOnpremCheckin-all": { - parameters: { - query?: never; - header?: never; - path: { - id: string; + responses: { + /** @description The scenario and its stored script files were deleted */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["DeletedResult"]; + }; }; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - comment?: string; - workspace: string; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No scenario with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Deleting the scenario or its S3 files failed */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; }; }; }; - responses: never; }; - "postIntegrationsByIdToscaOnpremExecution-entries": { + patchScenariosById: { parameters: { query?: never; header?: never; @@ -4535,74 +12726,148 @@ export interface operations { requestBody?: { content: { "application/json": { - comment?: string; - executionListId: string; - testCaseId: string; - workspace: string; + createdAt?: string; + /** @description A valid team member id */ + createdBy?: string; + /** @description Short description of what this scenario does */ + description?: string; + name: string; + presignedUrl?: string; + /** @description The project ID this scenario belongs to */ + projectId?: string; + requirementsUrl?: string; + /** @description The team ID this scenario belongs to */ + teamId?: string; + /** @description Execution timeout in seconds (60–3600) */ + timeoutSeconds?: number; }; }; }; - responses: never; - }; - postIntegrationsByIdToscaOnpremObjects: { - parameters: { - query?: never; - header?: never; - path: { - id: string; + responses: { + /** @description The updated scenario */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Scenario"]; + }; }; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - attributes?: { - Name: string; - Value: string; - }[]; - comment?: string; - objType: string; - parentId: string; - workspace: string; + /** @description No team member for the caller in the scenario's team */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No scenario with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The update failed */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; }; }; }; - responses: never; }; - getIntegrationsByIdToscaOnpremObjectsByObjectId: { + postScenariosByIdDiagramRegenerate: { parameters: { query?: never; header?: never; path: { id: string; - objectId: string; }; cookie?: never; }; requestBody?: never; - responses: never; - }; - postIntegrationsByIdToscaOnpremQuery: { - parameters: { - query?: never; - header?: never; - path: { - id: string; + responses: { + /** @description Regeneration was queued; poll the scenario for `diagramStatus` */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ScenarioDiagramRegenerateAccepted"]; + }; }; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - from?: string; - tql: string; - workspace: string; + /** @description The scenario has no code to diagram yet */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No scenario with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Regeneration could not be started */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; }; }; }; - responses: never; }; - getIntegrationsByIdToscaOnpremWorkspaces: { + "getScenariosByIdEnvironment-variables": { parameters: { query?: never; header?: never; @@ -4612,72 +12877,120 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; - }; - "getIntegrationsByIdToscaPlaylist-runsByPlaylistRunIdTestcase-runs": { - parameters: { - query?: never; - header?: never; - path: { - id: string; - playlistRunId: string; + responses: { + /** @description The scenario's environment variables, as an array of key/value pairs */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ScenarioEnvironmentVariableList"]; + }; }; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - getIntegrationsByIdToscaPlaylists: { - parameters: { - query?: never; - header?: never; - path: { - id: string; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No scenario with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Reading the variables failed */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; }; - cookie?: never; }; - requestBody?: never; - responses: never; }; - getIntegrationsByIdToscaPlaylistsByPlaylistIdRuns: { + "postScenariosByIdEnvironment-variables": { parameters: { query?: never; header?: never; path: { id: string; - playlistId: string; }; cookie?: never; }; - requestBody?: never; - responses: never; - }; - "getIntegrationsByIdToscaTestcase-runsByTestCaseRunIdSteps": { - parameters: { - query?: never; - header?: never; - path: { - id: string; - testCaseRunId: string; + requestBody?: { + content: { + "application/json": { + key: string; + value: string; + }; }; - cookie?: never; }; - requestBody?: never; - responses: never; - }; - getIntegrationsByIdToscaTestcases: { - parameters: { - query?: never; - header?: never; - path: { - id: string; + responses: { + /** @description The full variable map after the addition (a map, not the array the GET returns) */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ScenarioEnvironmentVariables"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No scenario with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The variable could not be added */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; }; - cookie?: never; }; - requestBody?: never; - responses: never; }; - postIntegrationsByIdToscaTestcases: { + "patchScenariosByIdEnvironment-variables": { parameters: { query?: never; header?: never; @@ -4689,42 +13002,129 @@ export interface operations { requestBody?: { content: { "application/json": { - design: { - [key: string]: unknown; + environmentVariables: { + [key: string]: string; }; - name: string; - space?: string; }; }; }; - responses: never; + responses: { + /** @description The merged variable map after the update (a map, not the array the GET returns) */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ScenarioEnvironmentVariables"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No scenario with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The update failed */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; }; - getIntegrationsByIdToscaTestcasesByTestCaseId: { + "deleteScenariosByIdEnvironment-variablesByKey": { parameters: { query?: never; header?: never; path: { id: string; - testCaseId: string; + key: string; }; cookie?: never; }; requestBody?: never; - responses: never; - }; - getIntegrationsByIdToscaWorkspaces: { - parameters: { - query?: never; - header?: never; - path: { - id: string; + responses: { + /** @description The remaining variable map after the removal (a map, not the array the GET returns) */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ScenarioEnvironmentVariables"]; + }; + }; + /** @description No variable key in the path */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No scenario with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The variable could not be removed */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; }; - cookie?: never; }; - requestBody?: never; - responses: never; }; - getInternalWorkspaceByScenarioIdFiles: { + getScenariosByScenarioIdFiles: { parameters: { query?: never; header?: never; @@ -4734,9 +13134,55 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; + responses: { + /** @description Workspace files, with the storage quota they count against */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["WorkspaceListing"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not a member of the scenario's team */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Scenario not found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The files could not be listed */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; }; - getInternalWorkspaceByScenarioIdInfo: { + postScenariosByScenarioIdFilesUpload: { parameters: { query?: never; header?: never; @@ -4746,60 +13192,199 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; + responses: { + /** @description The stored file */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["WorkspaceUploadResult"]; + }; + }; + /** @description No file, an unknown folder, an oversized file, or the workspace quota is exhausted */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not a member of the scenario's team */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Scenario not found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The upload failed */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; }; - postInternalWorkspaceByScenarioIdSync: { + getScenariosByScenarioIdFilesByFileId: { parameters: { query?: never; header?: never; path: { scenarioId: string; + fileId: string; }; cookie?: never; }; - requestBody?: { - content: { - "application/json": { - files: { - /** @enum {string} */ - action: "created" | "updated" | "deleted"; - filename: string; - mimeType?: string; - size: number; - }[]; + requestBody?: never; + responses: { + /** @description File metadata with a freshly signed download URL */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ScenarioFile"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not a member of the scenario's team */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description File not found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The file could not be read */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; }; }; }; - responses: never; }; - postInternalWorkspaceByScenarioIdUpload: { + deleteScenariosByScenarioIdFilesByFileId: { parameters: { query?: never; header?: never; path: { scenarioId: string; + fileId: string; }; cookie?: never; }; requestBody?: never; - responses: never; + responses: { + /** @description The file was deleted */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["SuccessResult"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not a member of the scenario's team */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description File not found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The delete failed */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; }; - getKeymaps: { + getScenariosByScenarioIdStorage: { parameters: { query?: never; header?: never; - path?: never; + path: { + scenarioId: string; + }; cookie?: never; }; requestBody?: never; responses: { - /** @description One row per (mapName, object), ordered by both */ + /** @description Bytes used, the limit, and the rounded percentage */ 200: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["KeyMapSummary"][]; + "application/json": components["schemas"]["WorkspaceStorage"]; }; }; /** @description Not authenticated */ @@ -4811,7 +13396,7 @@ export interface operations { "application/json": components["schemas"]["ApiError"]; }; }; - /** @description The caller lacks the required permission */ + /** @description Not a member of the scenario's team */ 403: { headers: { [name: string]: unknown; @@ -4820,44 +13405,44 @@ export interface operations { "application/json": components["schemas"]["ApiError"]; }; }; + /** @description Scenario not found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Storage info could not be read */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; }; }; - postKeymapsEntries: { + "postSchema-graphByIdDiff": { parameters: { query?: never; header?: never; - path?: never; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - /** @description Old-to-new key pairs to upsert */ - entries: { - /** @description The key minted in the target system */ - newKey: string; - /** @description The key in the source system */ - oldKey: string; - }[]; - /** @description Logical map name grouping entries, e.g. 'sap-material-migration' */ - mapName: string; - /** @description The domain object type, e.g. 'Material' or 'BusinessPartner' */ - object: string; - /** @description The project this map belongs to (falls back to the key/session scope) */ - projectId?: string; - /** @description Optional run/source metadata: the scenario run or job that minted the keys */ - runId?: string; - }; + path: { + id: string; }; + cookie?: never; }; + requestBody?: never; responses: { - /** @description How many rows were inserted or updated */ + /** @description The cached graph compared against live $metadata. The cache is NOT updated */ 200: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["KeyMapUpsertResult"]; + "application/json": components["schemas"]["SchemaGraphDiffResult"]; }; }; /** @description Not authenticated */ @@ -4878,8 +13463,8 @@ export interface operations { "application/json": components["schemas"]["ApiError"]; }; }; - /** @description The entries could not be upserted */ - 500: { + /** @description No endpoint with that id in the caller's scope, or no graph cached for it yet */ + 404: { headers: { [name: string]: unknown; }; @@ -4887,41 +13472,8 @@ export interface operations { "application/json": components["schemas"]["ApiError"]; }; }; - }; - }; - postKeymapsLookup: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - /** @description The map to look up in */ - mapName: string; - /** @description The domain object type */ - object: string; - /** @description Source-system keys to translate */ - oldKeys: string[]; - /** @description The project the map belongs to (falls back to the key/session scope) */ - projectId?: string; - }; - }; - }; - responses: { - /** @description Resolved mappings, plus the keys with no mapping yet */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["KeyMapLookupResult"]; - }; - }; - /** @description Not authenticated */ - 401: { + /** @description The live document is not parseable as EDMX (that body also carries `metadataUrl`) */ + 422: { headers: { [name: string]: unknown; }; @@ -4929,8 +13481,8 @@ export interface operations { "application/json": components["schemas"]["ApiError"]; }; }; - /** @description The caller lacks the required permission */ - 403: { + /** @description The $metadata fetch failed (that body also carries `metadataUrl`) */ + 502: { headers: { [name: string]: unknown; }; @@ -4940,24 +13492,25 @@ export interface operations { }; }; }; - deleteKeymapsByMapName: { + "getSchema-graphByIdEntityByName": { parameters: { query?: never; header?: never; path: { - mapName: string; + id: string; + name: string; }; cookie?: never; }; requestBody?: never; responses: { - /** @description The map was dropped, with the number of entries removed */ + /** @description The entity plus its incoming and outgoing navigations */ 200: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["KeyMapDeleteResult"]; + "application/json": components["schemas"]["SchemaGraphEntityContext"]; }; }; /** @description Not authenticated */ @@ -4978,8 +13531,8 @@ export interface operations { "application/json": components["schemas"]["ApiError"]; }; }; - /** @description The key map could not be deleted */ - 500: { + /** @description No endpoint with that id in the caller's scope, no graph cached for it, or no such entity in the graph */ + 404: { headers: { [name: string]: unknown; }; @@ -4989,24 +13542,34 @@ export interface operations { }; }; }; - getKeymapsByMapNameEntries: { + "postSchema-graphByIdEntityByNameConnect": { parameters: { query?: never; header?: never; path: { - mapName: string; + id: string; + name: string; }; cookie?: never; }; requestBody?: never; responses: { - /** @description One page of entries, with the total for the filter */ + /** @description The bridge endpoint that was created and the template fields wired to it */ 200: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["KeyMapEntriesPage"]; + "application/json": components["schemas"]["SchemaGraphConnectResult"]; + }; + }; + /** @description templateId was not sent */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; }; }; /** @description Not authenticated */ @@ -5027,208 +13590,36 @@ export interface operations { "application/json": components["schemas"]["ApiError"]; }; }; - }; - }; - getLicenses: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - postLicensesActivate: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - key: string; - teamId: string; - }; - }; - }; - responses: never; - }; - getLicensesStatus: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - getLogs: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - postLogs: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - /** @description Error message if failed */ - error?: string; - /** @description The BullMQ job ID */ - jobId: string; - /** - * @description Log entries - * @default [] - */ - logs?: string[]; - /** @description Final execution output */ - output?: string; - /** @description The scenario ID being executed */ - scenarioId: string; - /** - * @description Current status of the scenario run - * @enum {string} - */ - status: "queued" | "running" | "completed" | "failed"; - }; - }; - }; - responses: never; - }; - deleteLogsCleanup: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - getLogsJobByJobId: { - parameters: { - query?: never; - header?: never; - path: { - jobId: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - patchLogsJobByJobId: { - parameters: { - query?: never; - header?: never; - path: { - jobId: string; - }; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - /** @description ISO timestamp the run finished */ - completedAt?: string | null; - /** @description Error message, if failed */ - error?: string | null; - /** @description Final run output */ - output?: string | null; - /** @description Terminal status (completed/failed) */ - status?: string; + /** @description No endpoint with that id in the caller's scope, no graph cached for it, no such entity in the graph, or no such template in this project */ + 404: { + headers: { + [name: string]: unknown; }; - }; - }; - responses: never; - }; - patchLogsJobByJobIdAppend: { - parameters: { - query?: never; - header?: never; - path: { - jobId: string; - }; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - /** @description New log entries to append */ - logs: string[]; - /** @description Updated status */ - status?: string; + content: { + "application/json": components["schemas"]["ApiError"]; }; }; }; - responses: never; - }; - getLogsScenarioByScenarioId: { - parameters: { - query?: never; - header?: never; - path: { - scenarioId: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - getLogsById: { - parameters: { - query?: never; - header?: never; - path: { - id: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: never; }; - deleteLogsById: { + "postSchema-graphByIdEntityByNamePreview": { parameters: { query?: never; header?: never; path: { - id: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - "getMasking-policies": { - parameters: { - query?: never; - header?: never; - path?: never; + id: string; + name: string; + }; cookie?: never; }; requestBody?: never; responses: { - /** @description Policies in scope */ + /** @description Real rows with OData bookkeeping keys stripped */ 200: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["MaskingPolicy"][]; + "application/json": components["schemas"]["SchemaGraphPreviewResult"]; }; }; /** @description Not authenticated */ @@ -5249,50 +13640,45 @@ export interface operations { "application/json": components["schemas"]["ApiError"]; }; }; + /** @description No endpoint with that id in the caller's scope, no graph cached for it, or no such entity in the graph */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Reading live rows from the entity set failed */ + 502: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; }; }; - "postMasking-policies": { + "postSchema-graphByIdEntityByNameSample": { parameters: { query?: never; header?: never; - path?: never; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - /** @description Default: same source value masks to the same output */ - consistent?: boolean; - /** @description Short description of the policy (e.g. GDPR profile) */ - description?: string; - /** @description Per-field strategy rows: field matcher + strategy + overrides */ - fields?: { - consistent?: boolean; - detectedAs?: string; - field: string; - note?: string; - reversible?: boolean; - /** @enum {string} */ - strategy: "faker-replace" | "hash" | "tokenize" | "redact" | "preserve-format"; - }[]; - /** @description Key map name (#2787) scoping consistency to one run's key space */ - keyMapName?: string; - name: string; - /** @description The project ID this policy belongs to */ - projectId?: string; - /** @description Default: masked values can be translated back (tokenization) */ - reversible?: boolean; - }; + path: { + id: string; + name: string; }; + cookie?: never; }; + requestBody?: never; responses: { - /** @description The created policy */ + /** @description Per-field value statistics over the sampled rows, plus the system's value-help sets */ 200: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["MaskingPolicy"]; + "application/json": components["schemas"]["SchemaGraphSampleResult"]; }; }; /** @description Not authenticated */ @@ -5313,8 +13699,17 @@ export interface operations { "application/json": components["schemas"]["ApiError"]; }; }; - /** @description The policy could not be created */ - 500: { + /** @description No endpoint with that id in the caller's scope, no graph cached for it, or no such entity in the graph */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Sampling live rows from the entity set failed */ + 502: { headers: { [name: string]: unknown; }; @@ -5324,24 +13719,25 @@ export interface operations { }; }; }; - "getMasking-policiesById": { + "postSchema-graphByIdEntityByNameTemplate": { parameters: { query?: never; header?: never; path: { id: string; + name: string; }; cookie?: never; }; requestBody?: never; responses: { - /** @description The policy */ + /** @description The created template's identity - fetch GET /templates/:id for the fields themselves */ 200: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["MaskingPolicy"]; + "application/json": components["schemas"]["SchemaGraphTemplateResult"]; }; }; /** @description Not authenticated */ @@ -5362,7 +13758,7 @@ export interface operations { "application/json": components["schemas"]["ApiError"]; }; }; - /** @description No policy with that id in the caller's scope */ + /** @description No endpoint with that id in the caller's scope, no graph cached for it, or no such entity in the graph */ 404: { headers: { [name: string]: unknown; @@ -5371,9 +13767,18 @@ export interface operations { "application/json": components["schemas"]["ApiError"]; }; }; + /** @description `useSamples` was sent and sampling live rows failed */ + 502: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; }; }; - "deleteMasking-policiesById": { + "getSchema-graphByIdPath": { parameters: { query?: never; header?: never; @@ -5384,17 +13789,17 @@ export interface operations { }; requestBody?: never; responses: { - /** @description The policy was deleted */ + /** @description The hop list. An empty array means `from` and `to` resolved to the same entity */ 200: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["DeletedResult"]; + "application/json": components["schemas"]["SchemaGraphPathResult"]; }; }; - /** @description Not authenticated */ - 401: { + /** @description ?from= or ?to= is missing */ + 400: { headers: { [name: string]: unknown; }; @@ -5402,8 +13807,8 @@ export interface operations { "application/json": components["schemas"]["ApiError"]; }; }; - /** @description The caller lacks the required permission */ - 403: { + /** @description Not authenticated */ + 401: { headers: { [name: string]: unknown; }; @@ -5411,8 +13816,8 @@ export interface operations { "application/json": components["schemas"]["ApiError"]; }; }; - /** @description No policy with that id in the caller's scope */ - 404: { + /** @description The caller lacks the required permission */ + 403: { headers: { [name: string]: unknown; }; @@ -5420,8 +13825,8 @@ export interface operations { "application/json": components["schemas"]["ApiError"]; }; }; - /** @description The policy could not be deleted */ - 500: { + /** @description No endpoint with that id in the caller's scope, no graph cached for it, or the two entities are not connected */ + 404: { headers: { [name: string]: unknown; }; @@ -5431,7 +13836,7 @@ export interface operations { }; }; }; - "patchMasking-policiesById": { + "postSchema-graphByIdRefresh": { parameters: { query?: never; header?: never; @@ -5440,34 +13845,15 @@ export interface operations { }; cookie?: never; }; - requestBody?: { - content: { - "application/json": { - consistent?: boolean; - description?: string | null; - fields?: { - consistent?: boolean; - detectedAs?: string; - field: string; - note?: string; - reversible?: boolean; - /** @enum {string} */ - strategy: "faker-replace" | "hash" | "tokenize" | "redact" | "preserve-format"; - }[]; - keyMapName?: string | null; - name?: string; - reversible?: boolean; - }; - }; - }; + requestBody?: never; responses: { - /** @description The updated policy */ + /** @description The graph was parsed and cached */ 200: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["MaskingPolicy"]; + "application/json": components["schemas"]["SchemaGraphRefreshResult"]; }; }; /** @description Not authenticated */ @@ -5488,7 +13874,7 @@ export interface operations { "application/json": components["schemas"]["ApiError"]; }; }; - /** @description No policy with that id in the caller's scope */ + /** @description No endpoint with that id in the caller's scope */ 404: { headers: { [name: string]: unknown; @@ -5497,8 +13883,17 @@ export interface operations { "application/json": components["schemas"]["ApiError"]; }; }; - /** @description The policy could not be updated */ - 500: { + /** @description The document fetched is not parseable as EDMX (that body also carries `metadataUrl`) */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The $metadata fetch failed (that body also carries `metadataUrl`) */ + 502: { headers: { [name: string]: unknown; }; @@ -5508,134 +13903,73 @@ export interface operations { }; }; }; - getPacksCatalog: { + "getSchema-graphByIdSearch": { parameters: { query?: never; header?: never; - path?: never; + path: { + id: string; + }; cookie?: never; }; requestBody?: never; - responses: never; - }; - postPacksCatalogInstall: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - /** @default false */ - confirm?: boolean; - /** @default false */ - dryRun?: boolean; - name: string; - projectId: string; + responses: { + /** @description Up to 10 hits, best first. An empty or missing ?q= returns no results rather than everything */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["SchemaGraphSearchResult"]; }; }; - }; - responses: never; - }; - postPacksExport: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - /** @default [] */ - datatypeIds?: string[]; - manifest: { - description: string; - license?: string; - name: string; - publisher: string; - /** @default [] */ - requires?: { - /** @constant */ - kind: "integration"; - note?: string; - type: string; - }[]; - version: string; - }; - /** @default [] */ - planIds?: string[]; - projectId: string; - /** @default [] */ - scenarioIds?: string[]; - /** @default [] */ - skillIds?: string[]; - /** @default [] */ - templateIds?: string[]; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; }; }; - }; - responses: never; - }; - postPacksImport: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - /** @default false */ - confirm?: boolean; - /** @default false */ - dryRun?: boolean; - pack?: unknown; - projectId: string; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No endpoint with that id in the caller's scope, or no graph cached for it yet */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; }; }; }; - responses: never; - }; - getPacksInstalled: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - getPermissions: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: never; }; - getPlans: { + "getSchema-graphByIdServices": { parameters: { query?: never; header?: never; - path?: never; + path: { + id: string; + }; cookie?: never; }; requestBody?: never; responses: { - /** @description Plans in the active project */ + /** @description The Gateway catalog, mapped into DataMaker's shape. The probe counts are present only when ?status= asked for a live reachability probe */ 200: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["Plan"][]; + "application/json": components["schemas"]["SapServiceCatalog"]; }; }; /** @description Not authenticated */ @@ -5656,9 +13990,27 @@ export interface operations { "application/json": components["schemas"]["ApiError"]; }; }; + /** @description No endpoint with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The catalog fetch failed - probably not a SAP Gateway system (that body also carries `catalogUrl`) */ + 502: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; }; }; - "getPlansCapability-catalog": { + getSets: { parameters: { query?: never; header?: never; @@ -5666,217 +14018,71 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; + responses: { + /** @description Sets in scope, newest first */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Set"][]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; }; - postPlansSave: { + postSets: { parameters: { query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - createdFrom?: string; - env?: string; - /** @default [] */ - history?: { - by?: string; - /** @default */ - note?: string; - /** @enum {string} */ - status: "draft" | "approved" | "running" | "completed" | "failed"; - when: string; - }[]; - /** @enum {string} */ - origin?: "chat" | "blueprint" | "intake" | "gap analysis"; - owner?: string; - spec?: { - approval?: { - reason: string; - role: string; - }; - capabilities?: { - expectedCount?: number; - expectedSumCents?: number; - group?: string; - /** @default false */ - hidden?: boolean; - key: string; - name: string; - /** @default */ - note?: string; - setId?: string; - /** - * @default derived - * @enum {string} - */ - source?: "derived" | "manual"; - sumField?: string; - template?: string; - templateId?: string; - }[]; - /** @default [] */ - constraints?: string[]; - coverage?: { - count: number; - family: string; - items: string[]; - }[]; - coverageConfig?: { - /** @default 14 */ - freshnessDays?: number; - /** - * @default release - * @enum {string} - */ - mode?: "release" | "migration"; - sourceSystem?: string; - /** @default 0 */ - sumToleranceCents?: number; - targetSystem?: string; - }; - /** @default [] */ - entities?: { - endpointId?: string; - key: string; - name: string; - /** @default */ - note?: string; - template: string; - templateId?: string; - volume: number; - }[]; - /** @default [] */ - expectations?: string[]; - flow?: { - loop?: string | null; - phase: string; - steps: { - fields?: string[]; - from: string; - iface: string; - kind: string; - msg: string; - reachable?: boolean; - scaffold?: { - entity: string; - fields: string[]; - ops: string[]; - }; - /** @enum {string} */ - status: "mapped" | "likely" | "custom" | "unknown"; - to: string; - why?: string; - }[]; - }[]; - /** @default [] */ - gaps?: { - action?: string; - iface?: string; - /** @default */ - note?: string; - scaffold?: { - entity: string; - fields: string[]; - ops: string[]; - }; - title: string; - /** @enum {string} */ - type: "connect" | "custom" | "input" | "blocker" | "gap" | "stale"; - }[]; - /** @default [] */ - integrations?: { - /** @enum {string} */ - access: "read" | "write"; - /** @default */ - detail?: string; - system: string; - via: string; - }[]; - /** @enum {string} */ - kind?: "entity" | "flow" | "task" | "mapping"; - /** @default [] */ - lanes?: string[]; - lifecycle?: { - mode: string; - refresh: string; - replenish: string; - }; - mappingConfig?: { - keyMapName?: string; - maskingPolicyId?: string; - maskingPolicyName?: string; - sourceObject?: string; - sourceSystem?: string; - targetObject?: string; - targetSystem?: string; - }; - mappings?: { - /** @default false */ - generate?: boolean; - keyMapName?: string; - maskingPolicyId?: string; - /** @default */ - note?: string; - sourceField?: string; - /** - * @default open - * @enum {string} - */ - status?: "mapped" | "open" | "needs-review"; - targetField: string; - /** @default */ - transform?: string; - }[]; - /** @default [] */ - steps?: string[]; - tasks?: { - note?: string; - phase: string; - tasks: { - /** @default [] */ - deps?: string[]; - /** @default */ - detail?: string; - key?: string; - /** @enum {string} */ - priority?: "P0" | "P1" | "P2" | "P3"; - title: string; - }[]; - }[]; - version?: { - by: string; - n: number; - when: string; - }; - }; - /** - * @default draft - * @enum {string} - */ - status?: "draft" | "approved" | "running" | "completed" | "failed"; - summary?: string; - /** @default [] */ - targets?: string[]; - title: string; - /** @default false */ - write?: boolean; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + /** @description The saved rows payload (JSON) */ + data?: unknown; + /** @description Short description of the set */ + description?: string; + /** @description Freeze the set on creation (snapshot semantics) */ + locked?: boolean; + name: string; + /** @description The project ID this set belongs to */ + projectId?: string; + /** @description Row count; derived from `data` when omitted */ + rowCount?: number; }; }; }; responses: { - /** @description The created plan */ + /** @description The created set */ 200: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["Plan"]; + "application/json": components["schemas"]["Set"]; }; }; - /** @description The creating team member could not be resolved */ + /** @description The payload exceeds the inline size cap (10,000 rows / 5 MB) */ 400: { headers: { [name: string]: unknown; @@ -5903,9 +14109,18 @@ export interface operations { "application/json": components["schemas"]["ApiError"]; }; }; + /** @description The set could not be created */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; }; }; - getPlansById: { + getSetsById: { parameters: { query?: never; header?: never; @@ -5916,13 +14131,13 @@ export interface operations { }; requestBody?: never; responses: { - /** @description The plan */ + /** @description The set, enriched with the creator's display name */ 200: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["Plan"]; + "application/json": components["schemas"]["SetDetail"]; }; }; /** @description Not authenticated */ @@ -5943,7 +14158,7 @@ export interface operations { "application/json": components["schemas"]["ApiError"]; }; }; - /** @description No plan with that id in the caller's scope */ + /** @description No set with that id in the caller's scope */ 404: { headers: { [name: string]: unknown; @@ -5954,24 +14169,24 @@ export interface operations { }; }; }; - deletePlansByPlanId: { + deleteSetsById: { parameters: { query?: never; header?: never; path: { - planId: string; + id: string; }; cookie?: never; }; requestBody?: never; responses: { - /** @description The plan was deleted */ + /** @description The set was deleted */ 200: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["PlanDeleteResult"]; + "application/json": components["schemas"]["DeletedResult"]; }; }; /** @description Not authenticated */ @@ -5992,8 +14207,17 @@ export interface operations { "application/json": components["schemas"]["ApiError"]; }; }; - /** @description No plan with that id in the caller's scope */ - 404: { + /** @description The set is locked; unlock it before deleting */ + 409: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The set could not be deleted */ + 500: { headers: { [name: string]: unknown; }; @@ -6003,214 +14227,44 @@ export interface operations { }; }; }; - patchPlansByPlanId: { + patchSetsById: { parameters: { query?: never; header?: never; path: { - planId: string; + id: string; }; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - createdFrom?: string; - env?: string; - /** @default [] */ - history?: { - by?: string; - /** @default */ - note?: string; - /** @enum {string} */ - status: "draft" | "approved" | "running" | "completed" | "failed"; - when: string; - }[]; - /** @enum {string} */ - origin?: "chat" | "blueprint" | "intake" | "gap analysis"; - owner?: string; - spec?: { - approval?: { - reason: string; - role: string; - }; - capabilities?: { - expectedCount?: number; - expectedSumCents?: number; - group?: string; - /** @default false */ - hidden?: boolean; - key: string; - name: string; - /** @default */ - note?: string; - setId?: string; - /** - * @default derived - * @enum {string} - */ - source?: "derived" | "manual"; - sumField?: string; - template?: string; - templateId?: string; - }[]; - /** @default [] */ - constraints?: string[]; - coverage?: { - count: number; - family: string; - items: string[]; - }[]; - coverageConfig?: { - /** @default 14 */ - freshnessDays?: number; - /** - * @default release - * @enum {string} - */ - mode?: "release" | "migration"; - sourceSystem?: string; - /** @default 0 */ - sumToleranceCents?: number; - targetSystem?: string; - }; - /** @default [] */ - entities?: { - endpointId?: string; - key: string; - name: string; - /** @default */ - note?: string; - template: string; - templateId?: string; - volume: number; - }[]; - /** @default [] */ - expectations?: string[]; - flow?: { - loop?: string | null; - phase: string; - steps: { - fields?: string[]; - from: string; - iface: string; - kind: string; - msg: string; - reachable?: boolean; - scaffold?: { - entity: string; - fields: string[]; - ops: string[]; - }; - /** @enum {string} */ - status: "mapped" | "likely" | "custom" | "unknown"; - to: string; - why?: string; - }[]; - }[]; - /** @default [] */ - gaps?: { - action?: string; - iface?: string; - /** @default */ - note?: string; - scaffold?: { - entity: string; - fields: string[]; - ops: string[]; - }; - title: string; - /** @enum {string} */ - type: "connect" | "custom" | "input" | "blocker" | "gap" | "stale"; - }[]; - /** @default [] */ - integrations?: { - /** @enum {string} */ - access: "read" | "write"; - /** @default */ - detail?: string; - system: string; - via: string; - }[]; - /** @enum {string} */ - kind?: "entity" | "flow" | "task" | "mapping"; - /** @default [] */ - lanes?: string[]; - lifecycle?: { - mode: string; - refresh: string; - replenish: string; - }; - mappingConfig?: { - keyMapName?: string; - maskingPolicyId?: string; - maskingPolicyName?: string; - sourceObject?: string; - sourceSystem?: string; - targetObject?: string; - targetSystem?: string; - }; - mappings?: { - /** @default false */ - generate?: boolean; - keyMapName?: string; - maskingPolicyId?: string; - /** @default */ - note?: string; - sourceField?: string; - /** - * @default open - * @enum {string} - */ - status?: "mapped" | "open" | "needs-review"; - targetField: string; - /** @default */ - transform?: string; - }[]; - /** @default [] */ - steps?: string[]; - tasks?: { - note?: string; - phase: string; - tasks: { - /** @default [] */ - deps?: string[]; - /** @default */ - detail?: string; - key?: string; - /** @enum {string} */ - priority?: "P0" | "P1" | "P2" | "P3"; - title: string; - }[]; - }[]; - version?: { - by: string; - n: number; - when: string; - }; - }; - /** - * @default draft - * @enum {string} - */ - status?: "draft" | "approved" | "running" | "completed" | "failed"; - summary?: string; - /** @default [] */ - targets?: string[]; - title?: string; - /** @default false */ - write?: boolean; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + data?: unknown; + description?: string | null; + /** @description Lock (freeze) or unlock the set. Locking is always allowed; other edits are rejected while locked. */ + locked?: boolean; + name?: string; + rowCount?: number; }; }; }; responses: { - /** @description The updated plan */ + /** @description The updated set */ 200: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["Plan"]; + "application/json": components["schemas"]["Set"]; + }; + }; + /** @description The payload exceeds the inline size cap (10,000 rows / 5 MB) */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; }; }; /** @description Not authenticated */ @@ -6231,8 +14285,8 @@ export interface operations { "application/json": components["schemas"]["ApiError"]; }; }; - /** @description No plan with that id in the caller's scope */ - 404: { + /** @description The set is locked; unlock it before editing */ + 409: { headers: { [name: string]: unknown; }; @@ -6240,196 +14294,56 @@ export interface operations { "application/json": components["schemas"]["ApiError"]; }; }; - }; - }; - postPlansByPlanIdCheck: { - parameters: { - query?: never; - header?: never; - path: { - planId: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - postPlansByPlanIdRun: { - parameters: { - query?: never; - header?: never; - path: { - planId: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - getPlansByPlanIdRuns: { - parameters: { - query?: never; - header?: never; - path: { - planId: string; + /** @description The set could not be updated */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; }; - cookie?: never; }; - requestBody?: never; - responses: never; }; - getPlansByPlanIdRunsByRunId: { + postSetupTeams: { parameters: { query?: never; header?: never; - path: { - planId: string; - runId: string; - }; + path?: never; cookie?: never; }; requestBody?: never; - responses: never; - }; - postPlansByPlanIdRunsByRunIdComplete: { - parameters: { - query?: never; - header?: never; - path: { - planId: string; - runId: string; - }; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - error?: string; - /** @default 0 */ - rows?: number; - /** @enum {string} */ - status: "completed" | "failed"; + responses: { + /** @description The team, the caller's membership and the first project, all created in one transaction */ + 200: { + headers: { + [name: string]: unknown; }; - }; - }; - responses: never; - }; - postPlansByPlanIdRunsByRunIdFiles: { - parameters: { - query?: never; - header?: never; - path: { - planId: string; - runId: string; - }; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - content: string; - entity: string; - filename: string; - /** @default application/json */ - mimeType?: string; + content: { + "application/json": components["schemas"]["TeamSetupResult"]; }; }; - }; - responses: never; - }; - postPlansByPlanIdRunsByRunIdLog: { - parameters: { - query?: never; - header?: never; - path: { - planId: string; - runId: string; - }; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - /** - * @default info - * @enum {string} - */ - level?: "info" | "warn" | "error"; - message: string; + /** @description No user id on the authenticated scope */ + 401: { + headers: { + [name: string]: unknown; }; - }; - }; - responses: never; - }; - getPlansByPlanIdSignoffs: { - parameters: { - query?: never; - header?: never; - path: { - planId: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - postPlansByPlanIdSignoffs: { - parameters: { - query?: never; - header?: never; - path: { - planId: string; - }; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - note?: string; - runId: string; + content: { + "application/json": components["schemas"]["ApiError"]; }; }; - }; - responses: never; - }; - postPlansByPlanIdStatus: { - parameters: { - query?: never; - header?: never; - path: { - planId: string; - }; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - history?: { - by?: string; - /** @default */ - note?: string; - /** @enum {string} */ - status: "draft" | "approved" | "running" | "completed" | "failed"; - when: string; - }; - /** @enum {string} */ - status: "draft" | "approved" | "running" | "completed" | "failed"; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; }; }; }; - responses: never; - }; - postPreview: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: never; }; - getProjects: { + getShortcuts: { parameters: { query?: never; header?: never; @@ -6438,13 +14352,13 @@ export interface operations { }; requestBody?: never; responses: { - /** @description Projects the caller can access */ + /** @description The caller's shortcut bindings */ 200: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["Project"][]; + "application/json": components["schemas"]["Shortcut"][]; }; }; /** @description Not authenticated */ @@ -6467,7 +14381,7 @@ export interface operations { }; }; }; - postProjects: { + postShortcuts: { parameters: { query?: never; header?: never; @@ -6477,22 +14391,23 @@ export interface operations { requestBody?: { content: { "application/json": { - avatar?: string; - description?: string; - id?: string; - name: string; - teamId: string; + /** @enum {string} */ + context: "GLOBAL" | "TEMPLATE_PAGE" | "EDIT_TEMPLATE"; + function: string; + id: string; + keys: string[]; + userId: string; }; }; }; responses: { - /** @description The created project */ + /** @description The created binding */ 200: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["Project"]; + "application/json": components["schemas"]["Shortcut"]; }; }; /** @description Not authenticated */ @@ -6515,24 +14430,35 @@ export interface operations { }; }; }; - getProjectsById: { + putShortcutsById: { parameters: { query?: never; header?: never; path: { id: string; }; - cookie?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + /** @enum {string} */ + context: "GLOBAL" | "TEMPLATE_PAGE" | "EDIT_TEMPLATE"; + function: string; + id: string; + keys: string[]; + userId: string; + }; + }; }; - requestBody?: never; responses: { - /** @description The project */ + /** @description The updated binding */ 200: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["Project"]; + "application/json": components["schemas"]["Shortcut"]; }; }; /** @description Not authenticated */ @@ -6553,18 +14479,9 @@ export interface operations { "application/json": components["schemas"]["ApiError"]; }; }; - /** @description No project with that id in the caller's scope */ - 404: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["ApiError"]; - }; - }; }; }; - putProjectsById: { + deleteShortcutsById: { parameters: { query?: never; header?: never; @@ -6573,25 +14490,15 @@ export interface operations { }; cookie?: never; }; - requestBody?: { - content: { - "application/json": { - avatar?: string; - description?: string; - id?: string; - name: string; - teamId: string; - }; - }; - }; + requestBody?: never; responses: { - /** @description The updated project */ + /** @description The binding was deleted */ 200: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["Project"]; + "application/json": components["schemas"]["DeletedResult"]; }; }; /** @description Not authenticated */ @@ -6612,7 +14519,7 @@ export interface operations { "application/json": components["schemas"]["ApiError"]; }; }; - /** @description No project with that id in the caller's scope */ + /** @description No shortcut with that id */ 404: { headers: { [name: string]: unknown; @@ -6623,24 +14530,22 @@ export interface operations { }; }; }; - deleteProjectsById: { + getSkills: { parameters: { query?: never; header?: never; - path: { - id: string; - }; + path?: never; cookie?: never; }; requestBody?: never; responses: { - /** @description The project was deleted */ + /** @description Team skills followed by the built-ins. Mixed list - discriminate on `scope` */ 200: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["DeletedResult"]; + "application/json": components["schemas"]["Skill"][]; }; }; /** @description Not authenticated */ @@ -6661,28 +14566,9 @@ export interface operations { "application/json": components["schemas"]["ApiError"]; }; }; - /** @description No project with that id in the caller's scope */ - 404: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["ApiError"]; - }; - }; - }; - }; - getRoles: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; }; - requestBody?: never; - responses: never; }; - postRoles: { + postSkills: { parameters: { query?: never; header?: never; @@ -6692,49 +14578,46 @@ export interface operations { requestBody?: { content: { "application/json": { - description?: string; + body: string; + description: string; + enabled?: boolean; name: string; - /** @default [] */ - permissions?: string[]; + projectId?: string | null; teamId: string; }; }; }; - responses: never; - }; - putRolesById: { - parameters: { - query?: never; - header?: never; - path: { - id: string; + responses: { + /** @description The created skill */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["TeamSkill"]; + }; }; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - description?: string | null; - name?: string; - permissions?: string[]; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; }; }; - }; - responses: never; - }; - deleteRolesById: { - parameters: { - query?: never; - header?: never; - path: { - id: string; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; }; - cookie?: never; }; - requestBody?: never; - responses: never; }; - "postScenario-files": { + postSkillsImport: { parameters: { query?: never; header?: never; @@ -6745,172 +14628,159 @@ export interface operations { content: { "application/json": { content: string; - description?: string; - folderId?: string; - mimeType?: string; - name: string; - projectId?: string; - scenarioId: string; - size: number; + enabled?: boolean; + projectId?: string | null; teamId: string; }; }; }; - responses: never; - }; - getScenarios: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - postScenarios: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - createdAt?: string; - /** @description A valid team member id */ - createdBy?: string; - /** @description Short description of what this scenario does */ - description?: string; - name: string; - presignedUrl?: string; - /** @description The project ID this scenario belongs to */ - projectId?: string; - requirementsUrl?: string; - /** @description The team ID this scenario belongs to */ - teamId?: string; - /** @description Execution timeout in seconds (60–3600) */ - timeoutSeconds?: number; + responses: { + /** @description The skill created from the uploaded SKILL.md */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["TeamSkill"]; }; }; - }; - responses: never; - }; - postScenariosExecute: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - /** @default false */ - async?: boolean; - /** @description Optional inline code to execute instead of saved script */ - code?: string; - /** @description The project ID this scenario belongs to */ - projectId: string; - /** @description The scenario ID to execute */ - scenarioId?: string; - /** - * @description What initiated the run. UI clients omit this (defaults to 'manual'). The chat agent must send 'agent' so the run can be visually distinguished in scenario history. - * @default manual - * @enum {string} - */ - source?: "manual" | "agent" | "mcp"; + /** @description The file could not be parsed as SKILL.md */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; }; }; - }; - responses: never; - }; - "postScenariosFrom-chat": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - /** @description The chat whose thread should become a scenario */ - chatId: string; - /** @description The project the chat and scenario belong to */ - projectId: string; - /** @description Optional client-side thread snapshot (richer than the persisted row: includes tool-call summaries) */ - thread?: { - turns: { - prompt: string; - reply: string; - toolSummaries?: string[]; - }[]; - }; - /** @description Execution timeout in seconds (60–3600) */ - timeoutSeconds?: number; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; }; }; - }; - responses: never; - }; - postScenariosJobsByJobIdCancel: { - parameters: { - query?: never; - header?: never; - path: { - jobId: string; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; }; - cookie?: never; }; - requestBody?: never; - responses: never; }; - getScenariosJobsByJobIdLogsStream: { + getSkillsById: { parameters: { query?: never; header?: never; path: { - jobId: string; + id: string; }; cookie?: never; }; requestBody?: never; - responses: never; - }; - getScenariosJobsByJobIdStatus: { - parameters: { - query?: never; - header?: never; - path: { - jobId: string; + responses: { + /** @description The team skill */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["TeamSkill"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No skill with that id for this team */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; }; - cookie?: never; }; - requestBody?: never; - responses: never; }; - postScenariosSave: { + putSkillsById: { parameters: { query?: never; header?: never; - path?: never; + path: { + id: string; + }; cookie?: never; }; requestBody?: { content: { "application/json": { - code: string; + body?: string; + description?: string; + enabled?: boolean; name?: string; - /** @description Execution timeout in seconds (60–3600) */ - timeoutSeconds?: number; }; }; }; - responses: never; + responses: { + /** @description The updated skill */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["TeamSkill"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No skill with that id for this team */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; }; - getScenariosById: { + deleteSkillsById: { parameters: { query?: never; header?: never; @@ -6920,9 +14790,46 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; + responses: { + /** @description The skill was deleted */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["DeletedResult"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No skill with that id for this team */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; }; - deleteScenariosById: { + getSkillsByIdExport: { parameters: { query?: never; header?: never; @@ -6932,83 +14839,201 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; + responses: { + /** @description The SKILL.md document: YAML frontmatter followed by the markdown body */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/markdown": string; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No skill with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; }; - patchScenariosById: { + getTeamMembers: { parameters: { query?: never; header?: never; - path: { - id: string; - }; + path?: never; cookie?: never; }; - requestBody?: { - content: { - "application/json": { - createdAt?: string; - /** @description A valid team member id */ - createdBy?: string; - /** @description Short description of what this scenario does */ - description?: string; - name: string; - presignedUrl?: string; - /** @description The project ID this scenario belongs to */ - projectId?: string; - requirementsUrl?: string; - /** @description The team ID this scenario belongs to */ - teamId?: string; - /** @description Execution timeout in seconds (60–3600) */ - timeoutSeconds?: number; + requestBody?: never; + responses: { + /** @description Memberships in the caller's accessible teams. Each also carries its Team, Shortcuts, User and CustomRoles relations */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["TeamMember"][]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; }; }; }; - responses: never; }; - postScenariosByIdDiagramRegenerate: { + postTeamMembers: { parameters: { query?: never; header?: never; - path: { - id: string; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + id?: string; + /** @enum {string} */ + role: "MEMBER" | "ADMIN" | "OWNER"; + teamId: string; + userId: string; + }; + }; + }; + responses: { + /** @description The created membership */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["TeamMember"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; }; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - "getScenariosByIdEnvironment-variables": { - parameters: { - query?: never; - header?: never; - path: { - id: string; + /** @description No seat available on the team's plan */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; }; - cookie?: never; }; - requestBody?: never; - responses: never; }; - "postScenariosByIdEnvironment-variables": { + postTeamMembersInvite: { parameters: { query?: never; header?: never; - path: { - id: string; - }; + path?: never; cookie?: never; }; requestBody?: { content: { "application/json": { - key: string; - value: string; + /** Format: email */ + email: string; + /** + * @default MEMBER + * @enum {string} + */ + role?: "MEMBER" | "ADMIN" | "OWNER"; + teamId: string; + }; + }; + }; + responses: { + /** @description The created membership, flattened with the invited user's first and last name */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MemberInviteResult"]; + }; + }; + /** @description That user is already a member of the team */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + /** @description The team has no seat available under its current license */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; + }; + }; + /** @description No user with that email */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiMessageError"]; }; }; }; - responses: never; }; - "patchScenariosByIdEnvironment-variables": { + putTeamMembersById: { parameters: { query?: never; header?: never; @@ -7020,90 +15045,91 @@ export interface operations { requestBody?: { content: { "application/json": { - environmentVariables: { - [key: string]: string; - }; + /** @enum {string} */ + role: "MEMBER" | "ADMIN" | "OWNER"; }; }; }; - responses: never; - }; - "deleteScenariosByIdEnvironment-variablesByKey": { - parameters: { - query?: never; - header?: never; - path: { - id: string; - key: string; + responses: { + /** @description The updated membership */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["TeamMember"]; + }; }; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - getScenariosByScenarioIdFiles: { - parameters: { - query?: never; - header?: never; - path: { - scenarioId: string; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; }; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - postScenariosByScenarioIdFilesUpload: { - parameters: { - query?: never; - header?: never; - path: { - scenarioId: string; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; }; - cookie?: never; }; - requestBody?: never; - responses: never; }; - getScenariosByScenarioIdFilesByFileId: { + deleteTeamMembersById: { parameters: { query?: never; header?: never; path: { - scenarioId: string; - fileId: string; + id: string; }; cookie?: never; }; requestBody?: never; - responses: never; - }; - deleteScenariosByScenarioIdFilesByFileId: { - parameters: { - query?: never; - header?: never; - path: { - scenarioId: string; - fileId: string; + responses: { + /** @description The membership was removed */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["DeletedResult"]; + }; }; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - getScenariosByScenarioIdStorage: { - parameters: { - query?: never; - header?: never; - path: { - scenarioId: string; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No team member with that id */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; }; - cookie?: never; }; - requestBody?: never; - responses: never; }; - "postSchema-graphByIdDiff": { + postTeamMembersByIdRoles: { parameters: { query?: never; header?: never; @@ -7112,99 +15138,189 @@ export interface operations { }; cookie?: never; }; - requestBody?: never; - responses: never; - }; - "getSchema-graphByIdEntityByName": { - parameters: { - query?: never; - header?: never; - path: { - id: string; - name: string; + requestBody?: { + content: { + "application/json": { + roleId: string; + }; + }; + }; + responses: { + /** @description The role assignment. Idempotent - re-assigning an existing role returns the same row */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["MemberRoleAssignment"]; + }; + }; + /** @description That role is a system role, which is governed by the member's base role instead */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No role with that id on this team */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; }; - cookie?: never; }; - requestBody?: never; - responses: never; }; - "postSchema-graphByIdEntityByNameConnect": { + deleteTeamMembersByIdRolesByRoleId: { parameters: { query?: never; header?: never; path: { id: string; - name: string; + roleId: string; }; cookie?: never; }; requestBody?: never; - responses: never; - }; - "postSchema-graphByIdEntityByNamePreview": { - parameters: { - query?: never; - header?: never; - path: { - id: string; - name: string; + responses: { + /** @description The custom role was unassigned */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["DeletedResult"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; }; - cookie?: never; }; - requestBody?: never; - responses: never; }; - "postSchema-graphByIdEntityByNameSample": { + getTeams: { parameters: { query?: never; header?: never; - path: { - id: string; - name: string; - }; + path?: never; cookie?: never; }; requestBody?: never; - responses: never; - }; - "postSchema-graphByIdEntityByNameTemplate": { - parameters: { - query?: never; - header?: never; - path: { - id: string; - name: string; + responses: { + /** @description Teams the caller belongs to */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Team"][]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; }; - cookie?: never; }; - requestBody?: never; - responses: never; }; - "getSchema-graphByIdPath": { + postTeams: { parameters: { query?: never; header?: never; - path: { - id: string; - }; + path?: never; cookie?: never; }; - requestBody?: never; - responses: never; - }; - "postSchema-graphByIdRefresh": { - parameters: { - query?: never; - header?: never; - path: { - id: string; + requestBody?: { + content: { + "application/json": { + avatar?: string; + createdAt?: string; + id?: string; + name: string; + updatedAt?: string; + }; + }; + }; + responses: { + /** @description The created team */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Team"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; }; - cookie?: never; }; - requestBody?: never; - responses: never; }; - "getSchema-graphByIdSearch": { + putTeamsById: { parameters: { query?: never; header?: never; @@ -7213,10 +15329,48 @@ export interface operations { }; cookie?: never; }; - requestBody?: never; - responses: never; + requestBody?: { + content: { + "application/json": { + avatar?: string; + createdAt?: string; + id?: string; + name: string; + updatedAt?: string; + }; + }; + }; + responses: { + /** @description The updated team */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Team"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; }; - "getSchema-graphByIdServices": { + deleteTeamsById: { parameters: { query?: never; header?: never; @@ -7226,9 +15380,37 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; + responses: { + /** @description The team was deleted */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["DeletedResult"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; }; - getSets: { + getTemplateFolders: { parameters: { query?: never; header?: never; @@ -7237,13 +15419,13 @@ export interface operations { }; requestBody?: never; responses: { - /** @description Sets in scope, newest first */ + /** @description Template folders in scope */ 200: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["Set"][]; + "application/json": components["schemas"]["TemplateFolder"][]; }; }; /** @description Not authenticated */ @@ -7266,7 +15448,7 @@ export interface operations { }; }; }; - postSets: { + postTemplateFolders: { parameters: { query?: never; header?: never; @@ -7276,37 +15458,23 @@ export interface operations { requestBody?: { content: { "application/json": { - /** @description The saved rows payload (JSON) */ - data?: unknown; - /** @description Short description of the set */ - description?: string; - /** @description Freeze the set on creation (snapshot semantics) */ - locked?: boolean; + createdBy: string; + id?: string; + isDatabase?: boolean; name: string; - /** @description The project ID this set belongs to */ - projectId?: string; - /** @description Row count; derived from `data` when omitted */ - rowCount?: number; + projectId: string; + teamId: string; }; }; }; - responses: { - /** @description The created set */ - 200: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["Set"]; - }; - }; - /** @description The payload exceeds the inline size cap (10,000 rows / 5 MB) */ - 400: { + responses: { + /** @description The created folder */ + 200: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["ApiError"]; + "application/json": components["schemas"]["TemplateFolder"]; }; }; /** @description Not authenticated */ @@ -7327,18 +15495,9 @@ export interface operations { "application/json": components["schemas"]["ApiError"]; }; }; - /** @description The set could not be created */ - 500: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["ApiError"]; - }; - }; }; }; - getSetsById: { + putTemplateFoldersById: { parameters: { query?: never; header?: never; @@ -7347,15 +15506,26 @@ export interface operations { }; cookie?: never; }; - requestBody?: never; + requestBody?: { + content: { + "application/json": { + createdBy?: string; + id?: string; + isDatabase?: boolean; + name: string; + projectId?: string; + teamId?: string; + }; + }; + }; responses: { - /** @description The set, enriched with the creator's display name */ + /** @description The updated folder */ 200: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["SetDetail"]; + "application/json": components["schemas"]["TemplateFolder"]; }; }; /** @description Not authenticated */ @@ -7376,18 +15546,9 @@ export interface operations { "application/json": components["schemas"]["ApiError"]; }; }; - /** @description No set with that id in the caller's scope */ - 404: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["ApiError"]; - }; - }; }; }; - deleteSetsById: { + deleteTemplateFoldersById: { parameters: { query?: never; header?: never; @@ -7398,7 +15559,7 @@ export interface operations { }; requestBody?: never; responses: { - /** @description The set was deleted */ + /** @description The folder was deleted */ 200: { headers: { [name: string]: unknown; @@ -7425,64 +15586,24 @@ export interface operations { "application/json": components["schemas"]["ApiError"]; }; }; - /** @description The set is locked; unlock it before deleting */ - 409: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["ApiError"]; - }; - }; - /** @description The set could not be deleted */ - 500: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["ApiError"]; - }; - }; }; }; - patchSetsById: { + getTemplates: { parameters: { query?: never; header?: never; - path: { - id: string; - }; + path?: never; cookie?: never; }; - requestBody?: { - content: { - "application/json": { - data?: unknown; - description?: string | null; - /** @description Lock (freeze) or unlock the set. Locking is always allowed; other edits are rejected while locked. */ - locked?: boolean; - name?: string; - rowCount?: number; - }; - }; - }; + requestBody?: never; responses: { - /** @description The updated set */ + /** @description Templates in the caller's team/project scope */ 200: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["Set"]; - }; - }; - /** @description The payload exceeds the inline size cap (10,000 rows / 5 MB) */ - 400: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["ApiError"]; + "application/json": components["schemas"]["Template"][]; }; }; /** @description Not authenticated */ @@ -7503,47 +15624,9 @@ export interface operations { "application/json": components["schemas"]["ApiError"]; }; }; - /** @description The set is locked; unlock it before editing */ - 409: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["ApiError"]; - }; - }; - /** @description The set could not be updated */ - 500: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["ApiError"]; - }; - }; - }; - }; - postSetupTeams: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - getShortcuts: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; }; - requestBody?: never; - responses: never; }; - postShortcuts: { + postTemplates: { parameters: { query?: never; header?: never; @@ -7553,103 +15636,66 @@ export interface operations { requestBody?: { content: { "application/json": { - /** @enum {string} */ - context: "GLOBAL" | "TEMPLATE_PAGE" | "EDIT_TEMPLATE"; - function: string; - id: string; - keys: string[]; - userId: string; + createdAt?: string; + /** @description A valid team member id */ + createdBy?: string; + /** @description Not sure if this is needed */ + dbOrderIdx?: number; + /** @default [] */ + fields?: { + active: boolean; + name: string; + nested?: { + [key: string]: unknown; + }[]; + options?: unknown; + type: string; + }[]; + name: string; + projectId: string; + /** @default null */ + seed?: number | null; + simulationConfig?: { + isSimulationVisible: boolean; + period: number; + }; + teamId: string; + /** @default null */ + templateFolderId?: string | null; }; }; }; - responses: never; - }; - putShortcutsById: { - parameters: { - query?: never; - header?: never; - path: { - id: string; - }; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - /** @enum {string} */ - context: "GLOBAL" | "TEMPLATE_PAGE" | "EDIT_TEMPLATE"; - function: string; - id: string; - keys: string[]; - userId: string; + responses: { + /** @description The created template */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Template"]; }; }; - }; - responses: never; - }; - deleteShortcutsById: { - parameters: { - query?: never; - header?: never; - path: { - id: string; - }; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - getSkills: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - postSkills: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - body: string; - description: string; - enabled?: boolean; - name: string; - projectId?: string | null; - teamId: string; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; }; }; - }; - responses: never; - }; - postSkillsImport: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - content: string; - enabled?: boolean; - projectId?: string | null; - teamId: string; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; }; }; }; - responses: never; }; - getSkillsById: { + getTemplatesById: { parameters: { query?: never; header?: never; @@ -7659,42 +15705,46 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; - }; - putSkillsById: { - parameters: { - query?: never; - header?: never; - path: { - id: string; + responses: { + /** @description The template */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Template"]; + }; }; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - body?: string; - description?: string; - enabled?: boolean; - name?: string; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; }; }; - }; - responses: never; - }; - deleteSkillsById: { - parameters: { - query?: never; - header?: never; - path: { - id: string; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No template with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; }; - cookie?: never; }; - requestBody?: never; - responses: never; }; - getSkillsByIdExport: { + putTemplatesById: { parameters: { query?: never; header?: never; @@ -7703,82 +15753,87 @@ export interface operations { }; cookie?: never; }; - requestBody?: never; - responses: never; - }; - getTeamMembers: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - postTeamMembers: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; requestBody?: { content: { "application/json": { - id?: string; - /** @enum {string} */ - role: "MEMBER" | "ADMIN" | "OWNER"; + createdAt?: string; + /** @description A valid team member id */ + createdBy?: string; + /** @description Not sure if this is needed */ + dbOrderIdx?: number; + /** @default [] */ + fields?: { + active: boolean; + name: string; + nested?: { + [key: string]: unknown; + }[]; + options?: unknown; + type: string; + }[]; + name: string; + projectId: string; + /** @default null */ + seed?: number | null; + simulationConfig?: { + isSimulationVisible: boolean; + period: number; + }; teamId: string; - userId: string; + /** @default null */ + templateFolderId?: string | null; }; }; }; - responses: never; - }; - postTeamMembersInvite: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - /** Format: email */ - email: string; - /** - * @default MEMBER - * @enum {string} - */ - role?: "MEMBER" | "ADMIN" | "OWNER"; - teamId: string; + responses: { + /** @description The updated template */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Template"]; }; }; - }; - responses: never; - }; - putTeamMembersById: { - parameters: { - query?: never; - header?: never; - path: { - id: string; + /** @description The template has no team */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; }; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - /** @enum {string} */ - role: "MEMBER" | "ADMIN" | "OWNER"; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No template with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; }; }; }; - responses: never; }; - deleteTeamMembersById: { + deleteTemplatesById: { parameters: { query?: never; header?: never; @@ -7788,40 +15843,46 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; - }; - postTeamMembersByIdRoles: { - parameters: { - query?: never; - header?: never; - path: { - id: string; + responses: { + /** @description The template was deleted */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["DeletedResult"]; + }; }; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - roleId: string; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; }; }; - }; - responses: never; - }; - deleteTeamMembersByIdRolesByRoleId: { - parameters: { - query?: never; - header?: never; - path: { - id: string; - roleId: string; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description No template with that id in the caller's scope */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; }; - cookie?: never; }; - requestBody?: never; - responses: never; }; - getTeams: { + postUpload: { parameters: { query?: never; header?: never; @@ -7829,63 +15890,111 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; + responses: { + /** @description Where the file landed and a short-lived URL to fetch it */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["UploadResult"]; + }; + }; + /** @description No file, an unsupported type, an oversized file, or no determinable extension */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The upload failed */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; }; - postTeams: { + "postUpload-csv": { parameters: { query?: never; header?: never; path?: never; cookie?: never; }; - requestBody?: { - content: { - "application/json": { - avatar?: string; - createdAt?: string; - id?: string; - name: string; - updatedAt?: string; + requestBody?: never; + responses: { + /** @description The stored key and a presigned download URL */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["UploadResult"]; }; }; - }; - responses: never; - }; - putTeamsById: { - parameters: { - query?: never; - header?: never; - path: { - id: string; + /** @description No file in the form data, a file that is not a CSV, or one over 10MB */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; }; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - avatar?: string; - createdAt?: string; - id?: string; - name: string; - updatedAt?: string; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; }; }; - }; - responses: never; - }; - deleteTeamsById: { - parameters: { - query?: never; - header?: never; - path: { - id: string; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The upload to blob storage failed */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; }; - cookie?: never; }; - requestBody?: never; - responses: never; }; - getTemplateFolders: { + "postUpload-csv-batch": { parameters: { query?: never; header?: never; @@ -7893,9 +16002,64 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; + responses: { + /** @description One entry per file, with `deduped` true where identical content was already stored */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["CsvBatchUploadResult"]; + }; + }; + /** @description Malformed JSON body, no files, or more than 30 files */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["CsvBatchUploadError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["CsvBatchUploadError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["CsvBatchUploadError"]; + }; + }; + /** @description A single file is over 10MB, or the batch is over 50MB in total */ + 413: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["CsvBatchUploadError"]; + }; + }; + /** @description R2_BUCKET_NAME is unset, or the upload failed */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["CsvBatchUploadError"]; + }; + }; + }; }; - postTemplateFolders: { + "postUpload-text": { parameters: { query?: never; header?: never; @@ -7905,53 +16069,64 @@ export interface operations { requestBody?: { content: { "application/json": { - createdBy: string; - id?: string; - isDatabase?: boolean; - name: string; - projectId: string; - teamId: string; + chatId?: string; + filename: string; + mimeType?: string; + /** @enum {string} */ + source?: "agent" | "upload"; + text: string; }; }; }; - responses: never; - }; - putTemplateFoldersById: { - parameters: { - query?: never; - header?: never; - path: { - id: string; + responses: { + /** @description The stored key and a presigned URL, plus the chat asset id when a chatId was given */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["UploadTextResult"]; + }; }; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - createdBy?: string; - id?: string; - isDatabase?: boolean; - name: string; - projectId?: string; - teamId?: string; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; }; }; - }; - responses: never; - }; - deleteTemplateFoldersById: { - parameters: { - query?: never; - header?: never; - path: { - id: string; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description A chatId was supplied but no chat with that id exists */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The upload to blob storage failed */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; }; - cookie?: never; }; - requestBody?: never; - responses: never; }; - getTemplates: { + getUsers: { parameters: { query?: never; header?: never; @@ -7960,13 +16135,13 @@ export interface operations { }; requestBody?: never; responses: { - /** @description Templates in the caller's team/project scope */ + /** @description The caller's own user record. Credential columns are omitted client-wide (#2898) */ 200: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["Template"][]; + "application/json": components["schemas"]["User"][]; }; }; /** @description Not authenticated */ @@ -7989,7 +16164,7 @@ export interface operations { }; }; }; - postTemplates: { + postUsers: { parameters: { query?: never; header?: never; @@ -7999,43 +16174,25 @@ export interface operations { requestBody?: { content: { "application/json": { + autoSave?: boolean; + avatar?: string; createdAt?: string; - /** @description A valid team member id */ - createdBy?: string; - /** @description Not sure if this is needed */ - dbOrderIdx?: number; - /** @default [] */ - fields?: { - active: boolean; - name: string; - nested?: { - [key: string]: unknown; - }[]; - options?: unknown; - type: string; - }[]; - name: string; - projectId: string; - /** @default null */ - seed?: number | null; - simulationConfig?: { - isSimulationVisible: boolean; - period: number; - }; - teamId: string; - /** @default null */ - templateFolderId?: string | null; + /** Format: email */ + email: string; + firstName: string; + id: string; + lastName: string; }; }; }; responses: { - /** @description The created template */ + /** @description The created user */ 200: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["Template"]; + "application/json": components["schemas"]["User"]; }; }; /** @description Not authenticated */ @@ -8058,24 +16215,22 @@ export interface operations { }; }; }; - getTemplatesById: { + postUsersLogout: { parameters: { query?: never; header?: never; - path: { - id: string; - }; + path?: never; cookie?: never; }; requestBody?: never; responses: { - /** @description The template */ + /** @description The auth cookie was cleared */ 200: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["Template"]; + "application/json": components["schemas"]["DeletedResult"]; }; }; /** @description Not authenticated */ @@ -8096,75 +16251,24 @@ export interface operations { "application/json": components["schemas"]["ApiError"]; }; }; - /** @description No template with that id in the caller's scope */ - 404: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["ApiError"]; - }; - }; }; }; - putTemplatesById: { + getUsersMe: { parameters: { query?: never; header?: never; - path: { - id: string; - }; + path?: never; cookie?: never; }; - requestBody?: { - content: { - "application/json": { - createdAt?: string; - /** @description A valid team member id */ - createdBy?: string; - /** @description Not sure if this is needed */ - dbOrderIdx?: number; - /** @default [] */ - fields?: { - active: boolean; - name: string; - nested?: { - [key: string]: unknown; - }[]; - options?: unknown; - type: string; - }[]; - name: string; - projectId: string; - /** @default null */ - seed?: number | null; - simulationConfig?: { - isSimulationVisible: boolean; - period: number; - }; - teamId: string; - /** @default null */ - templateFolderId?: string | null; - }; - }; - }; + requestBody?: never; responses: { - /** @description The updated template */ + /** @description The caller's identity from the auth scope, with avatar filled from the token's picture claim */ 200: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["Template"]; - }; - }; - /** @description The template has no team */ - 400: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["ApiError"]; + "application/json": components["schemas"]["CurrentUser"]; }; }; /** @description Not authenticated */ @@ -8185,35 +16289,24 @@ export interface operations { "application/json": components["schemas"]["ApiError"]; }; }; - /** @description No template with that id in the caller's scope */ - 404: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["ApiError"]; - }; - }; }; }; - deleteTemplatesById: { + getUsersMePermissions: { parameters: { query?: never; header?: never; - path: { - id: string; - }; + path?: never; cookie?: never; }; requestBody?: never; responses: { - /** @description The template was deleted */ + /** @description Effective permissions for the requested or default team */ 200: { headers: { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["DeletedResult"]; + "application/json": components["schemas"]["EffectivePermissions"]; }; }; /** @description Not authenticated */ @@ -8234,122 +16327,9 @@ export interface operations { "application/json": components["schemas"]["ApiError"]; }; }; - /** @description No template with that id in the caller's scope */ - 404: { - headers: { - [name: string]: unknown; - }; - content: { - "application/json": components["schemas"]["ApiError"]; - }; - }; - }; - }; - postUpload: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - "postUpload-csv": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - "postUpload-csv-batch": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - "postUpload-text": { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - chatId?: string; - filename: string; - mimeType?: string; - /** @enum {string} */ - source?: "agent" | "upload"; - text: string; - }; - }; - }; - responses: never; - }; - getUsers: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - postUsers: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: { - content: { - "application/json": { - autoSave?: boolean; - avatar?: string; - createdAt?: string; - /** Format: email */ - email: string; - firstName: string; - id: string; - lastName: string; - }; - }; - }; - responses: never; - }; - postUsersLogout: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; - }; - requestBody?: never; - responses: never; - }; - getUsersMe: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; }; - requestBody?: never; - responses: never; }; - getUsersMePermissions: { + getUsersMePreferences: { parameters: { query?: never; header?: never; @@ -8357,17 +16337,35 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; - }; - getUsersMePreferences: { - parameters: { - query?: never; - header?: never; - path?: never; - cookie?: never; + responses: { + /** @description The caller's UI preferences; theme is null when unset */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["UserPreferences"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; }; - requestBody?: never; - responses: never; }; patchUsersMePreferences: { parameters: { @@ -8377,7 +16375,53 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; + responses: { + /** @description The stored theme */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PreferencesUpdateResult"]; + }; + }; + /** @description No theme in the body */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PreferencesUpdateError"]; + }; + }; + /** @description No user id on the authenticated scope (this body is a bare `{ ok: false }`) */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PreferencesUpdateError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PreferencesUpdateError"]; + }; + }; + /** @description The write failed */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PreferencesUpdateError"]; + }; + }; + }; }; postUsersProvision: { parameters: { @@ -8387,7 +16431,44 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; + responses: { + /** @description Provisioning outcome as a message; the status carries the meaning */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["DeletedResult"]; + }; + }; + /** @description No user information on the request */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not a user-scoped API key, or the account was recently deleted */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Re-provisioning failed */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; }; putUsersById: { parameters: { @@ -8412,7 +16493,35 @@ export interface operations { }; }; }; - responses: never; + responses: { + /** @description The updated user */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["User"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; }; deleteUsersById: { parameters: { @@ -8424,7 +16533,35 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; + responses: { + /** @description The user was deleted */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["DeletedResult"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; }; patchUsersById: { parameters: { @@ -8436,7 +16573,35 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; + responses: { + /** @description The updated user */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["User"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; }; getValidateApiKey: { parameters: { @@ -8446,7 +16611,35 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; + responses: { + /** @description The key authenticated. Only `message` is returned - no key details */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiKeyValidation"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description The caller lacks the required permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; }; "getWorkspace-filesBy-key": { parameters: { @@ -8456,6 +16649,52 @@ export interface operations { cookie?: never; }; requestBody?: never; - responses: never; + responses: { + /** @description The file for that storage key, with a freshly signed URL */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ScenarioFile"]; + }; + }; + /** @description Missing the key query parameter */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not authenticated */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description Not a member of the scenario's team */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + /** @description File not found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiError"]; + }; + }; + }; }; }