{
  "openapi": "3.1.0",
  "info": {
    "title": "Ontologic workspace API",
    "version": "1.2.0-private-pilot",
    "description": "Immutable private IFC API, existing Rhino adapters, and default-off integration pilot. Server indexes, versioned view/filter/dashboard writes, paired commands and private MCP require separately approved schema/worker activation. Existing keys do not gain new permissions. Hosted OAuth, public plugin listing and viewer consumer UI wiring remain unavailable."
  },
  "servers": [
    {
      "url": "/api/v1",
      "description": "Same-host API"
    }
  ],
  "security": [
    {
      "BearerKey": []
    }
  ],
  "paths": {
    "/whoami": {
      "get": {
        "operationId": "whoami",
        "summary": "Effective workspace identity",
        "description": "All resource IDs are scoped to the key's workspace and project restrictions.",
        "security": [
          {
            "BearerKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Cache-Control": {
                "schema": {
                  "const": "private, no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Whoami"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400"
          },
          "401": {
            "$ref": "#/components/responses/Error401"
          },
          "403": {
            "$ref": "#/components/responses/Error403"
          },
          "404": {
            "$ref": "#/components/responses/Error404"
          },
          "409": {
            "$ref": "#/components/responses/Error409"
          },
          "410": {
            "$ref": "#/components/responses/Error410"
          },
          "413": {
            "$ref": "#/components/responses/Error413"
          },
          "415": {
            "$ref": "#/components/responses/Error415"
          },
          "422": {
            "$ref": "#/components/responses/Error422"
          },
          "429": {
            "$ref": "#/components/responses/Error429"
          },
          "503": {
            "$ref": "#/components/responses/Error503"
          }
        }
      }
    },
    "/projects": {
      "get": {
        "operationId": "listProjects",
        "summary": "List allowed projects",
        "description": "Required effective scope: projects:read. All resource IDs are scoped to the key's workspace and project restrictions.",
        "security": [
          {
            "BearerKey": []
          }
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "The previous response's nextCursor. Ascending UUID order; keyset pagination is not a frozen snapshot.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Cache-Control": {
                "schema": {
                  "const": "private, no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "items": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/Project"
                          }
                        },
                        "nextCursor": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "uuid"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "items",
                        "nextCursor"
                      ],
                      "additionalProperties": false
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400"
          },
          "401": {
            "$ref": "#/components/responses/Error401"
          },
          "403": {
            "$ref": "#/components/responses/Error403"
          },
          "404": {
            "$ref": "#/components/responses/Error404"
          },
          "409": {
            "$ref": "#/components/responses/Error409"
          },
          "410": {
            "$ref": "#/components/responses/Error410"
          },
          "413": {
            "$ref": "#/components/responses/Error413"
          },
          "415": {
            "$ref": "#/components/responses/Error415"
          },
          "422": {
            "$ref": "#/components/responses/Error422"
          },
          "429": {
            "$ref": "#/components/responses/Error429"
          },
          "503": {
            "$ref": "#/components/responses/Error503"
          }
        }
      },
      "post": {
        "operationId": "createProject",
        "summary": "Create a project",
        "description": "Required effective scope: projects:write. All resource IDs are scoped to the key's workspace and project restrictions.",
        "security": [
          {
            "BearerKey": []
          }
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_.:-]{8,128}$"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Idempotent replay; capabilities are freshly issued when still pending.",
            "headers": {
              "X-Request-Id": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Cache-Control": {
                "schema": {
                  "const": "private, no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Project"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "201": {
            "description": "Created",
            "headers": {
              "X-Request-Id": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Cache-Control": {
                "schema": {
                  "const": "private, no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Project"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400"
          },
          "401": {
            "$ref": "#/components/responses/Error401"
          },
          "403": {
            "$ref": "#/components/responses/Error403"
          },
          "404": {
            "$ref": "#/components/responses/Error404"
          },
          "409": {
            "$ref": "#/components/responses/Error409"
          },
          "410": {
            "$ref": "#/components/responses/Error410"
          },
          "413": {
            "$ref": "#/components/responses/Error413"
          },
          "415": {
            "$ref": "#/components/responses/Error415"
          },
          "422": {
            "$ref": "#/components/responses/Error422"
          },
          "429": {
            "$ref": "#/components/responses/Error429"
          },
          "503": {
            "$ref": "#/components/responses/Error503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProjectInput"
              }
            }
          }
        }
      }
    },
    "/projects/{projectId}": {
      "get": {
        "operationId": "getProject",
        "summary": "Read a project",
        "description": "Required effective scope: projects:read. All resource IDs are scoped to the key's workspace and project restrictions.",
        "security": [
          {
            "BearerKey": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Cache-Control": {
                "schema": {
                  "const": "private, no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Project"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400"
          },
          "401": {
            "$ref": "#/components/responses/Error401"
          },
          "403": {
            "$ref": "#/components/responses/Error403"
          },
          "404": {
            "$ref": "#/components/responses/Error404"
          },
          "409": {
            "$ref": "#/components/responses/Error409"
          },
          "410": {
            "$ref": "#/components/responses/Error410"
          },
          "413": {
            "$ref": "#/components/responses/Error413"
          },
          "415": {
            "$ref": "#/components/responses/Error415"
          },
          "422": {
            "$ref": "#/components/responses/Error422"
          },
          "429": {
            "$ref": "#/components/responses/Error429"
          },
          "503": {
            "$ref": "#/components/responses/Error503"
          }
        }
      }
    },
    "/projects/{projectId}/models": {
      "get": {
        "operationId": "listModels",
        "summary": "List immutable model revisions",
        "description": "Required effective scope: models:read. All resource IDs are scoped to the key's workspace and project restrictions.",
        "security": [
          {
            "BearerKey": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "The previous response's nextCursor. Ascending UUID order; keyset pagination is not a frozen snapshot.",
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Cache-Control": {
                "schema": {
                  "const": "private, no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object",
                      "properties": {
                        "items": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/Model"
                          }
                        },
                        "nextCursor": {
                          "anyOf": [
                            {
                              "type": "string",
                              "format": "uuid"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "items",
                        "nextCursor"
                      ],
                      "additionalProperties": false
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400"
          },
          "401": {
            "$ref": "#/components/responses/Error401"
          },
          "403": {
            "$ref": "#/components/responses/Error403"
          },
          "404": {
            "$ref": "#/components/responses/Error404"
          },
          "409": {
            "$ref": "#/components/responses/Error409"
          },
          "410": {
            "$ref": "#/components/responses/Error410"
          },
          "413": {
            "$ref": "#/components/responses/Error413"
          },
          "415": {
            "$ref": "#/components/responses/Error415"
          },
          "422": {
            "$ref": "#/components/responses/Error422"
          },
          "429": {
            "$ref": "#/components/responses/Error429"
          },
          "503": {
            "$ref": "#/components/responses/Error503"
          }
        }
      }
    },
    "/projects/{projectId}/uploads": {
      "post": {
        "operationId": "initiateUpload",
        "summary": "Reserve a revision and issue an upload capability",
        "description": "Required effective scope: models:write. All resource IDs are scoped to the key's workspace and project restrictions.",
        "security": [
          {
            "BearerKey": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_.:-]{8,128}$"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Idempotent replay; capabilities are freshly issued when still pending.",
            "headers": {
              "X-Request-Id": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Cache-Control": {
                "schema": {
                  "const": "private, no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Upload"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "201": {
            "description": "Created",
            "headers": {
              "X-Request-Id": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Cache-Control": {
                "schema": {
                  "const": "private, no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Upload"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400"
          },
          "401": {
            "$ref": "#/components/responses/Error401"
          },
          "403": {
            "$ref": "#/components/responses/Error403"
          },
          "404": {
            "$ref": "#/components/responses/Error404"
          },
          "409": {
            "$ref": "#/components/responses/Error409"
          },
          "410": {
            "$ref": "#/components/responses/Error410"
          },
          "413": {
            "$ref": "#/components/responses/Error413"
          },
          "415": {
            "$ref": "#/components/responses/Error415"
          },
          "422": {
            "$ref": "#/components/responses/Error422"
          },
          "429": {
            "$ref": "#/components/responses/Error429"
          },
          "503": {
            "$ref": "#/components/responses/Error503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UploadInput"
              }
            }
          }
        }
      }
    },
    "/projects/{projectId}/uploads/{uploadId}/complete": {
      "post": {
        "operationId": "completeUpload",
        "summary": "Verify the stored original exactly once",
        "description": "Verifies original byte count, SHA-256, closing STEP marker and exactly one supported FILE_SCHEMA declaration in the HEADER section. The complete HEADER and first DATA marker must fit within the first 16 KiB. Comments and quoted descriptions cannot supply schema declarations. This does not perform semantic IFC or geometry validation.",
        "security": [
          {
            "BearerKey": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "uploadId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Cache-Control": {
                "schema": {
                  "const": "private, no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Model"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400"
          },
          "401": {
            "$ref": "#/components/responses/Error401"
          },
          "403": {
            "$ref": "#/components/responses/Error403"
          },
          "404": {
            "$ref": "#/components/responses/Error404"
          },
          "409": {
            "$ref": "#/components/responses/Error409"
          },
          "410": {
            "$ref": "#/components/responses/Error410"
          },
          "413": {
            "$ref": "#/components/responses/Error413"
          },
          "415": {
            "$ref": "#/components/responses/Error415"
          },
          "422": {
            "$ref": "#/components/responses/Error422"
          },
          "429": {
            "$ref": "#/components/responses/Error429"
          },
          "503": {
            "$ref": "#/components/responses/Error503"
          }
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {},
                "required": [],
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/projects/{projectId}/models/{modelId}": {
      "get": {
        "operationId": "getModel",
        "summary": "Read revision and capability status",
        "description": "Required effective scope: models:read. All resource IDs are scoped to the key's workspace and project restrictions.",
        "security": [
          {
            "BearerKey": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "modelId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Cache-Control": {
                "schema": {
                  "const": "private, no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Model"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400"
          },
          "401": {
            "$ref": "#/components/responses/Error401"
          },
          "403": {
            "$ref": "#/components/responses/Error403"
          },
          "404": {
            "$ref": "#/components/responses/Error404"
          },
          "409": {
            "$ref": "#/components/responses/Error409"
          },
          "410": {
            "$ref": "#/components/responses/Error410"
          },
          "413": {
            "$ref": "#/components/responses/Error413"
          },
          "415": {
            "$ref": "#/components/responses/Error415"
          },
          "422": {
            "$ref": "#/components/responses/Error422"
          },
          "429": {
            "$ref": "#/components/responses/Error429"
          },
          "503": {
            "$ref": "#/components/responses/Error503"
          }
        }
      }
    },
    "/projects/{projectId}/models/{modelId}/download": {
      "get": {
        "operationId": "downloadOriginal",
        "summary": "Issue a private original download capability",
        "description": "Required effective scope: models:download. All resource IDs are scoped to the key's workspace and project restrictions.",
        "security": [
          {
            "BearerKey": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "modelId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Cache-Control": {
                "schema": {
                  "const": "private, no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Download"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400"
          },
          "401": {
            "$ref": "#/components/responses/Error401"
          },
          "403": {
            "$ref": "#/components/responses/Error403"
          },
          "404": {
            "$ref": "#/components/responses/Error404"
          },
          "409": {
            "$ref": "#/components/responses/Error409"
          },
          "410": {
            "$ref": "#/components/responses/Error410"
          },
          "413": {
            "$ref": "#/components/responses/Error413"
          },
          "415": {
            "$ref": "#/components/responses/Error415"
          },
          "422": {
            "$ref": "#/components/responses/Error422"
          },
          "429": {
            "$ref": "#/components/responses/Error429"
          },
          "503": {
            "$ref": "#/components/responses/Error503"
          }
        }
      }
    },
    "/projects/{projectId}/models/{modelId}/adapters/ifc-to-rhino": {
      "post": {
        "operationId": "ifcToRhinoCreate",
        "description": "Requires models:read and models:download, current membership and project access. Viewers may receive. Cancel/retry require job owner or administrator. Assets expire after 60 seconds. Source URLs and filesystem paths are rejected. Hosted conversion is currently unavailable (503) until the reviewed worker infrastructure is activated. Control requests are at most 16 KiB; signed transfers omit the API key.",
        "security": [
          {
            "BearerKey": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "modelId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_.:-]{8,128}$"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; data envelope plus requestId"
          },
          "202": {
            "description": "Durably queued; data envelope includes jobId"
          },
          "400": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "401": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "403": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "404": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "409": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "413": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "429": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "503": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "exchangeVersion": {
                    "const": "ontologic.exchange/1",
                    "default": "ontologic.exchange/1"
                  },
                  "localOrigin": {
                    "oneOf": [
                      {
                        "type": "null"
                      },
                      {
                        "type": "array",
                        "items": {
                          "type": "number"
                        },
                        "minItems": 3,
                        "maxItems": 3
                      }
                    ],
                    "default": null
                  }
                }
              }
            }
          }
        }
      }
    },
    "/projects/{projectId}/models/{modelId}/adapters/ifc-to-rhino/jobs/{jobId}": {
      "get": {
        "operationId": "ifcToRhinoStatus",
        "description": "Requires models:read and models:download, current membership and project access. Viewers may receive. Cancel/retry require job owner or administrator. Assets expire after 60 seconds. Source URLs and filesystem paths are rejected. Hosted conversion is currently unavailable (503) until the reviewed worker infrastructure is activated. Control requests are at most 16 KiB; signed transfers omit the API key.",
        "security": [
          {
            "BearerKey": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "modelId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; data envelope plus requestId"
          },
          "400": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "401": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "403": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "404": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "409": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "413": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "429": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "503": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          }
        }
      }
    },
    "/projects/{projectId}/models/{modelId}/adapters/ifc-to-rhino/jobs/{jobId}/result": {
      "get": {
        "operationId": "ifcToRhinoResult",
        "description": "Requires models:read and models:download, current membership and project access. Viewers may receive. Cancel/retry require job owner or administrator. Assets expire after 60 seconds. Source URLs and filesystem paths are rejected. Hosted conversion is currently unavailable (503) until the reviewed worker infrastructure is activated. Control requests are at most 16 KiB; signed transfers omit the API key.",
        "security": [
          {
            "BearerKey": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "modelId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; data envelope plus requestId"
          },
          "400": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "401": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "403": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "404": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "409": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "413": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "429": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "503": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          }
        }
      }
    },
    "/projects/{projectId}/models/{modelId}/adapters/ifc-to-rhino/jobs/{jobId}/assets/{assetId}": {
      "get": {
        "operationId": "ifcToRhinoAsset",
        "description": "Requires models:read and models:download, current membership and project access. Viewers may receive. Cancel/retry require job owner or administrator. Assets expire after 60 seconds. Source URLs and filesystem paths are rejected. Hosted conversion is currently unavailable (503) until the reviewed worker infrastructure is activated. Control requests are at most 16 KiB; signed transfers omit the API key.",
        "security": [
          {
            "BearerKey": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "modelId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "assetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; data envelope plus requestId"
          },
          "400": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "401": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "403": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "404": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "409": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "413": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "429": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "503": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          }
        }
      }
    },
    "/projects/{projectId}/models/{modelId}/adapters/ifc-to-rhino/jobs/{jobId}/cancel": {
      "post": {
        "operationId": "ifcToRhinoCancel",
        "description": "Requires models:read and models:download, current membership and project access. Viewers may receive. Cancel/retry require job owner or administrator. Assets expire after 60 seconds. Source URLs and filesystem paths are rejected. Hosted conversion is currently unavailable (503) until the reviewed worker infrastructure is activated. Control requests are at most 16 KiB; signed transfers omit the API key.",
        "security": [
          {
            "BearerKey": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "modelId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; data envelope plus requestId"
          },
          "400": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "401": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "403": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "404": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "409": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "413": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "429": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "503": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          }
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/projects/{projectId}/models/{modelId}/adapters/ifc-to-rhino/jobs/{jobId}/retry": {
      "post": {
        "operationId": "ifcToRhinoRetry",
        "description": "Requires models:read and models:download, current membership and project access. Viewers may receive. Cancel/retry require job owner or administrator. Assets expire after 60 seconds. Source URLs and filesystem paths are rejected. Hosted conversion is currently unavailable (503) until the reviewed worker infrastructure is activated. Control requests are at most 16 KiB; signed transfers omit the API key.",
        "security": [
          {
            "BearerKey": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "modelId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success; data envelope plus requestId"
          },
          "400": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "401": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "403": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "404": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "409": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "413": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "429": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          },
          "503": {
            "description": "Structured error envelope: error.code, error.message, requestId"
          }
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/projects/{projectId}/adapters/rhino-to-ifc": {
      "post": {
        "operationId": "reserveRhinoExport",
        "summary": "Reserve a durable Rhino to IFC4 job",
        "tags": [
          "Rhino export"
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_.:-]{8,128}$"
            }
          }
        ],
        "security": [
          {
            "BearerKey": []
          }
        ],
        "x-required-scopes": [
          "models:write"
        ],
        "description": "Requires current editor/admin, active key issuer, tenant membership, project restriction and owner-bound job. Private capabilities expire in 60 seconds. Hosted conversion is currently unavailable (503) until the reviewed worker infrastructure is activated. Control requests are at most 16 KiB; signed transfers omit the API key. Export states: awaiting_upload, queued, running, succeeded, failed, cancelled, expired. Export progress is 0–100 (receive progress is 0–1). Reservation replay still returns 202 with data.replayed=true; a different payload gives 409. Publication initiation and completion return 200 from these wrapper routes.",
        "responses": {
          "202": {
            "description": "Success; response envelope contains data and requestId",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RhinoExportReservation"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "401": {
            "description": "Invalid/revoked key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "403": {
            "description": "Role/scope or issuer denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "404": {
            "description": "Foreign/missing resource",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or job state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "413": {
            "description": "Size limit",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "415": {
            "description": "Control requests require application/json",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "422": {
            "description": "Integrity failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "429": {
            "description": "Quota/rate limit",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "503": {
            "description": "Worker/service unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "filename",
                  "revision",
                  "bytes",
                  "checksum"
                ],
                "properties": {
                  "filename": {
                    "type": "string",
                    "maxLength": 255,
                    "pattern": "^[^/\\\\\\u0000-\\u001f]+\\.ifc$"
                  },
                  "revision": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 30
                  },
                  "bytes": {
                    "type": "integer",
                    "minimum": 1,
                    "maximum": 52428800
                  },
                  "checksum": {
                    "type": "string",
                    "pattern": "^[a-f0-9]{64}$"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/projects/{projectId}/adapters/rhino-to-ifc/{jobId}/complete": {
      "post": {
        "operationId": "completeRhinoPackage",
        "summary": "Verify Exchange package and queue conversion",
        "tags": [
          "Rhino export"
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "security": [
          {
            "BearerKey": []
          }
        ],
        "x-required-scopes": [
          "models:write"
        ],
        "description": "Requires current editor/admin, active key issuer, tenant membership, project restriction and owner-bound job. Private capabilities expire in 60 seconds. Hosted conversion is currently unavailable (503) until the reviewed worker infrastructure is activated. Control requests are at most 16 KiB; signed transfers omit the API key. Export states: awaiting_upload, queued, running, succeeded, failed, cancelled, expired. Export progress is 0–100 (receive progress is 0–1). Reservation replay still returns 202 with data.replayed=true; a different payload gives 409. Publication initiation and completion return 200 from these wrapper routes.",
        "responses": {
          "200": {
            "description": "Success; response envelope contains data and requestId",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RhinoExportJob"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "401": {
            "description": "Invalid/revoked key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "403": {
            "description": "Role/scope or issuer denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "404": {
            "description": "Foreign/missing resource",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or job state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "413": {
            "description": "Size limit",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "415": {
            "description": "Control requests require application/json",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "422": {
            "description": "Integrity failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "429": {
            "description": "Quota/rate limit",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "503": {
            "description": "Worker/service unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "maxProperties": 0
              }
            }
          }
        }
      }
    },
    "/projects/{projectId}/adapters/rhino-to-ifc/{jobId}": {
      "get": {
        "operationId": "getRhinoExport",
        "summary": "Read reauthorized conversion status",
        "tags": [
          "Rhino export"
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "security": [
          {
            "BearerKey": []
          }
        ],
        "x-required-scopes": [
          "models:write"
        ],
        "description": "Requires current editor/admin, active key issuer, tenant membership, project restriction and owner-bound job. Private capabilities expire in 60 seconds. Hosted conversion is currently unavailable (503) until the reviewed worker infrastructure is activated. Control requests are at most 16 KiB; signed transfers omit the API key. Export states: awaiting_upload, queued, running, succeeded, failed, cancelled, expired. Export progress is 0–100 (receive progress is 0–1). Reservation replay still returns 202 with data.replayed=true; a different payload gives 409. Publication initiation and completion return 200 from these wrapper routes.",
        "responses": {
          "200": {
            "description": "Success; response envelope contains data and requestId",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RhinoExportJob"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "401": {
            "description": "Invalid/revoked key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "403": {
            "description": "Role/scope or issuer denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "404": {
            "description": "Foreign/missing resource",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or job state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "413": {
            "description": "Size limit",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "415": {
            "description": "Control requests require application/json",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "422": {
            "description": "Integrity failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "429": {
            "description": "Quota/rate limit",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "503": {
            "description": "Worker/service unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          }
        }
      }
    },
    "/projects/{projectId}/adapters/rhino-to-ifc/{jobId}/result": {
      "get": {
        "operationId": "getRhinoExportResult",
        "summary": "Get validated result and short-lived private capability",
        "tags": [
          "Rhino export"
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "security": [
          {
            "BearerKey": []
          }
        ],
        "x-required-scopes": [
          "models:write",
          "models:read",
          "models:download"
        ],
        "description": "Requires current editor/admin, active key issuer, tenant membership, project restriction and owner-bound job. Private capabilities expire in 60 seconds. Hosted conversion is currently unavailable (503) until the reviewed worker infrastructure is activated. Control requests are at most 16 KiB; signed transfers omit the API key. Export states: awaiting_upload, queued, running, succeeded, failed, cancelled, expired. Export progress is 0–100 (receive progress is 0–1). Reservation replay still returns 202 with data.replayed=true; a different payload gives 409. Publication initiation and completion return 200 from these wrapper routes.",
        "responses": {
          "200": {
            "description": "Success; response envelope contains data and requestId",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RhinoExportResult"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "401": {
            "description": "Invalid/revoked key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "403": {
            "description": "Role/scope or issuer denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "404": {
            "description": "Foreign/missing resource",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or job state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "413": {
            "description": "Size limit",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "415": {
            "description": "Control requests require application/json",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "422": {
            "description": "Integrity failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "429": {
            "description": "Quota/rate limit",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "503": {
            "description": "Worker/service unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          }
        }
      }
    },
    "/projects/{projectId}/adapters/rhino-to-ifc/{jobId}/cancel": {
      "post": {
        "operationId": "cancelRhinoExport",
        "summary": "Cancel unfinished conversion",
        "tags": [
          "Rhino export"
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "security": [
          {
            "BearerKey": []
          }
        ],
        "x-required-scopes": [
          "models:write"
        ],
        "description": "Requires current editor/admin, active key issuer, tenant membership, project restriction and owner-bound job. Private capabilities expire in 60 seconds. Hosted conversion is currently unavailable (503) until the reviewed worker infrastructure is activated. Control requests are at most 16 KiB; signed transfers omit the API key. Export states: awaiting_upload, queued, running, succeeded, failed, cancelled, expired. Export progress is 0–100 (receive progress is 0–1). Reservation replay still returns 202 with data.replayed=true; a different payload gives 409. Publication initiation and completion return 200 from these wrapper routes.",
        "responses": {
          "200": {
            "description": "Success; response envelope contains data and requestId",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/RhinoExportJob"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "401": {
            "description": "Invalid/revoked key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "403": {
            "description": "Role/scope or issuer denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "404": {
            "description": "Foreign/missing resource",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or job state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "413": {
            "description": "Size limit",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "415": {
            "description": "Control requests require application/json",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "422": {
            "description": "Integrity failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "429": {
            "description": "Quota/rate limit",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "503": {
            "description": "Worker/service unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "maxProperties": 0
              }
            }
          }
        }
      }
    },
    "/projects/{projectId}/adapters/rhino-to-ifc/{jobId}/publish": {
      "post": {
        "operationId": "reserveRhinoPublication",
        "summary": "Reserve a new immutable IFC upload",
        "tags": [
          "Rhino export"
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "security": [
          {
            "BearerKey": []
          }
        ],
        "x-required-scopes": [
          "models:write"
        ],
        "description": "Requires current editor/admin, active key issuer, tenant membership, project restriction and owner-bound job. Private capabilities expire in 60 seconds. Hosted conversion is currently unavailable (503) until the reviewed worker infrastructure is activated. Control requests are at most 16 KiB; signed transfers omit the API key. Export states: awaiting_upload, queued, running, succeeded, failed, cancelled, expired. Export progress is 0–100 (receive progress is 0–1). Reservation replay still returns 202 with data.replayed=true; a different payload gives 409. Publication initiation and completion return 200 from these wrapper routes.",
        "responses": {
          "200": {
            "description": "Success; response envelope contains data and requestId",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Upload"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "401": {
            "description": "Invalid/revoked key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "403": {
            "description": "Role/scope or issuer denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "404": {
            "description": "Foreign/missing resource",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or job state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "413": {
            "description": "Size limit",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "415": {
            "description": "Control requests require application/json",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "422": {
            "description": "Integrity failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "429": {
            "description": "Quota/rate limit",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "503": {
            "description": "Worker/service unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "maxProperties": 0
              }
            }
          }
        }
      }
    },
    "/projects/{projectId}/adapters/rhino-to-ifc/{jobId}/publish/complete": {
      "post": {
        "operationId": "completeRhinoPublication",
        "summary": "Finalize the exact validated immutable IFC revision",
        "tags": [
          "Rhino export"
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "security": [
          {
            "BearerKey": []
          }
        ],
        "x-required-scopes": [
          "models:write"
        ],
        "description": "Requires current editor/admin, active key issuer, tenant membership, project restriction and owner-bound job. Private capabilities expire in 60 seconds. Hosted conversion is currently unavailable (503) until the reviewed worker infrastructure is activated. Control requests are at most 16 KiB; signed transfers omit the API key. Export states: awaiting_upload, queued, running, succeeded, failed, cancelled, expired. Export progress is 0–100 (receive progress is 0–1). Reservation replay still returns 202 with data.replayed=true; a different payload gives 409. Publication initiation and completion return 200 from these wrapper routes.",
        "responses": {
          "200": {
            "description": "Success; response envelope contains data and requestId",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/Model"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "description": "Invalid request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "401": {
            "description": "Invalid/revoked key",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "403": {
            "description": "Role/scope or issuer denied",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "404": {
            "description": "Foreign/missing resource",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "409": {
            "description": "Idempotency or job state conflict",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "413": {
            "description": "Size limit",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "415": {
            "description": "Control requests require application/json",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "422": {
            "description": "Integrity failure",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "429": {
            "description": "Quota/rate limit",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          },
          "503": {
            "description": "Worker/service unavailable",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AdapterError"
                }
              }
            }
          }
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "maxProperties": 0
              }
            }
          }
        }
      }
    },
    "/projects/{projectId}/models/{modelId}/index-jobs": {
      "post": {
        "operationId": "integrationPOSTprojects_projectId_models_modelId_indexjobs",
        "summary": "POST /projects/{projectId}/models/{modelId}/index-jobs",
        "description": "Private pilot; disabled unless ONTOLOGIC_INTEGRATIONS_ENABLED=true after approved activation. Scopes: models:write + models:download + integrations:write. Tenant, current membership, key expiry/revocation and project restrictions apply. Completed results retain the immutable checksum and parser/index version; retry has a three-attempt total limit.",
        "security": [
          {
            "BearerKey": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "modelId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_.:-]{8,128}$"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Cache-Control": {
                "schema": {
                  "const": "private, no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/IntegrationJob"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "202": {
            "description": "Queued; not completed",
            "headers": {
              "X-Request-Id": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Cache-Control": {
                "schema": {
                  "const": "private, no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/IntegrationJob"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400"
          },
          "401": {
            "$ref": "#/components/responses/Error401"
          },
          "403": {
            "$ref": "#/components/responses/Error403"
          },
          "404": {
            "$ref": "#/components/responses/Error404"
          },
          "409": {
            "$ref": "#/components/responses/Error409"
          },
          "410": {
            "$ref": "#/components/responses/Error410"
          },
          "413": {
            "$ref": "#/components/responses/Error413"
          },
          "415": {
            "$ref": "#/components/responses/Error415"
          },
          "422": {
            "$ref": "#/components/responses/Error422"
          },
          "429": {
            "$ref": "#/components/responses/Error429"
          },
          "503": {
            "$ref": "#/components/responses/Error503"
          }
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false
              }
            }
          }
        }
      },
      "get": {
        "operationId": "integrationGETprojects_projectId_models_modelId_indexjobs",
        "summary": "GET /projects/{projectId}/models/{modelId}/index-jobs",
        "description": "Private pilot; disabled unless ONTOLOGIC_INTEGRATIONS_ENABLED=true after approved activation. Scopes: models:read + integrations:read. Tenant, current membership, key expiry/revocation and project restrictions apply. Completed results retain the immutable checksum and parser/index version; retry has a three-attempt total limit.",
        "security": [
          {
            "BearerKey": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "modelId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Cache-Control": {
                "schema": {
                  "const": "private, no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/IntegrationPage"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400"
          },
          "401": {
            "$ref": "#/components/responses/Error401"
          },
          "403": {
            "$ref": "#/components/responses/Error403"
          },
          "404": {
            "$ref": "#/components/responses/Error404"
          },
          "409": {
            "$ref": "#/components/responses/Error409"
          },
          "410": {
            "$ref": "#/components/responses/Error410"
          },
          "413": {
            "$ref": "#/components/responses/Error413"
          },
          "415": {
            "$ref": "#/components/responses/Error415"
          },
          "422": {
            "$ref": "#/components/responses/Error422"
          },
          "429": {
            "$ref": "#/components/responses/Error429"
          },
          "503": {
            "$ref": "#/components/responses/Error503"
          }
        }
      }
    },
    "/projects/{projectId}/models/{modelId}/index-jobs/{jobId}": {
      "get": {
        "operationId": "integrationGETprojects_projectId_models_modelId_indexjobs_jobId",
        "summary": "GET /projects/{projectId}/models/{modelId}/index-jobs/{jobId}",
        "description": "Private pilot; disabled unless ONTOLOGIC_INTEGRATIONS_ENABLED=true after approved activation. Scopes: models:read + integrations:read. Tenant, current membership, key expiry/revocation and project restrictions apply. Completed results retain the immutable checksum and parser/index version; retry has a three-attempt total limit.",
        "security": [
          {
            "BearerKey": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "modelId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Cache-Control": {
                "schema": {
                  "const": "private, no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/IntegrationJob"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400"
          },
          "401": {
            "$ref": "#/components/responses/Error401"
          },
          "403": {
            "$ref": "#/components/responses/Error403"
          },
          "404": {
            "$ref": "#/components/responses/Error404"
          },
          "409": {
            "$ref": "#/components/responses/Error409"
          },
          "410": {
            "$ref": "#/components/responses/Error410"
          },
          "413": {
            "$ref": "#/components/responses/Error413"
          },
          "415": {
            "$ref": "#/components/responses/Error415"
          },
          "422": {
            "$ref": "#/components/responses/Error422"
          },
          "429": {
            "$ref": "#/components/responses/Error429"
          },
          "503": {
            "$ref": "#/components/responses/Error503"
          }
        }
      }
    },
    "/projects/{projectId}/models/{modelId}/index-jobs/{jobId}/{action}": {
      "post": {
        "operationId": "integrationPOSTprojects_projectId_models_modelId_indexjobs_jobId_action",
        "summary": "POST /projects/{projectId}/models/{modelId}/index-jobs/{jobId}/{action}",
        "description": "Private pilot; disabled unless ONTOLOGIC_INTEGRATIONS_ENABLED=true after approved activation. Scopes: models:write + integrations:write; retry additionally requires models:download. Tenant, current membership, key expiry/revocation and project restrictions apply. Completed results retain the immutable checksum and parser/index version; retry has a three-attempt total limit.",
        "security": [
          {
            "BearerKey": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "modelId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "action",
            "in": "path",
            "required": true,
            "schema": {
              "enum": [
                "retry",
                "cancel"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Cache-Control": {
                "schema": {
                  "const": "private, no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/IntegrationJob"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400"
          },
          "401": {
            "$ref": "#/components/responses/Error401"
          },
          "403": {
            "$ref": "#/components/responses/Error403"
          },
          "404": {
            "$ref": "#/components/responses/Error404"
          },
          "409": {
            "$ref": "#/components/responses/Error409"
          },
          "410": {
            "$ref": "#/components/responses/Error410"
          },
          "413": {
            "$ref": "#/components/responses/Error413"
          },
          "415": {
            "$ref": "#/components/responses/Error415"
          },
          "422": {
            "$ref": "#/components/responses/Error422"
          },
          "429": {
            "$ref": "#/components/responses/Error429"
          },
          "503": {
            "$ref": "#/components/responses/Error503"
          }
        },
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/projects/{projectId}/models/{modelId}/indexes/{jobId}/elements": {
      "get": {
        "operationId": "integrationGETprojects_projectId_models_modelId_indexes_jobId_elements",
        "summary": "GET /projects/{projectId}/models/{modelId}/indexes/{jobId}/elements",
        "description": "Private pilot; disabled unless ONTOLOGIC_INTEGRATIONS_ENABLED=true after approved activation. Scopes: models:read + integrations:read. Tenant, current membership, key expiry/revocation and project restrictions apply. ",
        "security": [
          {
            "BearerKey": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "modelId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "type",
            "in": "query",
            "schema": {
              "type": "string",
              "maxLength": 200
            }
          },
          {
            "name": "propertySet",
            "in": "query",
            "schema": {
              "type": "string",
              "maxLength": 200
            },
            "description": "Supply propertySet and property together; exact display source names."
          },
          {
            "name": "property",
            "in": "query",
            "schema": {
              "type": "string",
              "maxLength": 200
            },
            "description": "Supply propertySet and property together; exact display source names."
          },
          {
            "name": "missing",
            "in": "query",
            "schema": {
              "enum": [
                "true",
                "false"
              ],
              "default": "false"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Cache-Control": {
                "schema": {
                  "const": "private, no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/IntegrationPage"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400"
          },
          "401": {
            "$ref": "#/components/responses/Error401"
          },
          "403": {
            "$ref": "#/components/responses/Error403"
          },
          "404": {
            "$ref": "#/components/responses/Error404"
          },
          "409": {
            "$ref": "#/components/responses/Error409"
          },
          "410": {
            "$ref": "#/components/responses/Error410"
          },
          "413": {
            "$ref": "#/components/responses/Error413"
          },
          "415": {
            "$ref": "#/components/responses/Error415"
          },
          "422": {
            "$ref": "#/components/responses/Error422"
          },
          "429": {
            "$ref": "#/components/responses/Error429"
          },
          "503": {
            "$ref": "#/components/responses/Error503"
          }
        }
      }
    },
    "/projects/{projectId}/models/{modelId}/indexes/{jobId}/elements/{elementId}/properties": {
      "get": {
        "operationId": "integrationGETprojects_projectId_models_modelId_indexes_jobId_elements_elementId_properties",
        "summary": "GET /projects/{projectId}/models/{modelId}/indexes/{jobId}/elements/{elementId}/properties",
        "description": "Private pilot; disabled unless ONTOLOGIC_INTEGRATIONS_ENABLED=true after approved activation. Scopes: models:read + integrations:read. Tenant, current membership, key expiry/revocation and project restrictions apply. ",
        "security": [
          {
            "BearerKey": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "modelId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "elementId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 100
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Cache-Control": {
                "schema": {
                  "const": "private, no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400"
          },
          "401": {
            "$ref": "#/components/responses/Error401"
          },
          "403": {
            "$ref": "#/components/responses/Error403"
          },
          "404": {
            "$ref": "#/components/responses/Error404"
          },
          "409": {
            "$ref": "#/components/responses/Error409"
          },
          "410": {
            "$ref": "#/components/responses/Error410"
          },
          "413": {
            "$ref": "#/components/responses/Error413"
          },
          "415": {
            "$ref": "#/components/responses/Error415"
          },
          "422": {
            "$ref": "#/components/responses/Error422"
          },
          "429": {
            "$ref": "#/components/responses/Error429"
          },
          "503": {
            "$ref": "#/components/responses/Error503"
          }
        }
      }
    },
    "/projects/{projectId}/models/{modelId}/indexes/{jobId}/metrics": {
      "get": {
        "operationId": "integrationGETprojects_projectId_models_modelId_indexes_jobId_metrics",
        "summary": "GET /projects/{projectId}/models/{modelId}/indexes/{jobId}/metrics",
        "description": "Private pilot; disabled unless ONTOLOGIC_INTEGRATIONS_ENABLED=true after approved activation. Scopes: models:read + integrations:read. Tenant, current membership, key expiry/revocation and project restrictions apply. ",
        "security": [
          {
            "BearerKey": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "modelId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "jobId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Cache-Control": {
                "schema": {
                  "const": "private, no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400"
          },
          "401": {
            "$ref": "#/components/responses/Error401"
          },
          "403": {
            "$ref": "#/components/responses/Error403"
          },
          "404": {
            "$ref": "#/components/responses/Error404"
          },
          "409": {
            "$ref": "#/components/responses/Error409"
          },
          "410": {
            "$ref": "#/components/responses/Error410"
          },
          "413": {
            "$ref": "#/components/responses/Error413"
          },
          "415": {
            "$ref": "#/components/responses/Error415"
          },
          "422": {
            "$ref": "#/components/responses/Error422"
          },
          "429": {
            "$ref": "#/components/responses/Error429"
          },
          "503": {
            "$ref": "#/components/responses/Error503"
          }
        }
      }
    },
    "/projects/{projectId}/models/{modelId}/views": {
      "get": {
        "operationId": "integrationGETprojects_projectId_models_modelId_views",
        "summary": "GET /projects/{projectId}/models/{modelId}/views",
        "description": "Private pilot; disabled unless ONTOLOGIC_INTEGRATIONS_ENABLED=true after approved activation. Scopes: models:read + integrations:read. Tenant, current membership, key expiry/revocation and project restrictions apply. Lists are bounded metadata pages; GET by ID returns full authorized state. POST creates or replaces with id + version, rejects stale versions, and requires Idempotency-Key.",
        "security": [
          {
            "BearerKey": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "modelId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Cache-Control": {
                "schema": {
                  "const": "private, no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/IntegrationPage"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400"
          },
          "401": {
            "$ref": "#/components/responses/Error401"
          },
          "403": {
            "$ref": "#/components/responses/Error403"
          },
          "404": {
            "$ref": "#/components/responses/Error404"
          },
          "409": {
            "$ref": "#/components/responses/Error409"
          },
          "410": {
            "$ref": "#/components/responses/Error410"
          },
          "413": {
            "$ref": "#/components/responses/Error413"
          },
          "415": {
            "$ref": "#/components/responses/Error415"
          },
          "422": {
            "$ref": "#/components/responses/Error422"
          },
          "429": {
            "$ref": "#/components/responses/Error429"
          },
          "503": {
            "$ref": "#/components/responses/Error503"
          }
        }
      },
      "post": {
        "operationId": "integrationPOSTprojects_projectId_models_modelId_views",
        "summary": "POST /projects/{projectId}/models/{modelId}/views",
        "description": "Private pilot; disabled unless ONTOLOGIC_INTEGRATIONS_ENABLED=true after approved activation. Scopes: models:write + integrations:write. Tenant, current membership, key expiry/revocation and project restrictions apply. Lists are bounded metadata pages; GET by ID returns full authorized state. POST creates or replaces with id + version, rejects stale versions, and requires Idempotency-Key.",
        "security": [
          {
            "BearerKey": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "modelId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_.:-]{8,128}$"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Cache-Control": {
                "schema": {
                  "const": "private, no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "201": {
            "description": "Resource created",
            "headers": {
              "X-Request-Id": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Cache-Control": {
                "schema": {
                  "const": "private, no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400"
          },
          "401": {
            "$ref": "#/components/responses/Error401"
          },
          "403": {
            "$ref": "#/components/responses/Error403"
          },
          "404": {
            "$ref": "#/components/responses/Error404"
          },
          "409": {
            "$ref": "#/components/responses/Error409"
          },
          "410": {
            "$ref": "#/components/responses/Error410"
          },
          "413": {
            "$ref": "#/components/responses/Error413"
          },
          "415": {
            "$ref": "#/components/responses/Error415"
          },
          "422": {
            "$ref": "#/components/responses/Error422"
          },
          "429": {
            "$ref": "#/components/responses/Error429"
          },
          "503": {
            "$ref": "#/components/responses/Error503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "version": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 80
                  },
                  "state": {
                    "$ref": "#/components/schemas/ViewState"
                  }
                },
                "required": [
                  "name",
                  "state"
                ],
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/projects/{projectId}/models/{modelId}/filter-sets": {
      "get": {
        "operationId": "integrationGETprojects_projectId_models_modelId_filtersets",
        "summary": "GET /projects/{projectId}/models/{modelId}/filter-sets",
        "description": "Private pilot; disabled unless ONTOLOGIC_INTEGRATIONS_ENABLED=true after approved activation. Scopes: models:read + integrations:read. Tenant, current membership, key expiry/revocation and project restrictions apply. Lists are bounded metadata pages; GET by ID returns full authorized state. POST creates or replaces with id + version, rejects stale versions, and requires Idempotency-Key.",
        "security": [
          {
            "BearerKey": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "modelId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Cache-Control": {
                "schema": {
                  "const": "private, no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/IntegrationPage"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400"
          },
          "401": {
            "$ref": "#/components/responses/Error401"
          },
          "403": {
            "$ref": "#/components/responses/Error403"
          },
          "404": {
            "$ref": "#/components/responses/Error404"
          },
          "409": {
            "$ref": "#/components/responses/Error409"
          },
          "410": {
            "$ref": "#/components/responses/Error410"
          },
          "413": {
            "$ref": "#/components/responses/Error413"
          },
          "415": {
            "$ref": "#/components/responses/Error415"
          },
          "422": {
            "$ref": "#/components/responses/Error422"
          },
          "429": {
            "$ref": "#/components/responses/Error429"
          },
          "503": {
            "$ref": "#/components/responses/Error503"
          }
        }
      },
      "post": {
        "operationId": "integrationPOSTprojects_projectId_models_modelId_filtersets",
        "summary": "POST /projects/{projectId}/models/{modelId}/filter-sets",
        "description": "Private pilot; disabled unless ONTOLOGIC_INTEGRATIONS_ENABLED=true after approved activation. Scopes: models:write + integrations:write. Tenant, current membership, key expiry/revocation and project restrictions apply. Lists are bounded metadata pages; GET by ID returns full authorized state. POST creates or replaces with id + version, rejects stale versions, and requires Idempotency-Key.",
        "security": [
          {
            "BearerKey": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "modelId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_.:-]{8,128}$"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Cache-Control": {
                "schema": {
                  "const": "private, no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "201": {
            "description": "Resource created",
            "headers": {
              "X-Request-Id": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Cache-Control": {
                "schema": {
                  "const": "private, no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400"
          },
          "401": {
            "$ref": "#/components/responses/Error401"
          },
          "403": {
            "$ref": "#/components/responses/Error403"
          },
          "404": {
            "$ref": "#/components/responses/Error404"
          },
          "409": {
            "$ref": "#/components/responses/Error409"
          },
          "410": {
            "$ref": "#/components/responses/Error410"
          },
          "413": {
            "$ref": "#/components/responses/Error413"
          },
          "415": {
            "$ref": "#/components/responses/Error415"
          },
          "422": {
            "$ref": "#/components/responses/Error422"
          },
          "429": {
            "$ref": "#/components/responses/Error429"
          },
          "503": {
            "$ref": "#/components/responses/Error503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "version": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 80
                  },
                  "state": {
                    "$ref": "#/components/schemas/FilterState"
                  }
                },
                "required": [
                  "name",
                  "state"
                ],
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/projects/{projectId}/dashboards": {
      "get": {
        "operationId": "integrationGETprojects_projectId_dashboards",
        "summary": "GET /projects/{projectId}/dashboards",
        "description": "Private pilot; disabled unless ONTOLOGIC_INTEGRATIONS_ENABLED=true after approved activation. Scopes: models:read + integrations:read. Tenant, current membership, key expiry/revocation and project restrictions apply. Lists are bounded metadata pages; GET by ID returns full authorized state. POST creates or replaces with id + version, rejects stale versions, and requires Idempotency-Key.",
        "security": [
          {
            "BearerKey": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Cache-Control": {
                "schema": {
                  "const": "private, no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/IntegrationPage"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400"
          },
          "401": {
            "$ref": "#/components/responses/Error401"
          },
          "403": {
            "$ref": "#/components/responses/Error403"
          },
          "404": {
            "$ref": "#/components/responses/Error404"
          },
          "409": {
            "$ref": "#/components/responses/Error409"
          },
          "410": {
            "$ref": "#/components/responses/Error410"
          },
          "413": {
            "$ref": "#/components/responses/Error413"
          },
          "415": {
            "$ref": "#/components/responses/Error415"
          },
          "422": {
            "$ref": "#/components/responses/Error422"
          },
          "429": {
            "$ref": "#/components/responses/Error429"
          },
          "503": {
            "$ref": "#/components/responses/Error503"
          }
        }
      },
      "post": {
        "operationId": "integrationPOSTprojects_projectId_dashboards",
        "summary": "POST /projects/{projectId}/dashboards",
        "description": "Private pilot; disabled unless ONTOLOGIC_INTEGRATIONS_ENABLED=true after approved activation. Scopes: models:write + integrations:write. Tenant, current membership, key expiry/revocation and project restrictions apply. Lists are bounded metadata pages; GET by ID returns full authorized state. POST creates or replaces with id + version, rejects stale versions, and requires Idempotency-Key.",
        "security": [
          {
            "BearerKey": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_.:-]{8,128}$"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Cache-Control": {
                "schema": {
                  "const": "private, no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "201": {
            "description": "Resource created",
            "headers": {
              "X-Request-Id": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Cache-Control": {
                "schema": {
                  "const": "private, no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400"
          },
          "401": {
            "$ref": "#/components/responses/Error401"
          },
          "403": {
            "$ref": "#/components/responses/Error403"
          },
          "404": {
            "$ref": "#/components/responses/Error404"
          },
          "409": {
            "$ref": "#/components/responses/Error409"
          },
          "410": {
            "$ref": "#/components/responses/Error410"
          },
          "413": {
            "$ref": "#/components/responses/Error413"
          },
          "415": {
            "$ref": "#/components/responses/Error415"
          },
          "422": {
            "$ref": "#/components/responses/Error422"
          },
          "429": {
            "$ref": "#/components/responses/Error429"
          },
          "503": {
            "$ref": "#/components/responses/Error503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "version": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 80
                  },
                  "config": {
                    "$ref": "#/components/schemas/DashboardConfig"
                  }
                },
                "required": [
                  "name",
                  "config"
                ],
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/projects/{projectId}/dashboards/{dashboardId}": {
      "get": {
        "operationId": "integrationGETprojects_projectId_dashboards_dashboardId",
        "summary": "GET /projects/{projectId}/dashboards/{dashboardId}",
        "description": "Private pilot; disabled unless ONTOLOGIC_INTEGRATIONS_ENABLED=true after approved activation. Scopes: models:read + integrations:read. Tenant, current membership, key expiry/revocation and project restrictions apply. ",
        "security": [
          {
            "BearerKey": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "dashboardId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Cache-Control": {
                "schema": {
                  "const": "private, no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400"
          },
          "401": {
            "$ref": "#/components/responses/Error401"
          },
          "403": {
            "$ref": "#/components/responses/Error403"
          },
          "404": {
            "$ref": "#/components/responses/Error404"
          },
          "409": {
            "$ref": "#/components/responses/Error409"
          },
          "410": {
            "$ref": "#/components/responses/Error410"
          },
          "413": {
            "$ref": "#/components/responses/Error413"
          },
          "415": {
            "$ref": "#/components/responses/Error415"
          },
          "422": {
            "$ref": "#/components/responses/Error422"
          },
          "429": {
            "$ref": "#/components/responses/Error429"
          },
          "503": {
            "$ref": "#/components/responses/Error503"
          }
        }
      }
    },
    "/projects/{projectId}/models/{modelId}/views/{viewId}": {
      "get": {
        "operationId": "integrationGETprojects_projectId_models_modelId_views_viewId",
        "summary": "GET /projects/{projectId}/models/{modelId}/views/{viewId}",
        "description": "Private pilot; disabled unless ONTOLOGIC_INTEGRATIONS_ENABLED=true after approved activation. Scopes: models:read + integrations:read. Tenant, current membership, key expiry/revocation and project restrictions apply. ",
        "security": [
          {
            "BearerKey": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "modelId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "viewId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Cache-Control": {
                "schema": {
                  "const": "private, no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400"
          },
          "401": {
            "$ref": "#/components/responses/Error401"
          },
          "403": {
            "$ref": "#/components/responses/Error403"
          },
          "404": {
            "$ref": "#/components/responses/Error404"
          },
          "409": {
            "$ref": "#/components/responses/Error409"
          },
          "410": {
            "$ref": "#/components/responses/Error410"
          },
          "413": {
            "$ref": "#/components/responses/Error413"
          },
          "415": {
            "$ref": "#/components/responses/Error415"
          },
          "422": {
            "$ref": "#/components/responses/Error422"
          },
          "429": {
            "$ref": "#/components/responses/Error429"
          },
          "503": {
            "$ref": "#/components/responses/Error503"
          }
        }
      }
    },
    "/projects/{projectId}/models/{modelId}/filter-sets/{filterSetId}": {
      "get": {
        "operationId": "integrationGETprojects_projectId_models_modelId_filtersets_filterSetId",
        "summary": "GET /projects/{projectId}/models/{modelId}/filter-sets/{filterSetId}",
        "description": "Private pilot; disabled unless ONTOLOGIC_INTEGRATIONS_ENABLED=true after approved activation. Scopes: models:read + integrations:read. Tenant, current membership, key expiry/revocation and project restrictions apply. ",
        "security": [
          {
            "BearerKey": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "modelId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "filterSetId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Cache-Control": {
                "schema": {
                  "const": "private, no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400"
          },
          "401": {
            "$ref": "#/components/responses/Error401"
          },
          "403": {
            "$ref": "#/components/responses/Error403"
          },
          "404": {
            "$ref": "#/components/responses/Error404"
          },
          "409": {
            "$ref": "#/components/responses/Error409"
          },
          "410": {
            "$ref": "#/components/responses/Error410"
          },
          "413": {
            "$ref": "#/components/responses/Error413"
          },
          "415": {
            "$ref": "#/components/responses/Error415"
          },
          "422": {
            "$ref": "#/components/responses/Error422"
          },
          "429": {
            "$ref": "#/components/responses/Error429"
          },
          "503": {
            "$ref": "#/components/responses/Error503"
          }
        }
      }
    },
    "/projects/{projectId}/viewer-sessions/pair": {
      "post": {
        "operationId": "integrationPOSTprojects_projectId_viewersessions_pair",
        "summary": "POST /projects/{projectId}/viewer-sessions/pair",
        "description": "Private pilot; disabled unless ONTOLOGIC_INTEGRATIONS_ENABLED=true after approved activation. Scopes: models:read + viewer:control. Tenant, current membership, key expiry/revocation and project restrictions apply. Paired owner/key and exact scene digest only. Commands expire after 30 seconds; pending is never rendered success.",
        "security": [
          {
            "BearerKey": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Cache-Control": {
                "schema": {
                  "const": "private, no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "type": "object"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400"
          },
          "401": {
            "$ref": "#/components/responses/Error401"
          },
          "403": {
            "$ref": "#/components/responses/Error403"
          },
          "404": {
            "$ref": "#/components/responses/Error404"
          },
          "409": {
            "$ref": "#/components/responses/Error409"
          },
          "410": {
            "$ref": "#/components/responses/Error410"
          },
          "413": {
            "$ref": "#/components/responses/Error413"
          },
          "415": {
            "$ref": "#/components/responses/Error415"
          },
          "422": {
            "$ref": "#/components/responses/Error422"
          },
          "429": {
            "$ref": "#/components/responses/Error429"
          },
          "503": {
            "$ref": "#/components/responses/Error503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "pairingCode": {
                    "type": "string",
                    "pattern": "^[a-f0-9]{64}$"
                  }
                },
                "required": [
                  "pairingCode"
                ],
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/projects/{projectId}/viewer-sessions/{sessionId}/commands": {
      "post": {
        "operationId": "integrationPOSTprojects_projectId_viewersessions_sessionId_commands",
        "summary": "POST /projects/{projectId}/viewer-sessions/{sessionId}/commands",
        "description": "Private pilot; disabled unless ONTOLOGIC_INTEGRATIONS_ENABLED=true after approved activation. Scopes: models:read + viewer:control. Tenant, current membership, key expiry/revocation and project restrictions apply. Paired owner/key and exact scene digest only. Commands expire after 30 seconds; pending is never rendered success.",
        "security": [
          {
            "BearerKey": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[A-Za-z0-9_.:-]{8,128}$"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Cache-Control": {
                "schema": {
                  "const": "private, no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/ViewerCommandRecord"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "202": {
            "description": "Queued; not completed",
            "headers": {
              "X-Request-Id": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Cache-Control": {
                "schema": {
                  "const": "private, no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/ViewerCommandRecord"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400"
          },
          "401": {
            "$ref": "#/components/responses/Error401"
          },
          "403": {
            "$ref": "#/components/responses/Error403"
          },
          "404": {
            "$ref": "#/components/responses/Error404"
          },
          "409": {
            "$ref": "#/components/responses/Error409"
          },
          "410": {
            "$ref": "#/components/responses/Error410"
          },
          "413": {
            "$ref": "#/components/responses/Error413"
          },
          "415": {
            "$ref": "#/components/responses/Error415"
          },
          "422": {
            "$ref": "#/components/responses/Error422"
          },
          "429": {
            "$ref": "#/components/responses/Error429"
          },
          "503": {
            "$ref": "#/components/responses/Error503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "sceneDigest": {
                    "type": "string",
                    "pattern": "^[a-f0-9]{64}$"
                  },
                  "command": {
                    "$ref": "#/components/schemas/ViewerCommand"
                  }
                },
                "required": [
                  "sceneDigest",
                  "command"
                ],
                "additionalProperties": false
              }
            }
          }
        }
      }
    },
    "/projects/{projectId}/viewer-sessions/{sessionId}/commands/{commandId}": {
      "get": {
        "operationId": "integrationGETprojects_projectId_viewersessions_sessionId_commands_commandId",
        "summary": "GET /projects/{projectId}/viewer-sessions/{sessionId}/commands/{commandId}",
        "description": "Private pilot; disabled unless ONTOLOGIC_INTEGRATIONS_ENABLED=true after approved activation. Scopes: models:read + viewer:control. Tenant, current membership, key expiry/revocation and project restrictions apply. Paired owner/key and exact scene digest only. Commands expire after 30 seconds; pending is never rendered success.",
        "security": [
          {
            "BearerKey": []
          }
        ],
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "sessionId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          {
            "name": "commandId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Request-Id": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "Cache-Control": {
                "schema": {
                  "const": "private, no-store"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "data": {
                      "$ref": "#/components/schemas/ViewerCommandRecord"
                    },
                    "requestId": {
                      "type": "string",
                      "format": "uuid"
                    }
                  },
                  "required": [
                    "data",
                    "requestId"
                  ],
                  "additionalProperties": false
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400"
          },
          "401": {
            "$ref": "#/components/responses/Error401"
          },
          "403": {
            "$ref": "#/components/responses/Error403"
          },
          "404": {
            "$ref": "#/components/responses/Error404"
          },
          "409": {
            "$ref": "#/components/responses/Error409"
          },
          "410": {
            "$ref": "#/components/responses/Error410"
          },
          "413": {
            "$ref": "#/components/responses/Error413"
          },
          "415": {
            "$ref": "#/components/responses/Error415"
          },
          "422": {
            "$ref": "#/components/responses/Error422"
          },
          "429": {
            "$ref": "#/components/responses/Error429"
          },
          "503": {
            "$ref": "#/components/responses/Error503"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "BearerKey": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "ot_dev_<64 lowercase hex characters> or ot_live_<64 lowercase hex characters>"
      }
    },
    "schemas": {
      "Project": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "createdBy": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "description",
          "createdAt",
          "createdBy"
        ],
        "additionalProperties": false
      },
      "Model": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "projectId": {
            "type": "string",
            "format": "uuid"
          },
          "filename": {
            "type": "string"
          },
          "revision": {
            "type": "string"
          },
          "bytes": {
            "type": "integer",
            "minimum": 1,
            "maximum": 157286400
          },
          "checksum": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$"
          },
          "uploadedBy": {
            "type": "string"
          },
          "createdAt": {
            "type": "string",
            "format": "date-time"
          },
          "original": {
            "type": "object",
            "properties": {
              "status": {
                "type": "string",
                "enum": [
                  "pending",
                  "verified",
                  "failed"
                ]
              },
              "verifiedAt": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "date-time"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "status",
              "verifiedAt"
            ],
            "additionalProperties": false
          },
          "analysis": {
            "type": "object",
            "properties": {
              "status": {
                "const": "unavailable"
              },
              "reason": {
                "type": "string"
              }
            },
            "required": [
              "status",
              "reason"
            ],
            "additionalProperties": false
          },
          "ifcSchema": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "parserVersion": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "parserProvenance": {
            "anyOf": [
              {
                "const": "browser_reported"
              },
              {
                "type": "null"
              }
            ]
          },
          "failureReason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "capabilities": {
            "type": "object",
            "properties": {
              "downloadOriginal": {
                "type": "boolean"
              },
              "openInWorkspace": {
                "type": "boolean"
              },
              "queryElements": {
                "const": false
              },
              "queryMetrics": {
                "const": false
              }
            },
            "required": [
              "downloadOriginal",
              "openInWorkspace",
              "queryElements",
              "queryMetrics"
            ],
            "additionalProperties": false
          },
          "upload": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "status",
              "expiresAt",
              "retryAfterSeconds"
            ],
            "properties": {
              "status": {
                "type": "string",
                "enum": [
                  "not_applicable",
                  "pending",
                  "verifying",
                  "verified",
                  "failed",
                  "expired"
                ]
              },
              "expiresAt": {
                "anyOf": [
                  {
                    "type": "string",
                    "format": "date-time"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "retryAfterSeconds": {
                "anyOf": [
                  {
                    "type": "integer",
                    "minimum": 0
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            }
          }
        },
        "required": [
          "id",
          "projectId",
          "filename",
          "revision",
          "bytes",
          "checksum",
          "uploadedBy",
          "createdAt",
          "original",
          "analysis",
          "ifcSchema",
          "parserVersion",
          "parserProvenance",
          "failureReason",
          "capabilities",
          "upload"
        ],
        "additionalProperties": false
      },
      "ProjectInput": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100
          },
          "description": {
            "type": "string",
            "maxLength": 2000,
            "default": ""
          }
        },
        "required": [
          "name"
        ],
        "additionalProperties": false
      },
      "UploadInput": {
        "type": "object",
        "properties": {
          "filename": {
            "type": "string",
            "minLength": 1,
            "maxLength": 255,
            "pattern": "^[^/\\\\\\u0000-\\u001f]+\\.[iI][fF][cC]$"
          },
          "revision": {
            "type": "string",
            "minLength": 1,
            "maxLength": 30
          },
          "bytes": {
            "type": "integer",
            "minimum": 1,
            "maximum": 157286400,
            "description": "Production allowance is 52,428,800 bytes (50 MiB). Schema upper bound includes an unapplied 150 MiB upgrade; the server enforces its active allowance."
          },
          "checksum": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$"
          }
        },
        "required": [
          "filename",
          "revision",
          "bytes",
          "checksum"
        ],
        "additionalProperties": false
      },
      "Whoami": {
        "type": "object",
        "properties": {
          "workspaceId": {
            "type": "string"
          },
          "keyId": {
            "type": "string",
            "format": "uuid"
          },
          "environment": {
            "enum": [
              "development",
              "production"
            ]
          },
          "role": {
            "enum": [
              "admin",
              "editor",
              "viewer"
            ]
          },
          "scopes": {
            "type": "array",
            "items": {
              "enum": [
                "projects:read",
                "projects:write",
                "models:read",
                "models:write",
                "models:download",
                "integrations:read",
                "integrations:write",
                "viewer:control"
              ]
            }
          },
          "projectIds": {
            "anyOf": [
              {
                "type": "array",
                "items": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "workspaceId",
          "keyId",
          "environment",
          "role",
          "scopes",
          "projectIds"
        ],
        "additionalProperties": false
      },
      "Upload": {
        "type": "object",
        "properties": {
          "uploadId": {
            "type": "string",
            "format": "uuid"
          },
          "modelId": {
            "type": "string",
            "format": "uuid"
          },
          "expiresAt": {
            "type": "string",
            "format": "date-time"
          },
          "upload": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "method": {
                    "const": "PUT"
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "headers": {
                    "type": "object",
                    "properties": {
                      "Content-Type": {
                        "const": "application/octet-stream"
                      }
                    },
                    "required": [
                      "Content-Type"
                    ],
                    "additionalProperties": false
                  },
                  "capabilityExpiresInSeconds": {
                    "const": 7200
                  }
                },
                "required": [
                  "method",
                  "url",
                  "headers",
                  "capabilityExpiresInSeconds"
                ],
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ]
          },
          "model": {
            "$ref": "#/components/schemas/Model"
          }
        },
        "required": [
          "uploadId",
          "modelId",
          "expiresAt",
          "upload",
          "model"
        ],
        "additionalProperties": false
      },
      "Download": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "format": "uri"
          },
          "expiresInSeconds": {
            "const": 60
          },
          "checksum": {
            "type": "string"
          },
          "bytes": {
            "type": "integer"
          },
          "filename": {
            "type": "string"
          }
        },
        "required": [
          "url",
          "expiresInSeconds",
          "checksum",
          "bytes",
          "filename"
        ],
        "additionalProperties": false
      },
      "Error": {
        "type": "object",
        "properties": {
          "error": {
            "type": "object",
            "properties": {
              "code": {
                "type": "string"
              },
              "message": {
                "type": "string"
              },
              "requestId": {
                "type": "string",
                "format": "uuid"
              }
            },
            "required": [
              "code",
              "message",
              "requestId"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "error"
        ],
        "additionalProperties": false
      },
      "RhinoExportReport": {
        "type": "object",
        "properties": {
          "schema": {
            "const": "IFC4"
          },
          "exporterVersion": {
            "type": "string"
          },
          "bytes": {
            "type": "integer",
            "minimum": 1,
            "maximum": 52428800
          },
          "checksum": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$"
          },
          "diagnostics": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "limitations": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "schema",
          "exporterVersion",
          "bytes",
          "checksum"
        ],
        "additionalProperties": true
      },
      "RhinoExportJob": {
        "type": "object",
        "properties": {
          "jobId": {
            "type": "string",
            "format": "uuid"
          },
          "state": {
            "enum": [
              "awaiting_upload",
              "queued",
              "running",
              "succeeded",
              "failed",
              "cancelled",
              "expired"
            ]
          },
          "progress": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100
          },
          "attempts": {
            "type": "integer",
            "minimum": 0,
            "maximum": 2
          },
          "failure": {
            "type": [
              "string",
              "null"
            ]
          },
          "result": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/RhinoExportReport"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "jobId",
          "state",
          "progress",
          "attempts",
          "failure",
          "result"
        ],
        "additionalProperties": false
      },
      "RhinoExportReservation": {
        "type": "object",
        "properties": {
          "jobId": {
            "type": "string",
            "format": "uuid"
          },
          "state": {
            "enum": [
              "awaiting_upload",
              "queued",
              "running",
              "succeeded",
              "failed",
              "cancelled",
              "expired"
            ]
          },
          "progress": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100
          },
          "attempts": {
            "type": "integer",
            "minimum": 0,
            "maximum": 2
          },
          "failure": {
            "type": [
              "string",
              "null"
            ]
          },
          "result": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/RhinoExportReport"
              },
              {
                "type": "null"
              }
            ]
          },
          "upload": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "method": {
                    "enum": [
                      "PUT",
                      "GET"
                    ]
                  },
                  "expiresInSeconds": {
                    "const": 60
                  }
                },
                "required": [
                  "url",
                  "method",
                  "expiresInSeconds"
                ],
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ]
          },
          "replayed": {
            "type": "boolean"
          }
        },
        "required": [
          "jobId",
          "state",
          "progress",
          "attempts",
          "failure",
          "result",
          "upload",
          "replayed"
        ],
        "additionalProperties": false
      },
      "RhinoExportResult": {
        "type": "object",
        "properties": {
          "jobId": {
            "type": "string",
            "format": "uuid"
          },
          "state": {
            "enum": [
              "awaiting_upload",
              "queued",
              "running",
              "succeeded",
              "failed",
              "cancelled",
              "expired"
            ]
          },
          "progress": {
            "type": "integer",
            "minimum": 0,
            "maximum": 100
          },
          "attempts": {
            "type": "integer",
            "minimum": 0,
            "maximum": 2
          },
          "failure": {
            "type": [
              "string",
              "null"
            ]
          },
          "result": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/RhinoExportReport"
              },
              {
                "type": "null"
              }
            ]
          },
          "download": {
            "type": "object",
            "properties": {
              "url": {
                "type": "string",
                "format": "uri"
              },
              "method": {
                "enum": [
                  "PUT",
                  "GET"
                ]
              },
              "expiresInSeconds": {
                "const": 60
              }
            },
            "required": [
              "url",
              "method",
              "expiresInSeconds"
            ],
            "additionalProperties": false
          },
          "publication": {
            "$ref": "#/components/schemas/UploadInput"
          }
        },
        "required": [
          "jobId",
          "state",
          "progress",
          "attempts",
          "failure",
          "result",
          "download",
          "publication"
        ],
        "additionalProperties": false
      },
      "AdapterError": {
        "type": "object",
        "properties": {
          "error": {
            "type": "object",
            "properties": {
              "code": {
                "type": "string"
              },
              "message": {
                "type": "string"
              },
              "requestId": {
                "type": "string",
                "format": "uuid"
              }
            },
            "required": [
              "code",
              "message"
            ],
            "additionalProperties": false
          },
          "requestId": {
            "type": "string",
            "format": "uuid"
          }
        },
        "required": [
          "error"
        ],
        "additionalProperties": false
      },
      "ViewState": {
        "type": "object",
        "properties": {
          "scene": {
            "type": "object",
            "properties": {
              "version": {
                "const": 1
              },
              "models": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "revisionId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 100
                    },
                    "visible": {
                      "type": "boolean"
                    },
                    "transform": {
                      "type": "array",
                      "items": {
                        "type": "number",
                        "minimum": -1000000000,
                        "maximum": 1000000000
                      },
                      "minItems": 16,
                      "maxItems": 16,
                      "x-runtime-refinements": true
                    },
                    "alignment": {
                      "const": "local-metres"
                    }
                  },
                  "required": [
                    "revisionId",
                    "visible",
                    "transform",
                    "alignment"
                  ],
                  "additionalProperties": true
                },
                "minItems": 1,
                "maxItems": 16
              },
              "selection": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "revisionId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 100
                    },
                    "elementId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 100
                    }
                  },
                  "required": [
                    "revisionId",
                    "elementId"
                  ],
                  "additionalProperties": true
                },
                "maxItems": 100000,
                "default": []
              },
              "isolation": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "revisionId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 100
                    },
                    "elementId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 100
                    }
                  },
                  "required": [
                    "revisionId",
                    "elementId"
                  ],
                  "additionalProperties": true
                },
                "maxItems": 100000,
                "default": []
              },
              "dimensions": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 100
                    },
                    "a": {
                      "type": "object",
                      "properties": {
                        "revisionId": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 100
                        },
                        "elementId": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 100
                        },
                        "point": {
                          "type": "array",
                          "prefixItems": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "number"
                            },
                            {
                              "type": "number"
                            }
                          ],
                          "minItems": 3,
                          "maxItems": 3
                        },
                        "vertex": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "geometryId": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        }
                      },
                      "required": [
                        "revisionId",
                        "elementId",
                        "point"
                      ],
                      "additionalProperties": true
                    },
                    "b": {
                      "type": "object",
                      "properties": {
                        "revisionId": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 100
                        },
                        "elementId": {
                          "type": "string",
                          "minLength": 1,
                          "maxLength": 100
                        },
                        "point": {
                          "type": "array",
                          "prefixItems": [
                            {
                              "type": "number"
                            },
                            {
                              "type": "number"
                            },
                            {
                              "type": "number"
                            }
                          ],
                          "minItems": 3,
                          "maxItems": 3
                        },
                        "vertex": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "geometryId": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        }
                      },
                      "required": [
                        "revisionId",
                        "elementId",
                        "point"
                      ],
                      "additionalProperties": true
                    },
                    "offset": {
                      "type": "array",
                      "prefixItems": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "number"
                        },
                        {
                          "type": "number"
                        }
                      ],
                      "minItems": 3,
                      "maxItems": 3
                    },
                    "unit": {
                      "enum": [
                        "m",
                        "mm",
                        "ft"
                      ],
                      "default": "m"
                    }
                  },
                  "required": [
                    "id",
                    "a",
                    "b",
                    "offset"
                  ],
                  "additionalProperties": true
                },
                "maxItems": 200,
                "default": []
              }
            },
            "required": [
              "version",
              "models"
            ],
            "additionalProperties": true,
            "x-runtime-refinements": true
          },
          "filterBinding": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "mode": {
                    "const": "snapshot"
                  }
                },
                "required": [
                  "mode"
                ],
                "additionalProperties": true
              },
              {
                "type": "object",
                "properties": {
                  "mode": {
                    "const": "none"
                  }
                },
                "required": [
                  "mode"
                ],
                "additionalProperties": true
              },
              {
                "type": "object",
                "properties": {
                  "mode": {
                    "const": "linked"
                  },
                  "id": {
                    "type": "string",
                    "format": "uuid"
                  },
                  "name": {
                    "type": "string",
                    "maxLength": 80
                  }
                },
                "required": [
                  "mode",
                  "id",
                  "name"
                ],
                "additionalProperties": true
              }
            ]
          },
          "search": {
            "type": "string",
            "maxLength": 200
          },
          "category": {
            "type": "string",
            "maxLength": 200
          },
          "level": {
            "type": "string",
            "maxLength": 200
          },
          "isolated": {
            "type": "string",
            "minLength": 1,
            "maxLength": 1207,
            "x-runtime-refinements": true
          },
          "xray": {
            "type": "boolean"
          },
          "grid": {
            "type": "boolean"
          },
          "selectedId": {
            "type": "string",
            "minLength": 1,
            "maxLength": 1207,
            "x-runtime-refinements": true
          },
          "hidden": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 1207,
              "x-runtime-refinements": true
            },
            "maxItems": 100000
          },
          "camera": {
            "enum": [
              "perspective",
              "twoPoint",
              "isometric",
              "top",
              "bottom",
              "front",
              "back",
              "left",
              "right"
            ]
          },
          "display": {
            "type": "object",
            "properties": {
              "sectionBox": {
                "type": "object",
                "properties": {
                  "visible": {
                    "type": "boolean",
                    "default": false
                  },
                  "enabled": {
                    "type": "boolean"
                  },
                  "min": {
                    "type": "array",
                    "prefixItems": [
                      {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 1
                      },
                      {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 1
                      },
                      {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 1
                      }
                    ],
                    "minItems": 3,
                    "maxItems": 3
                  },
                  "max": {
                    "type": "array",
                    "prefixItems": [
                      {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 1
                      },
                      {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 1
                      },
                      {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 1
                      }
                    ],
                    "minItems": 3,
                    "maxItems": 3
                  }
                },
                "required": [
                  "enabled",
                  "min",
                  "max"
                ],
                "additionalProperties": true,
                "x-runtime-refinements": true
              },
              "damping": {
                "type": "number",
                "minimum": 0,
                "maximum": 1,
                "default": 0.5
              },
              "transitionDuration": {
                "type": "number",
                "minimum": 0,
                "maximum": 2,
                "default": 0.7
              },
              "gridScale": {
                "type": "number",
                "minimum": 0.1,
                "maximum": 1000,
                "default": 1
              },
              "excludedGeometry": {
                "enum": [
                  "hidden",
                  "faint"
                ],
                "default": "hidden"
              },
              "edges": {
                "type": "boolean"
              },
              "sunShadows": {
                "type": "boolean"
              },
              "ambientOcclusion": {
                "type": "boolean"
              },
              "ground": {
                "type": "boolean"
              },
              "edgeWidth": {
                "type": "number",
                "minimum": 0.5,
                "maximum": 6,
                "default": 1
              },
              "edgeColor": {
                "type": "string",
                "pattern": "^#[0-9a-f]{6}$",
                "default": "#526258"
              },
              "backgroundMode": {
                "enum": [
                  "theme",
                  "color",
                  "transparent"
                ],
                "default": "theme"
              },
              "groundMode": {
                "enum": [
                  "theme",
                  "color"
                ],
                "default": "theme"
              },
              "sunAzimuth": {
                "type": "number",
                "minimum": 0,
                "maximum": 360
              },
              "sunElevation": {
                "type": "number",
                "minimum": 5,
                "maximum": 85
              },
              "background": {
                "type": "string",
                "pattern": "^#[0-9a-f]{6}$"
              },
              "groundColor": {
                "type": "string",
                "pattern": "^#[0-9a-f]{6}$"
              }
            },
            "required": [
              "edges",
              "sunShadows",
              "ambientOcclusion",
              "ground",
              "sunAzimuth",
              "sunElevation",
              "background",
              "groundColor"
            ],
            "additionalProperties": true
          },
          "coloring": {
            "type": "object",
            "properties": {
              "mode": {
                "enum": [
                  "source",
                  "uniform",
                  "property"
                ]
              },
              "uniform": {
                "type": "string",
                "pattern": "^#[0-9a-f]{6}$"
              },
              "field": {
                "type": "object",
                "properties": {
                  "group": {
                    "type": "string",
                    "maxLength": 200
                  },
                  "name": {
                    "type": "string",
                    "maxLength": 200
                  }
                },
                "required": [
                  "group",
                  "name"
                ],
                "additionalProperties": true
              },
              "palette": {
                "enum": [
                  "ontologic",
                  "categorical",
                  "warm"
                ]
              },
              "values": {
                "type": "object",
                "additionalProperties": {
                  "type": "string",
                  "pattern": "^#[0-9a-f]{6}$"
                },
                "x-runtime-refinements": true
              },
              "elements": {
                "type": "object",
                "additionalProperties": {
                  "type": "string",
                  "pattern": "^#[0-9a-f]{6}$"
                },
                "x-runtime-refinements": true
              }
            },
            "required": [
              "mode",
              "uniform",
              "field",
              "palette",
              "values",
              "elements"
            ],
            "additionalProperties": true
          },
          "filters": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "group": {
                  "type": "string",
                  "maxLength": 200
                },
                "name": {
                  "type": "string",
                  "maxLength": 200
                },
                "id": {
                  "type": "string",
                  "maxLength": 100
                },
                "operator": {
                  "enum": [
                    "equals",
                    "notEquals",
                    "contains",
                    "gt",
                    "gte",
                    "lt",
                    "lte",
                    "exists",
                    "missing"
                  ]
                },
                "value": {
                  "type": "string",
                  "maxLength": 5000
                }
              },
              "required": [
                "group",
                "name",
                "id",
                "operator",
                "value"
              ],
              "additionalProperties": true
            },
            "maxItems": 32
          },
          "filterMode": {
            "enum": [
              "all",
              "any"
            ]
          },
          "zoom": {
            "type": "number",
            "exclusiveMinimum": 0,
            "maximum": 10000
          },
          "position": {
            "type": "array",
            "items": {
              "type": "number"
            },
            "minItems": 3,
            "maxItems": 3
          },
          "target": {
            "type": "array",
            "items": {
              "type": "number"
            },
            "minItems": 3,
            "maxItems": 3
          }
        },
        "required": [
          "category",
          "hidden",
          "camera"
        ],
        "additionalProperties": true
      },
      "FilterState": {
        "type": "object",
        "properties": {
          "category": {
            "type": "string",
            "maxLength": 200,
            "default": "all"
          },
          "level": {
            "type": "string",
            "maxLength": 200,
            "default": "all"
          },
          "search": {
            "type": "string",
            "maxLength": 200,
            "default": ""
          },
          "filters": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "group": {
                  "type": "string",
                  "maxLength": 200
                },
                "name": {
                  "type": "string",
                  "maxLength": 200
                },
                "id": {
                  "type": "string",
                  "maxLength": 100
                },
                "operator": {
                  "enum": [
                    "equals",
                    "notEquals",
                    "contains",
                    "gt",
                    "gte",
                    "lt",
                    "lte",
                    "exists",
                    "missing"
                  ]
                },
                "value": {
                  "type": "string",
                  "maxLength": 5000
                }
              },
              "required": [
                "group",
                "name",
                "id",
                "operator",
                "value"
              ],
              "additionalProperties": true
            },
            "maxItems": 32,
            "default": []
          },
          "filterMode": {
            "enum": [
              "all",
              "any"
            ],
            "default": "all"
          },
          "hidden": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 1207,
              "x-runtime-refinements": true
            },
            "maxItems": 100000,
            "default": []
          },
          "isolated": {
            "type": "string",
            "minLength": 1,
            "maxLength": 1207,
            "x-runtime-refinements": true
          }
        },
        "required": [],
        "additionalProperties": true
      },
      "DashboardConfig": {
        "type": "object",
        "properties": {
          "schemaVersion": {
            "const": 1
          },
          "layoutMode": {
            "enum": [
              "grid",
              "canvas"
            ]
          },
          "modelIds": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 100
            },
            "minItems": 1,
            "maxItems": 8,
            "x-runtime-refinements": true
          },
          "widgets": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid"
                },
                "title": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 100
                },
                "type": {
                  "enum": [
                    "cards",
                    "bars",
                    "table",
                    "dots"
                  ]
                },
                "metricId": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 4096
                },
                "aggregation": {
                  "enum": [
                    "sum",
                    "mean",
                    "min",
                    "max"
                  ]
                },
                "width": {
                  "enum": [
                    "half",
                    "full"
                  ]
                },
                "layout": {
                  "type": "object",
                  "properties": {
                    "x": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 1200
                    },
                    "y": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 4000
                    },
                    "width": {
                      "type": "integer",
                      "minimum": 240,
                      "maximum": 1200
                    },
                    "height": {
                      "type": "integer",
                      "minimum": 240,
                      "maximum": 1200
                    }
                  },
                  "required": [
                    "x",
                    "y",
                    "width",
                    "height"
                  ],
                  "additionalProperties": false,
                  "x-runtime-refinements": true
                },
                "modelIds": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 100
                  },
                  "minItems": 1,
                  "maxItems": 8
                }
              },
              "required": [
                "id",
                "title",
                "type",
                "metricId",
                "aggregation"
              ],
              "additionalProperties": false
            },
            "minItems": 1,
            "maxItems": 12,
            "x-runtime-refinements": true
          }
        },
        "required": [
          "schemaVersion",
          "modelIds",
          "widgets"
        ],
        "additionalProperties": false,
        "x-runtime-refinements": true
      },
      "ViewerCommand": {
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "action": {
                "const": "select"
              },
              "elements": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "revisionId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 100
                    },
                    "elementId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 100
                    }
                  },
                  "required": [
                    "revisionId",
                    "elementId"
                  ],
                  "additionalProperties": true
                },
                "maxItems": 1000,
                "x-runtime-refinements": true
              }
            },
            "required": [
              "action",
              "elements"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "action": {
                "const": "isolate"
              },
              "elements": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "revisionId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 100
                    },
                    "elementId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 100
                    }
                  },
                  "required": [
                    "revisionId",
                    "elementId"
                  ],
                  "additionalProperties": true
                },
                "maxItems": 1000,
                "x-runtime-refinements": true
              }
            },
            "required": [
              "action",
              "elements"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "action": {
                "const": "hide"
              },
              "elements": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "revisionId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 100
                    },
                    "elementId": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 100
                    }
                  },
                  "required": [
                    "revisionId",
                    "elementId"
                  ],
                  "additionalProperties": true
                },
                "maxItems": 1000,
                "x-runtime-refinements": true
              }
            },
            "required": [
              "action",
              "elements"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "action": {
                "const": "camera"
              },
              "position": {
                "type": "array",
                "prefixItems": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "number"
                  },
                  {
                    "type": "number"
                  }
                ],
                "minItems": 3,
                "maxItems": 3
              },
              "target": {
                "type": "array",
                "prefixItems": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "number"
                  },
                  {
                    "type": "number"
                  }
                ],
                "minItems": 3,
                "maxItems": 3
              },
              "zoom": {
                "type": "number",
                "exclusiveMinimum": 0,
                "maximum": 10000
              }
            },
            "required": [
              "action",
              "position",
              "target",
              "zoom"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "action": {
                "const": "reset"
              }
            },
            "required": [
              "action"
            ],
            "additionalProperties": false
          }
        ]
      },
      "IntegrationJob": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "projectId": {
            "type": "string",
            "format": "uuid"
          },
          "modelId": {
            "type": "string",
            "format": "uuid"
          },
          "checksum": {
            "type": "string",
            "pattern": "^[a-f0-9]{64}$"
          },
          "indexVersion": {
            "const": "ontologic.index/1"
          },
          "status": {
            "enum": [
              "queued",
              "running",
              "succeeded",
              "failed",
              "cancelled"
            ]
          },
          "attempts": {
            "type": "integer",
            "minimum": 0,
            "maximum": 3
          },
          "progress": {
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "failureCode": {
            "type": [
              "string",
              "null"
            ]
          },
          "result": {
            "type": [
              "object",
              "null"
            ]
          },
          "createdAt": {
            "type": "string"
          },
          "updatedAt": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "projectId",
          "modelId",
          "checksum",
          "indexVersion",
          "status",
          "attempts",
          "progress",
          "failureCode",
          "result",
          "createdAt",
          "updatedAt"
        ],
        "additionalProperties": false
      },
      "IntegrationPage": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object"
            }
          },
          "nextCursor": {
            "type": [
              "string",
              "null"
            ]
          },
          "provenance": {
            "type": "object"
          }
        },
        "required": [
          "items",
          "nextCursor"
        ],
        "additionalProperties": false
      },
      "ViewerCommandRecord": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "session_id": {
            "type": "string",
            "format": "uuid"
          },
          "payload": {
            "$ref": "#/components/schemas/ViewerCommand"
          },
          "status": {
            "enum": [
              "pending",
              "applied",
              "rejected"
            ]
          },
          "acknowledgement": {
            "type": [
              "object",
              "null"
            ]
          },
          "expires_at": {
            "type": "string"
          },
          "created_at": {
            "type": "string"
          },
          "acknowledged_at": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "id",
          "payload",
          "status",
          "expires_at"
        ],
        "additionalProperties": true
      }
    },
    "responses": {
      "Error400": {
        "description": "Invalid fields, cursor or idempotency key",
        "headers": {
          "X-Request-Id": {
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          "Retry-After": {
            "description": "Present for rate/quota limits and retryable lease conflicts.",
            "schema": {
              "type": "integer"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "Error401": {
        "description": "Missing, invalid, expired, revoked or wrong-environment key",
        "headers": {
          "X-Request-Id": {
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          "Retry-After": {
            "description": "Present for rate/quota limits and retryable lease conflicts.",
            "schema": {
              "type": "integer"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "Error403": {
        "description": "Scope, issuer membership or current role denies access",
        "headers": {
          "X-Request-Id": {
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          "Retry-After": {
            "description": "Present for rate/quota limits and retryable lease conflicts.",
            "schema": {
              "type": "integer"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "Error404": {
        "description": "Resource outside this key's access or endpoint not found",
        "headers": {
          "X-Request-Id": {
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          "Retry-After": {
            "description": "Present for rate/quota limits and retryable lease conflicts.",
            "schema": {
              "type": "integer"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "Error409": {
        "description": "Idempotency conflict, original not uploaded or verification in progress",
        "headers": {
          "X-Request-Id": {
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          "Retry-After": {
            "description": "Present for rate/quota limits and retryable lease conflicts.",
            "schema": {
              "type": "integer"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "Error410": {
        "description": "Upload session expired",
        "headers": {
          "X-Request-Id": {
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          "Retry-After": {
            "description": "Present for rate/quota limits and retryable lease conflicts.",
            "schema": {
              "type": "integer"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "Error413": {
        "description": "JSON exceeds 16 KiB",
        "headers": {
          "X-Request-Id": {
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          "Retry-After": {
            "description": "Present for rate/quota limits and retryable lease conflicts.",
            "schema": {
              "type": "integer"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "Error415": {
        "description": "Expected application/json",
        "headers": {
          "X-Request-Id": {
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          "Retry-After": {
            "description": "Present for rate/quota limits and retryable lease conflicts.",
            "schema": {
              "type": "integer"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "Error422": {
        "description": "Stored original failed integrity verification",
        "headers": {
          "X-Request-Id": {
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          "Retry-After": {
            "description": "Present for rate/quota limits and retryable lease conflicts.",
            "schema": {
              "type": "integer"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "Error429": {
        "description": "Rate, quota or verification concurrency limit",
        "headers": {
          "X-Request-Id": {
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          "Retry-After": {
            "description": "Present for rate/quota limits and retryable lease conflicts.",
            "schema": {
              "type": "integer"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      },
      "Error503": {
        "description": "Service or configuration unavailable",
        "headers": {
          "X-Request-Id": {
            "schema": {
              "type": "string",
              "format": "uuid"
            }
          },
          "Retry-After": {
            "description": "Present for rate/quota limits and retryable lease conflicts.",
            "schema": {
              "type": "integer"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Error"
            }
          }
        }
      }
    }
  }
}
