{
  "openapi": "3.1.0",
  "info": {
    "title": "SanSignal API",
    "version": "1.0.0",
    "description": "Project-scoped Developer API and dedicated ingestion API. Replace the server origin with your deployment’s API origin. Schemas are derived from the repository’s canonical OpenAPI definitions; numeric configuration defaults shown here can differ from your deployment. The public /dev-api/v1/openai.json endpoint publishes the deployment-specific Developer API specification. Browser session endpoints for organization administration, connections, FTP pipelines, anomaly definitions, and operational runs are managed through the application and are not part of this external Developer API contract."
  },
  "servers": [
    {
      "url": "{protocol}://{host}",
      "description": "Set the protocol and API host supplied for your SanSignal deployment. api.example.com is a placeholder.",
      "variables": {
        "protocol": {
          "default": "https",
          "enum": [
            "https",
            "http"
          ],
          "description": "Use HTTPS for your hosted deployment; HTTP is available for local development."
        },
        "host": {
          "default": "api.example.com",
          "description": "Your SanSignal API host, including port when needed."
        }
      }
    }
  ],
  "tags": [
    {
      "name": "Dashboards"
    },
    {
      "name": "Dashboard widgets"
    },
    {
      "name": "Instruments"
    },
    {
      "name": "Sites"
    },
    {
      "name": "Parsers"
    },
    {
      "name": "Variables"
    },
    {
      "name": "Ingested variables"
    },
    {
      "name": "Calculated variables"
    },
    {
      "name": "Calibration constants"
    },
    {
      "name": "Instrument groups"
    },
    {
      "name": "Instrument group members"
    },
    {
      "name": "Observations"
    },
    {
      "name": "API metadata"
    },
    {
      "name": "Ingestion",
      "description": "Asynchronous reading admission using a separate ingestion connection key."
    }
  ],
  "paths": {
    "/dev-api/v1/openai.json": {
      "get": {
        "operationId": "developerapi_openapi",
        "summary": "Get the deployed OpenAPI document",
        "description": "This metadata endpoint is public.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "API metadata"
        ],
        "parameters": [],
        "security": [],
        "responses": {
          "200": {
            "description": "Raw OpenAPI 3.1 document with the deployment’s effective limits.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "headers": {
              "ETag": {
                "schema": {
                  "type": "string"
                }
              },
              "Cache-Control": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-source-route": "developerapi.openapi"
      }
    },
    "/dev-api/v1/permissions": {
      "get": {
        "operationId": "developerapi_permissions",
        "summary": "Inspect the key’s permissions",
        "description": "Requires a valid Developer API key.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "API metadata"
        ],
        "parameters": [],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PermissionIntrospectionEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-source-route": "developerapi.permissions"
      }
    },
    "/dev-api/v1/p/{project_id}/dashboards": {
      "get": {
        "operationId": "developerapi_dashboards_list",
        "summary": "List dashboards",
        "description": "Requires `developer_api.dashboards.list` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Dashboards"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 256
            },
            "description": "Search text."
          },
          {
            "name": "include_archived",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "description": "Include archived resources explicitly. Archived history still requires authorization."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            },
            "description": "Maximum entries to return. Defaults shown are repository defaults; deployed limits may differ."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 16384
            },
            "description": "Opaque cursor from next_cursor. Keep all filters, resource scope, time range, order, and authorization context unchanged."
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DashboardListEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.dashboards.list",
        "x-sansignal-source-route": "developerapi.dashboards.list"
      },
      "post": {
        "operationId": "developerapi_dashboards_create",
        "summary": "Create dashboards",
        "description": "Requires `developer_api.dashboards.create` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Dashboards"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "201": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DashboardEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "415": {
            "description": "Content-Type must be application/json.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.dashboards.create",
        "x-sansignal-source-route": "developerapi.dashboards.create",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DashboardCreateRequest"
              }
            }
          }
        }
      }
    },
    "/dev-api/v1/p/{project_id}/dashboards/{dashboard_id}": {
      "get": {
        "operationId": "developerapi_dashboards_read",
        "summary": "Read dashboards",
        "description": "Requires `developer_api.dashboards.read` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Dashboards"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "dashboard_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "include_archived",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "description": "Include archived resources explicitly. Archived history still requires authorization."
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DashboardDetailEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.dashboards.read",
        "x-sansignal-source-route": "developerapi.dashboards.read"
      },
      "patch": {
        "operationId": "developerapi_dashboards_update",
        "summary": "Update dashboards",
        "description": "Requires `developer_api.dashboards.update` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.\n\nSend only mutable fields. Fields not included in the body remain unchanged.\n\nThe expected_revision is required. A stale revision produces a 409 conflict. Widget definitions are replaced as a complete saved set when supplied.",
        "tags": [
          "Dashboards"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "dashboard_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DashboardPatchResultEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "415": {
            "description": "Content-Type must be application/json.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.dashboards.update",
        "x-sansignal-source-route": "developerapi.dashboards.update",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DashboardPatchRequest"
              }
            }
          }
        }
      }
    },
    "/dev-api/v1/p/{project_id}/dashboards/{dashboard_id}/widgets": {
      "get": {
        "operationId": "developerapi_dashboard_widgets_list",
        "summary": "List dashboard widgets",
        "description": "Requires `developer_api.dashboards.read` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Dashboard widgets"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "dashboard_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "include_archived",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "description": "Include archived resources explicitly. Archived history still requires authorization."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            },
            "description": "Maximum entries to return. Defaults shown are repository defaults; deployed limits may differ."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 16384
            },
            "description": "Opaque cursor from next_cursor. Keep all filters, resource scope, time range, order, and authorization context unchanged."
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DashboardWidgetListEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.dashboards.read",
        "x-sansignal-source-route": "developerapi.dashboard_widgets.list"
      }
    },
    "/dev-api/v1/p/{project_id}/dashboards/{dashboard_id}/widgets/{widget_id}": {
      "get": {
        "operationId": "developerapi_dashboard_widgets_read",
        "summary": "Read dashboard widgets",
        "description": "Requires `developer_api.dashboards.read` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Dashboard widgets"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "dashboard_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "widget_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 21,
              "maxLength": 21,
              "pattern": "^[A-Za-z0-9_-]{21}$"
            }
          },
          {
            "name": "include_archived",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "description": "Include archived resources explicitly. Archived history still requires authorization."
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DashboardWidgetEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.dashboards.read",
        "x-sansignal-source-route": "developerapi.dashboard_widgets.read"
      }
    },
    "/dev-api/v1/p/{project_id}/dashboards/{dashboard_id}/widgets/{widget_id}/data": {
      "get": {
        "operationId": "developerapi_dashboard_widgets_data",
        "summary": "Data dashboard widgets",
        "description": "Requires `developer_api.dashboard_widget_data.read` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.\n\nReturns data for graph, scatter plot, or table widgets. Markdown widgets return widget_has_no_data. Keep the saved widget revision unchanged across cursor pages.",
        "tags": [
          "Dashboard widgets"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "dashboard_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "widget_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 21,
              "maxLength": 21,
              "pattern": "^[A-Za-z0-9_-]{21}$"
            }
          },
          {
            "name": "from",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "description": "Start of the requested time range (inclusive). Must be earlier than to."
          },
          {
            "name": "to",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "description": "End of the requested time range (exclusive)."
          },
          {
            "name": "include_archived",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "description": "Include archived resources explicitly. Archived history still requires authorization."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 5000,
              "default": 1000
            },
            "description": "Maximum entries to return. Defaults shown are repository defaults; deployed limits may differ."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 16384
            },
            "description": "Opaque cursor from next_cursor. Keep all filters, resource scope, time range, order, and authorization context unchanged."
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WidgetDataEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.dashboard_widget_data.read",
        "x-sansignal-source-route": "developerapi.dashboard_widgets.data"
      }
    },
    "/dev-api/v1/p/{project_id}/dashboards/{dashboard_id}/archive": {
      "post": {
        "operationId": "developerapi_dashboards_archive",
        "summary": "Archive dashboards",
        "description": "Requires `developer_api.dashboards.archive` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Dashboards"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "dashboard_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DashboardEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.dashboards.archive",
        "x-sansignal-source-route": "developerapi.dashboards.archive"
      }
    },
    "/dev-api/v1/p/{project_id}/dashboards/{dashboard_id}/restore": {
      "post": {
        "operationId": "developerapi_dashboards_restore",
        "summary": "Restore dashboards",
        "description": "Requires `developer_api.dashboards.restore` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Dashboards"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "dashboard_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DashboardEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.dashboards.restore",
        "x-sansignal-source-route": "developerapi.dashboards.restore"
      }
    },
    "/dev-api/v1/p/{project_id}/instruments": {
      "get": {
        "operationId": "developerapi_instruments_list",
        "summary": "List instruments",
        "description": "Requires `developer_api.instruments.list` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Instruments"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 256
            },
            "description": "Search text."
          },
          {
            "name": "site_ids",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1,
                "maxLength": 128,
                "pattern": ".*\\S.*"
              },
              "maxItems": 100,
              "uniqueItems": true
            },
            "description": "Comma-separated site identifiers.",
            "style": "form",
            "explode": false
          },
          {
            "name": "group_ids",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1,
                "maxLength": 128,
                "pattern": ".*\\S.*"
              },
              "maxItems": 100,
              "uniqueItems": true
            },
            "description": "Comma-separated instrument group identifiers.",
            "style": "form",
            "explode": false
          },
          {
            "name": "include_archived",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "description": "Include archived resources explicitly. Archived history still requires authorization."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            },
            "description": "Maximum entries to return. Defaults shown are repository defaults; deployed limits may differ."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 16384
            },
            "description": "Opaque cursor from next_cursor. Keep all filters, resource scope, time range, order, and authorization context unchanged."
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InstrumentListEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.instruments.list",
        "x-sansignal-source-route": "developerapi.instruments.list"
      },
      "post": {
        "operationId": "developerapi_instruments_create",
        "summary": "Create instruments",
        "description": "Requires `developer_api.instruments.create` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Instruments"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "201": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InstrumentEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "415": {
            "description": "Content-Type must be application/json.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.instruments.create",
        "x-sansignal-source-route": "developerapi.instruments.create",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InstrumentCreateRequest"
              }
            }
          }
        }
      }
    },
    "/dev-api/v1/p/{project_id}/instruments/{instrument_id}": {
      "get": {
        "operationId": "developerapi_instruments_read",
        "summary": "Read instruments",
        "description": "Requires `developer_api.instruments.read` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Instruments"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "instrument_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "include_archived",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "description": "Include archived resources explicitly. Archived history still requires authorization."
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InstrumentEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.instruments.read",
        "x-sansignal-source-route": "developerapi.instruments.read"
      },
      "patch": {
        "operationId": "developerapi_instruments_update",
        "summary": "Update instruments",
        "description": "Requires `developer_api.instruments.update` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.\n\nSend only mutable fields. Fields not included in the body remain unchanged.",
        "tags": [
          "Instruments"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "instrument_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InstrumentEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "415": {
            "description": "Content-Type must be application/json.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.instruments.update",
        "x-sansignal-source-route": "developerapi.instruments.update",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InstrumentPatchRequest"
              }
            }
          }
        }
      }
    },
    "/dev-api/v1/p/{project_id}/instruments/{instrument_id}/archive": {
      "post": {
        "operationId": "developerapi_instruments_archive",
        "summary": "Archive instruments",
        "description": "Requires `developer_api.instruments.archive` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Instruments"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "instrument_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InstrumentEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.instruments.archive",
        "x-sansignal-source-route": "developerapi.instruments.archive"
      }
    },
    "/dev-api/v1/p/{project_id}/instruments/{instrument_id}/restore": {
      "post": {
        "operationId": "developerapi_instruments_restore",
        "summary": "Restore instruments",
        "description": "Requires `developer_api.instruments.restore` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Instruments"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "instrument_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InstrumentEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.instruments.restore",
        "x-sansignal-source-route": "developerapi.instruments.restore"
      }
    },
    "/dev-api/v1/p/{project_id}/sites": {
      "get": {
        "operationId": "developerapi_sites_list",
        "summary": "List sites",
        "description": "Requires `developer_api.sites.list` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Sites"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 256
            },
            "description": "Search text."
          },
          {
            "name": "include_archived",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "description": "Include archived resources explicitly. Archived history still requires authorization."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            },
            "description": "Maximum entries to return. Defaults shown are repository defaults; deployed limits may differ."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 16384
            },
            "description": "Opaque cursor from next_cursor. Keep all filters, resource scope, time range, order, and authorization context unchanged."
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReferenceListEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.sites.list",
        "x-sansignal-source-route": "developerapi.sites.list"
      }
    },
    "/dev-api/v1/p/{project_id}/parsers": {
      "get": {
        "operationId": "developerapi_parsers_list",
        "summary": "List parsers",
        "description": "Requires `developer_api.parsers.list` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Parsers"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 256
            },
            "description": "Search text."
          },
          {
            "name": "include_archived",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "description": "Include archived resources explicitly. Archived history still requires authorization."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            },
            "description": "Maximum entries to return. Defaults shown are repository defaults; deployed limits may differ."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 16384
            },
            "description": "Opaque cursor from next_cursor. Keep all filters, resource scope, time range, order, and authorization context unchanged."
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ParserListEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.parsers.list",
        "x-sansignal-source-route": "developerapi.parsers.list"
      },
      "post": {
        "operationId": "developerapi_parsers_create",
        "summary": "Create parsers",
        "description": "Requires `developer_api.parsers.create` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Parsers"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "201": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ParserEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "415": {
            "description": "Content-Type must be application/json.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.parsers.create",
        "x-sansignal-source-route": "developerapi.parsers.create",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ParserCreateRequest"
              }
            }
          }
        }
      }
    },
    "/dev-api/v1/p/{project_id}/parsers/{parser_id}": {
      "get": {
        "operationId": "developerapi_parsers_read",
        "summary": "Read parsers",
        "description": "Requires `developer_api.parsers.read` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Parsers"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "parser_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "include_archived",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "description": "Include archived resources explicitly. Archived history still requires authorization."
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ParserEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.parsers.read",
        "x-sansignal-source-route": "developerapi.parsers.read"
      },
      "patch": {
        "operationId": "developerapi_parsers_update",
        "summary": "Update parsers",
        "description": "Requires `developer_api.parsers.update` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.\n\nSend only mutable fields. Fields not included in the body remain unchanged.",
        "tags": [
          "Parsers"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "parser_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ParserEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "415": {
            "description": "Content-Type must be application/json.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.parsers.update",
        "x-sansignal-source-route": "developerapi.parsers.update",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ParserPatchRequest"
              }
            }
          }
        }
      }
    },
    "/dev-api/v1/p/{project_id}/parsers/{parser_id}/archive": {
      "post": {
        "operationId": "developerapi_parsers_archive",
        "summary": "Archive parsers",
        "description": "Requires `developer_api.parsers.archive` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Parsers"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "parser_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ParserEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.parsers.archive",
        "x-sansignal-source-route": "developerapi.parsers.archive"
      }
    },
    "/dev-api/v1/p/{project_id}/parsers/{parser_id}/restore": {
      "post": {
        "operationId": "developerapi_parsers_restore",
        "summary": "Restore parsers",
        "description": "Requires `developer_api.parsers.restore` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Parsers"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "parser_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ParserEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.parsers.restore",
        "x-sansignal-source-route": "developerapi.parsers.restore"
      }
    },
    "/dev-api/v1/p/{project_id}/instruments/{instrument_id}/variables": {
      "get": {
        "operationId": "developerapi_variables_list",
        "summary": "List variables",
        "description": "Requires `developer_api.variables.list` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Variables"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "instrument_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "include_archived",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "description": "Include archived resources explicitly. Archived history still requires authorization."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            },
            "description": "Maximum entries to return. Defaults shown are repository defaults; deployed limits may differ."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 16384
            },
            "description": "Opaque cursor from next_cursor. Keep all filters, resource scope, time range, order, and authorization context unchanged."
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VariableListEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.variables.list",
        "x-sansignal-source-route": "developerapi.variables.list"
      }
    },
    "/dev-api/v1/p/{project_id}/instruments/{instrument_id}/ingested-variables": {
      "get": {
        "operationId": "developerapi_ingested_variables_list",
        "summary": "List ingested variables",
        "description": "Requires `developer_api.ingested_variables.list` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Ingested variables"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "instrument_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "include_archived",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "description": "Include archived resources explicitly. Archived history still requires authorization."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            },
            "description": "Maximum entries to return. Defaults shown are repository defaults; deployed limits may differ."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 16384
            },
            "description": "Opaque cursor from next_cursor. Keep all filters, resource scope, time range, order, and authorization context unchanged."
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VariableListEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.ingested_variables.list",
        "x-sansignal-source-route": "developerapi.ingested_variables.list"
      },
      "post": {
        "operationId": "developerapi_ingested_variables_create",
        "summary": "Create ingested variables",
        "description": "Requires `developer_api.ingested_variables.create` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Ingested variables"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "instrument_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "201": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VariableEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "415": {
            "description": "Content-Type must be application/json.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.ingested_variables.create",
        "x-sansignal-source-route": "developerapi.ingested_variables.create",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IngestedVariableCreateRequest"
              }
            }
          }
        }
      }
    },
    "/dev-api/v1/p/{project_id}/instruments/{instrument_id}/ingested-variables/{variable_id}": {
      "get": {
        "operationId": "developerapi_ingested_variables_read",
        "summary": "Read ingested variables",
        "description": "Requires `developer_api.ingested_variables.read` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Ingested variables"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "instrument_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "variable_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "include_archived",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "description": "Include archived resources explicitly. Archived history still requires authorization."
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VariableEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.ingested_variables.read",
        "x-sansignal-source-route": "developerapi.ingested_variables.read"
      },
      "patch": {
        "operationId": "developerapi_ingested_variables_update",
        "summary": "Update ingested variables",
        "description": "Requires `developer_api.ingested_variables.update` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.\n\nSend only mutable fields. Fields not included in the body remain unchanged.",
        "tags": [
          "Ingested variables"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "instrument_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "variable_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VariableEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "415": {
            "description": "Content-Type must be application/json.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.ingested_variables.update",
        "x-sansignal-source-route": "developerapi.ingested_variables.update",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IngestedVariablePatchRequest"
              }
            }
          }
        }
      }
    },
    "/dev-api/v1/p/{project_id}/instruments/{instrument_id}/ingested-variables/{variable_id}/archive": {
      "post": {
        "operationId": "developerapi_ingested_variables_archive",
        "summary": "Archive ingested variables",
        "description": "Requires `developer_api.ingested_variables.archive` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Ingested variables"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "instrument_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "variable_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VariableEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.ingested_variables.archive",
        "x-sansignal-source-route": "developerapi.ingested_variables.archive"
      }
    },
    "/dev-api/v1/p/{project_id}/instruments/{instrument_id}/ingested-variables/{variable_id}/restore": {
      "post": {
        "operationId": "developerapi_ingested_variables_restore",
        "summary": "Restore ingested variables",
        "description": "Requires `developer_api.ingested_variables.restore` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Ingested variables"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "instrument_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "variable_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VariableEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.ingested_variables.restore",
        "x-sansignal-source-route": "developerapi.ingested_variables.restore"
      }
    },
    "/dev-api/v1/p/{project_id}/instruments/{instrument_id}/calculated-variables": {
      "get": {
        "operationId": "developerapi_calculated_variables_list",
        "summary": "List calculated variables",
        "description": "Requires `developer_api.calculated_variables.list` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Calculated variables"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "instrument_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "include_archived",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "description": "Include archived resources explicitly. Archived history still requires authorization."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            },
            "description": "Maximum entries to return. Defaults shown are repository defaults; deployed limits may differ."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 16384
            },
            "description": "Opaque cursor from next_cursor. Keep all filters, resource scope, time range, order, and authorization context unchanged."
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalculatedVariableListEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.calculated_variables.list",
        "x-sansignal-source-route": "developerapi.calculated_variables.list"
      },
      "post": {
        "operationId": "developerapi_calculated_variables_create",
        "summary": "Create calculated variables",
        "description": "Requires `developer_api.calculated_variables.create` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Calculated variables"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "instrument_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "201": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalculatedVariableMutationEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "415": {
            "description": "Content-Type must be application/json.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.calculated_variables.create",
        "x-sansignal-source-route": "developerapi.calculated_variables.create",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CalculatedVariableCreateRequest"
              }
            }
          }
        }
      }
    },
    "/dev-api/v1/p/{project_id}/instruments/{instrument_id}/calculated-variables/{variable_id}": {
      "get": {
        "operationId": "developerapi_calculated_variables_read",
        "summary": "Read calculated variables",
        "description": "Requires `developer_api.calculated_variables.read` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Calculated variables"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "instrument_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "variable_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "include_archived",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "description": "Include archived resources explicitly. Archived history still requires authorization."
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalculatedVariableEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.calculated_variables.read",
        "x-sansignal-source-route": "developerapi.calculated_variables.read"
      },
      "patch": {
        "operationId": "developerapi_calculated_variables_update",
        "summary": "Update calculated variables",
        "description": "Requires `developer_api.calculated_variables.update` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.\n\nSend only mutable fields. Fields not included in the body remain unchanged.",
        "tags": [
          "Calculated variables"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "instrument_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "variable_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalculatedVariableMutationEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "415": {
            "description": "Content-Type must be application/json.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.calculated_variables.update",
        "x-sansignal-source-route": "developerapi.calculated_variables.update",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CalculatedVariablePatchRequest"
              }
            }
          }
        }
      }
    },
    "/dev-api/v1/p/{project_id}/instruments/{instrument_id}/calculated-variables/{variable_id}/computation": {
      "put": {
        "operationId": "developerapi_calculated_variables_computation",
        "summary": "Computation calculated variables",
        "description": "Requires `developer_api.calculated_variables.update` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Calculated variables"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "instrument_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "variable_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalculatedVariableMutationEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "415": {
            "description": "Content-Type must be application/json.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.calculated_variables.update",
        "x-sansignal-source-route": "developerapi.calculated_variables.computation",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CalculatedVariableComputationRequest"
              }
            }
          }
        }
      }
    },
    "/dev-api/v1/p/{project_id}/instruments/{instrument_id}/calculated-variables/{variable_id}/archive": {
      "post": {
        "operationId": "developerapi_calculated_variables_archive",
        "summary": "Archive calculated variables",
        "description": "Requires `developer_api.calculated_variables.archive` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Calculated variables"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "instrument_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "variable_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalculatedVariableMutationEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.calculated_variables.archive",
        "x-sansignal-source-route": "developerapi.calculated_variables.archive"
      }
    },
    "/dev-api/v1/p/{project_id}/instruments/{instrument_id}/calculated-variables/{variable_id}/restore": {
      "post": {
        "operationId": "developerapi_calculated_variables_restore",
        "summary": "Restore calculated variables",
        "description": "Requires `developer_api.calculated_variables.restore` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Calculated variables"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "instrument_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "variable_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalculatedVariableMutationEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.calculated_variables.restore",
        "x-sansignal-source-route": "developerapi.calculated_variables.restore"
      }
    },
    "/dev-api/v1/p/{project_id}/instruments/{instrument_id}/calibration-constants": {
      "get": {
        "operationId": "developerapi_calibration_constants_list",
        "summary": "List calibration constants",
        "description": "Requires `developer_api.calibration_constants.list` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Calibration constants"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "instrument_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "include_archived",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "description": "Include archived resources explicitly. Archived history still requires authorization."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            },
            "description": "Maximum entries to return. Defaults shown are repository defaults; deployed limits may differ."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 16384
            },
            "description": "Opaque cursor from next_cursor. Keep all filters, resource scope, time range, order, and authorization context unchanged."
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalibrationConstantListEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.calibration_constants.list",
        "x-sansignal-source-route": "developerapi.calibration_constants.list"
      },
      "post": {
        "operationId": "developerapi_calibration_constants_create",
        "summary": "Create calibration constants",
        "description": "Requires `developer_api.calibration_constants.create` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Calibration constants"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "instrument_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "201": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalibrationConstantMutationEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "415": {
            "description": "Content-Type must be application/json.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.calibration_constants.create",
        "x-sansignal-source-route": "developerapi.calibration_constants.create",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CalibrationConstantCreateRequest"
              }
            }
          }
        }
      }
    },
    "/dev-api/v1/p/{project_id}/instruments/{instrument_id}/calibration-constants/{constant_id}": {
      "get": {
        "operationId": "developerapi_calibration_constants_read",
        "summary": "Read calibration constants",
        "description": "Requires `developer_api.calibration_constants.read` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Calibration constants"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "instrument_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "constant_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "include_archived",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "description": "Include archived resources explicitly. Archived history still requires authorization."
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalibrationConstantEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.calibration_constants.read",
        "x-sansignal-source-route": "developerapi.calibration_constants.read"
      },
      "patch": {
        "operationId": "developerapi_calibration_constants_update",
        "summary": "Update calibration constants",
        "description": "Requires `developer_api.calibration_constants.update` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.\n\nSend only mutable fields. Fields not included in the body remain unchanged.",
        "tags": [
          "Calibration constants"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "instrument_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "constant_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalibrationConstantMutationEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "415": {
            "description": "Content-Type must be application/json.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.calibration_constants.update",
        "x-sansignal-source-route": "developerapi.calibration_constants.update",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CalibrationConstantPatchRequest"
              }
            }
          }
        }
      }
    },
    "/dev-api/v1/p/{project_id}/instruments/{instrument_id}/calibration-constants/{constant_id}/archive": {
      "post": {
        "operationId": "developerapi_calibration_constants_archive",
        "summary": "Archive calibration constants",
        "description": "Requires `developer_api.calibration_constants.archive` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Calibration constants"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "instrument_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "constant_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalibrationConstantEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.calibration_constants.archive",
        "x-sansignal-source-route": "developerapi.calibration_constants.archive"
      }
    },
    "/dev-api/v1/p/{project_id}/instruments/{instrument_id}/calibration-constants/{constant_id}/restore": {
      "post": {
        "operationId": "developerapi_calibration_constants_restore",
        "summary": "Restore calibration constants",
        "description": "Requires `developer_api.calibration_constants.restore` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Calibration constants"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "instrument_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "constant_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CalibrationConstantEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.calibration_constants.restore",
        "x-sansignal-source-route": "developerapi.calibration_constants.restore"
      }
    },
    "/dev-api/v1/p/{project_id}/instrument-groups": {
      "get": {
        "operationId": "developerapi_instrument_groups_list",
        "summary": "List instrument groups",
        "description": "Requires `developer_api.instrument_groups.list` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Instrument groups"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 256
            },
            "description": "Search text."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            },
            "description": "Maximum entries to return. Defaults shown are repository defaults; deployed limits may differ."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 16384
            },
            "description": "Opaque cursor from next_cursor. Keep all filters, resource scope, time range, order, and authorization context unchanged."
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InstrumentGroupListEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.instrument_groups.list",
        "x-sansignal-source-route": "developerapi.instrument_groups.list"
      },
      "post": {
        "operationId": "developerapi_instrument_groups_create",
        "summary": "Create instrument groups",
        "description": "Requires `developer_api.instrument_groups.create` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Instrument groups"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "201": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InstrumentGroupEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "415": {
            "description": "Content-Type must be application/json.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.instrument_groups.create",
        "x-sansignal-source-route": "developerapi.instrument_groups.create",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InstrumentGroupCreateRequest"
              }
            }
          }
        }
      }
    },
    "/dev-api/v1/p/{project_id}/instrument-groups/{group_id}": {
      "get": {
        "operationId": "developerapi_instrument_groups_read",
        "summary": "Read instrument groups",
        "description": "Requires `developer_api.instrument_groups.read` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Instrument groups"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "include_archived",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "description": "Include archived resources explicitly. Archived history still requires authorization."
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InstrumentGroupDetailEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.instrument_groups.read",
        "x-sansignal-source-route": "developerapi.instrument_groups.read"
      },
      "patch": {
        "operationId": "developerapi_instrument_groups_update",
        "summary": "Update instrument groups",
        "description": "Requires `developer_api.instrument_groups.update` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.\n\nSend only mutable fields. Fields not included in the body remain unchanged.",
        "tags": [
          "Instrument groups"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InstrumentGroupEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "415": {
            "description": "Content-Type must be application/json.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.instrument_groups.update",
        "x-sansignal-source-route": "developerapi.instrument_groups.update",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InstrumentGroupPatchRequest"
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "developerapi_instrument_groups_delete",
        "summary": "Delete instrument groups",
        "description": "Requires `developer_api.instrument_groups.delete` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.\n\nPermanently deletes a group only when no associated access grants remain.",
        "tags": [
          "Instrument groups"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeleteEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.instrument_groups.delete",
        "x-sansignal-source-route": "developerapi.instrument_groups.delete"
      }
    },
    "/dev-api/v1/p/{project_id}/instrument-groups/{group_id}/instruments": {
      "get": {
        "operationId": "developerapi_instrument_group_members_list",
        "summary": "List instrument group members",
        "description": "Requires `developer_api.instrument_groups.read` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.",
        "tags": [
          "Instrument group members"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "include_archived",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "description": "Include archived resources explicitly. Archived history still requires authorization."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 50
            },
            "description": "Maximum entries to return. Defaults shown are repository defaults; deployed limits may differ."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 16384
            },
            "description": "Opaque cursor from next_cursor. Keep all filters, resource scope, time range, order, and authorization context unchanged."
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReferenceListEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.instrument_groups.read",
        "x-sansignal-source-route": "developerapi.instrument_group_members.list"
      },
      "put": {
        "operationId": "developerapi_instrument_group_members_replace",
        "summary": "Replace instrument group members",
        "description": "Requires `developer_api.instrument_groups.update` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.\n\nReplaces the complete membership set. An empty instrument_ids array removes all members.",
        "tags": [
          "Instrument group members"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "group_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InstrumentGroupMembershipReplacementEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "415": {
            "description": "Content-Type must be application/json.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.instrument_groups.update",
        "x-sansignal-source-route": "developerapi.instrument_group_members.replace",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InstrumentGroupMembershipRequest"
              }
            }
          }
        }
      }
    },
    "/dev-api/v1/p/{project_id}/instruments/{instrument_id}/observations": {
      "get": {
        "operationId": "developerapi_instrument_observations_query",
        "summary": "Query observations",
        "description": "Requires `developer_api.instrument_data.query` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.\n\nTime ranges use an inclusive from and exclusive to. Query current raw/corrected observations or current calculated materializations; never treat nil readings as zero. Deployed limits are available from the public OpenAPI metadata endpoint.",
        "tags": [
          "Observations"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "instrument_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          },
          {
            "name": "variable_ids",
            "in": "query",
            "required": true,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1,
                "maxLength": 128,
                "pattern": ".*\\S.*"
              },
              "maxItems": 200,
              "uniqueItems": true,
              "minItems": 1
            },
            "description": "Comma-separated variable identifiers.",
            "style": "form",
            "explode": false
          },
          {
            "name": "from",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "description": "Start of the requested time range (inclusive). Must be earlier than to."
          },
          {
            "name": "to",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "description": "End of the requested time range (exclusive)."
          },
          {
            "name": "quality",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "pass",
                  "not_evaluated",
                  "suspect",
                  "fail",
                  "missing"
                ]
              },
              "maxItems": 16,
              "uniqueItems": true
            },
            "description": "Comma-separated quality values.",
            "style": "form",
            "explode": false
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "raw",
                  "corrected",
                  "derived"
                ]
              },
              "maxItems": 16,
              "uniqueItems": true
            },
            "description": "Comma-separated value statuses.",
            "style": "form",
            "explode": false
          },
          {
            "name": "include_nil",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "description": "Include observations whose canonical value is nil."
          },
          {
            "name": "include_archived",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false
            },
            "description": "Include archived resources explicitly. Archived history still requires authorization."
          },
          {
            "name": "order",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "asc",
                "desc"
              ],
              "default": "asc"
            },
            "description": "Observation timestamp order."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 5000,
              "default": 1000
            },
            "description": "Maximum entries to return. Defaults shown are repository defaults; deployed limits may differ."
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 16384
            },
            "description": "Opaque cursor from next_cursor. Keep all filters, resource scope, time range, order, and authorization context unchanged."
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ObservationResultEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.instrument_data.query",
        "x-sansignal-source-route": "developerapi.instrument_observations.query"
      }
    },
    "/dev-api/v1/p/{project_id}/observations/query": {
      "post": {
        "operationId": "developerapi_observations_query",
        "summary": "Query observations",
        "description": "Requires `developer_api.instrument_data.query` on the project-scoped Developer API connection.\n\nUse the API origin supplied for your deployment. Unknown query parameters and unexpected request bodies are rejected.\n\nTime ranges use an inclusive from and exclusive to. Query current raw/corrected observations or current calculated materializations; never treat nil readings as zero. Deployed limits are available from the public OpenAPI metadata endpoint.",
        "tags": [
          "Observations"
        ],
        "parameters": [
          {
            "name": "project_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            }
          }
        ],
        "security": [
          {
            "developerApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ObservationResultEnvelope"
                }
              }
            },
            "headers": {
              "Cache-Control": {
                "schema": {
                  "type": "string",
                  "const": "no-store"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid request, unknown field, or invalid cursor.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BadRequestErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "description": "Invalid Developer API credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnauthorizedErrorEnvelope"
                }
              }
            },
            "headers": {
              "WWW-Authenticate": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "403": {
            "description": "Permission denied or project scope mismatch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ForbiddenErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotFoundErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "405": {
            "description": "Method not allowed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodNotAllowedErrorEnvelope"
                }
              }
            },
            "headers": {
              "Allow": {
                "schema": {
                  "type": "string"
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "409": {
            "description": "Revision, lifecycle, or dependency conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConflictErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayloadTooLargeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "415": {
            "description": "Content-Type must be application/json.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnsupportedMediaTypeErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "429": {
            "description": "Rate, concurrency, query, response, or cursor size limit exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TooManyRequestsErrorEnvelope"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "schema": {
                  "type": "integer",
                  "minimum": 1
                }
              },
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InternalErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Required dependency temporarily unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TemporarilyUnavailableErrorEnvelope"
                }
              }
            },
            "headers": {
              "X-Request-ID": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-sansignal-required-permission": "developer_api.instrument_data.query",
        "x-sansignal-source-route": "developerapi.observations.query",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ObservationQueryRequest"
              }
            }
          }
        }
      }
    },
    "/v1/ingest": {
      "post": {
        "operationId": "ingestion_create",
        "summary": "Submit instrument readings",
        "tags": [
          "Ingestion"
        ],
        "description": "Send a batch with an ingestion connection API key. The key determines the organization and project; a Developer API key cannot be used here. A 200 response acknowledges durable ingestion runs, not successful processing of every point. Inspect Runs in the application and query resulting observations with a separate Developer API key. Reuse the same Idempotency-Key only for retries of the same batch: the server replays by connection and key and does not compare the retried body. Use a new key for new or corrected data. Archived instruments and variables must be restored before ingestion.",
        "security": [
          {
            "ingestApiKey": []
          }
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Stable key for retrying this exact batch. Scope is the ingestion connection."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/IngestCreateBody"
              },
              "example": {
                "data": [
                  {
                    "instrument_timestamp": "2026-09-04T12:00:00Z",
                    "instrument_name": "PZ-01",
                    "site_id": "your-site-id",
                    "ingested_variables": [
                      {
                        "name": "pressure",
                        "value": 42.5
                      }
                    ]
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Durable runs admitted, or the original idempotent request replayed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IngestAcceptedEnvelope"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON or invalid batch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IngestErrorEnvelope"
                }
              }
            }
          },
          "401": {
            "description": "Missing, invalid, expired, or revoked ingestion credential.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IngestErrorEnvelope"
                }
              }
            }
          },
          "403": {
            "description": "Connection or project access denied.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IngestErrorEnvelope"
                }
              }
            }
          },
          "409": {
            "description": "Admission conflict.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IngestErrorEnvelope"
                }
              }
            }
          },
          "413": {
            "description": "Request exceeds the configured body limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IngestErrorEnvelope"
                }
              }
            }
          },
          "429": {
            "description": "Request throttled.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IngestErrorEnvelope"
                }
              }
            }
          },
          "500": {
            "description": "Internal error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IngestErrorEnvelope"
                }
              }
            }
          },
          "503": {
            "description": "Ingestion dependency unavailable.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IngestErrorEnvelope"
                }
              }
            }
          }
        },
        "x-sansignal-source-route": "POST /v1/ingest"
      }
    }
  },
  "components": {
    "securitySchemes": {
      "developerApiKey": {
        "type": "http",
        "scheme": "bearer",
        "description": "Project-scoped Developer API connection key. Grant only the required operation permissions."
      },
      "ingestApiKey": {
        "type": "http",
        "scheme": "bearer",
        "description": "Dedicated ingestion connection API key. Separate from Developer API keys and browser sessions."
      }
    },
    "schemas": {
      "VariableGraphScale": {
        "type": "object",
        "properties": {
          "custom": {
            "type": "boolean"
          },
          "min": {
            "type": "number"
          },
          "max": {
            "type": "number"
          },
          "interval": {
            "type": "number",
            "exclusiveMinimum": 0
          }
        },
        "additionalProperties": false,
        "oneOf": [
          {
            "properties": {
              "custom": {
                "const": false
              }
            },
            "not": {
              "anyOf": [
                {
                  "required": [
                    "min"
                  ]
                },
                {
                  "required": [
                    "max"
                  ]
                },
                {
                  "required": [
                    "interval"
                  ]
                }
              ]
            }
          },
          {
            "properties": {
              "custom": {
                "const": true
              }
            },
            "required": [
              "custom",
              "min",
              "max",
              "interval"
            ]
          }
        ],
        "description": "When custom is true, min, max, and a positive interval are required; max must be greater than min."
      },
      "VariableGraphViewOptions": {
        "type": "object",
        "properties": {
          "scale": {
            "$ref": "#/components/schemas/VariableGraphScale"
          }
        },
        "additionalProperties": false
      },
      "VariableViewOptions": {
        "type": "object",
        "properties": {
          "hide": {
            "type": "boolean"
          },
          "graph": {
            "$ref": "#/components/schemas/VariableGraphViewOptions"
          }
        },
        "additionalProperties": false
      },
      "StringVariableViewOptions": {
        "type": "object",
        "properties": {
          "hide": {
            "type": "boolean"
          },
          "graph": {
            "type": "object",
            "properties": {},
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "ParserColumnReference": {
        "type": "object",
        "properties": {
          "header_name": {
            "type": "string",
            "minLength": 1,
            "pattern": ".*\\S.*"
          },
          "column_number": {
            "type": "integer",
            "minimum": 1
          }
        },
        "additionalProperties": false,
        "oneOf": [
          {
            "required": [
              "header_name"
            ],
            "not": {
              "required": [
                "column_number"
              ]
            }
          },
          {
            "required": [
              "column_number"
            ],
            "not": {
              "required": [
                "header_name"
              ]
            }
          }
        ]
      },
      "ParserHeader": {
        "type": "object",
        "properties": {
          "present": {
            "type": "boolean"
          },
          "row_number": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "present",
          "row_number"
        ]
      },
      "ParserTimestampMapping": {
        "type": "object",
        "properties": {
          "columns": {
            "type": "array",
            "minItems": 1,
            "maxItems": 16,
            "items": {
              "$ref": "#/components/schemas/ParserColumnReference"
            }
          },
          "join_with": {
            "type": "string"
          },
          "input_format": {
            "type": "string",
            "minLength": 1,
            "pattern": ".*\\S.*"
          }
        },
        "additionalProperties": false,
        "required": [
          "columns",
          "join_with",
          "input_format"
        ]
      },
      "ParserInstrumentMapping": {
        "type": "object",
        "properties": {
          "name_source": {
            "type": "string",
            "enum": [
              "base_name",
              "file_column"
            ]
          },
          "name_column": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ParserColumnReference"
              },
              {
                "type": "null"
              }
            ]
          },
          "prefix_variable_names": {
            "type": "boolean"
          }
        },
        "additionalProperties": false,
        "required": [
          "name_source",
          "name_column",
          "prefix_variable_names"
        ]
      },
      "ParserVariableMapping": {
        "type": "object",
        "properties": {
          "source_column": {
            "$ref": "#/components/schemas/ParserColumnReference"
          },
          "variable_name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "pattern": ".*\\S.*"
          },
          "value_type": {
            "type": "string",
            "enum": [
              "decimal",
              "string",
              "auto"
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "source_column",
          "variable_name",
          "value_type"
        ]
      },
      "ParserDataLayout": {
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "layout": {
                "type": "string",
                "const": "one_data_point_per_row"
              },
              "variable_mappings": {
                "type": "array",
                "minItems": 1,
                "maxItems": 1500,
                "items": {
                  "$ref": "#/components/schemas/ParserVariableMapping"
                }
              }
            },
            "additionalProperties": false,
            "required": [
              "layout",
              "variable_mappings"
            ]
          },
          {
            "type": "object",
            "properties": {
              "layout": {
                "type": "string",
                "const": "one_data_point_across_multiple_rows"
              },
              "variable_name_column": {
                "$ref": "#/components/schemas/ParserColumnReference"
              },
              "variable_value_column": {
                "$ref": "#/components/schemas/ParserColumnReference"
              },
              "variable_value_type": {
                "type": "string",
                "enum": [
                  "decimal",
                  "string",
                  "auto"
                ]
              },
              "data_point_identity_columns": {
                "type": "array",
                "minItems": 1,
                "maxItems": 16,
                "items": {
                  "$ref": "#/components/schemas/ParserColumnReference"
                }
              }
            },
            "additionalProperties": false,
            "required": [
              "layout",
              "variable_name_column",
              "variable_value_column",
              "variable_value_type",
              "data_point_identity_columns"
            ]
          }
        ]
      },
      "ParserConfiguration": {
        "type": "object",
        "properties": {
          "timestamp_order": {
            "type": "string",
            "enum": [
              "oldest_first",
              "newest_first"
            ]
          },
          "delimiter": {
            "type": "string",
            "enum": [
              "comma",
              "semicolon",
              "tab",
              "pipe"
            ]
          },
          "decimal_separator": {
            "type": "string",
            "enum": [
              "dot",
              "comma"
            ]
          },
          "header": {
            "$ref": "#/components/schemas/ParserHeader"
          },
          "first_data_row": {
            "type": "integer",
            "minimum": 1
          },
          "timestamp": {
            "$ref": "#/components/schemas/ParserTimestampMapping"
          },
          "instrument": {
            "$ref": "#/components/schemas/ParserInstrumentMapping"
          },
          "missing_value_markers": {
            "type": "array",
            "maxItems": 256,
            "uniqueItems": true,
            "items": {
              "type": "string"
            }
          },
          "data_layout": {
            "$ref": "#/components/schemas/ParserDataLayout"
          }
        },
        "additionalProperties": false,
        "required": [
          "timestamp_order",
          "delimiter",
          "decimal_separator",
          "header",
          "first_data_row",
          "timestamp",
          "instrument",
          "missing_value_markers",
          "data_layout"
        ],
        "x-sansignal-max-utf8-bytes": 524288,
        "description": "Canonical configuration is limited to 524288 UTF-8 bytes."
      },
      "ParserCreateRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "pattern": ".*\\S.*"
          },
          "type": {
            "type": "string",
            "const": "csv"
          },
          "version": {
            "type": "integer",
            "const": 1
          },
          "configuration": {
            "$ref": "#/components/schemas/ParserConfiguration"
          }
        },
        "additionalProperties": false,
        "required": [
          "name",
          "type",
          "version",
          "configuration"
        ]
      },
      "ParserPatchRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "pattern": ".*\\S.*"
          },
          "version": {
            "type": "integer",
            "const": 1
          },
          "configuration": {
            "$ref": "#/components/schemas/ParserConfiguration"
          }
        },
        "additionalProperties": false,
        "minProperties": 1
      },
      "DashboardCreateRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "pattern": ".*\\S.*"
          }
        },
        "additionalProperties": false,
        "required": [
          "name"
        ]
      },
      "DashboardWidgetBody": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 21,
            "maxLength": 21,
            "pattern": "^[A-Za-z0-9_-]{21}$"
          },
          "client_reference": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "pattern": ".*\\S.*"
          },
          "widget_type": {
            "type": "string",
            "enum": [
              "graph",
              "scatter_plot",
              "table",
              "markdown"
            ]
          },
          "configuration": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/DashboardGraphConfiguration"
              },
              {
                "$ref": "#/components/schemas/DashboardScatterConfiguration"
              },
              {
                "$ref": "#/components/schemas/DashboardTableConfiguration"
              },
              {
                "$ref": "#/components/schemas/DashboardMarkdownConfiguration"
              }
            ]
          },
          "grid_x": {
            "type": "integer",
            "minimum": 1,
            "maximum": 4
          },
          "grid_y": {
            "type": "integer",
            "minimum": 1
          },
          "grid_width": {
            "type": "integer",
            "minimum": 1,
            "maximum": 4
          },
          "grid_height": {
            "type": "integer",
            "minimum": 1,
            "maximum": 10
          }
        },
        "additionalProperties": false,
        "required": [
          "name",
          "widget_type",
          "configuration",
          "grid_x",
          "grid_y",
          "grid_width",
          "grid_height"
        ],
        "oneOf": [
          {
            "required": [
              "id"
            ],
            "not": {
              "required": [
                "client_reference"
              ]
            }
          },
          {
            "required": [
              "client_reference"
            ],
            "not": {
              "required": [
                "id"
              ]
            }
          }
        ],
        "allOf": [
          {
            "oneOf": [
              {
                "properties": {
                  "widget_type": {
                    "const": "graph"
                  },
                  "configuration": {
                    "$ref": "#/components/schemas/DashboardGraphConfiguration"
                  }
                },
                "required": [
                  "widget_type",
                  "configuration"
                ]
              },
              {
                "properties": {
                  "widget_type": {
                    "const": "scatter_plot"
                  },
                  "configuration": {
                    "$ref": "#/components/schemas/DashboardScatterConfiguration"
                  }
                },
                "required": [
                  "widget_type",
                  "configuration"
                ]
              },
              {
                "properties": {
                  "widget_type": {
                    "const": "table"
                  },
                  "configuration": {
                    "$ref": "#/components/schemas/DashboardTableConfiguration"
                  }
                },
                "required": [
                  "widget_type",
                  "configuration"
                ]
              },
              {
                "properties": {
                  "widget_type": {
                    "const": "markdown"
                  },
                  "configuration": {
                    "$ref": "#/components/schemas/DashboardMarkdownConfiguration"
                  }
                },
                "required": [
                  "widget_type",
                  "configuration"
                ]
              }
            ]
          },
          {
            "if": {
              "properties": {
                "grid_x": {
                  "const": 1
                }
              },
              "required": [
                "grid_x"
              ]
            },
            "then": {
              "properties": {
                "grid_width": {
                  "maximum": 4
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "grid_x": {
                  "const": 2
                }
              },
              "required": [
                "grid_x"
              ]
            },
            "then": {
              "properties": {
                "grid_width": {
                  "maximum": 3
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "grid_x": {
                  "const": 3
                }
              },
              "required": [
                "grid_x"
              ]
            },
            "then": {
              "properties": {
                "grid_width": {
                  "maximum": 2
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "grid_x": {
                  "const": 4
                }
              },
              "required": [
                "grid_x"
              ]
            },
            "then": {
              "properties": {
                "grid_width": {
                  "maximum": 1
                }
              }
            }
          }
        ]
      },
      "DashboardPatchRequest": {
        "type": "object",
        "properties": {
          "expected_revision": {
            "type": "integer",
            "minimum": 1
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "pattern": ".*\\S.*"
          },
          "widgets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DashboardWidgetBody"
            },
            "maxItems": 20
          }
        },
        "additionalProperties": false,
        "required": [
          "expected_revision"
        ],
        "anyOf": [
          {
            "required": [
              "name"
            ]
          },
          {
            "required": [
              "widgets"
            ]
          }
        ]
      },
      "PositionInput": {
        "type": "object",
        "properties": {
          "crs_code": {
            "type": "string",
            "minLength": 1,
            "pattern": ".*\\S.*",
            "maxLength": 256
          },
          "datum_realization": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 1,
                "pattern": ".*\\S.*",
                "maxLength": 256
              },
              {
                "type": "null"
              }
            ]
          },
          "coordinate_epoch": {
            "type": "number"
          },
          "height_type": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "ellipsoidal",
                  "orthometric",
                  "local",
                  "unknown"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "geoid_model": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 1,
                "pattern": ".*\\S.*",
                "maxLength": 256
              },
              {
                "type": "null"
              }
            ]
          },
          "x": {
            "type": "number"
          },
          "y": {
            "type": "number"
          },
          "z": {
            "type": "number"
          },
          "positional_quality": {
            "type": "string",
            "enum": [
              "nominal",
              "surveyed"
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "x",
          "y"
        ]
      },
      "Position": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "crs_code": {
            "type": "string",
            "maxLength": 256
          },
          "datum_realization": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 256
              },
              {
                "type": "null"
              }
            ]
          },
          "coordinate_epoch": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "height_type": {
            "type": "string",
            "enum": [
              "ellipsoidal",
              "orthometric",
              "local",
              "unknown"
            ]
          },
          "geoid_model": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 256
              },
              {
                "type": "null"
              }
            ]
          },
          "x": {
            "type": "number"
          },
          "y": {
            "type": "number"
          },
          "z": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "positional_quality": {
            "type": "string",
            "enum": [
              "nominal",
              "surveyed"
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "crs_code",
          "datum_realization",
          "coordinate_epoch",
          "height_type",
          "geoid_model",
          "x",
          "y",
          "z",
          "positional_quality"
        ]
      },
      "InstrumentCreateRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "pattern": ".*\\S.*"
          },
          "site_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "instrument_group_ids": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            },
            "maxItems": 100,
            "uniqueItems": true
          },
          "position": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PositionInput"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "name",
          "site_id"
        ]
      },
      "InstrumentPatchRequest": {
        "type": "object",
        "properties": {
          "site_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "instrument_group_ids": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            },
            "maxItems": 100,
            "uniqueItems": true
          },
          "position": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PositionInput"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false,
        "minProperties": 1
      },
      "IngestedVariableCreateRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "pattern": ".*\\S.*"
          },
          "alias": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "pattern": ".*\\S.*"
          },
          "value_type": {
            "type": "string",
            "enum": [
              "decimal",
              "string"
            ]
          },
          "unit": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "cm",
                  "ft",
                  "in",
                  "m",
                  "mm",
                  "mm/m",
                  "kg",
                  "Kips",
                  "Metric Tons",
                  "Pounds",
                  "Tons",
                  "kN",
                  "kVAr",
                  "kW",
                  "°C",
                  "B Units",
                  "Ω",
                  "kPa",
                  "µε",
                  "Count",
                  "Elevation",
                  "Percentage",
                  "Hz",
                  "Latitude",
                  "Longitude"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "view_options": {
            "$ref": "#/components/schemas/VariableViewOptions"
          },
          "expected_cadence_s": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "name",
          "alias",
          "value_type"
        ],
        "allOf": [
          {
            "if": {
              "properties": {
                "value_type": {
                  "const": "string"
                }
              },
              "required": [
                "value_type"
              ]
            },
            "then": {
              "properties": {
                "view_options": {
                  "$ref": "#/components/schemas/StringVariableViewOptions"
                }
              }
            }
          }
        ]
      },
      "IngestedVariablePatchRequest": {
        "type": "object",
        "properties": {
          "alias": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "pattern": ".*\\S.*"
          },
          "unit": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "cm",
                  "ft",
                  "in",
                  "m",
                  "mm",
                  "mm/m",
                  "kg",
                  "Kips",
                  "Metric Tons",
                  "Pounds",
                  "Tons",
                  "kN",
                  "kVAr",
                  "kW",
                  "°C",
                  "B Units",
                  "Ω",
                  "kPa",
                  "µε",
                  "Count",
                  "Elevation",
                  "Percentage",
                  "Hz",
                  "Latitude",
                  "Longitude"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "view_options": {
            "$ref": "#/components/schemas/VariableViewOptions"
          },
          "expected_cadence_s": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false,
        "minProperties": 1
      },
      "SelfVariableCalculationInputRequest": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 21,
            "maxLength": 21,
            "pattern": "^[A-Za-z0-9_-]{21}$"
          },
          "kind": {
            "type": "string",
            "enum": [
              "self_variable"
            ]
          },
          "variable_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "kind",
          "variable_id"
        ]
      },
      "ExternalVariableCalculationInputRequest": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 21,
            "maxLength": 21,
            "pattern": "^[A-Za-z0-9_-]{21}$"
          },
          "kind": {
            "type": "string",
            "enum": [
              "external_variable"
            ]
          },
          "variable_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "source_instrument_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "past_buffer_seconds": {
            "type": "integer",
            "minimum": 0,
            "maximum": 315360000,
            "default": 86400
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "kind",
          "variable_id",
          "source_instrument_id"
        ]
      },
      "ConstantCalculationInputRequest": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 21,
            "maxLength": 21,
            "pattern": "^[A-Za-z0-9_-]{21}$"
          },
          "kind": {
            "type": "string",
            "enum": [
              "constant"
            ]
          },
          "constant_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "kind",
          "constant_id"
        ]
      },
      "CalculationInputRequest": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/SelfVariableCalculationInputRequest"
          },
          {
            "$ref": "#/components/schemas/ExternalVariableCalculationInputRequest"
          },
          {
            "$ref": "#/components/schemas/ConstantCalculationInputRequest"
          }
        ],
        "discriminator": {
          "propertyName": "kind",
          "mapping": {
            "self_variable": "#/components/schemas/SelfVariableCalculationInputRequest",
            "external_variable": "#/components/schemas/ExternalVariableCalculationInputRequest",
            "constant": "#/components/schemas/ConstantCalculationInputRequest"
          }
        }
      },
      "CalculationEditorTextToken": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "text"
            ]
          },
          "text": {
            "type": "string",
            "minLength": 1,
            "maxLength": 16384,
            "pattern": "^[^{}]+$",
            "x-sansignal-max-utf8-bytes": 16384,
            "description": "Maximum 16384 UTF-8 bytes for one token; the rendered source across all editor tokens has the same total byte limit."
          }
        },
        "additionalProperties": false,
        "required": [
          "kind",
          "text"
        ]
      },
      "CalculationEditorInputToken": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "input"
            ]
          },
          "input_id": {
            "type": "string",
            "minLength": 21,
            "maxLength": 21,
            "pattern": "^[A-Za-z0-9_-]{21}$"
          }
        },
        "additionalProperties": false,
        "required": [
          "kind",
          "input_id"
        ]
      },
      "CalculationEditorToken": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/CalculationEditorTextToken"
          },
          {
            "$ref": "#/components/schemas/CalculationEditorInputToken"
          }
        ],
        "discriminator": {
          "propertyName": "kind",
          "mapping": {
            "text": "#/components/schemas/CalculationEditorTextToken",
            "input": "#/components/schemas/CalculationEditorInputToken"
          }
        }
      },
      "CalculationRequest": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 21,
            "maxLength": 21,
            "pattern": "^[A-Za-z0-9_-]{21}$"
          },
          "start_time": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "expression": {
            "type": "string",
            "minLength": 1,
            "pattern": ".*\\S.*",
            "maxLength": 16384,
            "x-sansignal-max-utf8-bytes": 16384,
            "description": "Maximum 16384 UTF-8 bytes; maxLength is a conservative character ceiling and the byte limit is authoritative."
          },
          "editor_tokens": {
            "type": "array",
            "minItems": 1,
            "maxItems": 2048,
            "items": {
              "$ref": "#/components/schemas/CalculationEditorToken"
            }
          },
          "inputs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CalculationInputRequest"
            }
          }
        },
        "additionalProperties": false,
        "required": [
          "inputs"
        ],
        "anyOf": [
          {
            "required": [
              "editor_tokens"
            ]
          },
          {
            "required": [
              "expression"
            ]
          }
        ],
        "description": "Supply expression, editor_tokens, or both. When both are supplied, each representation must compile to the same normalized expression. The expression supplied directly or rendered from editor_tokens is limited to 16384 UTF-8 bytes, 2048 lexical tokens, nesting depth 64, 2048 AST nodes, and 4096 evaluation-work units.",
        "x-sansignal-expression-editor-tokens-equivalence": "normalized-compiled-expression-equality",
        "x-sansignal-expression-limits": {
          "max_source_utf8_bytes": 16384,
          "max_tokens": 2048,
          "max_nesting_depth": 64,
          "max_ast_nodes": 2048,
          "max_evaluation_work": 4096
        }
      },
      "CalculatedVariableCreateRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "pattern": ".*\\S.*"
          },
          "alias": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "pattern": ".*\\S.*"
          },
          "unit": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "cm",
                  "ft",
                  "in",
                  "m",
                  "mm",
                  "mm/m",
                  "kg",
                  "Kips",
                  "Metric Tons",
                  "Pounds",
                  "Tons",
                  "kN",
                  "kVAr",
                  "kW",
                  "°C",
                  "B Units",
                  "Ω",
                  "kPa",
                  "µε",
                  "Count",
                  "Elevation",
                  "Percentage",
                  "Hz",
                  "Latitude",
                  "Longitude"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "view_options": {
            "$ref": "#/components/schemas/VariableViewOptions"
          },
          "expected_cadence_s": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1
              },
              {
                "type": "null"
              }
            ]
          },
          "is_time_variable": {
            "type": "boolean"
          },
          "calculations": {
            "type": "array",
            "minItems": 1,
            "items": {
              "$ref": "#/components/schemas/CalculationRequest"
            }
          }
        },
        "additionalProperties": false,
        "required": [
          "name",
          "is_time_variable",
          "calculations"
        ],
        "allOf": [
          {
            "if": {
              "properties": {
                "is_time_variable": {
                  "const": false
                }
              },
              "required": [
                "is_time_variable"
              ]
            },
            "then": {
              "properties": {
                "calculations": {
                  "maxItems": 1,
                  "items": {
                    "properties": {
                      "start_time": {
                        "type": "null"
                      }
                    }
                  }
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "is_time_variable": {
                  "const": true
                }
              },
              "required": [
                "is_time_variable"
              ]
            },
            "then": {
              "properties": {
                "calculations": {
                  "contains": {
                    "anyOf": [
                      {
                        "not": {
                          "required": [
                            "start_time"
                          ]
                        }
                      },
                      {
                        "properties": {
                          "start_time": {
                            "type": "null"
                          }
                        },
                        "required": [
                          "start_time"
                        ]
                      }
                    ]
                  },
                  "minContains": 0,
                  "maxContains": 1
                }
              }
            }
          }
        ]
      },
      "CalculatedVariablePatchRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "pattern": ".*\\S.*"
          },
          "alias": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "pattern": ".*\\S.*"
          },
          "unit": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "cm",
                  "ft",
                  "in",
                  "m",
                  "mm",
                  "mm/m",
                  "kg",
                  "Kips",
                  "Metric Tons",
                  "Pounds",
                  "Tons",
                  "kN",
                  "kVAr",
                  "kW",
                  "°C",
                  "B Units",
                  "Ω",
                  "kPa",
                  "µε",
                  "Count",
                  "Elevation",
                  "Percentage",
                  "Hz",
                  "Latitude",
                  "Longitude"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "view_options": {
            "$ref": "#/components/schemas/VariableViewOptions"
          },
          "expected_cadence_s": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 1
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false,
        "minProperties": 1
      },
      "CalculatedVariableComputationRequest": {
        "type": "object",
        "properties": {
          "is_time_variable": {
            "type": "boolean"
          },
          "calculations": {
            "type": "array",
            "minItems": 1,
            "items": {
              "$ref": "#/components/schemas/CalculationRequest"
            }
          }
        },
        "additionalProperties": false,
        "required": [
          "is_time_variable",
          "calculations"
        ],
        "allOf": [
          {
            "if": {
              "properties": {
                "is_time_variable": {
                  "const": false
                }
              },
              "required": [
                "is_time_variable"
              ]
            },
            "then": {
              "properties": {
                "calculations": {
                  "maxItems": 1,
                  "items": {
                    "properties": {
                      "start_time": {
                        "type": "null"
                      }
                    }
                  }
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "is_time_variable": {
                  "const": true
                }
              },
              "required": [
                "is_time_variable"
              ]
            },
            "then": {
              "properties": {
                "calculations": {
                  "contains": {
                    "anyOf": [
                      {
                        "not": {
                          "required": [
                            "start_time"
                          ]
                        }
                      },
                      {
                        "properties": {
                          "start_time": {
                            "type": "null"
                          }
                        },
                        "required": [
                          "start_time"
                        ]
                      }
                    ]
                  },
                  "minContains": 0,
                  "maxContains": 1
                }
              }
            }
          }
        ]
      },
      "CalibrationConstantCreateRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "pattern": ".*\\S.*"
          },
          "value": {
            "type": "number"
          }
        },
        "additionalProperties": false,
        "required": [
          "name",
          "value"
        ]
      },
      "CalibrationConstantPatchRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "pattern": ".*\\S.*"
          },
          "value": {
            "type": "number"
          }
        },
        "additionalProperties": false,
        "minProperties": 1
      },
      "InstrumentGroupCreateRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "pattern": ".*\\S.*"
          }
        },
        "additionalProperties": false,
        "required": [
          "name"
        ]
      },
      "InstrumentGroupPatchRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "pattern": ".*\\S.*"
          }
        },
        "additionalProperties": false,
        "required": [
          "name"
        ]
      },
      "InstrumentGroupMembershipRequest": {
        "type": "object",
        "properties": {
          "instrument_ids": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            },
            "maxItems": 200,
            "uniqueItems": true
          }
        },
        "additionalProperties": false,
        "required": [
          "instrument_ids"
        ]
      },
      "ObservationInstrumentRequest": {
        "type": "object",
        "properties": {
          "instrument_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "variable_ids": {
            "type": "array",
            "minItems": 1,
            "uniqueItems": true,
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 128,
              "pattern": ".*\\S.*"
            },
            "maxItems": 200
          }
        },
        "additionalProperties": false,
        "required": [
          "instrument_id",
          "variable_ids"
        ]
      },
      "ObservationFilters": {
        "type": "object",
        "properties": {
          "quality": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "pass",
                "not_evaluated",
                "suspect",
                "fail",
                "missing"
              ]
            },
            "maxItems": 16,
            "uniqueItems": true
          },
          "status": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "raw",
                "corrected",
                "derived"
              ]
            },
            "maxItems": 16,
            "uniqueItems": true
          },
          "include_nil": {
            "type": "boolean",
            "default": false
          },
          "include_archived": {
            "type": "boolean",
            "default": false
          }
        },
        "additionalProperties": false
      },
      "ObservationAggregation": {
        "type": "object",
        "properties": {
          "operation": {
            "type": "string",
            "enum": [
              "sum",
              "average",
              "median",
              "min",
              "max"
            ]
          },
          "interval": {
            "type": "string",
            "enum": [
              "hour",
              "day",
              "month",
              "year"
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "operation",
          "interval"
        ]
      },
      "ObservationQueryRequest": {
        "type": "object",
        "properties": {
          "instruments": {
            "type": "array",
            "minItems": 1,
            "items": {
              "$ref": "#/components/schemas/ObservationInstrumentRequest"
            },
            "maxItems": 50
          },
          "from": {
            "type": "string",
            "format": "date-time"
          },
          "to": {
            "type": "string",
            "format": "date-time"
          },
          "filters": {
            "$ref": "#/components/schemas/ObservationFilters"
          },
          "order": {
            "type": "string",
            "enum": [
              "asc",
              "desc"
            ],
            "default": "asc"
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 5000,
            "default": 1000
          },
          "cursor": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 1,
                "maxLength": 16384
              },
              {
                "type": "null"
              }
            ]
          },
          "aggregation": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/ObservationAggregation"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "instruments",
          "from",
          "to"
        ],
        "description": "The total number of variable_ids across all instruments is subject to the whole-request maximum declared by x-sansignal-max-total-variable-ids, in addition to each instrument's array bound.",
        "x-sansignal-max-total-variable-ids": 200
      },
      "ActorReference": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "user",
              "connection_api_key",
              "system",
              "legacy_unknown"
            ]
          },
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          }
        },
        "additionalProperties": false,
        "required": [
          "type",
          "id"
        ]
      },
      "ResourceLifecycle": {
        "type": "object",
        "properties": {
          "lifecycle_state": {
            "type": "string",
            "enum": [
              "active",
              "archived"
            ]
          },
          "archived_at": {
            "type": "string",
            "format": "date-time"
          },
          "archived_by": {
            "$ref": "#/components/schemas/ActorReference"
          }
        },
        "additionalProperties": false,
        "required": [
          "lifecycle_state"
        ]
      },
      "ReferenceItem": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "name": {
            "type": "string"
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "name"
        ]
      },
      "ParserSummary": {
        "type": "object",
        "properties": {
          "lifecycle_state": {
            "type": "string",
            "enum": [
              "active",
              "archived"
            ]
          },
          "archived_at": {
            "type": "string",
            "format": "date-time"
          },
          "archived_by": {
            "$ref": "#/components/schemas/ActorReference"
          },
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "project_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "name": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "csv"
          },
          "version": {
            "type": "integer",
            "const": 1
          },
          "canonical_size_bytes": {
            "type": "integer",
            "minimum": 1,
            "maximum": 524288
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "project_id",
          "name",
          "type",
          "version",
          "canonical_size_bytes",
          "lifecycle_state",
          "created_at",
          "updated_at"
        ]
      },
      "Parser": {
        "type": "object",
        "properties": {
          "lifecycle_state": {
            "type": "string",
            "enum": [
              "active",
              "archived"
            ]
          },
          "archived_at": {
            "type": "string",
            "format": "date-time"
          },
          "archived_by": {
            "$ref": "#/components/schemas/ActorReference"
          },
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "project_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "name": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "const": "csv"
          },
          "version": {
            "type": "integer",
            "const": 1
          },
          "canonical_size_bytes": {
            "type": "integer",
            "minimum": 1,
            "maximum": 524288
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "configuration": {
            "$ref": "#/components/schemas/ParserConfiguration"
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "project_id",
          "name",
          "type",
          "version",
          "canonical_size_bytes",
          "configuration",
          "lifecycle_state",
          "created_at",
          "updated_at"
        ]
      },
      "DashboardSummary": {
        "type": "object",
        "properties": {
          "lifecycle_state": {
            "type": "string",
            "enum": [
              "active",
              "archived"
            ]
          },
          "archived_at": {
            "type": "string",
            "format": "date-time"
          },
          "archived_by": {
            "$ref": "#/components/schemas/ActorReference"
          },
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "name": {
            "type": "string"
          },
          "revision": {
            "type": "integer",
            "minimum": 1
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "name",
          "revision",
          "lifecycle_state",
          "created_at",
          "updated_at"
        ]
      },
      "DashboardWidgetDescriptor": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 21,
            "maxLength": 21,
            "pattern": "^[A-Za-z0-9_-]{21}$"
          },
          "name": {
            "type": "string"
          },
          "widget_type": {
            "type": "string",
            "enum": [
              "graph",
              "scatter_plot",
              "table",
              "markdown"
            ]
          },
          "grid_x": {
            "type": "integer",
            "minimum": 1,
            "maximum": 4
          },
          "grid_y": {
            "type": "integer",
            "minimum": 1
          },
          "grid_width": {
            "type": "integer",
            "minimum": 1,
            "maximum": 4
          },
          "grid_height": {
            "type": "integer",
            "minimum": 1,
            "maximum": 10
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "name",
          "widget_type",
          "grid_x",
          "grid_y",
          "grid_width",
          "grid_height"
        ]
      },
      "DashboardWidgetDefinition": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 21,
            "maxLength": 21,
            "pattern": "^[A-Za-z0-9_-]{21}$"
          },
          "name": {
            "type": "string"
          },
          "widget_type": {
            "type": "string",
            "enum": [
              "graph",
              "scatter_plot",
              "table",
              "markdown"
            ]
          },
          "grid_x": {
            "type": "integer",
            "minimum": 1,
            "maximum": 4
          },
          "grid_y": {
            "type": "integer",
            "minimum": 1
          },
          "grid_width": {
            "type": "integer",
            "minimum": 1,
            "maximum": 4
          },
          "grid_height": {
            "type": "integer",
            "minimum": 1,
            "maximum": 10
          },
          "configuration": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/PersistedDashboardGraphConfiguration"
              },
              {
                "$ref": "#/components/schemas/PersistedDashboardScatterConfiguration"
              },
              {
                "$ref": "#/components/schemas/PersistedDashboardTableConfiguration"
              },
              {
                "$ref": "#/components/schemas/DashboardMarkdownConfiguration"
              }
            ]
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "name",
          "widget_type",
          "configuration",
          "grid_x",
          "grid_y",
          "grid_width",
          "grid_height",
          "created_at",
          "updated_at"
        ],
        "allOf": [
          {
            "oneOf": [
              {
                "properties": {
                  "widget_type": {
                    "const": "graph"
                  },
                  "configuration": {
                    "$ref": "#/components/schemas/PersistedDashboardGraphConfiguration"
                  }
                },
                "required": [
                  "widget_type",
                  "configuration"
                ]
              },
              {
                "properties": {
                  "widget_type": {
                    "const": "scatter_plot"
                  },
                  "configuration": {
                    "$ref": "#/components/schemas/PersistedDashboardScatterConfiguration"
                  }
                },
                "required": [
                  "widget_type",
                  "configuration"
                ]
              },
              {
                "properties": {
                  "widget_type": {
                    "const": "table"
                  },
                  "configuration": {
                    "$ref": "#/components/schemas/PersistedDashboardTableConfiguration"
                  }
                },
                "required": [
                  "widget_type",
                  "configuration"
                ]
              },
              {
                "properties": {
                  "widget_type": {
                    "const": "markdown"
                  },
                  "configuration": {
                    "$ref": "#/components/schemas/DashboardMarkdownConfiguration"
                  }
                },
                "required": [
                  "widget_type",
                  "configuration"
                ]
              }
            ]
          }
        ]
      },
      "DashboardDetail": {
        "type": "object",
        "properties": {
          "lifecycle_state": {
            "type": "string",
            "enum": [
              "active",
              "archived"
            ]
          },
          "archived_at": {
            "type": "string",
            "format": "date-time"
          },
          "archived_by": {
            "$ref": "#/components/schemas/ActorReference"
          },
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "name": {
            "type": "string"
          },
          "revision": {
            "type": "integer",
            "minimum": 1
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "widgets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DashboardWidgetDescriptor"
            },
            "maxItems": 20
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "name",
          "revision",
          "lifecycle_state",
          "created_at",
          "updated_at",
          "widgets"
        ]
      },
      "DashboardPatchResult": {
        "type": "object",
        "properties": {
          "dashboard_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "revision": {
            "type": "integer",
            "minimum": 1
          },
          "created_ids": {
            "type": "object",
            "additionalProperties": {
              "type": "string",
              "minLength": 21,
              "maxLength": 21,
              "pattern": "^[A-Za-z0-9_-]{21}$"
            }
          }
        },
        "additionalProperties": false,
        "required": [
          "dashboard_id",
          "revision",
          "created_ids"
        ]
      },
      "Instrument": {
        "type": "object",
        "properties": {
          "lifecycle_state": {
            "type": "string",
            "enum": [
              "active",
              "archived"
            ]
          },
          "archived_at": {
            "type": "string",
            "format": "date-time"
          },
          "archived_by": {
            "$ref": "#/components/schemas/ActorReference"
          },
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "name": {
            "type": "string"
          },
          "site_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "site_name": {
            "type": "string"
          },
          "position": {
            "$ref": "#/components/schemas/Position"
          },
          "instrument_groups": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReferenceItem"
            },
            "maxItems": 100
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "name",
          "site_id",
          "site_name",
          "instrument_groups",
          "lifecycle_state",
          "created_at",
          "updated_at"
        ]
      },
      "VariableDefinition": {
        "type": "object",
        "properties": {
          "lifecycle_state": {
            "type": "string",
            "enum": [
              "active",
              "archived"
            ]
          },
          "archived_at": {
            "type": "string",
            "format": "date-time"
          },
          "archived_by": {
            "$ref": "#/components/schemas/ActorReference"
          },
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "instrument_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "name": {
            "type": "string"
          },
          "alias": {
            "type": "string"
          },
          "variable_type": {
            "type": "string",
            "enum": [
              "ingested",
              "calculated"
            ]
          },
          "value_type": {
            "type": "string",
            "enum": [
              "decimal",
              "string"
            ]
          },
          "unit": {
            "type": "string",
            "enum": [
              "cm",
              "ft",
              "in",
              "m",
              "mm",
              "mm/m",
              "kg",
              "Kips",
              "Metric Tons",
              "Pounds",
              "Tons",
              "kN",
              "kVAr",
              "kW",
              "°C",
              "B Units",
              "Ω",
              "kPa",
              "µε",
              "Count",
              "Elevation",
              "Percentage",
              "Hz",
              "Latitude",
              "Longitude"
            ]
          },
          "view_options": {
            "$ref": "#/components/schemas/VariableViewOptions"
          },
          "expected_cadence_s": {
            "type": "integer",
            "minimum": 1
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "instrument_id",
          "name",
          "alias",
          "variable_type",
          "value_type",
          "view_options",
          "lifecycle_state",
          "created_at",
          "updated_at"
        ],
        "allOf": [
          {
            "if": {
              "properties": {
                "value_type": {
                  "const": "string"
                }
              },
              "required": [
                "value_type"
              ]
            },
            "then": {
              "properties": {
                "view_options": {
                  "$ref": "#/components/schemas/StringVariableViewOptions"
                }
              }
            }
          }
        ]
      },
      "SelfVariableCalculationInput": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 21,
            "maxLength": 21,
            "pattern": "^[A-Za-z0-9_-]{21}$"
          },
          "kind": {
            "type": "string",
            "const": "self_variable"
          },
          "variable_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "constant_id": {
            "type": "null"
          },
          "source_instrument_id": {
            "type": "null"
          },
          "past_buffer_seconds": {
            "type": "null"
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "kind",
          "variable_id",
          "constant_id",
          "source_instrument_id",
          "past_buffer_seconds"
        ]
      },
      "ExternalVariableCalculationInput": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 21,
            "maxLength": 21,
            "pattern": "^[A-Za-z0-9_-]{21}$"
          },
          "kind": {
            "type": "string",
            "const": "external_variable"
          },
          "variable_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "constant_id": {
            "type": "null"
          },
          "source_instrument_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "past_buffer_seconds": {
            "type": "integer",
            "minimum": 0,
            "maximum": 315360000
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "kind",
          "variable_id",
          "constant_id",
          "source_instrument_id",
          "past_buffer_seconds"
        ]
      },
      "ConstantCalculationInput": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 21,
            "maxLength": 21,
            "pattern": "^[A-Za-z0-9_-]{21}$"
          },
          "kind": {
            "type": "string",
            "const": "constant"
          },
          "variable_id": {
            "type": "null"
          },
          "constant_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "source_instrument_id": {
            "type": "null"
          },
          "past_buffer_seconds": {
            "type": "null"
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "kind",
          "variable_id",
          "constant_id",
          "source_instrument_id",
          "past_buffer_seconds"
        ]
      },
      "CalculationInput": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/SelfVariableCalculationInput"
          },
          {
            "$ref": "#/components/schemas/ExternalVariableCalculationInput"
          },
          {
            "$ref": "#/components/schemas/ConstantCalculationInput"
          }
        ],
        "discriminator": {
          "propertyName": "kind",
          "mapping": {
            "self_variable": "#/components/schemas/SelfVariableCalculationInput",
            "external_variable": "#/components/schemas/ExternalVariableCalculationInput",
            "constant": "#/components/schemas/ConstantCalculationInput"
          }
        }
      },
      "CalculationDefinition": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 21,
            "maxLength": 21,
            "pattern": "^[A-Za-z0-9_-]{21}$"
          },
          "start_time": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "expression": {
            "type": "string",
            "minLength": 1,
            "pattern": ".*\\S.*",
            "maxLength": 16384,
            "x-sansignal-max-utf8-bytes": 16384,
            "description": "Maximum 16384 UTF-8 bytes; maxLength is a conservative character ceiling and the byte limit is authoritative."
          },
          "editor_tokens": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CalculationEditorToken"
            },
            "minItems": 1,
            "maxItems": 2048
          },
          "inputs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CalculationInput"
            }
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "start_time",
          "expression",
          "editor_tokens",
          "inputs"
        ]
      },
      "CalculatedVariable": {
        "type": "object",
        "properties": {
          "lifecycle_state": {
            "type": "string",
            "enum": [
              "active",
              "archived"
            ]
          },
          "archived_at": {
            "type": "string",
            "format": "date-time"
          },
          "archived_by": {
            "$ref": "#/components/schemas/ActorReference"
          },
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "instrument_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "name": {
            "type": "string"
          },
          "alias": {
            "type": "string"
          },
          "variable_type": {
            "type": "string",
            "enum": [
              "ingested",
              "calculated"
            ]
          },
          "value_type": {
            "type": "string",
            "enum": [
              "decimal",
              "string"
            ]
          },
          "unit": {
            "type": "string",
            "enum": [
              "cm",
              "ft",
              "in",
              "m",
              "mm",
              "mm/m",
              "kg",
              "Kips",
              "Metric Tons",
              "Pounds",
              "Tons",
              "kN",
              "kVAr",
              "kW",
              "°C",
              "B Units",
              "Ω",
              "kPa",
              "µε",
              "Count",
              "Elevation",
              "Percentage",
              "Hz",
              "Latitude",
              "Longitude"
            ]
          },
          "view_options": {
            "$ref": "#/components/schemas/VariableViewOptions"
          },
          "expected_cadence_s": {
            "type": "integer",
            "minimum": 1
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "is_time_variable": {
            "type": "boolean"
          },
          "configuration_generation": {
            "type": "integer",
            "minimum": 0
          },
          "calculations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CalculationDefinition"
            }
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "instrument_id",
          "name",
          "alias",
          "variable_type",
          "value_type",
          "view_options",
          "lifecycle_state",
          "created_at",
          "updated_at",
          "is_time_variable",
          "configuration_generation"
        ],
        "allOf": [
          {
            "if": {
              "properties": {
                "value_type": {
                  "const": "string"
                }
              },
              "required": [
                "value_type"
              ]
            },
            "then": {
              "properties": {
                "view_options": {
                  "$ref": "#/components/schemas/StringVariableViewOptions"
                }
              }
            }
          }
        ]
      },
      "CalculatedVariableMutation": {
        "type": "object",
        "properties": {
          "resource": {
            "$ref": "#/components/schemas/CalculatedVariable"
          },
          "recalculation_batch_run_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          }
        },
        "additionalProperties": false,
        "required": [
          "resource"
        ],
        "description": "The resource is a bounded mutation projection and deliberately omits the optional calculations field. Use the calculated-variable detail route to retrieve the complete saved computation."
      },
      "CalibrationConstant": {
        "type": "object",
        "properties": {
          "lifecycle_state": {
            "type": "string",
            "enum": [
              "active",
              "archived"
            ]
          },
          "archived_at": {
            "type": "string",
            "format": "date-time"
          },
          "archived_by": {
            "$ref": "#/components/schemas/ActorReference"
          },
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "instrument_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "name": {
            "type": "string"
          },
          "value": {
            "type": "number"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "instrument_id",
          "name",
          "value",
          "lifecycle_state",
          "created_at",
          "updated_at"
        ]
      },
      "CalibrationConstantMutation": {
        "type": "object",
        "properties": {
          "resource": {
            "$ref": "#/components/schemas/CalibrationConstant"
          },
          "recalculation_batch_run_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          }
        },
        "additionalProperties": false,
        "required": [
          "resource"
        ]
      },
      "InstrumentGroup": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "name": {
            "type": "string"
          },
          "instruments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReferenceItem"
            },
            "maxItems": 200
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "name",
          "created_at",
          "updated_at"
        ]
      },
      "InstrumentGroupDetail": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "name": {
            "type": "string"
          },
          "instruments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReferenceItem"
            },
            "maxItems": 200
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "name",
          "instruments",
          "created_at",
          "updated_at"
        ]
      },
      "InstrumentGroupMembershipReplacement": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "name": {
            "type": "string"
          },
          "instruments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReferenceItem"
            },
            "maxItems": 200
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "name",
          "instruments",
          "created_at",
          "updated_at"
        ]
      },
      "ObservationVariable": {
        "type": "object",
        "properties": {
          "instrument_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "instrument_name": {
            "type": "string"
          },
          "instrument_lifecycle_state": {
            "type": "string",
            "enum": [
              "active",
              "archived"
            ]
          },
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "name": {
            "type": "string"
          },
          "variable_lifecycle_state": {
            "type": "string",
            "enum": [
              "active",
              "archived"
            ]
          },
          "value_type": {
            "type": "string",
            "enum": [
              "decimal",
              "string"
            ]
          },
          "unit": {
            "type": "string",
            "enum": [
              "cm",
              "ft",
              "in",
              "m",
              "mm",
              "mm/m",
              "kg",
              "Kips",
              "Metric Tons",
              "Pounds",
              "Tons",
              "kN",
              "kVAr",
              "kW",
              "°C",
              "B Units",
              "Ω",
              "kPa",
              "µε",
              "Count",
              "Elevation",
              "Percentage",
              "Hz",
              "Latitude",
              "Longitude"
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "instrument_id",
          "instrument_name",
          "instrument_lifecycle_state",
          "id",
          "name",
          "variable_lifecycle_state",
          "value_type"
        ]
      },
      "Observation": {
        "type": "object",
        "properties": {
          "instrument_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "variable_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "instrument_timestamp": {
            "type": "string",
            "format": "date-time"
          },
          "value_type": {
            "type": "string",
            "enum": [
              "decimal",
              "string"
            ]
          },
          "decimal_value": {
            "type": "number"
          },
          "string_value": {
            "type": "string"
          },
          "quality": {
            "type": "string",
            "enum": [
              "pass",
              "not_evaluated",
              "suspect",
              "fail",
              "missing"
            ]
          },
          "status": {
            "type": "string",
            "enum": [
              "raw",
              "corrected",
              "derived"
            ]
          },
          "nil_reason": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "instrument_id",
          "variable_id",
          "instrument_timestamp",
          "value_type",
          "quality",
          "status",
          "nil_reason"
        ],
        "oneOf": [
          {
            "properties": {
              "nil_reason": {
                "type": "string"
              }
            },
            "required": [
              "nil_reason"
            ],
            "not": {
              "anyOf": [
                {
                  "required": [
                    "decimal_value"
                  ]
                },
                {
                  "required": [
                    "string_value"
                  ]
                }
              ]
            }
          },
          {
            "oneOf": [
              {
                "properties": {
                  "value_type": {
                    "const": "decimal"
                  }
                },
                "required": [
                  "value_type",
                  "decimal_value"
                ],
                "not": {
                  "required": [
                    "string_value"
                  ]
                }
              },
              {
                "properties": {
                  "value_type": {
                    "const": "string"
                  }
                },
                "required": [
                  "value_type",
                  "string_value"
                ],
                "not": {
                  "required": [
                    "decimal_value"
                  ]
                }
              }
            ],
            "properties": {
              "nil_reason": {
                "type": "null"
              }
            },
            "required": [
              "nil_reason"
            ]
          }
        ]
      },
      "ObservationAggregate": {
        "type": "object",
        "properties": {
          "instrument_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "variable_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "bucket_start": {
            "type": "string",
            "format": "date-time"
          },
          "bucket_end": {
            "type": "string",
            "format": "date-time"
          },
          "decimal_value": {
            "type": "number"
          },
          "quality": {
            "type": "string",
            "enum": [
              "pass",
              "not_evaluated",
              "suspect"
            ]
          },
          "sample_count": {
            "type": "integer",
            "minimum": 1
          },
          "rejected_count": {
            "type": "integer",
            "minimum": 0
          }
        },
        "additionalProperties": false,
        "required": [
          "instrument_id",
          "variable_id",
          "bucket_start",
          "bucket_end",
          "decimal_value",
          "quality",
          "sample_count",
          "rejected_count"
        ]
      },
      "ObservationRawResult": {
        "type": "object",
        "properties": {
          "variables": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ObservationVariable"
            }
          },
          "observations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Observation"
            }
          }
        },
        "additionalProperties": false,
        "required": [
          "variables",
          "observations"
        ]
      },
      "ObservationAggregateResult": {
        "type": "object",
        "properties": {
          "variables": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ObservationVariable"
            }
          },
          "aggregates": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ObservationAggregate"
            }
          }
        },
        "additionalProperties": false,
        "required": [
          "variables",
          "aggregates"
        ]
      },
      "ObservationResult": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/ObservationRawResult"
          },
          {
            "$ref": "#/components/schemas/ObservationAggregateResult"
          }
        ]
      },
      "DeleteResult": {
        "type": "object",
        "properties": {
          "deleted": {
            "type": "boolean",
            "const": true
          }
        },
        "additionalProperties": false,
        "required": [
          "deleted"
        ]
      },
      "DashboardColorToken": {
        "type": "string",
        "enum": [
          "blue",
          "orange",
          "green",
          "red",
          "purple",
          "brown",
          "pink",
          "gray",
          "olive",
          "cyan"
        ]
      },
      "DashboardDecimalPlaces": {
        "type": "object",
        "properties": {
          "mode": {
            "type": "string",
            "enum": [
              "exact",
              "auto",
              "custom",
              "none"
            ]
          },
          "decimal_places": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 10
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "mode"
        ],
        "oneOf": [
          {
            "properties": {
              "mode": {
                "enum": [
                  "exact",
                  "auto",
                  "none"
                ]
              },
              "decimal_places": {
                "type": "null"
              }
            }
          },
          {
            "properties": {
              "mode": {
                "const": "custom"
              },
              "decimal_places": {
                "type": "integer",
                "minimum": 0,
                "maximum": 10
              }
            },
            "required": [
              "decimal_places"
            ]
          }
        ]
      },
      "DashboardGraphRounding": {
        "type": "object",
        "properties": {
          "mode": {
            "type": "string",
            "enum": [
              "exact",
              "auto",
              "custom"
            ]
          },
          "decimal_places": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 10
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "mode"
        ],
        "oneOf": [
          {
            "properties": {
              "mode": {
                "enum": [
                  "exact",
                  "auto"
                ]
              },
              "decimal_places": {
                "type": "null"
              }
            }
          },
          {
            "properties": {
              "mode": {
                "const": "custom"
              },
              "decimal_places": {
                "type": "integer",
                "minimum": 0,
                "maximum": 10
              }
            },
            "required": [
              "decimal_places"
            ]
          }
        ]
      },
      "DashboardScatterPrecision": {
        "type": "object",
        "properties": {
          "mode": {
            "type": "string",
            "enum": [
              "auto",
              "custom"
            ]
          },
          "decimal_places": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 10
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "mode"
        ],
        "oneOf": [
          {
            "properties": {
              "mode": {
                "enum": [
                  "auto"
                ]
              },
              "decimal_places": {
                "type": "null"
              }
            }
          },
          {
            "properties": {
              "mode": {
                "const": "custom"
              },
              "decimal_places": {
                "type": "integer",
                "minimum": 0,
                "maximum": 10
              }
            },
            "required": [
              "decimal_places"
            ]
          }
        ]
      },
      "DashboardTablePrecision": {
        "type": "object",
        "properties": {
          "mode": {
            "type": "string",
            "enum": [
              "none",
              "custom"
            ]
          },
          "decimal_places": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 10
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "mode"
        ],
        "oneOf": [
          {
            "properties": {
              "mode": {
                "enum": [
                  "none"
                ]
              },
              "decimal_places": {
                "type": "null"
              }
            }
          },
          {
            "properties": {
              "mode": {
                "const": "custom"
              },
              "decimal_places": {
                "type": "integer",
                "minimum": 0,
                "maximum": 10
              }
            },
            "required": [
              "decimal_places"
            ]
          }
        ]
      },
      "DashboardGraphAggregation": {
        "type": "object",
        "properties": {
          "aggregation_operation": {
            "type": "string",
            "enum": [
              "sum",
              "average",
              "median",
              "min",
              "max"
            ]
          },
          "rolling": {
            "type": "boolean"
          },
          "aggregation_interval": {
            "type": "string",
            "enum": [
              "hour",
              "day",
              "month",
              "year"
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "aggregation_operation",
          "rolling",
          "aggregation_interval"
        ]
      },
      "DashboardGraphSeries": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 21,
            "maxLength": 21,
            "pattern": "^[A-Za-z0-9_-]{21}$"
          },
          "client_reference": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "instrument_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "variable_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "alias": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "pattern": ".*\\S.*"
          },
          "graph_type": {
            "type": "string",
            "enum": [
              "line",
              "area"
            ]
          },
          "color": {
            "$ref": "#/components/schemas/DashboardColorToken"
          },
          "style": {
            "type": "string",
            "enum": [
              "solid",
              "dash"
            ]
          },
          "weight": {
            "type": "string",
            "enum": [
              "thin",
              "thick",
              "thickest"
            ]
          },
          "marker": {
            "type": "string",
            "enum": [
              "none",
              "diamond",
              "circle",
              "square"
            ]
          },
          "y_axis": {
            "type": "string",
            "enum": [
              "left",
              "right"
            ]
          },
          "connect_nulls": {
            "type": "boolean"
          },
          "rounding": {
            "$ref": "#/components/schemas/DashboardGraphRounding"
          },
          "aggregation": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "aggregation_operation": {
                    "type": "string",
                    "enum": [
                      "sum",
                      "average",
                      "median",
                      "min",
                      "max"
                    ]
                  },
                  "rolling": {
                    "type": "boolean"
                  },
                  "aggregation_interval": {
                    "type": "string",
                    "enum": [
                      "hour",
                      "day",
                      "month",
                      "year"
                    ]
                  }
                },
                "additionalProperties": false,
                "required": [
                  "aggregation_operation",
                  "rolling",
                  "aggregation_interval"
                ]
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "instrument_id",
          "variable_id",
          "alias",
          "graph_type",
          "color",
          "style",
          "weight",
          "marker",
          "y_axis",
          "connect_nulls",
          "rounding",
          "aggregation"
        ],
        "oneOf": [
          {
            "required": [
              "id"
            ],
            "not": {
              "required": [
                "client_reference"
              ]
            }
          },
          {
            "required": [
              "client_reference"
            ],
            "not": {
              "required": [
                "id"
              ]
            }
          }
        ]
      },
      "DashboardGraphConfiguration": {
        "type": "object",
        "properties": {
          "show_legend": {
            "type": "boolean"
          },
          "series": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DashboardGraphSeries"
            },
            "minItems": 1,
            "maxItems": 200
          }
        },
        "additionalProperties": false,
        "required": [
          "show_legend",
          "series"
        ]
      },
      "PersistedDashboardGraphSeries": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 21,
            "maxLength": 21,
            "pattern": "^[A-Za-z0-9_-]{21}$"
          },
          "instrument_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "variable_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "alias": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "pattern": ".*\\S.*"
          },
          "graph_type": {
            "type": "string",
            "enum": [
              "line",
              "area"
            ]
          },
          "color": {
            "$ref": "#/components/schemas/DashboardColorToken"
          },
          "style": {
            "type": "string",
            "enum": [
              "solid",
              "dash"
            ]
          },
          "weight": {
            "type": "string",
            "enum": [
              "thin",
              "thick",
              "thickest"
            ]
          },
          "marker": {
            "type": "string",
            "enum": [
              "none",
              "diamond",
              "circle",
              "square"
            ]
          },
          "y_axis": {
            "type": "string",
            "enum": [
              "left",
              "right"
            ]
          },
          "connect_nulls": {
            "type": "boolean"
          },
          "rounding": {
            "$ref": "#/components/schemas/DashboardGraphRounding"
          },
          "aggregation": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "aggregation_operation": {
                    "type": "string",
                    "enum": [
                      "sum",
                      "average",
                      "median",
                      "min",
                      "max"
                    ]
                  },
                  "rolling": {
                    "type": "boolean"
                  },
                  "aggregation_interval": {
                    "type": "string",
                    "enum": [
                      "hour",
                      "day",
                      "month",
                      "year"
                    ]
                  }
                },
                "additionalProperties": false,
                "required": [
                  "aggregation_operation",
                  "rolling",
                  "aggregation_interval"
                ]
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "instrument_id",
          "variable_id",
          "alias",
          "graph_type",
          "color",
          "style",
          "weight",
          "marker",
          "y_axis",
          "connect_nulls",
          "rounding",
          "aggregation"
        ]
      },
      "PersistedDashboardGraphConfiguration": {
        "type": "object",
        "properties": {
          "show_legend": {
            "type": "boolean"
          },
          "series": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PersistedDashboardGraphSeries"
            },
            "minItems": 1,
            "maxItems": 200
          }
        },
        "additionalProperties": false,
        "required": [
          "show_legend",
          "series"
        ]
      },
      "DashboardAxisScale": {
        "type": "object",
        "properties": {
          "mode": {
            "type": "string",
            "enum": [
              "auto",
              "custom"
            ]
          },
          "min": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "max": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "mode"
        ],
        "oneOf": [
          {
            "properties": {
              "mode": {
                "const": "auto"
              },
              "min": {
                "type": "null"
              },
              "max": {
                "type": "null"
              }
            }
          },
          {
            "properties": {
              "mode": {
                "const": "custom"
              },
              "min": {
                "type": "number"
              },
              "max": {
                "type": "number"
              }
            },
            "required": [
              "min",
              "max"
            ]
          }
        ],
        "description": "For custom scales, min and max are required finite JSON numbers and max must be greater than min."
      },
      "DashboardScatterAxis": {
        "type": "object",
        "properties": {
          "alias": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "pattern": ".*\\S.*"
          },
          "scale": {
            "type": "object",
            "properties": {
              "mode": {
                "type": "string",
                "enum": [
                  "auto",
                  "custom"
                ]
              },
              "min": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "max": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "additionalProperties": false,
            "required": [
              "mode"
            ],
            "oneOf": [
              {
                "properties": {
                  "mode": {
                    "const": "auto"
                  },
                  "min": {
                    "type": "null"
                  },
                  "max": {
                    "type": "null"
                  }
                }
              },
              {
                "properties": {
                  "mode": {
                    "const": "custom"
                  },
                  "min": {
                    "type": "number"
                  },
                  "max": {
                    "type": "number"
                  }
                },
                "required": [
                  "min",
                  "max"
                ]
              }
            ],
            "description": "For custom scales, min and max are required finite JSON numbers and max must be greater than min."
          }
        },
        "additionalProperties": false,
        "required": [
          "alias",
          "scale"
        ]
      },
      "DashboardScatterAxes": {
        "type": "object",
        "properties": {
          "x": {
            "$ref": "#/components/schemas/DashboardScatterAxis"
          },
          "y": {
            "$ref": "#/components/schemas/DashboardScatterAxis"
          }
        },
        "additionalProperties": false,
        "required": [
          "x",
          "y"
        ]
      },
      "DashboardScatterPlot": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 21,
            "maxLength": 21,
            "pattern": "^[A-Za-z0-9_-]{21}$"
          },
          "client_reference": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "alias": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "pattern": ".*\\S.*"
          },
          "instrument_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "x_variable_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "y_variable_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "color": {
            "$ref": "#/components/schemas/DashboardColorToken"
          },
          "aggregation_interval": {
            "type": "string",
            "enum": [
              "none",
              "hour",
              "day"
            ]
          },
          "precision": {
            "$ref": "#/components/schemas/DashboardScatterPrecision"
          },
          "weight": {
            "type": "string",
            "enum": [
              "thin",
              "thick",
              "thickest"
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "alias",
          "instrument_id",
          "x_variable_id",
          "y_variable_id",
          "color",
          "aggregation_interval",
          "precision",
          "weight"
        ],
        "oneOf": [
          {
            "required": [
              "id"
            ],
            "not": {
              "required": [
                "client_reference"
              ]
            }
          },
          {
            "required": [
              "client_reference"
            ],
            "not": {
              "required": [
                "id"
              ]
            }
          }
        ]
      },
      "DashboardScatterConfiguration": {
        "type": "object",
        "properties": {
          "axes": {
            "$ref": "#/components/schemas/DashboardScatterAxes"
          },
          "plots": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DashboardScatterPlot"
            },
            "minItems": 1,
            "maxItems": 100
          }
        },
        "additionalProperties": false,
        "required": [
          "axes",
          "plots"
        ]
      },
      "PersistedDashboardScatterPlot": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 21,
            "maxLength": 21,
            "pattern": "^[A-Za-z0-9_-]{21}$"
          },
          "alias": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "pattern": ".*\\S.*"
          },
          "instrument_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "x_variable_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "y_variable_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "color": {
            "$ref": "#/components/schemas/DashboardColorToken"
          },
          "aggregation_interval": {
            "type": "string",
            "enum": [
              "none",
              "hour",
              "day"
            ]
          },
          "precision": {
            "$ref": "#/components/schemas/DashboardScatterPrecision"
          },
          "weight": {
            "type": "string",
            "enum": [
              "thin",
              "thick",
              "thickest"
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "alias",
          "instrument_id",
          "x_variable_id",
          "y_variable_id",
          "color",
          "aggregation_interval",
          "precision",
          "weight"
        ]
      },
      "PersistedDashboardScatterConfiguration": {
        "type": "object",
        "properties": {
          "axes": {
            "$ref": "#/components/schemas/DashboardScatterAxes"
          },
          "plots": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PersistedDashboardScatterPlot"
            },
            "minItems": 1,
            "maxItems": 100
          }
        },
        "additionalProperties": false,
        "required": [
          "axes",
          "plots"
        ]
      },
      "DashboardTableColumn": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 21,
            "maxLength": 21,
            "pattern": "^[A-Za-z0-9_-]{21}$"
          },
          "client_reference": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "instrument_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "variable_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "alias": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "pattern": ".*\\S.*"
          },
          "precision": {
            "$ref": "#/components/schemas/DashboardTablePrecision"
          }
        },
        "additionalProperties": false,
        "required": [
          "instrument_id",
          "variable_id",
          "alias",
          "precision"
        ],
        "oneOf": [
          {
            "required": [
              "id"
            ],
            "not": {
              "required": [
                "client_reference"
              ]
            }
          },
          {
            "required": [
              "client_reference"
            ],
            "not": {
              "required": [
                "id"
              ]
            }
          }
        ]
      },
      "PersistedDashboardTableColumn": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 21,
            "maxLength": 21,
            "pattern": "^[A-Za-z0-9_-]{21}$"
          },
          "instrument_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "variable_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "alias": {
            "type": "string",
            "minLength": 1,
            "maxLength": 256,
            "pattern": ".*\\S.*"
          },
          "precision": {
            "$ref": "#/components/schemas/DashboardTablePrecision"
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "instrument_id",
          "variable_id",
          "alias",
          "precision"
        ]
      },
      "DashboardTableConfiguration": {
        "type": "object",
        "properties": {
          "page_limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 200
          },
          "pagination": {
            "type": "boolean"
          },
          "columns": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DashboardTableColumn"
            },
            "minItems": 1,
            "maxItems": 200
          }
        },
        "additionalProperties": false,
        "required": [
          "page_limit",
          "pagination",
          "columns"
        ]
      },
      "PersistedDashboardTableConfiguration": {
        "type": "object",
        "properties": {
          "page_limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 200
          },
          "pagination": {
            "type": "boolean"
          },
          "columns": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PersistedDashboardTableColumn"
            },
            "minItems": 1,
            "maxItems": 200
          }
        },
        "additionalProperties": false,
        "required": [
          "page_limit",
          "pagination",
          "columns"
        ]
      },
      "DashboardMarkdownConfiguration": {
        "type": "object",
        "properties": {
          "body": {
            "type": "string",
            "maxLength": 65536,
            "description": "Runtime limit is 65536 UTF-8 bytes."
          }
        },
        "additionalProperties": false,
        "required": [
          "body"
        ]
      },
      "DashboardSourceMetadata": {
        "type": "object",
        "properties": {
          "instrument_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "instrument_name": {
            "type": "string"
          },
          "instrument_lifecycle_state": {
            "type": "string",
            "enum": [
              "active",
              "archived"
            ]
          },
          "variable_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "variable_name": {
            "type": "string"
          },
          "variable_alias": {
            "type": "string"
          },
          "variable_type": {
            "type": "string",
            "enum": [
              "",
              "ingested",
              "calculated"
            ],
            "description": "Empty only when a saved source is deleted or otherwise unavailable."
          },
          "variable_lifecycle_state": {
            "type": "string",
            "enum": [
              "active",
              "archived"
            ]
          },
          "value_type": {
            "type": "string",
            "enum": [
              "",
              "decimal",
              "string"
            ],
            "description": "Empty only when a saved source is deleted or otherwise unavailable."
          },
          "unit": {
            "type": "string",
            "enum": [
              "cm",
              "ft",
              "in",
              "m",
              "mm",
              "mm/m",
              "kg",
              "Kips",
              "Metric Tons",
              "Pounds",
              "Tons",
              "kN",
              "kVAr",
              "kW",
              "°C",
              "B Units",
              "Ω",
              "kPa",
              "µε",
              "Count",
              "Elevation",
              "Percentage",
              "Hz",
              "Latitude",
              "Longitude"
            ]
          },
          "available": {
            "type": "boolean"
          },
          "unavailable_reason": {
            "type": "string"
          }
        },
        "additionalProperties": false,
        "required": [
          "instrument_id",
          "instrument_name",
          "variable_id",
          "variable_name",
          "variable_alias",
          "variable_type",
          "value_type",
          "available"
        ],
        "allOf": [
          {
            "if": {
              "properties": {
                "available": {
                  "const": false
                }
              },
              "required": [
                "available"
              ]
            },
            "then": {
              "required": [
                "unavailable_reason"
              ]
            }
          }
        ]
      },
      "VisualizationRawPoint": {
        "type": "object",
        "properties": {
          "entry_id": {
            "type": "string",
            "minLength": 21,
            "maxLength": 21,
            "pattern": "^[A-Za-z0-9_-]{21}$"
          },
          "instrument_timestamp": {
            "type": "string",
            "format": "date-time"
          },
          "value": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "quality": {
            "type": "string",
            "enum": [
              "pass",
              "not_evaluated",
              "suspect",
              "fail",
              "missing"
            ]
          },
          "nil_reason": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "raw",
              "corrected",
              "derived"
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "instrument_timestamp",
          "value",
          "quality",
          "status"
        ]
      },
      "VisualizationAggregationPoint": {
        "type": "object",
        "properties": {
          "entry_id": {
            "type": "string",
            "minLength": 21,
            "maxLength": 21,
            "pattern": "^[A-Za-z0-9_-]{21}$"
          },
          "display_timestamp": {
            "type": "string",
            "format": "date-time"
          },
          "window_start": {
            "type": "string",
            "format": "date-time"
          },
          "window_end": {
            "type": "string",
            "format": "date-time"
          },
          "value": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ]
          },
          "quality": {
            "type": "string",
            "enum": [
              "pass",
              "not_evaluated",
              "suspect"
            ]
          },
          "sample_count": {
            "type": "integer",
            "minimum": 0
          },
          "rejected_count": {
            "type": "integer",
            "minimum": 0
          }
        },
        "additionalProperties": false,
        "required": [
          "display_timestamp",
          "window_start",
          "window_end",
          "value",
          "quality",
          "sample_count",
          "rejected_count"
        ]
      },
      "WidgetGraphSeries": {
        "type": "object",
        "properties": {
          "series_id": {
            "type": "string",
            "minLength": 21,
            "maxLength": 21,
            "pattern": "^[A-Za-z0-9_-]{21}$"
          },
          "source": {
            "type": "object",
            "properties": {
              "instrument_id": {
                "type": "string",
                "minLength": 1,
                "maxLength": 128,
                "pattern": ".*\\S.*"
              },
              "instrument_name": {
                "type": "string"
              },
              "instrument_lifecycle_state": {
                "type": "string",
                "enum": [
                  "active",
                  "archived"
                ]
              },
              "variable_id": {
                "type": "string",
                "minLength": 1,
                "maxLength": 128,
                "pattern": ".*\\S.*"
              },
              "variable_name": {
                "type": "string"
              },
              "variable_alias": {
                "type": "string"
              },
              "variable_type": {
                "type": "string",
                "enum": [
                  "",
                  "ingested",
                  "calculated"
                ],
                "description": "Empty only when a saved source is deleted or otherwise unavailable."
              },
              "variable_lifecycle_state": {
                "type": "string",
                "enum": [
                  "active",
                  "archived"
                ]
              },
              "value_type": {
                "type": "string",
                "enum": [
                  "",
                  "decimal",
                  "string"
                ],
                "description": "Empty only when a saved source is deleted or otherwise unavailable."
              },
              "unit": {
                "type": "string",
                "enum": [
                  "cm",
                  "ft",
                  "in",
                  "m",
                  "mm",
                  "mm/m",
                  "kg",
                  "Kips",
                  "Metric Tons",
                  "Pounds",
                  "Tons",
                  "kN",
                  "kVAr",
                  "kW",
                  "°C",
                  "B Units",
                  "Ω",
                  "kPa",
                  "µε",
                  "Count",
                  "Elevation",
                  "Percentage",
                  "Hz",
                  "Latitude",
                  "Longitude"
                ]
              },
              "available": {
                "type": "boolean"
              },
              "unavailable_reason": {
                "type": "string"
              }
            },
            "additionalProperties": false,
            "required": [
              "instrument_id",
              "instrument_name",
              "variable_id",
              "variable_name",
              "variable_alias",
              "variable_type",
              "value_type",
              "available"
            ],
            "allOf": [
              {
                "if": {
                  "properties": {
                    "available": {
                      "const": false
                    }
                  },
                  "required": [
                    "available"
                  ]
                },
                "then": {
                  "required": [
                    "unavailable_reason"
                  ]
                }
              }
            ]
          },
          "raw_points": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "entry_id": {
                  "type": "string",
                  "minLength": 21,
                  "maxLength": 21,
                  "pattern": "^[A-Za-z0-9_-]{21}$"
                },
                "instrument_timestamp": {
                  "type": "string",
                  "format": "date-time"
                },
                "value": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "quality": {
                  "type": "string",
                  "enum": [
                    "pass",
                    "not_evaluated",
                    "suspect",
                    "fail",
                    "missing"
                  ]
                },
                "nil_reason": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "raw",
                    "corrected",
                    "derived"
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "instrument_timestamp",
                "value",
                "quality",
                "status"
              ]
            }
          },
          "aggregation_points": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "entry_id": {
                  "type": "string",
                  "minLength": 21,
                  "maxLength": 21,
                  "pattern": "^[A-Za-z0-9_-]{21}$"
                },
                "display_timestamp": {
                  "type": "string",
                  "format": "date-time"
                },
                "window_start": {
                  "type": "string",
                  "format": "date-time"
                },
                "window_end": {
                  "type": "string",
                  "format": "date-time"
                },
                "value": {
                  "anyOf": [
                    {
                      "type": "number"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "quality": {
                  "type": "string",
                  "enum": [
                    "pass",
                    "not_evaluated",
                    "suspect"
                  ]
                },
                "sample_count": {
                  "type": "integer",
                  "minimum": 0
                },
                "rejected_count": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "additionalProperties": false,
              "required": [
                "display_timestamp",
                "window_start",
                "window_end",
                "value",
                "quality",
                "sample_count",
                "rejected_count"
              ]
            }
          }
        },
        "additionalProperties": false,
        "required": [
          "series_id",
          "source",
          "raw_points",
          "aggregation_points"
        ]
      },
      "VisualizationScatterPoint": {
        "type": "object",
        "properties": {
          "entry_id": {
            "type": "string",
            "minLength": 21,
            "maxLength": 21,
            "pattern": "^[A-Za-z0-9_-]{21}$"
          },
          "instrument_timestamp": {
            "type": "string",
            "format": "date-time"
          },
          "x": {
            "type": "number"
          },
          "y": {
            "type": "number"
          },
          "x_quality": {
            "type": "string",
            "enum": [
              "pass",
              "not_evaluated",
              "suspect",
              "fail",
              "missing"
            ]
          },
          "y_quality": {
            "type": "string",
            "enum": [
              "pass",
              "not_evaluated",
              "suspect",
              "fail",
              "missing"
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "instrument_timestamp",
          "x",
          "y",
          "x_quality",
          "y_quality"
        ]
      },
      "VisualizationScatterAggregationPoint": {
        "type": "object",
        "properties": {
          "entry_id": {
            "type": "string",
            "minLength": 21,
            "maxLength": 21,
            "pattern": "^[A-Za-z0-9_-]{21}$"
          },
          "bucket_start": {
            "type": "string",
            "format": "date-time"
          },
          "bucket_end": {
            "type": "string",
            "format": "date-time"
          },
          "x": {
            "type": "number"
          },
          "y": {
            "type": "number"
          },
          "x_quality": {
            "type": "string",
            "enum": [
              "pass",
              "not_evaluated",
              "suspect"
            ]
          },
          "y_quality": {
            "type": "string",
            "enum": [
              "pass",
              "not_evaluated",
              "suspect"
            ]
          },
          "x_sample_count": {
            "type": "integer",
            "minimum": 0
          },
          "y_sample_count": {
            "type": "integer",
            "minimum": 0
          },
          "x_rejected_count": {
            "type": "integer",
            "minimum": 0
          },
          "y_rejected_count": {
            "type": "integer",
            "minimum": 0
          }
        },
        "additionalProperties": false,
        "required": [
          "bucket_start",
          "bucket_end",
          "x",
          "y",
          "x_quality",
          "y_quality",
          "x_sample_count",
          "y_sample_count",
          "x_rejected_count",
          "y_rejected_count"
        ]
      },
      "DashboardScatterRejectionCounts": {
        "type": "object",
        "properties": {
          "missing_x": {
            "type": "integer",
            "minimum": 0
          },
          "missing_y": {
            "type": "integer",
            "minimum": 0
          },
          "null_x": {
            "type": "integer",
            "minimum": 0
          },
          "null_y": {
            "type": "integer",
            "minimum": 0
          },
          "failed_x": {
            "type": "integer",
            "minimum": 0
          },
          "failed_y": {
            "type": "integer",
            "minimum": 0
          }
        },
        "additionalProperties": false,
        "required": [
          "missing_x",
          "missing_y",
          "null_x",
          "null_y",
          "failed_x",
          "failed_y"
        ]
      },
      "WidgetScatterPlot": {
        "type": "object",
        "properties": {
          "plot_id": {
            "type": "string",
            "minLength": 21,
            "maxLength": 21,
            "pattern": "^[A-Za-z0-9_-]{21}$"
          },
          "x_source": {
            "type": "object",
            "properties": {
              "instrument_id": {
                "type": "string",
                "minLength": 1,
                "maxLength": 128,
                "pattern": ".*\\S.*"
              },
              "instrument_name": {
                "type": "string"
              },
              "instrument_lifecycle_state": {
                "type": "string",
                "enum": [
                  "active",
                  "archived"
                ]
              },
              "variable_id": {
                "type": "string",
                "minLength": 1,
                "maxLength": 128,
                "pattern": ".*\\S.*"
              },
              "variable_name": {
                "type": "string"
              },
              "variable_alias": {
                "type": "string"
              },
              "variable_type": {
                "type": "string",
                "enum": [
                  "",
                  "ingested",
                  "calculated"
                ],
                "description": "Empty only when a saved source is deleted or otherwise unavailable."
              },
              "variable_lifecycle_state": {
                "type": "string",
                "enum": [
                  "active",
                  "archived"
                ]
              },
              "value_type": {
                "type": "string",
                "enum": [
                  "",
                  "decimal",
                  "string"
                ],
                "description": "Empty only when a saved source is deleted or otherwise unavailable."
              },
              "unit": {
                "type": "string",
                "enum": [
                  "cm",
                  "ft",
                  "in",
                  "m",
                  "mm",
                  "mm/m",
                  "kg",
                  "Kips",
                  "Metric Tons",
                  "Pounds",
                  "Tons",
                  "kN",
                  "kVAr",
                  "kW",
                  "°C",
                  "B Units",
                  "Ω",
                  "kPa",
                  "µε",
                  "Count",
                  "Elevation",
                  "Percentage",
                  "Hz",
                  "Latitude",
                  "Longitude"
                ]
              },
              "available": {
                "type": "boolean"
              },
              "unavailable_reason": {
                "type": "string"
              }
            },
            "additionalProperties": false,
            "required": [
              "instrument_id",
              "instrument_name",
              "variable_id",
              "variable_name",
              "variable_alias",
              "variable_type",
              "value_type",
              "available"
            ],
            "allOf": [
              {
                "if": {
                  "properties": {
                    "available": {
                      "const": false
                    }
                  },
                  "required": [
                    "available"
                  ]
                },
                "then": {
                  "required": [
                    "unavailable_reason"
                  ]
                }
              }
            ]
          },
          "y_source": {
            "type": "object",
            "properties": {
              "instrument_id": {
                "type": "string",
                "minLength": 1,
                "maxLength": 128,
                "pattern": ".*\\S.*"
              },
              "instrument_name": {
                "type": "string"
              },
              "instrument_lifecycle_state": {
                "type": "string",
                "enum": [
                  "active",
                  "archived"
                ]
              },
              "variable_id": {
                "type": "string",
                "minLength": 1,
                "maxLength": 128,
                "pattern": ".*\\S.*"
              },
              "variable_name": {
                "type": "string"
              },
              "variable_alias": {
                "type": "string"
              },
              "variable_type": {
                "type": "string",
                "enum": [
                  "",
                  "ingested",
                  "calculated"
                ],
                "description": "Empty only when a saved source is deleted or otherwise unavailable."
              },
              "variable_lifecycle_state": {
                "type": "string",
                "enum": [
                  "active",
                  "archived"
                ]
              },
              "value_type": {
                "type": "string",
                "enum": [
                  "",
                  "decimal",
                  "string"
                ],
                "description": "Empty only when a saved source is deleted or otherwise unavailable."
              },
              "unit": {
                "type": "string",
                "enum": [
                  "cm",
                  "ft",
                  "in",
                  "m",
                  "mm",
                  "mm/m",
                  "kg",
                  "Kips",
                  "Metric Tons",
                  "Pounds",
                  "Tons",
                  "kN",
                  "kVAr",
                  "kW",
                  "°C",
                  "B Units",
                  "Ω",
                  "kPa",
                  "µε",
                  "Count",
                  "Elevation",
                  "Percentage",
                  "Hz",
                  "Latitude",
                  "Longitude"
                ]
              },
              "available": {
                "type": "boolean"
              },
              "unavailable_reason": {
                "type": "string"
              }
            },
            "additionalProperties": false,
            "required": [
              "instrument_id",
              "instrument_name",
              "variable_id",
              "variable_name",
              "variable_alias",
              "variable_type",
              "value_type",
              "available"
            ],
            "allOf": [
              {
                "if": {
                  "properties": {
                    "available": {
                      "const": false
                    }
                  },
                  "required": [
                    "available"
                  ]
                },
                "then": {
                  "required": [
                    "unavailable_reason"
                  ]
                }
              }
            ]
          },
          "points": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "entry_id": {
                  "type": "string",
                  "minLength": 21,
                  "maxLength": 21,
                  "pattern": "^[A-Za-z0-9_-]{21}$"
                },
                "instrument_timestamp": {
                  "type": "string",
                  "format": "date-time"
                },
                "x": {
                  "type": "number"
                },
                "y": {
                  "type": "number"
                },
                "x_quality": {
                  "type": "string",
                  "enum": [
                    "pass",
                    "not_evaluated",
                    "suspect",
                    "fail",
                    "missing"
                  ]
                },
                "y_quality": {
                  "type": "string",
                  "enum": [
                    "pass",
                    "not_evaluated",
                    "suspect",
                    "fail",
                    "missing"
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "instrument_timestamp",
                "x",
                "y",
                "x_quality",
                "y_quality"
              ]
            }
          },
          "aggregation_points": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "entry_id": {
                  "type": "string",
                  "minLength": 21,
                  "maxLength": 21,
                  "pattern": "^[A-Za-z0-9_-]{21}$"
                },
                "bucket_start": {
                  "type": "string",
                  "format": "date-time"
                },
                "bucket_end": {
                  "type": "string",
                  "format": "date-time"
                },
                "x": {
                  "type": "number"
                },
                "y": {
                  "type": "number"
                },
                "x_quality": {
                  "type": "string",
                  "enum": [
                    "pass",
                    "not_evaluated",
                    "suspect"
                  ]
                },
                "y_quality": {
                  "type": "string",
                  "enum": [
                    "pass",
                    "not_evaluated",
                    "suspect"
                  ]
                },
                "x_sample_count": {
                  "type": "integer",
                  "minimum": 0
                },
                "y_sample_count": {
                  "type": "integer",
                  "minimum": 0
                },
                "x_rejected_count": {
                  "type": "integer",
                  "minimum": 0
                },
                "y_rejected_count": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "additionalProperties": false,
              "required": [
                "bucket_start",
                "bucket_end",
                "x",
                "y",
                "x_quality",
                "y_quality",
                "x_sample_count",
                "y_sample_count",
                "x_rejected_count",
                "y_rejected_count"
              ]
            }
          },
          "rejection_counts": {
            "type": "object",
            "properties": {
              "missing_x": {
                "type": "integer",
                "minimum": 0
              },
              "missing_y": {
                "type": "integer",
                "minimum": 0
              },
              "null_x": {
                "type": "integer",
                "minimum": 0
              },
              "null_y": {
                "type": "integer",
                "minimum": 0
              },
              "failed_x": {
                "type": "integer",
                "minimum": 0
              },
              "failed_y": {
                "type": "integer",
                "minimum": 0
              }
            },
            "additionalProperties": false,
            "required": [
              "missing_x",
              "missing_y",
              "null_x",
              "null_y",
              "failed_x",
              "failed_y"
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "plot_id",
          "x_source",
          "y_source",
          "rejection_counts"
        ]
      },
      "VisualizationTableCell": {
        "type": "object",
        "properties": {
          "column_id": {
            "type": "string",
            "minLength": 21,
            "maxLength": 21,
            "pattern": "^[A-Za-z0-9_-]{21}$"
          },
          "value_type": {
            "type": "string",
            "enum": [
              "decimal",
              "string"
            ]
          },
          "decimal_value": {
            "type": "number"
          },
          "string_value": {
            "type": "string"
          },
          "quality": {
            "type": "string",
            "enum": [
              "pass",
              "not_evaluated",
              "suspect",
              "fail",
              "missing"
            ]
          },
          "nil_reason": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "raw",
              "corrected",
              "derived"
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "column_id",
          "value_type",
          "quality",
          "status"
        ],
        "oneOf": [
          {
            "properties": {
              "nil_reason": {
                "type": "string"
              }
            },
            "required": [
              "nil_reason"
            ],
            "not": {
              "anyOf": [
                {
                  "required": [
                    "decimal_value"
                  ]
                },
                {
                  "required": [
                    "string_value"
                  ]
                }
              ]
            }
          },
          {
            "oneOf": [
              {
                "properties": {
                  "value_type": {
                    "const": "decimal"
                  }
                },
                "required": [
                  "value_type",
                  "decimal_value"
                ],
                "not": {
                  "required": [
                    "string_value"
                  ]
                }
              },
              {
                "properties": {
                  "value_type": {
                    "const": "string"
                  }
                },
                "required": [
                  "value_type",
                  "string_value"
                ],
                "not": {
                  "required": [
                    "decimal_value"
                  ]
                }
              }
            ],
            "not": {
              "required": [
                "nil_reason"
              ]
            }
          }
        ]
      },
      "VisualizationTableRow": {
        "type": "object",
        "properties": {
          "instrument_timestamp": {
            "type": "string",
            "format": "date-time"
          },
          "cells": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "column_id": {
                  "type": "string",
                  "minLength": 21,
                  "maxLength": 21,
                  "pattern": "^[A-Za-z0-9_-]{21}$"
                },
                "value_type": {
                  "type": "string",
                  "enum": [
                    "decimal",
                    "string"
                  ]
                },
                "decimal_value": {
                  "type": "number"
                },
                "string_value": {
                  "type": "string"
                },
                "quality": {
                  "type": "string",
                  "enum": [
                    "pass",
                    "not_evaluated",
                    "suspect",
                    "fail",
                    "missing"
                  ]
                },
                "nil_reason": {
                  "type": "string"
                },
                "status": {
                  "type": "string",
                  "enum": [
                    "raw",
                    "corrected",
                    "derived"
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "column_id",
                "value_type",
                "quality",
                "status"
              ],
              "oneOf": [
                {
                  "properties": {
                    "nil_reason": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "nil_reason"
                  ],
                  "not": {
                    "anyOf": [
                      {
                        "required": [
                          "decimal_value"
                        ]
                      },
                      {
                        "required": [
                          "string_value"
                        ]
                      }
                    ]
                  }
                },
                {
                  "oneOf": [
                    {
                      "properties": {
                        "value_type": {
                          "const": "decimal"
                        }
                      },
                      "required": [
                        "value_type",
                        "decimal_value"
                      ],
                      "not": {
                        "required": [
                          "string_value"
                        ]
                      }
                    },
                    {
                      "properties": {
                        "value_type": {
                          "const": "string"
                        }
                      },
                      "required": [
                        "value_type",
                        "string_value"
                      ],
                      "not": {
                        "required": [
                          "decimal_value"
                        ]
                      }
                    }
                  ],
                  "not": {
                    "required": [
                      "nil_reason"
                    ]
                  }
                }
              ]
            }
          }
        },
        "additionalProperties": false,
        "required": [
          "instrument_timestamp",
          "cells"
        ]
      },
      "WidgetTableColumn": {
        "type": "object",
        "properties": {
          "column_id": {
            "type": "string",
            "minLength": 21,
            "maxLength": 21,
            "pattern": "^[A-Za-z0-9_-]{21}$"
          },
          "source": {
            "type": "object",
            "properties": {
              "instrument_id": {
                "type": "string",
                "minLength": 1,
                "maxLength": 128,
                "pattern": ".*\\S.*"
              },
              "instrument_name": {
                "type": "string"
              },
              "instrument_lifecycle_state": {
                "type": "string",
                "enum": [
                  "active",
                  "archived"
                ]
              },
              "variable_id": {
                "type": "string",
                "minLength": 1,
                "maxLength": 128,
                "pattern": ".*\\S.*"
              },
              "variable_name": {
                "type": "string"
              },
              "variable_alias": {
                "type": "string"
              },
              "variable_type": {
                "type": "string",
                "enum": [
                  "",
                  "ingested",
                  "calculated"
                ],
                "description": "Empty only when a saved source is deleted or otherwise unavailable."
              },
              "variable_lifecycle_state": {
                "type": "string",
                "enum": [
                  "active",
                  "archived"
                ]
              },
              "value_type": {
                "type": "string",
                "enum": [
                  "",
                  "decimal",
                  "string"
                ],
                "description": "Empty only when a saved source is deleted or otherwise unavailable."
              },
              "unit": {
                "type": "string",
                "enum": [
                  "cm",
                  "ft",
                  "in",
                  "m",
                  "mm",
                  "mm/m",
                  "kg",
                  "Kips",
                  "Metric Tons",
                  "Pounds",
                  "Tons",
                  "kN",
                  "kVAr",
                  "kW",
                  "°C",
                  "B Units",
                  "Ω",
                  "kPa",
                  "µε",
                  "Count",
                  "Elevation",
                  "Percentage",
                  "Hz",
                  "Latitude",
                  "Longitude"
                ]
              },
              "available": {
                "type": "boolean"
              },
              "unavailable_reason": {
                "type": "string"
              }
            },
            "additionalProperties": false,
            "required": [
              "instrument_id",
              "instrument_name",
              "variable_id",
              "variable_name",
              "variable_alias",
              "variable_type",
              "value_type",
              "available"
            ],
            "allOf": [
              {
                "if": {
                  "properties": {
                    "available": {
                      "const": false
                    }
                  },
                  "required": [
                    "available"
                  ]
                },
                "then": {
                  "required": [
                    "unavailable_reason"
                  ]
                }
              }
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "column_id",
          "source"
        ]
      },
      "WidgetGraphData": {
        "type": "object",
        "properties": {
          "dashboard_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "widget_id": {
            "type": "string",
            "minLength": 21,
            "maxLength": 21,
            "pattern": "^[A-Za-z0-9_-]{21}$"
          },
          "widget_type": {
            "type": "string",
            "const": "graph"
          },
          "revision": {
            "type": "integer",
            "minimum": 1
          },
          "from": {
            "type": "string",
            "format": "date-time"
          },
          "to": {
            "type": "string",
            "format": "date-time"
          },
          "configuration": {
            "$ref": "#/components/schemas/PersistedDashboardGraphConfiguration"
          },
          "series": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WidgetGraphSeries"
            }
          }
        },
        "additionalProperties": false,
        "required": [
          "dashboard_id",
          "widget_id",
          "widget_type",
          "revision",
          "from",
          "to",
          "configuration",
          "series"
        ]
      },
      "WidgetScatterData": {
        "type": "object",
        "properties": {
          "dashboard_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "widget_id": {
            "type": "string",
            "minLength": 21,
            "maxLength": 21,
            "pattern": "^[A-Za-z0-9_-]{21}$"
          },
          "widget_type": {
            "type": "string",
            "const": "scatter_plot"
          },
          "revision": {
            "type": "integer",
            "minimum": 1
          },
          "from": {
            "type": "string",
            "format": "date-time"
          },
          "to": {
            "type": "string",
            "format": "date-time"
          },
          "configuration": {
            "$ref": "#/components/schemas/PersistedDashboardScatterConfiguration"
          },
          "plots": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WidgetScatterPlot"
            }
          }
        },
        "additionalProperties": false,
        "required": [
          "dashboard_id",
          "widget_id",
          "widget_type",
          "revision",
          "from",
          "to",
          "configuration",
          "plots"
        ]
      },
      "WidgetTableData": {
        "type": "object",
        "properties": {
          "dashboard_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "widget_id": {
            "type": "string",
            "minLength": 21,
            "maxLength": 21,
            "pattern": "^[A-Za-z0-9_-]{21}$"
          },
          "widget_type": {
            "type": "string",
            "const": "table"
          },
          "revision": {
            "type": "integer",
            "minimum": 1
          },
          "from": {
            "type": "string",
            "format": "date-time"
          },
          "to": {
            "type": "string",
            "format": "date-time"
          },
          "configuration": {
            "$ref": "#/components/schemas/PersistedDashboardTableConfiguration"
          },
          "rows": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VisualizationTableRow"
            }
          },
          "columns": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WidgetTableColumn"
            }
          }
        },
        "additionalProperties": false,
        "required": [
          "dashboard_id",
          "widget_id",
          "widget_type",
          "revision",
          "from",
          "to",
          "configuration",
          "rows",
          "columns"
        ]
      },
      "WidgetData": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/WidgetGraphData"
          },
          {
            "$ref": "#/components/schemas/WidgetScatterData"
          },
          {
            "$ref": "#/components/schemas/WidgetTableData"
          }
        ],
        "discriminator": {
          "propertyName": "widget_type",
          "mapping": {
            "graph": "#/components/schemas/WidgetGraphData",
            "scatter_plot": "#/components/schemas/WidgetScatterData",
            "table": "#/components/schemas/WidgetTableData"
          }
        }
      },
      "DashboardListEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DashboardSummary"
            }
          },
          "next_cursor": {
            "type": "string",
            "minLength": 1,
            "maxLength": 16384
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "data"
        ]
      },
      "DashboardEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "data": {
            "$ref": "#/components/schemas/DashboardSummary"
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "data"
        ]
      },
      "DashboardDetailEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "data": {
            "$ref": "#/components/schemas/DashboardDetail"
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "data"
        ]
      },
      "DashboardPatchResultEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "data": {
            "$ref": "#/components/schemas/DashboardPatchResult"
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "data"
        ]
      },
      "DashboardWidgetListEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DashboardWidgetDefinition"
            }
          },
          "next_cursor": {
            "type": "string",
            "minLength": 1,
            "maxLength": 16384
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "data"
        ]
      },
      "DashboardWidgetEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "data": {
            "$ref": "#/components/schemas/DashboardWidgetDefinition"
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "data"
        ]
      },
      "InstrumentListEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Instrument"
            }
          },
          "next_cursor": {
            "type": "string",
            "minLength": 1,
            "maxLength": 16384
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "data"
        ]
      },
      "InstrumentEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "data": {
            "$ref": "#/components/schemas/Instrument"
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "data"
        ]
      },
      "ReferenceListEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ReferenceItem"
            }
          },
          "next_cursor": {
            "type": "string",
            "minLength": 1,
            "maxLength": 16384
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "data"
        ]
      },
      "ParserListEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ParserSummary"
            }
          },
          "next_cursor": {
            "type": "string",
            "minLength": 1,
            "maxLength": 16384
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "data"
        ]
      },
      "ParserEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "data": {
            "$ref": "#/components/schemas/Parser"
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "data"
        ]
      },
      "VariableListEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VariableDefinition"
            }
          },
          "next_cursor": {
            "type": "string",
            "minLength": 1,
            "maxLength": 16384
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "data"
        ]
      },
      "VariableEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "data": {
            "$ref": "#/components/schemas/VariableDefinition"
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "data"
        ]
      },
      "CalculatedVariableListEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CalculatedVariable"
            }
          },
          "next_cursor": {
            "type": "string",
            "minLength": 1,
            "maxLength": 16384
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "data"
        ]
      },
      "CalculatedVariableEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "data": {
            "$ref": "#/components/schemas/CalculatedVariable"
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "data"
        ]
      },
      "CalculatedVariableMutationEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "data": {
            "$ref": "#/components/schemas/CalculatedVariableMutation"
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "data"
        ]
      },
      "CalibrationConstantListEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CalibrationConstant"
            }
          },
          "next_cursor": {
            "type": "string",
            "minLength": 1,
            "maxLength": 16384
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "data"
        ]
      },
      "CalibrationConstantEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "data": {
            "$ref": "#/components/schemas/CalibrationConstant"
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "data"
        ]
      },
      "CalibrationConstantMutationEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "data": {
            "$ref": "#/components/schemas/CalibrationConstantMutation"
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "data"
        ]
      },
      "InstrumentGroupListEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/InstrumentGroup"
            }
          },
          "next_cursor": {
            "type": "string",
            "minLength": 1,
            "maxLength": 16384
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "data"
        ]
      },
      "InstrumentGroupEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "data": {
            "$ref": "#/components/schemas/InstrumentGroup"
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "data"
        ]
      },
      "InstrumentGroupDetailEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "data": {
            "$ref": "#/components/schemas/InstrumentGroupDetail"
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "data"
        ]
      },
      "InstrumentGroupMembershipReplacementEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "data": {
            "$ref": "#/components/schemas/InstrumentGroupMembershipReplacement"
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "data"
        ]
      },
      "DeleteEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "data": {
            "$ref": "#/components/schemas/DeleteResult"
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "data"
        ]
      },
      "ObservationResultEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "data": {
            "$ref": "#/components/schemas/ObservationResult"
          },
          "next_cursor": {
            "type": "string",
            "minLength": 1,
            "maxLength": 16384
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "data"
        ]
      },
      "WidgetDataEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "data": {
            "$ref": "#/components/schemas/WidgetData"
          },
          "next_cursor": {
            "type": "string",
            "minLength": 1,
            "maxLength": 16384
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "data"
        ]
      },
      "BadRequestAPIError": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "bad_request",
              "validation_error",
              "invalid_cursor",
              "cursor_mismatch",
              "widget_has_no_data"
            ]
          },
          "message": {
            "type": "string"
          },
          "details": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": false,
        "required": [
          "type",
          "message"
        ]
      },
      "BadRequestErrorEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "error": {
            "$ref": "#/components/schemas/BadRequestAPIError"
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "error"
        ]
      },
      "UnauthorizedAPIError": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "unauthorized"
            ]
          },
          "message": {
            "type": "string"
          },
          "details": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": false,
        "required": [
          "type",
          "message"
        ]
      },
      "UnauthorizedErrorEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "error": {
            "$ref": "#/components/schemas/UnauthorizedAPIError"
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "error"
        ]
      },
      "ForbiddenAPIError": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "permission_denied",
              "project_scope_mismatch"
            ]
          },
          "message": {
            "type": "string"
          },
          "details": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": false,
        "required": [
          "type",
          "message"
        ]
      },
      "ForbiddenErrorEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "error": {
            "$ref": "#/components/schemas/ForbiddenAPIError"
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "error"
        ]
      },
      "NotFoundAPIError": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "not_found"
            ]
          },
          "message": {
            "type": "string"
          },
          "details": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": false,
        "required": [
          "type",
          "message"
        ]
      },
      "NotFoundErrorEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "error": {
            "$ref": "#/components/schemas/NotFoundAPIError"
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "error"
        ]
      },
      "MethodNotAllowedAPIError": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "method_not_allowed"
            ]
          },
          "message": {
            "type": "string"
          },
          "details": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": false,
        "required": [
          "type",
          "message"
        ]
      },
      "MethodNotAllowedErrorEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "error": {
            "$ref": "#/components/schemas/MethodNotAllowedAPIError"
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "error"
        ]
      },
      "ConflictAPIError": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "conflict"
            ]
          },
          "message": {
            "type": "string"
          },
          "details": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": false,
        "required": [
          "type",
          "message"
        ]
      },
      "ConflictErrorEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "error": {
            "$ref": "#/components/schemas/ConflictAPIError"
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "error"
        ]
      },
      "PayloadTooLargeAPIError": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "payload_too_large"
            ]
          },
          "message": {
            "type": "string"
          },
          "details": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": false,
        "required": [
          "type",
          "message"
        ]
      },
      "PayloadTooLargeErrorEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "error": {
            "$ref": "#/components/schemas/PayloadTooLargeAPIError"
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "error"
        ]
      },
      "UnsupportedMediaTypeAPIError": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "unsupported_media_type"
            ]
          },
          "message": {
            "type": "string"
          },
          "details": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": false,
        "required": [
          "type",
          "message"
        ]
      },
      "UnsupportedMediaTypeErrorEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "error": {
            "$ref": "#/components/schemas/UnsupportedMediaTypeAPIError"
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "error"
        ]
      },
      "TooManyRequestsAPIError": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "too_many_requests"
            ]
          },
          "message": {
            "type": "string"
          },
          "details": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": false,
        "required": [
          "type",
          "message"
        ]
      },
      "TooManyRequestsErrorEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "error": {
            "$ref": "#/components/schemas/TooManyRequestsAPIError"
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "error"
        ]
      },
      "InternalAPIError": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "internal_error"
            ]
          },
          "message": {
            "type": "string"
          },
          "details": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": false,
        "required": [
          "type",
          "message"
        ]
      },
      "InternalErrorEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "error": {
            "$ref": "#/components/schemas/InternalAPIError"
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "error"
        ]
      },
      "TemporarilyUnavailableAPIError": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "temporarily_unavailable"
            ]
          },
          "message": {
            "type": "string"
          },
          "details": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": false,
        "required": [
          "type",
          "message"
        ]
      },
      "TemporarilyUnavailableErrorEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "error": {
            "$ref": "#/components/schemas/TemporarilyUnavailableAPIError"
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "error"
        ]
      },
      "APIError": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "bad_request",
              "validation_error",
              "invalid_cursor",
              "cursor_mismatch",
              "widget_has_no_data",
              "unauthorized",
              "permission_denied",
              "project_scope_mismatch",
              "not_found",
              "method_not_allowed",
              "conflict",
              "payload_too_large",
              "unsupported_media_type",
              "too_many_requests",
              "internal_error",
              "temporarily_unavailable"
            ]
          },
          "message": {
            "type": "string"
          },
          "details": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "additionalProperties": false,
        "required": [
          "type",
          "message"
        ]
      },
      "ErrorEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "error": {
            "$ref": "#/components/schemas/APIError"
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "error"
        ]
      },
      "Permission": {
        "type": "string",
        "enum": [
          "developer_api.calculated_variables.archive",
          "developer_api.calculated_variables.create",
          "developer_api.calculated_variables.list",
          "developer_api.calculated_variables.read",
          "developer_api.calculated_variables.restore",
          "developer_api.calculated_variables.update",
          "developer_api.calibration_constants.archive",
          "developer_api.calibration_constants.create",
          "developer_api.calibration_constants.list",
          "developer_api.calibration_constants.read",
          "developer_api.calibration_constants.restore",
          "developer_api.calibration_constants.update",
          "developer_api.dashboard_widget_data.read",
          "developer_api.dashboards.archive",
          "developer_api.dashboards.create",
          "developer_api.dashboards.list",
          "developer_api.dashboards.read",
          "developer_api.dashboards.restore",
          "developer_api.dashboards.update",
          "developer_api.ingested_variables.archive",
          "developer_api.ingested_variables.create",
          "developer_api.ingested_variables.list",
          "developer_api.ingested_variables.read",
          "developer_api.ingested_variables.restore",
          "developer_api.ingested_variables.update",
          "developer_api.instrument_data.query",
          "developer_api.instrument_groups.create",
          "developer_api.instrument_groups.delete",
          "developer_api.instrument_groups.list",
          "developer_api.instrument_groups.read",
          "developer_api.instrument_groups.update",
          "developer_api.instruments.archive",
          "developer_api.instruments.create",
          "developer_api.instruments.list",
          "developer_api.instruments.read",
          "developer_api.instruments.restore",
          "developer_api.instruments.update",
          "developer_api.parsers.archive",
          "developer_api.parsers.create",
          "developer_api.parsers.list",
          "developer_api.parsers.read",
          "developer_api.parsers.restore",
          "developer_api.parsers.update",
          "developer_api.sites.list",
          "developer_api.variables.list"
        ],
        "x-sansignal-permission-descriptions": {
          "developer_api.calculated_variables.archive": "Archive a calculated variable.",
          "developer_api.calculated_variables.create": "Create a calculated variable.",
          "developer_api.calculated_variables.list": "List calculated variables.",
          "developer_api.calculated_variables.read": "Read one calculated variable.",
          "developer_api.calculated_variables.restore": "Restore a calculated variable.",
          "developer_api.calculated_variables.update": "Edit metadata or replace a calculation.",
          "developer_api.calibration_constants.archive": "Archive a calibration constant.",
          "developer_api.calibration_constants.create": "Create a calibration constant.",
          "developer_api.calibration_constants.list": "List calibration constants.",
          "developer_api.calibration_constants.read": "Read one calibration constant.",
          "developer_api.calibration_constants.restore": "Restore a calibration constant.",
          "developer_api.calibration_constants.update": "Edit a calibration constant.",
          "developer_api.dashboard_widget_data.read": "Read redrawable data referenced by a saved dashboard widget.",
          "developer_api.dashboards.archive": "Archive a dashboard.",
          "developer_api.dashboards.create": "Create a dashboard.",
          "developer_api.dashboards.list": "List dashboards in the project.",
          "developer_api.dashboards.read": "Read one dashboard and its saved widget definitions.",
          "developer_api.dashboards.restore": "Restore an archived dashboard.",
          "developer_api.dashboards.update": "Edit dashboard metadata, layout, and widgets.",
          "developer_api.ingested_variables.archive": "Archive an instrument-owned ingested variable.",
          "developer_api.ingested_variables.create": "Create an instrument-owned ingested variable.",
          "developer_api.ingested_variables.list": "List ingested variables.",
          "developer_api.ingested_variables.read": "Read one instrument-owned ingested variable.",
          "developer_api.ingested_variables.restore": "Restore an instrument-owned ingested variable.",
          "developer_api.ingested_variables.update": "Edit an instrument-owned ingested variable.",
          "developer_api.instrument_data.query": "Query instrument observations.",
          "developer_api.instrument_groups.create": "Create an instrument group.",
          "developer_api.instrument_groups.delete": "Permanently delete an instrument group that has no associated access grants.",
          "developer_api.instrument_groups.list": "List instrument groups.",
          "developer_api.instrument_groups.read": "Read a group and its membership.",
          "developer_api.instrument_groups.update": "Edit a group or replace its membership.",
          "developer_api.instruments.archive": "Archive an instrument.",
          "developer_api.instruments.create": "Create an instrument.",
          "developer_api.instruments.list": "List instruments using supported filters.",
          "developer_api.instruments.read": "Read one instrument.",
          "developer_api.instruments.restore": "Restore an archived instrument.",
          "developer_api.instruments.update": "Edit mutable instrument attributes and location.",
          "developer_api.parsers.archive": "Archive an FTP parser.",
          "developer_api.parsers.create": "Create an FTP parser.",
          "developer_api.parsers.list": "List FTP parsers in the project.",
          "developer_api.parsers.read": "Read one FTP parser.",
          "developer_api.parsers.restore": "Restore an archived FTP parser.",
          "developer_api.parsers.update": "Edit an FTP parser.",
          "developer_api.sites.list": "List the project sites eligible for instrument creation.",
          "developer_api.variables.list": "List the effective variables available on an instrument."
        }
      },
      "PermissionDefinition": {
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/components/schemas/Permission"
          },
          "resource": {
            "type": "string"
          },
          "action": {
            "type": "string"
          },
          "description": {
            "type": "string"
          }
        },
        "additionalProperties": false,
        "required": [
          "id",
          "resource",
          "action",
          "description"
        ]
      },
      "PermissionIntrospection": {
        "type": "object",
        "properties": {
          "api_key_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "connection_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "project_id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "pattern": ".*\\S.*"
          },
          "permissions_revision": {
            "type": "integer",
            "minimum": 1
          },
          "permissions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PermissionDefinition"
            },
            "uniqueItems": true
          }
        },
        "additionalProperties": false,
        "required": [
          "api_key_id",
          "connection_id",
          "project_id",
          "permissions_revision",
          "permissions"
        ]
      },
      "PermissionIntrospectionEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "data": {
            "$ref": "#/components/schemas/PermissionIntrospection"
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "data"
        ]
      },
      "IngestedVariable": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "description": "Stable ingested variable name."
          },
          "value": {
            "anyOf": [
              {
                "type": "number",
                "not": {
                  "const": -999
                }
              },
              {
                "type": "string",
                "pattern": ".*\\S.*"
              },
              {
                "type": "null"
              }
            ],
            "description": "Numeric or nonblank text value. Null or omission records a nil value for an existing variable; it does not remove a value. The numeric sentinel -999 is rejected. A null-only unknown variable is omitted until its value type is known."
          },
          "remove": {
            "type": "boolean",
            "default": false,
            "description": "Explicitly remove the current raw/corrected value at this timestamp. When true, omit value. The variable must already exist."
          },
          "alias": {
            "type": [
              "string",
              "null"
            ],
            "description": "Optional nonblank display alias used for a newly created variable."
          },
          "nil_reason": {
            "type": [
              "string",
              "null"
            ],
            "description": "Optional reason for an intentionally nil reading. Ignored for non-null values.",
            "enum": [
              "sensor_fault",
              "comms_outage",
              "maintenance",
              "below_range",
              "sentinel",
              "invalid",
              "not_applicable",
              "not_reported",
              null
            ]
          },
          "agg_n": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 1,
            "description": "Number of samples represented by a decimal reading."
          },
          "agg_window_s": {
            "type": [
              "number",
              "null"
            ],
            "exclusiveMinimum": 0,
            "description": "Aggregation window for a decimal reading in seconds."
          },
          "allow_override": {
            "type": [
              "boolean",
              "null"
            ],
            "default": false,
            "description": "Allow a value correction at an existing timestamp."
          }
        },
        "additionalProperties": false,
        "required": [
          "name"
        ],
        "description": "Configure units, display settings, and expected cadence through variable management. view_options and expected_cadence_s are rejected by this ingestion transport.",
        "allOf": [
          {
            "if": {
              "properties": {
                "remove": {
                  "const": true
                }
              },
              "required": [
                "remove"
              ]
            },
            "then": {
              "not": {
                "required": [
                  "value"
                ]
              }
            }
          }
        ]
      },
      "IngestDataPoint": {
        "type": "object",
        "properties": {
          "instrument_timestamp": {
            "type": "string",
            "format": "date-time",
            "description": "RFC 3339 timestamp, including a timezone offset."
          },
          "instrument_name": {
            "type": "string",
            "minLength": 1,
            "description": "Instrument identity within the connection’s project."
          },
          "site_id": {
            "type": [
              "string",
              "null"
            ],
            "description": "Active site identifier for a new instrument. Omission or null uses the project’s default site. Ignored for an existing instrument; ingestion does not move instruments between sites."
          },
          "skip_anomaly_detection": {
            "type": "boolean",
            "default": false,
            "description": "Store and calculate normally without using a newly created point as a project-wide anomaly evaluation boundary."
          },
          "ingested_variables": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/IngestedVariable"
            }
          }
        },
        "additionalProperties": false,
        "required": [
          "instrument_timestamp",
          "instrument_name",
          "ingested_variables"
        ]
      },
      "IngestCreateBody": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "minItems": 1,
            "maxItems": 1000,
            "items": {
              "$ref": "#/components/schemas/IngestDataPoint"
            },
            "description": "One durable ingestion run per submitted point. The configured batch limit may be lower than the absolute ceiling."
          }
        },
        "additionalProperties": false,
        "required": [
          "data"
        ]
      },
      "IngestionRunState": {
        "type": "object",
        "properties": {
          "run_id": {
            "type": "string"
          },
          "state": {
            "type": "string",
            "description": "Current durable run state; inspect Runs in the application for processing outcome."
          }
        },
        "additionalProperties": false,
        "required": [
          "run_id",
          "state"
        ]
      },
      "IngestAccepted": {
        "type": "object",
        "properties": {
          "replayed": {
            "type": "boolean"
          },
          "runs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/IngestionRunState"
            }
          }
        },
        "additionalProperties": false,
        "required": [
          "runs"
        ]
      },
      "IngestAcceptedEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "data": {
            "$ref": "#/components/schemas/IngestAccepted"
          }
        },
        "additionalProperties": false,
        "required": [
          "request_id",
          "data"
        ]
      },
      "IngestErrorEnvelope": {
        "type": "object",
        "properties": {
          "request_id": {
            "type": "string"
          },
          "error": {
            "type": "object",
            "properties": {
              "type": {
                "type": "string"
              },
              "message": {
                "type": "string"
              },
              "details": {}
            },
            "additionalProperties": false,
            "required": [
              "type",
              "message"
            ]
          }
        },
        "additionalProperties": false,
        "required": [
          "error"
        ]
      }
    }
  },
  "x-sansignal-configuration": {
    "source": "Repository defaults; use /dev-api/v1/openai.json for effective deployment limits.",
    "defaults": {
      "DefaultKeyLifetimeHours": 2160,
      "MaxKeyLifetimeHours": 8760,
      "LastUsedUpdateIntervalSeconds": 300,
      "CursorTTLSeconds": 900,
      "PreAuthRequestsPerMinute": 120,
      "RequestsPerMinute": 600,
      "ConcurrentRequests": 8,
      "AdmissionMaxEntries": 10000,
      "ListPageSizeDefault": 50,
      "ListPageSizeMax": 100,
      "ObservationPageSizeDefault": 1000,
      "ObservationPageSizeMax": 5000,
      "WidgetDataPageSizeDefault": 1000,
      "WidgetDataPageSizeMax": 5000,
      "RawMaxRangeHours": 744,
      "AggregateMaxRangeHours": 8760,
      "MaxInstrumentsPerQuery": 50,
      "MaxVariablesPerQuery": 200,
      "MaxAggregateBuckets": 5000,
      "RequestBodyMaxBytes": 1048576,
      "ResponseMaxBytes": 10485760,
      "QueryTimeoutSeconds": 30,
      "MaxQueryCost": 1000000
    }
  }
}
