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"]; + }; + }; + }; }; }