{
  "components": {
    "schemas": {
      "APIKey": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "expires_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "key_prefix": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "owner_email": {
            "type": "string"
          },
          "owner_name": {
            "type": "string"
          },
          "revoked": {
            "type": "boolean"
          },
          "role_id": {
            "type": "string"
          },
          "workspace_id": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "key_prefix",
          "role_id",
          "name",
          "revoked",
          "created_at"
        ],
        "type": "object"
      },
      "APIKeyWithSecret": {
        "allOf": [
          {
            "properties": {
              "created_at": {
                "format": "date-time",
                "type": "string"
              },
              "expires_at": {
                "format": "date-time",
                "type": "string"
              },
              "id": {
                "type": "string"
              },
              "key_prefix": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "owner_email": {
                "type": "string"
              },
              "owner_name": {
                "type": "string"
              },
              "revoked": {
                "type": "boolean"
              },
              "role_id": {
                "type": "string"
              },
              "workspace_id": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "key_prefix",
              "role_id",
              "name",
              "revoked",
              "created_at"
            ],
            "type": "object"
          }
        ],
        "properties": {
          "key": {
            "description": "Full API key - only returned on creation",
            "type": "string"
          }
        },
        "type": "object"
      },
      "AuditEvent": {
        "properties": {
          "action": {
            "type": "string"
          },
          "auth_method": {
            "type": "string"
          },
          "credential_id": {
            "description": "Stable non-secret API-key ID, including key-backed browser sessions; absent for historical events without attribution.",
            "type": "string"
          },
          "duration_ms": {
            "format": "int64",
            "type": "integer"
          },
          "id": {
            "type": "string"
          },
          "method": {
            "type": "string"
          },
          "operation": {
            "type": "string"
          },
          "path": {
            "type": "string"
          },
          "principal": {
            "type": "string"
          },
          "protocol": {
            "type": "string"
          },
          "request_id": {
            "type": "string"
          },
          "security_event": {
            "type": "boolean"
          },
          "status": {
            "type": "integer"
          },
          "timestamp": {
            "format": "date-time",
            "type": "string"
          },
          "workspace": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "timestamp",
          "action",
          "method",
          "path",
          "status",
          "duration_ms",
          "security_event"
        ],
        "type": "object"
      },
      "AuditList": {
        "properties": {
          "events": {
            "items": {
              "$ref": "#/components/schemas/AuditEvent"
            },
            "type": "array"
          },
          "next_cursor": {
            "type": "string"
          }
        },
        "required": [
          "events"
        ],
        "type": "object"
      },
      "AuthConsoleConfig": {
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "method": {
            "type": "string"
          },
          "oidc": {
            "properties": {
              "client_id": {
                "type": "string"
              },
              "enabled": {
                "type": "boolean"
              },
              "group_claims": {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              "issuer": {
                "type": "string"
              },
              "redirect_uri": {
                "type": "string"
              },
              "scopes": {
                "items": {
                  "type": "string"
                },
                "type": "array"
              }
            },
            "required": [
              "enabled",
              "issuer",
              "client_id",
              "scopes",
              "redirect_uri"
            ],
            "type": "object"
          },
          "password_login": {
            "type": "boolean"
          },
          "token_login": {
            "type": "boolean"
          }
        },
        "required": [
          "enabled",
          "method",
          "password_login",
          "token_login",
          "oidc"
        ],
        "type": "object"
      },
      "AuthMe": {
        "properties": {
          "api_key_id": {
            "type": "string"
          },
          "auth_method": {
            "type": "string"
          },
          "authenticated": {
            "type": "boolean"
          },
          "capabilities": {
            "properties": {
              "manage_global_cache": {
                "type": "boolean"
              },
              "manage_global_roles": {
                "type": "boolean"
              },
              "manage_roles": {
                "type": "boolean"
              },
              "manage_sessions": {
                "type": "boolean"
              },
              "manage_tile_matrix_sets": {
                "type": "boolean"
              },
              "manage_workspace": {
                "type": "boolean"
              },
              "manage_workspaces": {
                "type": "boolean"
              },
              "read_audit": {
                "type": "boolean"
              },
              "read_catalog_integrity": {
                "type": "boolean"
              }
            },
            "type": "object"
          },
          "console_access": {
            "type": "boolean"
          },
          "display_name": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "global_role": {
            "type": "string"
          },
          "presented_claims": {
            "properties": {
              "claims": {
                "additionalProperties": {
                  "oneOf": [
                    {
                      "type": "string"
                    },
                    {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    }
                  ]
                },
                "type": "object"
              },
              "email": {
                "type": "string"
              },
              "iss": {
                "type": "string"
              },
              "sub": {
                "type": "string"
              }
            },
            "type": "object"
          },
          "principal": {
            "type": "string"
          },
          "session": {
            "properties": {
              "expires_at": {
                "format": "date-time",
                "type": "string"
              },
              "idle_expires_at": {
                "format": "date-time",
                "type": "string"
              }
            },
            "type": "object"
          },
          "session_expires_at": {
            "format": "date-time",
            "type": "string"
          },
          "session_id": {
            "type": "string"
          },
          "session_idle_expires_at": {
            "format": "date-time",
            "type": "string"
          },
          "subject": {
            "type": "string"
          },
          "super_admin": {
            "type": "boolean"
          },
          "workspaces": {
            "items": {
              "$ref": "#/components/schemas/AuthWorkspace"
            },
            "type": "array"
          }
        },
        "required": [
          "authenticated",
          "principal",
          "auth_method",
          "super_admin",
          "console_access",
          "workspaces",
          "capabilities"
        ],
        "type": "object"
      },
      "AuthSession": {
        "properties": {
          "expires_at": {
            "format": "date-time",
            "type": "string"
          },
          "idle_expires_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "type": "object"
      },
      "AuthWorkspace": {
        "properties": {
          "console_access": {
            "type": "boolean"
          },
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "role": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "role",
          "console_access"
        ],
        "type": "object"
      },
      "BrowserSession": {
        "properties": {
          "auth_method": {
            "type": "string"
          },
          "console_access": {
            "type": "boolean"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "display_name": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "expires_at": {
            "format": "date-time",
            "type": "string"
          },
          "global_role": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "idle_expires_at": {
            "format": "date-time",
            "type": "string"
          },
          "last_seen_at": {
            "format": "date-time",
            "type": "string"
          },
          "presented_claims": {
            "properties": {
              "claims": {
                "additionalProperties": {
                  "oneOf": [
                    {
                      "type": "string"
                    },
                    {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    }
                  ]
                },
                "type": "object"
              },
              "email": {
                "type": "string"
              },
              "iss": {
                "type": "string"
              },
              "sub": {
                "type": "string"
              }
            },
            "type": "object"
          },
          "remote_addr": {
            "type": "string"
          },
          "revoked_at": {
            "format": "date-time",
            "type": "string"
          },
          "roles": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object"
          },
          "subject": {
            "type": "string"
          },
          "user_agent": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "subject",
          "auth_method",
          "created_at",
          "last_seen_at",
          "idle_expires_at",
          "expires_at",
          "console_access"
        ],
        "type": "object"
      },
      "BrowserSessionList": {
        "properties": {
          "sessions": {
            "items": {
              "$ref": "#/components/schemas/BrowserSession"
            },
            "type": "array"
          }
        },
        "required": [
          "sessions"
        ],
        "type": "object"
      },
      "CacheMetrics": {
        "properties": {
          "bytes_evicted": {
            "format": "int64",
            "type": "integer"
          },
          "capacity_utilization": {
            "type": "number"
          },
          "entry_count": {
            "format": "int64",
            "type": "integer"
          },
          "gets_dropped": {
            "format": "int64",
            "type": "integer"
          },
          "gets_kept": {
            "format": "int64",
            "type": "integer"
          },
          "hit_rate": {
            "type": "number"
          },
          "hits": {
            "format": "int64",
            "type": "integer"
          },
          "invalidation_keys": {
            "format": "int64",
            "type": "integer"
          },
          "keys_evicted": {
            "format": "int64",
            "type": "integer"
          },
          "load_errors": {
            "format": "int64",
            "type": "integer"
          },
          "loads_shared": {
            "format": "int64",
            "type": "integer"
          },
          "max_size_bytes": {
            "format": "int64",
            "type": "integer"
          },
          "misses": {
            "format": "int64",
            "type": "integer"
          },
          "oversized_skipped": {
            "format": "int64",
            "type": "integer"
          },
          "remaining_bytes": {
            "format": "int64",
            "type": "integer"
          },
          "sets_dropped": {
            "format": "int64",
            "type": "integer"
          },
          "sets_rejected": {
            "format": "int64",
            "type": "integer"
          },
          "size_bytes": {
            "format": "int64",
            "type": "integer"
          },
          "ttl_expired": {
            "format": "int64",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "CacheStats": {
        "properties": {
          "capabilities": {
            "properties": {
              "bytes_evicted": {
                "format": "int64",
                "type": "integer"
              },
              "capacity_utilization": {
                "type": "number"
              },
              "entry_count": {
                "format": "int64",
                "type": "integer"
              },
              "gets_dropped": {
                "format": "int64",
                "type": "integer"
              },
              "gets_kept": {
                "format": "int64",
                "type": "integer"
              },
              "hit_rate": {
                "type": "number"
              },
              "hits": {
                "format": "int64",
                "type": "integer"
              },
              "invalidation_keys": {
                "format": "int64",
                "type": "integer"
              },
              "keys_evicted": {
                "format": "int64",
                "type": "integer"
              },
              "load_errors": {
                "format": "int64",
                "type": "integer"
              },
              "loads_shared": {
                "format": "int64",
                "type": "integer"
              },
              "max_size_bytes": {
                "format": "int64",
                "type": "integer"
              },
              "misses": {
                "format": "int64",
                "type": "integer"
              },
              "oversized_skipped": {
                "format": "int64",
                "type": "integer"
              },
              "remaining_bytes": {
                "format": "int64",
                "type": "integer"
              },
              "sets_dropped": {
                "format": "int64",
                "type": "integer"
              },
              "sets_rejected": {
                "format": "int64",
                "type": "integer"
              },
              "size_bytes": {
                "format": "int64",
                "type": "integer"
              },
              "ttl_expired": {
                "format": "int64",
                "type": "integer"
              }
            },
            "type": "object"
          },
          "collections": {
            "properties": {
              "bytes_evicted": {
                "format": "int64",
                "type": "integer"
              },
              "capacity_utilization": {
                "type": "number"
              },
              "entry_count": {
                "format": "int64",
                "type": "integer"
              },
              "gets_dropped": {
                "format": "int64",
                "type": "integer"
              },
              "gets_kept": {
                "format": "int64",
                "type": "integer"
              },
              "hit_rate": {
                "type": "number"
              },
              "hits": {
                "format": "int64",
                "type": "integer"
              },
              "invalidation_keys": {
                "format": "int64",
                "type": "integer"
              },
              "keys_evicted": {
                "format": "int64",
                "type": "integer"
              },
              "load_errors": {
                "format": "int64",
                "type": "integer"
              },
              "loads_shared": {
                "format": "int64",
                "type": "integer"
              },
              "max_size_bytes": {
                "format": "int64",
                "type": "integer"
              },
              "misses": {
                "format": "int64",
                "type": "integer"
              },
              "oversized_skipped": {
                "format": "int64",
                "type": "integer"
              },
              "remaining_bytes": {
                "format": "int64",
                "type": "integer"
              },
              "sets_dropped": {
                "format": "int64",
                "type": "integer"
              },
              "sets_rejected": {
                "format": "int64",
                "type": "integer"
              },
              "size_bytes": {
                "format": "int64",
                "type": "integer"
              },
              "ttl_expired": {
                "format": "int64",
                "type": "integer"
              }
            },
            "type": "object"
          },
          "counts": {
            "properties": {
              "bytes_evicted": {
                "format": "int64",
                "type": "integer"
              },
              "capacity_utilization": {
                "type": "number"
              },
              "entry_count": {
                "format": "int64",
                "type": "integer"
              },
              "gets_dropped": {
                "format": "int64",
                "type": "integer"
              },
              "gets_kept": {
                "format": "int64",
                "type": "integer"
              },
              "hit_rate": {
                "type": "number"
              },
              "hits": {
                "format": "int64",
                "type": "integer"
              },
              "invalidation_keys": {
                "format": "int64",
                "type": "integer"
              },
              "keys_evicted": {
                "format": "int64",
                "type": "integer"
              },
              "load_errors": {
                "format": "int64",
                "type": "integer"
              },
              "loads_shared": {
                "format": "int64",
                "type": "integer"
              },
              "max_size_bytes": {
                "format": "int64",
                "type": "integer"
              },
              "misses": {
                "format": "int64",
                "type": "integer"
              },
              "oversized_skipped": {
                "format": "int64",
                "type": "integer"
              },
              "remaining_bytes": {
                "format": "int64",
                "type": "integer"
              },
              "sets_dropped": {
                "format": "int64",
                "type": "integer"
              },
              "sets_rejected": {
                "format": "int64",
                "type": "integer"
              },
              "size_bytes": {
                "format": "int64",
                "type": "integer"
              },
              "ttl_expired": {
                "format": "int64",
                "type": "integer"
              }
            },
            "type": "object"
          },
          "enabled": {
            "type": "boolean"
          },
          "features": {
            "properties": {
              "bytes_evicted": {
                "format": "int64",
                "type": "integer"
              },
              "capacity_utilization": {
                "type": "number"
              },
              "entry_count": {
                "format": "int64",
                "type": "integer"
              },
              "gets_dropped": {
                "format": "int64",
                "type": "integer"
              },
              "gets_kept": {
                "format": "int64",
                "type": "integer"
              },
              "hit_rate": {
                "type": "number"
              },
              "hits": {
                "format": "int64",
                "type": "integer"
              },
              "invalidation_keys": {
                "format": "int64",
                "type": "integer"
              },
              "keys_evicted": {
                "format": "int64",
                "type": "integer"
              },
              "load_errors": {
                "format": "int64",
                "type": "integer"
              },
              "loads_shared": {
                "format": "int64",
                "type": "integer"
              },
              "max_size_bytes": {
                "format": "int64",
                "type": "integer"
              },
              "misses": {
                "format": "int64",
                "type": "integer"
              },
              "oversized_skipped": {
                "format": "int64",
                "type": "integer"
              },
              "remaining_bytes": {
                "format": "int64",
                "type": "integer"
              },
              "sets_dropped": {
                "format": "int64",
                "type": "integer"
              },
              "sets_rejected": {
                "format": "int64",
                "type": "integer"
              },
              "size_bytes": {
                "format": "int64",
                "type": "integer"
              },
              "ttl_expired": {
                "format": "int64",
                "type": "integer"
              }
            },
            "type": "object"
          },
          "profile": {
            "type": "string"
          },
          "tiles": {
            "properties": {
              "bytes_evicted": {
                "format": "int64",
                "type": "integer"
              },
              "capacity_utilization": {
                "type": "number"
              },
              "entry_count": {
                "format": "int64",
                "type": "integer"
              },
              "gets_dropped": {
                "format": "int64",
                "type": "integer"
              },
              "gets_kept": {
                "format": "int64",
                "type": "integer"
              },
              "hit_rate": {
                "type": "number"
              },
              "hits": {
                "format": "int64",
                "type": "integer"
              },
              "invalidation_keys": {
                "format": "int64",
                "type": "integer"
              },
              "keys_evicted": {
                "format": "int64",
                "type": "integer"
              },
              "load_errors": {
                "format": "int64",
                "type": "integer"
              },
              "loads_shared": {
                "format": "int64",
                "type": "integer"
              },
              "max_size_bytes": {
                "format": "int64",
                "type": "integer"
              },
              "misses": {
                "format": "int64",
                "type": "integer"
              },
              "oversized_skipped": {
                "format": "int64",
                "type": "integer"
              },
              "remaining_bytes": {
                "format": "int64",
                "type": "integer"
              },
              "sets_dropped": {
                "format": "int64",
                "type": "integer"
              },
              "sets_rejected": {
                "format": "int64",
                "type": "integer"
              },
              "size_bytes": {
                "format": "int64",
                "type": "integer"
              },
              "ttl_expired": {
                "format": "int64",
                "type": "integer"
              }
            },
            "type": "object"
          },
          "total_invalidation_keys": {
            "format": "int64",
            "type": "integer"
          },
          "total_max_size_bytes": {
            "format": "int64",
            "type": "integer"
          },
          "total_size_bytes": {
            "format": "int64",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "ClaimMapping": {
        "properties": {
          "claim_name": {
            "type": "string"
          },
          "claim_value": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "priority": {
            "type": "integer"
          },
          "role_id": {
            "type": "string"
          },
          "workspace_id": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "workspace_id",
          "claim_name",
          "claim_value",
          "role_id",
          "priority",
          "created_at"
        ],
        "type": "object"
      },
      "ConnectionInfo": {
        "properties": {
          "connection_string": {
            "type": "string"
          },
          "database": {
            "type": "string"
          },
          "glob": {
            "type": "string"
          },
          "host": {
            "type": "string"
          },
          "layer": {
            "type": "string"
          },
          "layer_srids": {
            "additionalProperties": {
              "minimum": 1,
              "type": "integer"
            },
            "type": "object"
          },
          "password": {
            "type": "string"
          },
          "path": {
            "type": "string"
          },
          "port": {
            "type": "integer"
          },
          "schema": {
            "type": "string"
          },
          "srid": {
            "minimum": 1,
            "type": "integer"
          },
          "sslmode": {
            "type": "string"
          },
          "table": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "user": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "ConnectionTest": {
        "properties": {
          "duration_ms": {
            "type": "number"
          },
          "message": {
            "type": "string"
          },
          "ok": {
            "type": "boolean"
          }
        },
        "required": [
          "ok",
          "duration_ms"
        ],
        "type": "object"
      },
      "ConsoleConfig": {
        "properties": {
          "allowed_paths": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "auth": {
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "method": {
                "type": "string"
              },
              "oidc": {
                "properties": {
                  "client_id": {
                    "type": "string"
                  },
                  "enabled": {
                    "type": "boolean"
                  },
                  "group_claims": {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "issuer": {
                    "type": "string"
                  },
                  "redirect_uri": {
                    "type": "string"
                  },
                  "scopes": {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "enabled",
                  "issuer",
                  "client_id",
                  "scopes",
                  "redirect_uri"
                ],
                "type": "object"
              },
              "password_login": {
                "type": "boolean"
              },
              "token_login": {
                "type": "boolean"
              }
            },
            "required": [
              "enabled",
              "method",
              "password_login",
              "token_login",
              "oidc"
            ],
            "type": "object"
          },
          "base_path": {
            "type": "string"
          },
          "basemap_url": {
            "type": "string"
          },
          "commit": {
            "type": "string"
          },
          "features": {
            "properties": {
              "audit": {
                "type": "boolean"
              },
              "imports": {
                "type": "boolean"
              },
              "mosaic": {
                "type": "boolean"
              },
              "persistent_tile_cache": {
                "type": "boolean"
              },
              "pprof": {
                "type": "boolean"
              }
            },
            "type": "object"
          },
          "limits": {
            "properties": {
              "features": {
                "format": "int64",
                "type": "integer"
              },
              "layers": {
                "type": "integer"
              },
              "page_size": {
                "type": "integer"
              },
              "source_bytes": {
                "format": "int64",
                "type": "integer"
              },
              "upload_bytes": {
                "format": "int64",
                "type": "integer"
              }
            },
            "type": "object"
          },
          "server_started_at": {
            "format": "date-time",
            "type": "string"
          },
          "services": {
            "properties": {
              "ogcapi": {
                "type": "boolean"
              },
              "tiles": {
                "type": "boolean"
              },
              "wcs": {
                "type": "boolean"
              },
              "wfs": {
                "type": "boolean"
              },
              "wms": {
                "type": "boolean"
              },
              "wmts": {
                "type": "boolean"
              }
            },
            "type": "object"
          },
          "title": {
            "type": "string"
          },
          "url_base": {
            "type": "string"
          },
          "version": {
            "type": "string"
          }
        },
        "required": [
          "version",
          "base_path",
          "auth",
          "services",
          "features"
        ],
        "type": "object"
      },
      "Coverage": {
        "properties": {
          "allowed_roles": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "default_style": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "id": {
            "type": "string"
          },
          "native_extent": {
            "properties": {
              "max_x": {
                "type": "number"
              },
              "max_y": {
                "type": "number"
              },
              "min_x": {
                "type": "number"
              },
              "min_y": {
                "type": "number"
              },
              "srid": {
                "type": "integer"
              },
              "stale": {
                "type": "boolean"
              }
            },
            "required": [
              "min_x",
              "min_y",
              "max_x",
              "max_y",
              "srid"
            ],
            "type": "object"
          },
          "public": {
            "type": "boolean"
          },
          "public_id": {
            "type": "string"
          },
          "range_fields": {
            "items": {
              "properties": {
                "band": {
                  "type": "integer"
                },
                "definition": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "nil_values": {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "uom": {
                  "type": "string"
                }
              },
              "required": [
                "band",
                "name"
              ],
              "type": "object"
            },
            "type": "array"
          },
          "resampling": {
            "enum": [
              "nearest",
              "bilinear",
              "cubic"
            ],
            "type": "string"
          },
          "service_id": {
            "type": "string"
          },
          "source_coverage": {
            "type": "string"
          },
          "styles": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "tile_cache_generation": {
            "format": "int64",
            "type": "integer"
          },
          "tile_cache_quota_bytes": {
            "format": "int64",
            "type": "integer"
          },
          "title": {
            "type": "string"
          },
          "wcs20_coverage_subtype": {
            "enum": [
              "RectifiedGridCoverage",
              "GridCoverage"
            ],
            "type": "string"
          }
        },
        "required": [
          "id",
          "service_id",
          "source_coverage",
          "public_id",
          "enabled",
          "public"
        ],
        "type": "object"
      },
      "CoverageCreate": {
        "properties": {
          "allowed_roles": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "default_style": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "public": {
            "type": "boolean"
          },
          "public_id": {
            "type": "string"
          },
          "range_fields": {
            "items": {
              "properties": {
                "band": {
                  "type": "integer"
                },
                "definition": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "nil_values": {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "uom": {
                  "type": "string"
                }
              },
              "required": [
                "band",
                "name"
              ],
              "type": "object"
            },
            "type": "array"
          },
          "resampling": {
            "enum": [
              "nearest",
              "bilinear",
              "cubic"
            ],
            "type": "string"
          },
          "source_coverage": {
            "type": "string"
          },
          "styles": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "tile_cache_quota_bytes": {
            "format": "int64",
            "type": "integer"
          },
          "title": {
            "type": "string"
          },
          "wcs20_coverage_subtype": {
            "enum": [
              "RectifiedGridCoverage",
              "GridCoverage"
            ],
            "type": "string"
          }
        },
        "required": [
          "source_coverage",
          "public_id"
        ],
        "type": "object"
      },
      "CoverageDiscoveryList": {
        "properties": {
          "coverages": {
            "items": {
              "$ref": "#/components/schemas/DiscoveredCoverage"
            },
            "type": "array"
          }
        },
        "required": [
          "coverages"
        ],
        "type": "object"
      },
      "CoverageInfo": {
        "properties": {
          "axis_labels": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "crs": {
            "type": "string"
          },
          "envelope": {
            "items": {
              "type": "number"
            },
            "type": "array"
          },
          "height": {
            "type": "integer"
          },
          "origin_x": {
            "type": "number"
          },
          "origin_y": {
            "type": "number"
          },
          "resolution_x": {
            "type": "number"
          },
          "resolution_y": {
            "type": "number"
          },
          "srid": {
            "type": "integer"
          },
          "width": {
            "type": "integer"
          }
        },
        "required": [
          "crs",
          "axis_labels",
          "width",
          "height",
          "origin_x",
          "origin_y",
          "resolution_x",
          "resolution_y",
          "envelope"
        ],
        "type": "object"
      },
      "CoverageList": {
        "properties": {
          "coverages": {
            "items": {
              "$ref": "#/components/schemas/Coverage"
            },
            "type": "array"
          }
        },
        "required": [
          "coverages"
        ],
        "type": "object"
      },
      "CoverageRangeField": {
        "properties": {
          "band": {
            "type": "integer"
          },
          "definition": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "nil_values": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "uom": {
            "type": "string"
          }
        },
        "required": [
          "band",
          "name"
        ],
        "type": "object"
      },
      "CoverageUpdate": {
        "properties": {
          "allowed_roles": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "default_style": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "public": {
            "type": "boolean"
          },
          "public_id": {
            "type": "string"
          },
          "range_fields": {
            "items": {
              "properties": {
                "band": {
                  "type": "integer"
                },
                "definition": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "nil_values": {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                },
                "uom": {
                  "type": "string"
                }
              },
              "required": [
                "band",
                "name"
              ],
              "type": "object"
            },
            "type": "array"
          },
          "resampling": {
            "enum": [
              "nearest",
              "bilinear",
              "cubic"
            ],
            "type": "string"
          },
          "styles": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "tile_cache_quota_bytes": {
            "format": "int64",
            "type": "integer"
          },
          "title": {
            "type": "string"
          },
          "wcs20_coverage_subtype": {
            "enum": [
              "RectifiedGridCoverage",
              "GridCoverage"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "CreateImportURI": {
        "properties": {
          "name": {
            "type": "string"
          },
          "source_uri": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "source_uri"
        ],
        "type": "object"
      },
      "DeletionAuxiliary": {
        "properties": {
          "managed_assets": {
            "format": "int64",
            "type": "integer"
          },
          "mosaic_granules": {
            "format": "int64",
            "type": "integer"
          },
          "mosaic_jobs": {
            "format": "int64",
            "type": "integer"
          },
          "mosaic_services": {
            "format": "int64",
            "type": "integer"
          },
          "tile_bytes": {
            "format": "int64",
            "type": "integer"
          },
          "tile_entries": {
            "format": "int64",
            "type": "integer"
          },
          "tile_jobs": {
            "format": "int64",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "DeletionConflict": {
        "properties": {
          "code": {
            "type": "integer"
          },
          "message": {
            "type": "string"
          },
          "plan": {
            "properties": {
              "api_keys": {
                "items": {
                  "$ref": "#/components/schemas/DeletionRef"
                },
                "type": "array"
              },
              "auxiliary": {
                "properties": {
                  "managed_assets": {
                    "format": "int64",
                    "type": "integer"
                  },
                  "mosaic_granules": {
                    "format": "int64",
                    "type": "integer"
                  },
                  "mosaic_jobs": {
                    "format": "int64",
                    "type": "integer"
                  },
                  "mosaic_services": {
                    "format": "int64",
                    "type": "integer"
                  },
                  "tile_bytes": {
                    "format": "int64",
                    "type": "integer"
                  },
                  "tile_entries": {
                    "format": "int64",
                    "type": "integer"
                  },
                  "tile_jobs": {
                    "format": "int64",
                    "type": "integer"
                  }
                },
                "type": "object"
              },
              "blockers": {
                "items": {
                  "$ref": "#/components/schemas/DeletionRef"
                },
                "type": "array"
              },
              "claim_mappings": {
                "items": {
                  "$ref": "#/components/schemas/DeletionRef"
                },
                "type": "array"
              },
              "coverages": {
                "items": {
                  "$ref": "#/components/schemas/DeletionRef"
                },
                "type": "array"
              },
              "layer_groups": {
                "items": {
                  "$ref": "#/components/schemas/DeletionRef"
                },
                "type": "array"
              },
              "layers": {
                "items": {
                  "$ref": "#/components/schemas/DeletionRef"
                },
                "type": "array"
              },
              "policies": {
                "items": {
                  "$ref": "#/components/schemas/DeletionRef"
                },
                "type": "array"
              },
              "scope": {
                "enum": [
                  "workspace",
                  "service"
                ],
                "type": "string"
              },
              "services": {
                "items": {
                  "$ref": "#/components/schemas/DeletionRef"
                },
                "type": "array"
              },
              "stored_queries": {
                "items": {
                  "$ref": "#/components/schemas/DeletionRef"
                },
                "type": "array"
              },
              "style_assets": {
                "items": {
                  "$ref": "#/components/schemas/DeletionRef"
                },
                "type": "array"
              },
              "styles": {
                "items": {
                  "$ref": "#/components/schemas/DeletionRef"
                },
                "type": "array"
              },
              "target": {
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "kind": {
                    "type": "string"
                  },
                  "name": {
                    "type": "string"
                  },
                  "reason": {
                    "type": "string"
                  }
                },
                "required": [
                  "name",
                  "kind"
                ],
                "type": "object"
              },
              "workspace_id": {
                "type": "string"
              }
            },
            "required": [
              "scope",
              "workspace_id",
              "target"
            ],
            "type": "object"
          },
          "recurse_required": {
            "type": "boolean"
          }
        },
        "required": [
          "code",
          "message",
          "recurse_required",
          "plan"
        ],
        "type": "object"
      },
      "DeletionList": {
        "properties": {
          "deletions": {
            "items": {
              "$ref": "#/components/schemas/DeletionOperation"
            },
            "type": "array"
          },
          "next_cursor": {
            "type": "string"
          }
        },
        "required": [
          "deletions"
        ],
        "type": "object"
      },
      "DeletionOperation": {
        "properties": {
          "attempt_count": {
            "type": "integer"
          },
          "completed_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "last_error": {
            "type": "string"
          },
          "phase": {
            "enum": [
              "planned",
              "tombstoned",
              "jobs_quiesced",
              "auxiliary_state_removed",
              "catalog_committed",
              "runtime_cleared",
              "completed"
            ],
            "type": "string"
          },
          "plan": {
            "properties": {
              "api_keys": {
                "items": {
                  "$ref": "#/components/schemas/DeletionRef"
                },
                "type": "array"
              },
              "auxiliary": {
                "properties": {
                  "managed_assets": {
                    "format": "int64",
                    "type": "integer"
                  },
                  "mosaic_granules": {
                    "format": "int64",
                    "type": "integer"
                  },
                  "mosaic_jobs": {
                    "format": "int64",
                    "type": "integer"
                  },
                  "mosaic_services": {
                    "format": "int64",
                    "type": "integer"
                  },
                  "tile_bytes": {
                    "format": "int64",
                    "type": "integer"
                  },
                  "tile_entries": {
                    "format": "int64",
                    "type": "integer"
                  },
                  "tile_jobs": {
                    "format": "int64",
                    "type": "integer"
                  }
                },
                "type": "object"
              },
              "blockers": {
                "items": {
                  "$ref": "#/components/schemas/DeletionRef"
                },
                "type": "array"
              },
              "claim_mappings": {
                "items": {
                  "$ref": "#/components/schemas/DeletionRef"
                },
                "type": "array"
              },
              "coverages": {
                "items": {
                  "$ref": "#/components/schemas/DeletionRef"
                },
                "type": "array"
              },
              "layer_groups": {
                "items": {
                  "$ref": "#/components/schemas/DeletionRef"
                },
                "type": "array"
              },
              "layers": {
                "items": {
                  "$ref": "#/components/schemas/DeletionRef"
                },
                "type": "array"
              },
              "policies": {
                "items": {
                  "$ref": "#/components/schemas/DeletionRef"
                },
                "type": "array"
              },
              "scope": {
                "enum": [
                  "workspace",
                  "service"
                ],
                "type": "string"
              },
              "services": {
                "items": {
                  "$ref": "#/components/schemas/DeletionRef"
                },
                "type": "array"
              },
              "stored_queries": {
                "items": {
                  "$ref": "#/components/schemas/DeletionRef"
                },
                "type": "array"
              },
              "style_assets": {
                "items": {
                  "$ref": "#/components/schemas/DeletionRef"
                },
                "type": "array"
              },
              "styles": {
                "items": {
                  "$ref": "#/components/schemas/DeletionRef"
                },
                "type": "array"
              },
              "target": {
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "kind": {
                    "type": "string"
                  },
                  "name": {
                    "type": "string"
                  },
                  "reason": {
                    "type": "string"
                  }
                },
                "required": [
                  "name",
                  "kind"
                ],
                "type": "object"
              },
              "workspace_id": {
                "type": "string"
              }
            },
            "required": [
              "scope",
              "workspace_id",
              "target"
            ],
            "type": "object"
          },
          "scope": {
            "type": "string"
          },
          "status": {
            "enum": [
              "pending",
              "running",
              "failed",
              "completed"
            ],
            "type": "string"
          },
          "target_id": {
            "type": "string"
          },
          "target_name": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "workspace_id": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "scope",
          "workspace_id",
          "target_id",
          "target_name",
          "status",
          "phase",
          "plan",
          "created_at",
          "updated_at"
        ],
        "type": "object"
      },
      "DeletionPlan": {
        "properties": {
          "api_keys": {
            "items": {
              "$ref": "#/components/schemas/DeletionRef"
            },
            "type": "array"
          },
          "auxiliary": {
            "properties": {
              "managed_assets": {
                "format": "int64",
                "type": "integer"
              },
              "mosaic_granules": {
                "format": "int64",
                "type": "integer"
              },
              "mosaic_jobs": {
                "format": "int64",
                "type": "integer"
              },
              "mosaic_services": {
                "format": "int64",
                "type": "integer"
              },
              "tile_bytes": {
                "format": "int64",
                "type": "integer"
              },
              "tile_entries": {
                "format": "int64",
                "type": "integer"
              },
              "tile_jobs": {
                "format": "int64",
                "type": "integer"
              }
            },
            "type": "object"
          },
          "blockers": {
            "items": {
              "$ref": "#/components/schemas/DeletionRef"
            },
            "type": "array"
          },
          "claim_mappings": {
            "items": {
              "$ref": "#/components/schemas/DeletionRef"
            },
            "type": "array"
          },
          "coverages": {
            "items": {
              "$ref": "#/components/schemas/DeletionRef"
            },
            "type": "array"
          },
          "layer_groups": {
            "items": {
              "$ref": "#/components/schemas/DeletionRef"
            },
            "type": "array"
          },
          "layers": {
            "items": {
              "$ref": "#/components/schemas/DeletionRef"
            },
            "type": "array"
          },
          "policies": {
            "items": {
              "$ref": "#/components/schemas/DeletionRef"
            },
            "type": "array"
          },
          "scope": {
            "enum": [
              "workspace",
              "service"
            ],
            "type": "string"
          },
          "services": {
            "items": {
              "$ref": "#/components/schemas/DeletionRef"
            },
            "type": "array"
          },
          "stored_queries": {
            "items": {
              "$ref": "#/components/schemas/DeletionRef"
            },
            "type": "array"
          },
          "style_assets": {
            "items": {
              "$ref": "#/components/schemas/DeletionRef"
            },
            "type": "array"
          },
          "styles": {
            "items": {
              "$ref": "#/components/schemas/DeletionRef"
            },
            "type": "array"
          },
          "target": {
            "properties": {
              "id": {
                "type": "string"
              },
              "kind": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "reason": {
                "type": "string"
              }
            },
            "required": [
              "name",
              "kind"
            ],
            "type": "object"
          },
          "workspace_id": {
            "type": "string"
          }
        },
        "required": [
          "scope",
          "workspace_id",
          "target"
        ],
        "type": "object"
      },
      "DeletionRef": {
        "properties": {
          "id": {
            "type": "string"
          },
          "kind": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "kind"
        ],
        "type": "object"
      },
      "Dimension": {
        "properties": {
          "current": {
            "type": "boolean"
          },
          "default": {
            "type": "string"
          },
          "end_property": {
            "type": "string"
          },
          "extent": {
            "type": "string"
          },
          "multiple_values": {
            "type": "boolean"
          },
          "name": {
            "type": "string"
          },
          "nearest_value": {
            "type": "boolean"
          },
          "source_axis": {
            "type": "string"
          },
          "source_property": {
            "type": "string"
          },
          "units": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "units",
          "extent"
        ],
        "type": "object"
      },
      "DiscoveredCoverage": {
        "properties": {
          "description": {
            "type": "string"
          },
          "info": {
            "properties": {
              "axis_labels": {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              "crs": {
                "type": "string"
              },
              "envelope": {
                "items": {
                  "type": "number"
                },
                "type": "array"
              },
              "height": {
                "type": "integer"
              },
              "origin_x": {
                "type": "number"
              },
              "origin_y": {
                "type": "number"
              },
              "resolution_x": {
                "type": "number"
              },
              "resolution_y": {
                "type": "number"
              },
              "srid": {
                "type": "integer"
              },
              "width": {
                "type": "integer"
              }
            },
            "required": [
              "crs",
              "axis_labels",
              "width",
              "height",
              "origin_x",
              "origin_y",
              "resolution_x",
              "resolution_y",
              "envelope"
            ],
            "type": "object"
          },
          "source_coverage": {
            "type": "string"
          },
          "title": {
            "type": "string"
          }
        },
        "required": [
          "source_coverage",
          "info"
        ],
        "type": "object"
      },
      "DiscoveredLayer": {
        "properties": {
          "description": {
            "type": "string"
          },
          "geometry_column": {
            "type": "string"
          },
          "geometry_type": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "schema": {
            "type": "string"
          },
          "srid": {
            "type": "integer"
          },
          "title": {
            "type": "string"
          }
        },
        "required": [
          "name"
        ],
        "type": "object"
      },
      "Error": {
        "properties": {
          "code": {
            "type": "integer"
          },
          "detail": {
            "type": "string"
          },
          "message": {
            "type": "string"
          }
        },
        "required": [
          "code",
          "message"
        ],
        "type": "object"
      },
      "GeoJSONFeature": {
        "properties": {
          "geometry": {
            "properties": {
              "type": {
                "type": "string"
              }
            },
            "type": "object"
          },
          "id": {
            "type": "string"
          },
          "properties": {
            "additionalProperties": {
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "number"
                },
                {
                  "type": "boolean"
                },
                {
                  "items": {
                    "type": "string"
                  },
                  "type": "array"
                }
              ]
            },
            "type": "object"
          },
          "type": {
            "enum": [
              "Feature"
            ],
            "type": "string"
          }
        },
        "required": [
          "type",
          "geometry",
          "properties"
        ],
        "type": "object"
      },
      "ImportDiscoveredLayer": {
        "properties": {
          "description": {
            "type": "string"
          },
          "feature_count": {
            "format": "int64",
            "type": "integer"
          },
          "geometry_column": {
            "type": "string"
          },
          "geometry_type": {
            "type": "string"
          },
          "id_column": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "native_extent": {
            "$ref": "#/components/schemas/SpatialExtent"
          },
          "properties": {
            "items": {
              "$ref": "#/components/schemas/ImportProperty"
            },
            "type": "array"
          },
          "srid": {
            "type": "integer"
          },
          "title": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "geometry_column",
          "geometry_type",
          "srid",
          "feature_count"
        ],
        "type": "object"
      },
      "ImportDiscovery": {
        "properties": {
          "layers": {
            "items": {
              "$ref": "#/components/schemas/ImportDiscoveredLayer"
            },
            "type": "array"
          },
          "warnings": {
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "layers"
        ],
        "type": "object"
      },
      "ImportEvent": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "error_message": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "import_id": {
            "type": "string"
          },
          "phase": {
            "type": "string"
          },
          "processed_bytes": {
            "format": "int64",
            "type": "integer"
          },
          "processed_features": {
            "format": "int64",
            "type": "integer"
          },
          "processed_layers": {
            "type": "integer"
          },
          "status": {
            "type": "string"
          },
          "warnings": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "workspace_id": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "import_id",
          "workspace_id",
          "status",
          "phase",
          "created_at"
        ],
        "type": "object"
      },
      "ImportFieldMapping": {
        "properties": {
          "include": {
            "type": "boolean"
          },
          "source": {
            "type": "string"
          },
          "target": {
            "type": "string"
          },
          "type": {
            "type": "string"
          }
        },
        "required": [
          "source",
          "target",
          "include"
        ],
        "type": "object"
      },
      "ImportHistory": {
        "properties": {
          "events": {
            "items": {
              "$ref": "#/components/schemas/ImportEvent"
            },
            "type": "array"
          }
        },
        "required": [
          "events"
        ],
        "type": "object"
      },
      "ImportJob": {
        "properties": {
          "cancel_requested": {
            "type": "boolean"
          },
          "completed_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "type": "string"
          },
          "discovery": {
            "$ref": "#/components/schemas/ImportDiscovery"
          },
          "error_message": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "phase": {
            "enum": [
              "acquire",
              "discover",
              "validate",
              "transform",
              "preview",
              "publish",
              "rollback"
            ],
            "type": "string"
          },
          "plan": {
            "$ref": "#/components/schemas/ImportPlan"
          },
          "processed_bytes": {
            "format": "int64",
            "type": "integer"
          },
          "processed_features": {
            "format": "int64",
            "type": "integer"
          },
          "processed_layers": {
            "type": "integer"
          },
          "retry_count": {
            "type": "integer"
          },
          "rollback_operation_id": {
            "type": "string"
          },
          "service_id": {
            "type": "string"
          },
          "source_filename": {
            "type": "string"
          },
          "source_kind": {
            "type": "string"
          },
          "source_locator": {
            "type": "string"
          },
          "started_at": {
            "format": "date-time",
            "type": "string"
          },
          "status": {
            "enum": [
              "queued",
              "running",
              "awaiting_plan",
              "ready_to_publish",
              "publishing",
              "published",
              "cancelling",
              "cancelled",
              "failed",
              "rolling_back",
              "rolled_back"
            ],
            "type": "string"
          },
          "total_layers": {
            "type": "integer"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "workspace_id": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "workspace_id",
          "name",
          "source_kind",
          "status",
          "phase",
          "created_at",
          "updated_at"
        ],
        "type": "object"
      },
      "ImportLayerPlan": {
        "properties": {
          "allowed_roles": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "description": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "fields": {
            "items": {
              "$ref": "#/components/schemas/ImportFieldMapping"
            },
            "type": "array"
          },
          "geometry_column": {
            "type": "string"
          },
          "id_column": {
            "type": "string"
          },
          "public": {
            "type": "boolean"
          },
          "public_id": {
            "type": "string"
          },
          "source_layer": {
            "type": "string"
          },
          "source_srid": {
            "type": "integer"
          },
          "target_geometry_column": {
            "type": "string"
          },
          "target_srid": {
            "type": "integer"
          },
          "title": {
            "type": "string"
          }
        },
        "required": [
          "source_layer",
          "public_id",
          "enabled",
          "public"
        ],
        "type": "object"
      },
      "ImportList": {
        "properties": {
          "imports": {
            "items": {
              "$ref": "#/components/schemas/ImportJob"
            },
            "type": "array"
          },
          "next_cursor": {
            "type": "string"
          }
        },
        "required": [
          "imports"
        ],
        "type": "object"
      },
      "ImportPlan": {
        "properties": {
          "layers": {
            "items": {
              "$ref": "#/components/schemas/ImportLayerPlan"
            },
            "type": "array"
          },
          "service_name": {
            "type": "string"
          }
        },
        "required": [
          "service_name",
          "layers"
        ],
        "type": "object"
      },
      "ImportPreview": {
        "properties": {
          "features": {
            "items": {
              "$ref": "#/components/schemas/GeoJSONFeature"
            },
            "type": "array"
          },
          "type": {
            "enum": [
              "FeatureCollection"
            ],
            "type": "string"
          }
        },
        "required": [
          "type",
          "features"
        ],
        "type": "object"
      },
      "ImportProperty": {
        "properties": {
          "json_type": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "ordinal": {
            "type": "integer"
          },
          "type": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "type"
        ],
        "type": "object"
      },
      "IntegrityIssue": {
        "properties": {
          "id": {
            "type": "string"
          },
          "kind": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          },
          "store": {
            "type": "string"
          },
          "workspace_id": {
            "type": "string"
          }
        },
        "required": [
          "store",
          "kind",
          "id",
          "reason"
        ],
        "type": "object"
      },
      "IntegrityReport": {
        "properties": {
          "healthy": {
            "type": "boolean"
          },
          "issues": {
            "items": {
              "$ref": "#/components/schemas/IntegrityIssue"
            },
            "type": "array"
          },
          "repaired": {
            "format": "int64",
            "type": "integer"
          }
        },
        "required": [
          "healthy",
          "issues"
        ],
        "type": "object"
      },
      "Layer": {
        "properties": {
          "allowed_roles": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "crs_default": {
            "type": "integer"
          },
          "default_style": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "dimensions": {
            "items": {
              "$ref": "#/components/schemas/Dimension"
            },
            "type": "array"
          },
          "enabled": {
            "type": "boolean"
          },
          "id": {
            "type": "string"
          },
          "is_sql_view": {
            "type": "boolean"
          },
          "native_extent": {
            "properties": {
              "max_x": {
                "type": "number"
              },
              "max_y": {
                "type": "number"
              },
              "min_x": {
                "type": "number"
              },
              "min_y": {
                "type": "number"
              },
              "srid": {
                "type": "integer"
              },
              "stale": {
                "type": "boolean"
              }
            },
            "required": [
              "min_x",
              "min_y",
              "max_x",
              "max_y",
              "srid"
            ],
            "type": "object"
          },
          "public": {
            "type": "boolean"
          },
          "public_id": {
            "type": "string"
          },
          "service_id": {
            "type": "string"
          },
          "source_layer": {
            "type": "string"
          },
          "sql_view_config": {
            "properties": {
              "geometry_column": {
                "type": "string"
              },
              "geometry_type": {
                "type": "string"
              },
              "id_column": {
                "type": "string"
              },
              "properties": {
                "items": {
                  "$ref": "#/components/schemas/SQLViewProperty"
                },
                "type": "array"
              },
              "read_only": {
                "type": "boolean"
              },
              "sql": {
                "type": "string"
              },
              "srid": {
                "type": "integer"
              }
            },
            "required": [
              "sql",
              "geometry_column"
            ],
            "type": "object"
          },
          "styles": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "tile_cache_generation": {
            "format": "int64",
            "type": "integer"
          },
          "tile_cache_quota_bytes": {
            "format": "int64",
            "type": "integer"
          },
          "title": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "id",
          "service_id",
          "source_layer",
          "public_id",
          "enabled",
          "created_at",
          "updated_at"
        ],
        "type": "object"
      },
      "LayerGroup": {
        "properties": {
          "allowed_roles": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "default_style": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "id": {
            "type": "string"
          },
          "members": {
            "items": {
              "$ref": "#/components/schemas/LayerGroupMember"
            },
            "type": "array"
          },
          "native_extent": {
            "properties": {
              "max_x": {
                "type": "number"
              },
              "max_y": {
                "type": "number"
              },
              "min_x": {
                "type": "number"
              },
              "min_y": {
                "type": "number"
              },
              "srid": {
                "type": "integer"
              },
              "stale": {
                "type": "boolean"
              }
            },
            "required": [
              "min_x",
              "min_y",
              "max_x",
              "max_y",
              "srid"
            ],
            "type": "object"
          },
          "public": {
            "type": "boolean"
          },
          "public_id": {
            "type": "string"
          },
          "styles": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "tile_cache_generation": {
            "format": "int64",
            "type": "integer"
          },
          "tile_cache_quota_bytes": {
            "format": "int64",
            "type": "integer"
          },
          "title": {
            "type": "string"
          },
          "workspace_id": {
            "type": "string"
          }
        },
        "required": [
          "public_id",
          "members"
        ],
        "type": "object"
      },
      "LayerGroupMember": {
        "properties": {
          "composite": {
            "enum": [
              "source-over",
              "multiply",
              "screen",
              "overlay",
              "darken",
              "lighten"
            ],
            "type": "string"
          },
          "opacity": {
            "type": "number"
          },
          "resource": {
            "type": "string"
          },
          "style": {
            "type": "string"
          }
        },
        "required": [
          "resource"
        ],
        "type": "object"
      },
      "LoginRequest": {
        "properties": {
          "id_token": {
            "type": "string"
          },
          "method": {
            "enum": [
              "password",
              "token",
              "oidc"
            ],
            "type": "string"
          },
          "password": {
            "type": "string"
          },
          "token": {
            "type": "string"
          },
          "username": {
            "type": "string"
          }
        },
        "required": [
          "method"
        ],
        "type": "object"
      },
      "MosaicGranule": {
        "properties": {
          "band_count": {
            "type": "integer"
          },
          "bbox": {
            "items": {
              "type": "number"
            },
            "maxItems": 4,
            "minItems": 4,
            "type": "array"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "crs": {
            "type": "string"
          },
          "data_type": {
            "type": "string"
          },
          "elevation": {
            "type": "number"
          },
          "footprint": {
            "$ref": "#/components/schemas/GeoJSONFeature"
          },
          "generation": {
            "format": "int64",
            "type": "integer"
          },
          "height": {
            "type": "integer"
          },
          "id": {
            "type": "string"
          },
          "modified_at": {
            "format": "date-time",
            "type": "string"
          },
          "priority": {
            "type": "integer"
          },
          "resolution_x": {
            "type": "number"
          },
          "resolution_y": {
            "type": "number"
          },
          "service_id": {
            "type": "string"
          },
          "size_bytes": {
            "format": "int64",
            "type": "integer"
          },
          "source_uri": {
            "type": "string"
          },
          "srid": {
            "type": "integer"
          },
          "time": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "width": {
            "type": "integer"
          },
          "workspace_id": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "workspace_id",
          "service_id",
          "generation",
          "source_uri",
          "crs",
          "bbox",
          "width",
          "height",
          "band_count",
          "data_type"
        ],
        "type": "object"
      },
      "MosaicHarvestGranule": {
        "properties": {
          "elevation": {
            "type": "number"
          },
          "path": {
            "type": "string"
          },
          "priority": {
            "type": "integer"
          },
          "time": {
            "type": "string"
          }
        },
        "required": [
          "path"
        ],
        "type": "object"
      },
      "MosaicHarvestJob": {
        "properties": {
          "cancel_requested": {
            "type": "boolean"
          },
          "completed_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "type": "string"
          },
          "error_message": {
            "type": "string"
          },
          "failed_granules": {
            "format": "int64",
            "type": "integer"
          },
          "generation": {
            "format": "int64",
            "type": "integer"
          },
          "id": {
            "type": "string"
          },
          "processed_granules": {
            "format": "int64",
            "type": "integer"
          },
          "request": {
            "properties": {
              "directory": {
                "type": "string"
              },
              "granules": {
                "items": {
                  "$ref": "#/components/schemas/MosaicHarvestGranule"
                },
                "type": "array"
              },
              "mode": {
                "enum": [
                  "append",
                  "synchronize"
                ],
                "type": "string"
              },
              "pattern": {
                "type": "string"
              }
            },
            "type": "object"
          },
          "service_id": {
            "type": "string"
          },
          "started_at": {
            "format": "date-time",
            "type": "string"
          },
          "status": {
            "enum": [
              "queued",
              "running",
              "cancelling",
              "cancelled",
              "succeeded",
              "failed"
            ],
            "type": "string"
          },
          "succeeded_granules": {
            "format": "int64",
            "type": "integer"
          },
          "total_granules": {
            "format": "int64",
            "type": "integer"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "workspace_id": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "workspace_id",
          "service_id",
          "request",
          "status",
          "total_granules",
          "processed_granules",
          "created_at",
          "updated_at"
        ],
        "type": "object"
      },
      "MosaicHarvestRequest": {
        "properties": {
          "directory": {
            "type": "string"
          },
          "granules": {
            "items": {
              "$ref": "#/components/schemas/MosaicHarvestGranule"
            },
            "type": "array"
          },
          "mode": {
            "enum": [
              "append",
              "synchronize"
            ],
            "type": "string"
          },
          "pattern": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "OGCAPISettings": {
        "properties": {
          "abstract": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "limit_default": {
            "type": "integer"
          },
          "limit_max": {
            "type": "integer"
          },
          "max_offset": {
            "type": "integer"
          },
          "public": {
            "type": "boolean"
          },
          "title": {
            "type": "string"
          }
        },
        "required": [
          "enabled"
        ],
        "type": "object"
      },
      "OGCTilesInnerSettings": {
        "properties": {
          "cache_enabled": {
            "type": "boolean"
          },
          "dataset_map_layer_group_id": {
            "description": "Existing layer group UUID for the workspace map. Empty clears the selection; omission preserves it.",
            "type": "string"
          },
          "map_tiles": {
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "formats": {
                "items": {
                  "type": "string"
                },
                "type": "array"
              }
            },
            "required": [
              "enabled"
            ],
            "type": "object"
          },
          "max_features": {
            "type": "integer"
          },
          "max_tile_bytes": {
            "type": "integer"
          },
          "max_vertices": {
            "type": "integer"
          },
          "persistent_cache_quota_bytes": {
            "format": "int64",
            "type": "integer"
          },
          "tile_matrix_sets": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "vector_tiles": {
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "formats": {
                "items": {
                  "type": "string"
                },
                "type": "array"
              }
            },
            "required": [
              "enabled"
            ],
            "type": "object"
          }
        },
        "required": [
          "vector_tiles",
          "map_tiles",
          "cache_enabled"
        ],
        "type": "object"
      },
      "OGCTilesMapSettings": {
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "formats": {
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "enabled"
        ],
        "type": "object"
      },
      "OGCTilesSettings": {
        "properties": {
          "abstract": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "public": {
            "type": "boolean"
          },
          "settings": {
            "properties": {
              "cache_enabled": {
                "type": "boolean"
              },
              "dataset_map_layer_group_id": {
                "description": "Existing layer group UUID for the workspace map. Empty clears the selection; omission preserves it.",
                "type": "string"
              },
              "map_tiles": {
                "properties": {
                  "enabled": {
                    "type": "boolean"
                  },
                  "formats": {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "enabled"
                ],
                "type": "object"
              },
              "max_features": {
                "type": "integer"
              },
              "max_tile_bytes": {
                "type": "integer"
              },
              "max_vertices": {
                "type": "integer"
              },
              "persistent_cache_quota_bytes": {
                "format": "int64",
                "type": "integer"
              },
              "tile_matrix_sets": {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              "vector_tiles": {
                "properties": {
                  "enabled": {
                    "type": "boolean"
                  },
                  "formats": {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  }
                },
                "required": [
                  "enabled"
                ],
                "type": "object"
              }
            },
            "required": [
              "vector_tiles",
              "map_tiles",
              "cache_enabled"
            ],
            "type": "object"
          },
          "title": {
            "type": "string"
          },
          "versions": {
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "enabled",
          "settings"
        ],
        "type": "object"
      },
      "OGCTilesVectorSettings": {
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "formats": {
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "enabled"
        ],
        "type": "object"
      },
      "OIDCConsoleConfig": {
        "properties": {
          "client_id": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "group_claims": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "issuer": {
            "type": "string"
          },
          "redirect_uri": {
            "type": "string"
          },
          "scopes": {
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "enabled",
          "issuer",
          "client_id",
          "scopes",
          "redirect_uri"
        ],
        "type": "object"
      },
      "Role": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "is_system": {
            "type": "boolean"
          },
          "name": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "is_system",
          "created_at"
        ],
        "type": "object"
      },
      "RolePolicy": {
        "properties": {
          "action": {
            "type": "string"
          },
          "operation": {
            "description": "A supported operation, or * / empty for all operations with the selected action. WFS stored-query administration requires manage; transactions and locks require write.",
            "type": "string"
          },
          "service": {
            "type": "string"
          },
          "workspace": {
            "description": "Existing workspace UUID or name (stored as UUID), or * for all workspaces. Removal uses the exact stored scope.",
            "type": "string"
          }
        },
        "required": [
          "workspace",
          "service",
          "action"
        ],
        "type": "object",
        "x-service-operations": {
          "ogc-tiles": {
            "GET": "read",
            "GETTILE": "read",
            "HEAD": "read",
            "LISTCOLLECTIONS": "read"
          },
          "ogcapi": {
            "GET": "read",
            "GETFEATURES": "read",
            "GETITEM": "read",
            "HEAD": "read",
            "LISTCOLLECTIONS": "read"
          },
          "wcs": {
            "DESCRIBECOVERAGE": "read",
            "GETCAPABILITIES": "read",
            "GETCOVERAGE": "read"
          },
          "wfs": {
            "CREATESTOREDQUERY": "manage",
            "DESCRIBEFEATURETYPE": "read",
            "DESCRIBESTOREDQUERIES": "read",
            "DROPSTOREDQUERY": "manage",
            "GETCAPABILITIES": "read",
            "GETFEATURE": "read",
            "GETFEATUREWITHLOCK": "write",
            "GETPROPERTYVALUE": "read",
            "LISTSTOREDQUERIES": "read",
            "LOCKFEATURE": "write",
            "TRANSACTION": "write"
          },
          "wms": {
            "DESCRIBELAYER": "read",
            "GETCAPABILITIES": "read",
            "GETFEATUREINFO": "read",
            "GETLEGENDGRAPHIC": "read",
            "GETMAP": "read"
          },
          "wmts": {
            "GETCAPABILITIES": "read",
            "GETFEATUREINFO": "read",
            "GETTILE": "read"
          }
        }
      },
      "RolePolicyList": {
        "properties": {
          "policies": {
            "items": {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            "type": "array"
          }
        },
        "required": [
          "policies"
        ],
        "type": "object"
      },
      "SQLView": {
        "properties": {
          "geometry_column": {
            "type": "string"
          },
          "geometry_type": {
            "type": "string"
          },
          "id_column": {
            "type": "string"
          },
          "properties": {
            "items": {
              "$ref": "#/components/schemas/SQLViewProperty"
            },
            "type": "array"
          },
          "read_only": {
            "type": "boolean"
          },
          "sql": {
            "type": "string"
          },
          "srid": {
            "type": "integer"
          }
        },
        "required": [
          "sql",
          "geometry_column"
        ],
        "type": "object"
      },
      "SQLViewColumn": {
        "properties": {
          "name": {
            "type": "string"
          },
          "type": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "type"
        ],
        "type": "object"
      },
      "SQLViewDiscovery": {
        "properties": {
          "columns": {
            "items": {
              "$ref": "#/components/schemas/SQLViewColumn"
            },
            "type": "array"
          },
          "geometry_column": {
            "type": "string"
          },
          "geometry_type": {
            "type": "string"
          },
          "srid": {
            "type": "integer"
          },
          "suggested_id_column": {
            "type": "string"
          }
        },
        "required": [
          "columns",
          "geometry_column",
          "geometry_type",
          "srid"
        ],
        "type": "object"
      },
      "SQLViewProperty": {
        "properties": {
          "name": {
            "type": "string"
          },
          "type": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "type"
        ],
        "type": "object"
      },
      "Service": {
        "properties": {
          "cache_settings": {
            "properties": {
              "features_enabled": {
                "type": "boolean"
              },
              "features_ttl_sec": {
                "type": "integer"
              },
              "tiles_enabled": {
                "type": "boolean"
              },
              "tiles_ttl_sec": {
                "type": "integer"
              }
            },
            "type": "object"
          },
          "connection_info": {
            "$ref": "#/components/schemas/ConnectionInfo"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "type": {
            "enum": [
              "postgis",
              "duckdb",
              "geoparquet",
              "vectorfile",
              "rasterfile",
              "raster_mosaic"
            ],
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "workspace_id": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "workspace_id",
          "name",
          "type",
          "enabled",
          "created_at",
          "updated_at"
        ],
        "type": "object"
      },
      "ServiceCacheSettings": {
        "properties": {
          "features_enabled": {
            "type": "boolean"
          },
          "features_ttl_sec": {
            "type": "integer"
          },
          "tiles_enabled": {
            "type": "boolean"
          },
          "tiles_ttl_sec": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "ServiceConnectionInput": {
        "properties": {
          "cache_settings": {
            "properties": {
              "features_enabled": {
                "type": "boolean"
              },
              "features_ttl_sec": {
                "type": "integer"
              },
              "tiles_enabled": {
                "type": "boolean"
              },
              "tiles_ttl_sec": {
                "type": "integer"
              }
            },
            "type": "object"
          },
          "connection_info": {
            "$ref": "#/components/schemas/ConnectionInfo"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "type": {
            "enum": [
              "postgis",
              "duckdb",
              "geoparquet",
              "vectorfile",
              "rasterfile",
              "raster_mosaic"
            ],
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "workspace_id": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "workspace_id",
          "name",
          "type",
          "enabled",
          "created_at",
          "updated_at"
        ],
        "type": "object"
      },
      "SpatialExtent": {
        "properties": {
          "max_x": {
            "type": "number"
          },
          "max_y": {
            "type": "number"
          },
          "min_x": {
            "type": "number"
          },
          "min_y": {
            "type": "number"
          },
          "srid": {
            "type": "integer"
          },
          "stale": {
            "type": "boolean"
          }
        },
        "required": [
          "min_x",
          "min_y",
          "max_x",
          "max_y",
          "srid"
        ],
        "type": "object"
      },
      "Style": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "diagnostics": {
            "items": {
              "properties": {
                "code": {
                  "type": "string"
                },
                "column": {
                  "type": "integer"
                },
                "line": {
                  "type": "integer"
                },
                "message": {
                  "type": "string"
                },
                "path": {
                  "type": "string"
                },
                "severity": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "format": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "valid": {
            "type": "boolean"
          },
          "validation_errors": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "workspace_id": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "workspace_id",
          "name",
          "format",
          "created_at",
          "updated_at"
        ],
        "type": "object"
      },
      "StyleAsset": {
        "properties": {
          "content_type": {
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "sha256": {
            "type": "string"
          },
          "size_bytes": {
            "format": "int64",
            "type": "integer"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "workspace_id": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "workspace_id",
          "name",
          "content_type",
          "size_bytes",
          "sha256"
        ],
        "type": "object"
      },
      "StyleWithBody": {
        "allOf": [
          {
            "properties": {
              "created_at": {
                "format": "date-time",
                "type": "string"
              },
              "description": {
                "type": "string"
              },
              "diagnostics": {
                "items": {
                  "properties": {
                    "code": {
                      "type": "string"
                    },
                    "column": {
                      "type": "integer"
                    },
                    "line": {
                      "type": "integer"
                    },
                    "message": {
                      "type": "string"
                    },
                    "path": {
                      "type": "string"
                    },
                    "severity": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "type": "array"
              },
              "format": {
                "type": "string"
              },
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "title": {
                "type": "string"
              },
              "updated_at": {
                "format": "date-time",
                "type": "string"
              },
              "valid": {
                "type": "boolean"
              },
              "validation_errors": {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              "workspace_id": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "workspace_id",
              "name",
              "format",
              "created_at",
              "updated_at"
            ],
            "type": "object"
          }
        ],
        "properties": {
          "body": {
            "description": "Authored style body",
            "type": "string"
          },
          "sld_body": {
            "description": "Deprecated SLD/SE compatibility alias for body",
            "type": "string"
          }
        },
        "required": [
          "body"
        ],
        "type": "object"
      },
      "TileCacheBounds": {
        "properties": {
          "bbox": {
            "items": {
              "type": "number"
            },
            "maxItems": 4,
            "minItems": 4,
            "type": "array"
          },
          "crs": {
            "type": "string"
          }
        },
        "required": [
          "bbox",
          "crs"
        ],
        "type": "object"
      },
      "TileCacheJob": {
        "properties": {
          "bytes_deleted": {
            "format": "int64",
            "type": "integer"
          },
          "bytes_written": {
            "format": "int64",
            "type": "integer"
          },
          "cancel_requested": {
            "type": "boolean"
          },
          "completed_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "created_by": {
            "type": "string"
          },
          "error_message": {
            "type": "string"
          },
          "failed_tiles": {
            "format": "int64",
            "type": "integer"
          },
          "id": {
            "type": "string"
          },
          "processed_tiles": {
            "format": "int64",
            "type": "integer"
          },
          "request": {
            "properties": {
              "all_resources": {
                "type": "boolean"
              },
              "bounds": {
                "properties": {
                  "bbox": {
                    "items": {
                      "type": "number"
                    },
                    "maxItems": 4,
                    "minItems": 4,
                    "type": "array"
                  },
                  "crs": {
                    "type": "string"
                  }
                },
                "required": [
                  "bbox",
                  "crs"
                ],
                "type": "object"
              },
              "format": {
                "type": "string"
              },
              "max_zoom": {
                "type": "integer"
              },
              "min_zoom": {
                "type": "integer"
              },
              "operation": {
                "enum": [
                  "seed",
                  "reseed",
                  "truncate"
                ],
                "type": "string"
              },
              "resource": {
                "type": "string"
              },
              "style": {
                "type": "string"
              },
              "tile_matrix_set": {
                "type": "string"
              },
              "tile_type": {
                "enum": [
                  "map",
                  "vector"
                ],
                "type": "string"
              }
            },
            "required": [
              "operation"
            ],
            "type": "object"
          },
          "skipped_tiles": {
            "format": "int64",
            "type": "integer"
          },
          "started_at": {
            "format": "date-time",
            "type": "string"
          },
          "status": {
            "enum": [
              "queued",
              "running",
              "cancelling",
              "cancelled",
              "succeeded",
              "failed"
            ],
            "type": "string"
          },
          "succeeded_tiles": {
            "format": "int64",
            "type": "integer"
          },
          "total_tiles": {
            "format": "int64",
            "type": "integer"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          },
          "workspace_id": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "workspace_id",
          "request",
          "status",
          "total_tiles",
          "processed_tiles",
          "created_at",
          "updated_at"
        ],
        "type": "object"
      },
      "TileCacheJobRequest": {
        "properties": {
          "all_resources": {
            "type": "boolean"
          },
          "bounds": {
            "properties": {
              "bbox": {
                "items": {
                  "type": "number"
                },
                "maxItems": 4,
                "minItems": 4,
                "type": "array"
              },
              "crs": {
                "type": "string"
              }
            },
            "required": [
              "bbox",
              "crs"
            ],
            "type": "object"
          },
          "format": {
            "type": "string"
          },
          "max_zoom": {
            "type": "integer"
          },
          "min_zoom": {
            "type": "integer"
          },
          "operation": {
            "enum": [
              "seed",
              "reseed",
              "truncate"
            ],
            "type": "string"
          },
          "resource": {
            "type": "string"
          },
          "style": {
            "type": "string"
          },
          "tile_matrix_set": {
            "type": "string"
          },
          "tile_type": {
            "enum": [
              "map",
              "vector"
            ],
            "type": "string"
          }
        },
        "required": [
          "operation"
        ],
        "type": "object"
      },
      "TileCacheStats": {
        "properties": {
          "backend": {
            "type": "string"
          },
          "bytes_evicted": {
            "format": "int64",
            "type": "integer"
          },
          "enabled": {
            "type": "boolean"
          },
          "evictions": {
            "format": "int64",
            "type": "integer"
          },
          "global": {
            "properties": {
              "entry_count": {
                "format": "int64",
                "type": "integer"
              },
              "quota_bytes": {
                "format": "int64",
                "type": "integer"
              },
              "remaining_bytes": {
                "format": "int64",
                "type": "integer"
              },
              "size_bytes": {
                "format": "int64",
                "type": "integer"
              },
              "utilization": {
                "type": "number"
              }
            },
            "type": "object"
          },
          "hits": {
            "format": "int64",
            "type": "integer"
          },
          "misses": {
            "format": "int64",
            "type": "integer"
          },
          "orphans_repaired": {
            "format": "int64",
            "type": "integer"
          },
          "oversized_skipped": {
            "format": "int64",
            "type": "integer"
          },
          "resource": {
            "properties": {
              "entry_count": {
                "format": "int64",
                "type": "integer"
              },
              "quota_bytes": {
                "format": "int64",
                "type": "integer"
              },
              "remaining_bytes": {
                "format": "int64",
                "type": "integer"
              },
              "size_bytes": {
                "format": "int64",
                "type": "integer"
              },
              "utilization": {
                "type": "number"
              }
            },
            "type": "object"
          },
          "workspace": {
            "properties": {
              "entry_count": {
                "format": "int64",
                "type": "integer"
              },
              "quota_bytes": {
                "format": "int64",
                "type": "integer"
              },
              "remaining_bytes": {
                "format": "int64",
                "type": "integer"
              },
              "size_bytes": {
                "format": "int64",
                "type": "integer"
              },
              "utilization": {
                "type": "number"
              }
            },
            "type": "object"
          },
          "write_errors": {
            "format": "int64",
            "type": "integer"
          },
          "writes": {
            "format": "int64",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "TileCacheUsage": {
        "properties": {
          "entry_count": {
            "format": "int64",
            "type": "integer"
          },
          "quota_bytes": {
            "format": "int64",
            "type": "integer"
          },
          "remaining_bytes": {
            "format": "int64",
            "type": "integer"
          },
          "size_bytes": {
            "format": "int64",
            "type": "integer"
          },
          "utilization": {
            "type": "number"
          }
        },
        "type": "object"
      },
      "TileJobProgress": {
        "properties": {
          "job_id": {
            "type": "string"
          },
          "zooms": {
            "items": {
              "$ref": "#/components/schemas/TileZoomProgress"
            },
            "type": "array"
          }
        },
        "required": [
          "job_id",
          "zooms"
        ],
        "type": "object"
      },
      "TileMatrix": {
        "properties": {
          "cellSize": {
            "type": "number"
          },
          "cornerOfOrigin": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "matrixHeight": {
            "type": "integer"
          },
          "matrixWidth": {
            "type": "integer"
          },
          "pointOfOrigin": {
            "items": {
              "type": "number"
            },
            "type": "array"
          },
          "scaleDenominator": {
            "type": "number"
          },
          "tileHeight": {
            "type": "integer"
          },
          "tileWidth": {
            "type": "integer"
          }
        },
        "required": [
          "id",
          "scaleDenominator",
          "cellSize",
          "pointOfOrigin",
          "tileWidth",
          "tileHeight",
          "matrixWidth",
          "matrixHeight"
        ],
        "type": "object"
      },
      "TileMatrixBoundingBox": {
        "properties": {
          "crs": {
            "type": "string"
          },
          "lowerCorner": {
            "items": {
              "type": "number"
            },
            "type": "array"
          },
          "upperCorner": {
            "items": {
              "type": "number"
            },
            "type": "array"
          }
        },
        "required": [
          "lowerCorner",
          "upperCorner"
        ],
        "type": "object"
      },
      "TileMatrixSet": {
        "properties": {
          "boundingBox": {
            "$ref": "#/components/schemas/TileMatrixBoundingBox"
          },
          "crs": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "orderedAxes": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "tileMatrices": {
            "items": {
              "$ref": "#/components/schemas/TileMatrix"
            },
            "type": "array"
          },
          "title": {
            "type": "string"
          },
          "uri": {
            "type": "string"
          },
          "wellKnownScaleSet": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "crs",
          "tileMatrices"
        ],
        "type": "object"
      },
      "TileMatrixSetDefinition": {
        "properties": {
          "boundingBox": {
            "$ref": "#/components/schemas/TileMatrixBoundingBox"
          },
          "crs": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "orderedAxes": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "tileMatrices": {
            "items": {
              "$ref": "#/components/schemas/TileMatrix"
            },
            "type": "array"
          },
          "title": {
            "type": "string"
          },
          "uri": {
            "type": "string"
          },
          "wellKnownScaleSet": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "crs",
          "tileMatrices"
        ],
        "type": "object"
      },
      "TileMatrixSetDefinitions": {
        "properties": {
          "tile_matrix_sets": {
            "items": {
              "$ref": "#/components/schemas/TileMatrixSet"
            },
            "type": "array"
          }
        },
        "required": [
          "tile_matrix_sets"
        ],
        "type": "object"
      },
      "TileMatrixSetList": {
        "properties": {
          "tile_matrix_sets": {
            "items": {
              "$ref": "#/components/schemas/TileMatrixSetSummary"
            },
            "type": "array"
          }
        },
        "required": [
          "tile_matrix_sets"
        ],
        "type": "object"
      },
      "TileMatrixSetRecord": {
        "properties": {
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "definition": {
            "$ref": "#/components/schemas/TileMatrixSetDefinition"
          },
          "digest": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "revision": {
            "format": "int64",
            "type": "integer"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "id",
          "definition",
          "revision",
          "digest",
          "created_at",
          "updated_at"
        ],
        "type": "object"
      },
      "TileMatrixSetSummary": {
        "properties": {
          "built_in": {
            "type": "boolean"
          },
          "crs": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "uri": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "built_in"
        ],
        "type": "object"
      },
      "TileZoomProgress": {
        "properties": {
          "failed_chunks": {
            "format": "int64",
            "type": "integer"
          },
          "processed_tiles": {
            "format": "int64",
            "type": "integer"
          },
          "total_tiles": {
            "format": "int64",
            "type": "integer"
          },
          "zoom": {
            "type": "integer"
          }
        },
        "required": [
          "zoom",
          "total_tiles",
          "processed_tiles",
          "failed_chunks"
        ],
        "type": "object"
      },
      "ValidateSQLResponse": {
        "properties": {
          "discovered": {
            "properties": {
              "columns": {
                "items": {
                  "$ref": "#/components/schemas/SQLViewColumn"
                },
                "type": "array"
              },
              "geometry_column": {
                "type": "string"
              },
              "geometry_type": {
                "type": "string"
              },
              "srid": {
                "type": "integer"
              },
              "suggested_id_column": {
                "type": "string"
              }
            },
            "required": [
              "columns",
              "geometry_column",
              "geometry_type",
              "srid"
            ],
            "type": "object"
          },
          "error": {
            "type": "string"
          },
          "valid": {
            "type": "boolean"
          }
        },
        "required": [
          "valid"
        ],
        "type": "object"
      },
      "WCSSettings": {
        "properties": {
          "abstract": {
            "type": "string"
          },
          "allowed_output_crs": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "allowed_subsetting_crs": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "enabled": {
            "type": "boolean"
          },
          "extensions": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "interpolation_methods": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "max_axis_values": {
            "format": "int64",
            "type": "integer"
          },
          "max_cells": {
            "format": "int64",
            "type": "integer"
          },
          "max_dimensions": {
            "type": "integer"
          },
          "max_output_bytes": {
            "format": "int64",
            "type": "integer"
          },
          "max_source_granules": {
            "type": "integer"
          },
          "max_temporary_bytes": {
            "format": "int64",
            "type": "integer"
          },
          "output_formats": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "processing_timeout_ms": {
            "type": "integer"
          },
          "public": {
            "type": "boolean"
          },
          "title": {
            "type": "string"
          }
        },
        "required": [
          "enabled",
          "public"
        ],
        "type": "object"
      },
      "WFSSettings": {
        "properties": {
          "abstract": {
            "type": "string"
          },
          "count_timeout_ms": {
            "type": "integer"
          },
          "default_count": {
            "type": "integer"
          },
          "enabled": {
            "type": "boolean"
          },
          "max_features": {
            "type": "integer"
          },
          "max_offset": {
            "type": "integer"
          },
          "public": {
            "type": "boolean"
          },
          "title": {
            "type": "string"
          }
        },
        "required": [
          "enabled"
        ],
        "type": "object"
      },
      "WMSSettings": {
        "properties": {
          "abstract": {
            "type": "string"
          },
          "default_style": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "extensions": {
            "items": {
              "enum": [
                "dynamic-raster",
                "advanced-labels",
                "rendering-transformations",
                "compositing",
                "z-order",
                "dynamic-style",
                "remote-graphics"
              ],
              "type": "string"
            },
            "type": "array"
          },
          "max_height": {
            "type": "integer"
          },
          "max_pixels": {
            "type": "integer"
          },
          "max_render_features": {
            "type": "integer"
          },
          "max_render_vertices": {
            "type": "integer"
          },
          "max_width": {
            "type": "integer"
          },
          "public": {
            "type": "boolean"
          },
          "simplify_enabled": {
            "type": "boolean"
          },
          "simplify_pixel_tolerance": {
            "type": "number"
          },
          "title": {
            "type": "string"
          }
        },
        "required": [
          "enabled"
        ],
        "type": "object"
      },
      "WMTSSettings": {
        "properties": {
          "abstract": {
            "type": "string"
          },
          "contact_email": {
            "format": "email",
            "type": "string"
          },
          "contact_name": {
            "type": "string"
          },
          "contact_position": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          },
          "feature_info_enabled": {
            "type": "boolean"
          },
          "provider_name": {
            "type": "string"
          },
          "provider_site": {
            "format": "uri",
            "type": "string"
          },
          "public": {
            "type": "boolean"
          },
          "tile_matrix_limits_enabled": {
            "default": false,
            "description": "Advertise and enforce tile bounds from published resource extents.",
            "type": "boolean"
          },
          "title": {
            "type": "string"
          },
          "vector_tiles_enabled": {
            "type": "boolean"
          }
        },
        "required": [
          "enabled",
          "public",
          "feature_info_enabled"
        ],
        "type": "object"
      },
      "Workspace": {
        "properties": {
          "counts": {
            "$ref": "#/components/schemas/WorkspaceCounts"
          },
          "created_at": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "updated_at": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "created_at",
          "updated_at"
        ],
        "type": "object"
      },
      "WorkspaceCounts": {
        "properties": {
          "api_keys": {
            "format": "int64",
            "type": "integer"
          },
          "coverages": {
            "format": "int64",
            "type": "integer"
          },
          "imports": {
            "format": "int64",
            "type": "integer"
          },
          "layers": {
            "format": "int64",
            "type": "integer"
          },
          "services": {
            "format": "int64",
            "type": "integer"
          },
          "styles": {
            "format": "int64",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "WorkspaceSummary": {
        "properties": {
          "active_jobs": {
            "properties": {
              "imports": {
                "type": "integer"
              },
              "tile_cache": {
                "type": "integer"
              }
            },
            "type": "object"
          },
          "counts": {
            "properties": {
              "api_keys": {
                "format": "int64",
                "type": "integer"
              },
              "coverages": {
                "format": "int64",
                "type": "integer"
              },
              "imports": {
                "format": "int64",
                "type": "integer"
              },
              "layers": {
                "format": "int64",
                "type": "integer"
              },
              "services": {
                "format": "int64",
                "type": "integer"
              },
              "styles": {
                "format": "int64",
                "type": "integer"
              }
            },
            "type": "object"
          },
          "protocols": {
            "properties": {
              "ogc_tiles": {
                "type": "boolean"
              },
              "ogcapi": {
                "type": "boolean"
              },
              "wcs": {
                "type": "boolean"
              },
              "wfs": {
                "type": "boolean"
              },
              "wms": {
                "type": "boolean"
              },
              "wmts": {
                "type": "boolean"
              }
            },
            "type": "object"
          },
          "workspace_id": {
            "type": "string"
          }
        },
        "required": [
          "workspace_id",
          "counts",
          "protocols",
          "active_jobs"
        ],
        "type": "object"
      }
    },
    "securitySchemes": {
      "apiKey": {
        "description": "API key for authentication",
        "in": "header",
        "name": "X-API-Key",
        "type": "apiKey"
      },
      "bearerAuth": {
        "bearerFormat": "JWT",
        "description": "JWT access token",
        "scheme": "bearer",
        "type": "http"
      }
    }
  },
  "info": {
    "description": "REST API for managing workspaces, services, layers, API keys, roles, and OIDC claim mappings.",
    "title": "neoserver Management API",
    "version": "0.1.2"
  },
  "openapi": "3.0.3",
  "paths": {
    "/audit": {
      "get": {
        "operationId": "listAuditEvents",
        "parameters": [
          {
            "description": "Opaque next_cursor from the preceding page; newest first, stable timestamp and ID ordering",
            "in": "query",
            "name": "cursor",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Case-insensitive substring search across retained event attribution, operation, path and status",
            "in": "query",
            "name": "q",
            "schema": {
              "maxLength": 512,
              "type": "string"
            }
          },
          {
            "description": "Exact recorded workspace scope",
            "in": "query",
            "name": "workspace",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Exact recorded principal",
            "in": "query",
            "name": "principal",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Stable non-secret API-key ID; never the key secret",
            "in": "query",
            "name": "credential_id",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Only events at or after this time",
            "in": "query",
            "name": "since",
            "schema": {
              "format": "date-time",
              "type": "string"
            }
          },
          {
            "description": "failed: status 400 or higher; succeeded: below 400",
            "in": "query",
            "name": "outcome",
            "schema": {
              "enum": [
                "failed",
                "succeeded"
              ],
              "type": "string"
            }
          },
          {
            "description": "Maximum events; defaults to 100",
            "in": "query",
            "name": "limit",
            "schema": {
              "maximum": 1000,
              "minimum": 1,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuditList"
                }
              }
            },
            "description": "Audit events"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "List durable audit events",
        "tags": [
          "Audit"
        ]
      }
    },
    "/audit/retention": {
      "post": {
        "operationId": "runAuditRetention",
        "responses": {
          "204": {
            "description": "Retention complete"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Run audit retention",
        "tags": [
          "Audit"
        ]
      }
    },
    "/auth/login": {
      "post": {
        "operationId": "login",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LoginRequest"
              }
            }
          },
          "description": "Browser login method",
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthMe"
                }
              }
            },
            "description": "Authenticated identity"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication failed"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Login method disabled"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "security": [],
        "summary": "Create a browser session",
        "tags": [
          "Authentication"
        ]
      }
    },
    "/auth/logout": {
      "post": {
        "operationId": "logout",
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Revoke the current browser session",
        "tags": [
          "Authentication"
        ]
      }
    },
    "/auth/me": {
      "get": {
        "operationId": "getAuthMe",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthMe"
                }
              }
            },
            "description": "Current identity"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Get current identity and console capabilities",
        "tags": [
          "Authentication"
        ]
      }
    },
    "/auth/refresh": {
      "post": {
        "operationId": "refreshSession",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthMe"
                }
              }
            },
            "description": "Refreshed identity"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Rotate the current browser session",
        "tags": [
          "Authentication"
        ]
      }
    },
    "/auth/sessions": {
      "get": {
        "operationId": "listBrowserSessions",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BrowserSessionList"
                }
              }
            },
            "description": "Browser sessions"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "List browser sessions",
        "tags": [
          "Authentication"
        ]
      }
    },
    "/auth/sessions/{session}": {
      "delete": {
        "operationId": "revokeBrowserSession",
        "parameters": [
          {
            "in": "path",
            "name": "session",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Session not found"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Revoke a browser session",
        "tags": [
          "Authentication"
        ]
      }
    },
    "/cache/clear": {
      "post": {
        "description": "Clears all cache types (capabilities, collections, features, counts, tiles). Requires super_admin role.",
        "operationId": "clearAllCaches",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Cache cleared successfully"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Caching not enabled"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden - requires super_admin role"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Clear all caches",
        "tags": [
          "Cache"
        ]
      }
    },
    "/cache/clear/{cacheType}": {
      "post": {
        "description": "Clears a specific cache type. Valid types: capabilities, collections, features, counts, tiles. Requires super_admin role.",
        "operationId": "clearCacheByType",
        "parameters": [
          {
            "description": "Cache type to clear",
            "in": "path",
            "name": "cacheType",
            "required": true,
            "schema": {
              "enum": [
                "capabilities",
                "collections",
                "features",
                "counts",
                "tiles"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "message": {
                      "type": "string"
                    },
                    "type": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Cache cleared successfully"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Invalid cache type or caching not enabled"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden - requires super_admin role"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Clear specific cache type",
        "tags": [
          "Cache"
        ]
      }
    },
    "/cache/stats": {
      "get": {
        "description": "Returns statistics for all cache types including hit rates and memory usage. Requires super_admin role.",
        "operationId": "getCacheStats",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CacheStats"
                }
              }
            },
            "description": "Cache statistics"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden - requires super_admin role"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Get cache statistics",
        "tags": [
          "Cache"
        ]
      }
    },
    "/catalog/integrity": {
      "get": {
        "operationId": "getCatalogIntegrity",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IntegrityReport"
                }
              }
            },
            "description": "Catalog integrity report"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Super administrator required"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Audit catalog ownership integrity",
        "tags": [
          "Catalog Lifecycle"
        ]
      }
    },
    "/catalog/integrity/repair": {
      "post": {
        "operationId": "repairCatalogIntegrity",
        "parameters": [
          {
            "description": "Must be true to authorize removal of confirmed orphan state.",
            "in": "query",
            "name": "confirm",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IntegrityReport"
                }
              }
            },
            "description": "Post-repair integrity report"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Explicit confirmation required"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Super administrator required"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Repair orphaned state from older releases",
        "tags": [
          "Catalog Lifecycle"
        ]
      }
    },
    "/claim-mappings": {
      "get": {
        "description": "Returns all global OIDC/JWT claim mappings. Requires super_admin role.",
        "operationId": "listGlobalClaimMappings",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "claim_mappings": {
                      "items": {
                        "$ref": "#/components/schemas/ClaimMapping"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "List of global claim mappings"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden - requires super_admin role"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "List global claim mappings",
        "tags": [
          "Claim Mappings"
        ]
      },
      "post": {
        "description": "Creates a global mapping from an OIDC/JWT claim to a role. Requires super_admin role.",
        "operationId": "createGlobalClaimMapping",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "claim_name": {
                    "type": "string"
                  },
                  "claim_value": {
                    "type": "string"
                  },
                  "priority": {
                    "type": "integer"
                  },
                  "role_id": {
                    "type": "string"
                  }
                },
                "required": [
                  "claim_name",
                  "claim_value",
                  "role_id"
                ],
                "type": "object"
              }
            }
          },
          "description": "Claim mapping to create",
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClaimMapping"
                }
              }
            },
            "description": "Created claim mapping"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden - requires super_admin role"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Create global claim mapping",
        "tags": [
          "Claim Mappings"
        ]
      }
    },
    "/claim-mappings/{mappingId}": {
      "delete": {
        "description": "Deletes a global claim mapping. Requires super_admin role.",
        "operationId": "deleteGlobalClaimMapping",
        "parameters": [
          {
            "description": "Claim Mapping ID",
            "in": "path",
            "name": "mappingId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden - requires super_admin role"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Claim mapping not found"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Delete global claim mapping",
        "tags": [
          "Claim Mappings"
        ]
      }
    },
    "/console/config": {
      "get": {
        "operationId": "getConsoleConfig",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConsoleConfig"
                }
              }
            },
            "description": "Non-secret console configuration"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "security": [],
        "summary": "Get browser console configuration",
        "tags": [
          "Authentication"
        ]
      }
    },
    "/deletions": {
      "get": {
        "operationId": "listDeletionOperations",
        "parameters": [
          {
            "description": "Workspace UUID (not name); applies to deleted workspaces too. Requires administrator access.",
            "in": "query",
            "name": "workspace",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Optional status; actionable includes pending, running and failed",
            "in": "query",
            "name": "status",
            "schema": {
              "enum": [
                "pending",
                "running",
                "failed",
                "completed",
                "actionable"
              ],
              "type": "string"
            }
          },
          {
            "description": "Page size, default 200; authorization is applied before pagination",
            "in": "query",
            "name": "limit",
            "schema": {
              "maximum": 1000,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Opaque next_cursor; restart pagination when scope or filters change",
            "in": "query",
            "name": "cursor",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeletionList"
                }
              }
            },
            "description": "Deletion operations"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Invalid filter or cursor"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Workspace administrator required"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "List visible deletion operations",
        "tags": [
          "Catalog Lifecycle"
        ]
      }
    },
    "/deletions/{operation}": {
      "get": {
        "operationId": "getDeletionOperation",
        "parameters": [
          {
            "in": "path",
            "name": "operation",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeletionOperation"
                }
              }
            },
            "description": "Deletion operation"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Deletion operation not found"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Get deletion operation",
        "tags": [
          "Catalog Lifecycle"
        ]
      }
    },
    "/deletions/{operation}/retry": {
      "post": {
        "operationId": "retryDeletionOperation",
        "parameters": [
          {
            "in": "path",
            "name": "operation",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeletionOperation"
                }
              }
            },
            "description": "Deletion retry accepted"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Deletion operation not found"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Retry deletion operation",
        "tags": [
          "Catalog Lifecycle"
        ]
      }
    },
    "/roles": {
      "get": {
        "description": "Returns all roles. Requires super_admin role.",
        "operationId": "listRoles",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "roles": {
                      "items": {
                        "$ref": "#/components/schemas/Role"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "List of roles"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden - requires super_admin role"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "List roles",
        "tags": [
          "Roles"
        ]
      },
      "post": {
        "description": "Creates a custom role. Requires super_admin role.",
        "operationId": "createRole",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "description": {
                    "type": "string"
                  },
                  "id": {
                    "type": "string"
                  },
                  "name": {
                    "type": "string"
                  }
                },
                "required": [
                  "id"
                ],
                "type": "object"
              }
            }
          },
          "description": "Role to create",
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Role"
                }
              }
            },
            "description": "Created role"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden - requires super_admin role"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Role ID already exists or has been retired"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Create role",
        "tags": [
          "Roles"
        ]
      }
    },
    "/roles/{roleId}": {
      "delete": {
        "description": "Deletes an unassigned custom role and its policies atomically. Remove credential and publication assignments first. System roles cannot be deleted. Requires super_admin role.",
        "operationId": "deleteRole",
        "parameters": [
          {
            "description": "Role ID",
            "in": "path",
            "name": "roleId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Cannot delete system role"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden - requires super_admin role"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Role not found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Role still has assignments; inspect its deletion plan"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Delete role",
        "tags": [
          "Roles"
        ]
      }
    },
    "/roles/{roleId}/deletion-plan": {
      "get": {
        "operationId": "getRoleDeletionPlan",
        "parameters": [
          {
            "description": "Role ID",
            "in": "path",
            "name": "roleId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "dependencies": {
                      "additionalProperties": {
                        "type": "integer"
                      },
                      "type": "object"
                    },
                    "is_system": {
                      "type": "boolean"
                    },
                    "role_id": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "role_id",
                    "is_system",
                    "dependencies"
                  ],
                  "type": "object"
                }
              }
            },
            "description": "Role dependencies"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Role not found"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Dependency inspection unavailable"
          }
        },
        "summary": "Inspect role deletion dependencies",
        "tags": [
          "Roles"
        ]
      }
    },
    "/roles/{roleId}/policies": {
      "delete": {
        "operationId": "removeRolePolicy",
        "parameters": [
          {
            "in": "path",
            "name": "roleId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RolePolicy"
              }
            }
          },
          "description": "Operation policy",
          "required": true
        },
        "responses": {
          "204": {
            "description": "Removed"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Remove a service or operation grant",
        "tags": [
          "Roles"
        ]
      },
      "get": {
        "operationId": "listRolePolicies",
        "parameters": [
          {
            "in": "path",
            "name": "roleId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RolePolicyList"
                }
              }
            },
            "description": "Role policies"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "List role policies",
        "tags": [
          "Roles"
        ]
      },
      "post": {
        "operationId": "addRolePolicy",
        "parameters": [
          {
            "in": "path",
            "name": "roleId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RolePolicy"
              }
            }
          },
          "description": "Operation policy",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Granted"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Grant a service or operation",
        "tags": [
          "Roles"
        ]
      }
    },
    "/tile-matrix-sets": {
      "get": {
        "operationId": "listTileMatrixSets",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TileMatrixSetList"
                }
              }
            },
            "description": "Tile matrix sets"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "List supported tile matrix sets",
        "tags": [
          "Tile Matrix Sets"
        ]
      }
    },
    "/tile-matrix-sets/{tileMatrixSet}": {
      "delete": {
        "operationId": "deleteTileMatrixSet",
        "parameters": [
          {
            "in": "path",
            "name": "tileMatrixSet",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Deleted"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Delete custom tile matrix set",
        "tags": [
          "Tile Matrix Sets"
        ]
      },
      "get": {
        "operationId": "getTileMatrixSet",
        "parameters": [
          {
            "in": "path",
            "name": "tileMatrixSet",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TileMatrixSetRecord"
                }
              }
            },
            "description": "Tile matrix set"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Get custom tile matrix set record",
        "tags": [
          "Tile Matrix Sets"
        ]
      },
      "put": {
        "operationId": "putTileMatrixSet",
        "parameters": [
          {
            "in": "path",
            "name": "tileMatrixSet",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TileMatrixSetDefinition"
              }
            }
          },
          "description": "OGC TileMatrixSet definition",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TileMatrixSetRecord"
                }
              }
            },
            "description": "Tile matrix set"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Create or replace custom tile matrix set",
        "tags": [
          "Tile Matrix Sets"
        ]
      }
    },
    "/workspaces": {
      "get": {
        "description": "Returns all workspaces. Requires super_admin; non-super-admin discovery uses /auth/me.",
        "operationId": "listWorkspaces",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "workspaces": {
                      "items": {
                        "$ref": "#/components/schemas/Workspace"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "List of workspaces"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "List workspaces",
        "tags": [
          "Workspaces"
        ]
      },
      "post": {
        "description": "Creates a new workspace. Requires super_admin role.",
        "operationId": "createWorkspace",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "description": {
                    "type": "string"
                  },
                  "name": {
                    "type": "string"
                  }
                },
                "required": [
                  "name"
                ],
                "type": "object"
              }
            }
          },
          "description": "Workspace to create",
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Workspace"
                }
              }
            },
            "description": "Created workspace"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden - requires super_admin role"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "A workspace with this name already exists"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Create workspace",
        "tags": [
          "Workspaces"
        ]
      }
    },
    "/workspaces/{workspace}": {
      "delete": {
        "description": "Deletes an empty workspace synchronously. Non-empty workspaces return 409 unless recurse=true, which starts a durable deletion operation. Requires super_admin role.",
        "operationId": "deleteWorkspace",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Recursively remove dependent catalog and operational state using a durable asynchronous operation.",
            "in": "query",
            "name": "recurse",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeletionOperation"
                }
              }
            },
            "description": "Recursive deletion accepted"
          },
          "204": {
            "description": "No Content"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden - requires super_admin role"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Workspace not found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeletionConflict"
                }
              }
            },
            "description": "Workspace has dependencies"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Delete workspace",
        "tags": [
          "Workspaces"
        ]
      },
      "get": {
        "description": "Returns a workspace by ID.",
        "operationId": "getWorkspace",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Workspace"
                }
              }
            },
            "description": "Workspace details"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Workspace not found"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Get workspace",
        "tags": [
          "Workspaces"
        ]
      },
      "put": {
        "description": "Updates a workspace. Requires admin access to the workspace. Omitted or null description leaves it unchanged; an empty string clears it.",
        "operationId": "updateWorkspace",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "description": {
                    "nullable": true,
                    "type": "string"
                  },
                  "name": {
                    "type": "string"
                  }
                },
                "type": "object"
              }
            }
          },
          "description": "Workspace updates",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Workspace"
                }
              }
            },
            "description": "Updated workspace"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Workspace not found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "A workspace with this name already exists"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Update workspace",
        "tags": [
          "Workspaces"
        ]
      }
    },
    "/workspaces/{workspace}/apikeys": {
      "get": {
        "description": "Returns all API keys for a workspace.",
        "operationId": "listAPIKeys",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "api_keys": {
                      "items": {
                        "$ref": "#/components/schemas/APIKey"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "List of API keys"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "List API keys",
        "tags": [
          "API Keys"
        ]
      },
      "post": {
        "description": "Creates a new API key. The full key is only returned once on creation.",
        "operationId": "createAPIKey",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "expires_at": {
                    "format": "date-time",
                    "type": "string"
                  },
                  "name": {
                    "type": "string"
                  },
                  "owner_email": {
                    "type": "string"
                  },
                  "owner_name": {
                    "type": "string"
                  },
                  "role_id": {
                    "enum": [
                      "admin",
                      "editor",
                      "viewer"
                    ],
                    "type": "string"
                  }
                },
                "required": [
                  "name",
                  "role_id"
                ],
                "type": "object"
              }
            }
          },
          "description": "API key to create",
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/APIKeyWithSecret"
                }
              }
            },
            "description": "Created API key with secret"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Create API key",
        "tags": [
          "API Keys"
        ]
      }
    },
    "/workspaces/{workspace}/apikeys/{keyId}": {
      "delete": {
        "description": "Revokes an API key, making it unusable.",
        "operationId": "revokeAPIKey",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "API Key ID",
            "in": "path",
            "name": "keyId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "API key not found"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Revoke API key",
        "tags": [
          "API Keys"
        ]
      },
      "get": {
        "description": "Returns API key metadata (without the secret).",
        "operationId": "getAPIKey",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "API Key ID",
            "in": "path",
            "name": "keyId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/APIKey"
                }
              }
            },
            "description": "API key details"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "API key not found"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Get API key",
        "tags": [
          "API Keys"
        ]
      }
    },
    "/workspaces/{workspace}/apikeys/{keyId}/permanent": {
      "delete": {
        "description": "Permanently removes a revoked API key and the browser sessions created from it. The key no longer appears in listings. Active keys must be revoked first.",
        "operationId": "deleteAPIKey",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "API Key ID",
            "in": "path",
            "name": "keyId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "API key not found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "API key is not revoked"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Delete revoked API key",
        "tags": [
          "API Keys"
        ]
      }
    },
    "/workspaces/{workspace}/cache/clear": {
      "post": {
        "description": "Clears all caches for a specific workspace. Requires workspace admin access.",
        "operationId": "clearWorkspaceCache",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "message": {
                      "type": "string"
                    },
                    "workspace": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Workspace cache cleared successfully"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Caching not enabled"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Workspace not found"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Clear workspace cache",
        "tags": [
          "Cache"
        ]
      }
    },
    "/workspaces/{workspace}/claim-mappings": {
      "get": {
        "description": "Returns all OIDC/JWT claim mappings for a workspace.",
        "operationId": "listClaimMappings",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "claim_mappings": {
                      "items": {
                        "$ref": "#/components/schemas/ClaimMapping"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "List of claim mappings"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "List claim mappings",
        "tags": [
          "Claim Mappings"
        ]
      },
      "post": {
        "description": "Creates a mapping from an OIDC/JWT claim to a role for this workspace.",
        "operationId": "createClaimMapping",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "claim_name": {
                    "description": "JWT claim name (e.g., groups, roles)",
                    "type": "string"
                  },
                  "claim_value": {
                    "description": "Claim value to match",
                    "type": "string"
                  },
                  "priority": {
                    "description": "Priority (higher = checked first)",
                    "type": "integer"
                  },
                  "role_id": {
                    "description": "Role to assign",
                    "type": "string"
                  }
                },
                "required": [
                  "claim_name",
                  "claim_value",
                  "role_id"
                ],
                "type": "object"
              }
            }
          },
          "description": "Claim mapping to create",
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClaimMapping"
                }
              }
            },
            "description": "Created claim mapping"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Create claim mapping",
        "tags": [
          "Claim Mappings"
        ]
      }
    },
    "/workspaces/{workspace}/claim-mappings/{mappingId}": {
      "delete": {
        "description": "Deletes a claim mapping.",
        "operationId": "deleteClaimMapping",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Claim Mapping ID",
            "in": "path",
            "name": "mappingId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Claim mapping not found"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Delete claim mapping",
        "tags": [
          "Claim Mappings"
        ]
      },
      "get": {
        "description": "Returns a claim mapping by ID.",
        "operationId": "getClaimMapping",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Claim Mapping ID",
            "in": "path",
            "name": "mappingId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClaimMapping"
                }
              }
            },
            "description": "Claim mapping details"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Claim mapping not found"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Get claim mapping",
        "tags": [
          "Claim Mappings"
        ]
      }
    },
    "/workspaces/{workspace}/deletion-plan": {
      "get": {
        "operationId": "getWorkspaceDeletionPlan",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeletionPlan"
                }
              }
            },
            "description": "Deletion dependency plan"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Workspace not found"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Inspect workspace deletion dependencies",
        "tags": [
          "Catalog Lifecycle"
        ]
      }
    },
    "/workspaces/{workspace}/imports": {
      "get": {
        "operationId": "listImports",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Page size; defaults to 100",
            "in": "query",
            "name": "limit",
            "schema": {
              "maximum": 1000,
              "minimum": 1,
              "type": "integer"
            }
          },
          {
            "description": "Opaque next_cursor from the preceding page",
            "in": "query",
            "name": "cursor",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Import status, or actionable to exclude terminal history",
            "in": "query",
            "name": "status",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Case-insensitive import name search",
            "in": "query",
            "name": "search",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportList"
                }
              }
            },
            "description": "Import jobs"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "List durable imports",
        "tags": [
          "Imports"
        ]
      },
      "post": {
        "operationId": "createImport",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateImportURI"
              }
            },
            "multipart/form-data": {
              "schema": {
                "properties": {
                  "file": {
                    "format": "binary",
                    "type": "string"
                  },
                  "name": {
                    "type": "string"
                  }
                },
                "required": [
                  "name",
                  "file"
                ],
                "type": "object"
              }
            }
          },
          "description": "URI JSON or uploaded vector dataset",
          "required": true
        },
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportJob"
                }
              }
            },
            "description": "Import accepted"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "408": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Upload idle or total timeout exceeded"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Invalid import"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Create URI or multipart import",
        "tags": [
          "Imports"
        ]
      }
    },
    "/workspaces/{workspace}/imports/{import}": {
      "delete": {
        "operationId": "cancelImport",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "import",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportJob"
                }
              }
            },
            "description": "Cancellation accepted"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Cancel import",
        "tags": [
          "Imports"
        ]
      },
      "get": {
        "operationId": "getImport",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "import",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportJob"
                }
              }
            },
            "description": "Import"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Get import",
        "tags": [
          "Imports"
        ]
      }
    },
    "/workspaces/{workspace}/imports/{import}/history": {
      "get": {
        "operationId": "getImportHistory",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "import",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportHistory"
                }
              }
            },
            "description": "Import history"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "List import transition history",
        "tags": [
          "Imports"
        ]
      }
    },
    "/workspaces/{workspace}/imports/{import}/plan": {
      "put": {
        "operationId": "setImportPlan",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "import",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ImportPlan"
              }
            }
          },
          "description": "Import plan",
          "required": true
        },
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportJob"
                }
              }
            },
            "description": "Plan accepted"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Validate and set import plan",
        "tags": [
          "Imports"
        ]
      }
    },
    "/workspaces/{workspace}/imports/{import}/preview": {
      "get": {
        "operationId": "previewImport",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "import",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportPreview"
                }
              }
            },
            "description": "GeoJSON preview"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Preview planned import features",
        "tags": [
          "Imports"
        ]
      }
    },
    "/workspaces/{workspace}/imports/{import}/publish": {
      "post": {
        "operationId": "publishImport",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "import",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportJob"
                }
              }
            },
            "description": "Operation accepted"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "publishImport",
        "tags": [
          "Imports"
        ]
      }
    },
    "/workspaces/{workspace}/imports/{import}/retry": {
      "post": {
        "operationId": "retryImport",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "import",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportJob"
                }
              }
            },
            "description": "Operation accepted"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "retryImport",
        "tags": [
          "Imports"
        ]
      }
    },
    "/workspaces/{workspace}/imports/{import}/rollback": {
      "post": {
        "operationId": "rollbackImport",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "import",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ImportJob"
                }
              }
            },
            "description": "Operation accepted"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "rollbackImport",
        "tags": [
          "Imports"
        ]
      }
    },
    "/workspaces/{workspace}/layer-groups": {
      "get": {
        "operationId": "listLayerGroups",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "layer_groups": {
                      "items": {
                        "$ref": "#/components/schemas/LayerGroup"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Layer groups"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "List layer groups",
        "tags": [
          "Layer Groups"
        ]
      },
      "post": {
        "operationId": "createLayerGroup",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LayerGroup"
              }
            }
          },
          "description": "Layer group",
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LayerGroup"
                }
              }
            },
            "description": "Created layer group"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Invalid layer group"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Create layer group",
        "tags": [
          "Layer Groups"
        ]
      }
    },
    "/workspaces/{workspace}/layer-groups/{group}": {
      "delete": {
        "operationId": "deleteLayerGroup",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "group",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Deleted"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Group is referenced"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Delete layer group",
        "tags": [
          "Layer Groups"
        ]
      },
      "get": {
        "operationId": "getLayerGroup",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "group",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LayerGroup"
                }
              }
            },
            "description": "Layer group"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Not found"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Get layer group",
        "tags": [
          "Layer Groups"
        ]
      },
      "put": {
        "operationId": "updateLayerGroup",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "group",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LayerGroup"
              }
            }
          },
          "description": "Layer group update",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LayerGroup"
                }
              }
            },
            "description": "Updated layer group"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Invalid layer group"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Update layer group",
        "tags": [
          "Layer Groups"
        ]
      }
    },
    "/workspaces/{workspace}/roles": {
      "get": {
        "operationId": "listWorkspaceRoles",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "roles": {
                      "items": {
                        "$ref": "#/components/schemas/Role"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Workspace roles"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "List roles assignable in a workspace",
        "tags": [
          "Roles"
        ]
      }
    },
    "/workspaces/{workspace}/services": {
      "get": {
        "description": "Returns all services in a workspace.",
        "operationId": "listServices",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "services": {
                      "items": {
                        "$ref": "#/components/schemas/Service"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "List of services"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "List services",
        "tags": [
          "Services"
        ]
      },
      "post": {
        "description": "Creates a new data source service in a workspace.",
        "operationId": "createService",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "cache_settings": {
                    "$ref": "#/components/schemas/ServiceCacheSettings"
                  },
                  "connection_info": {
                    "$ref": "#/components/schemas/ConnectionInfo"
                  },
                  "enabled": {
                    "type": "boolean"
                  },
                  "name": {
                    "type": "string"
                  },
                  "type": {
                    "enum": [
                      "postgis",
                      "duckdb",
                      "geoparquet",
                      "vectorfile",
                      "rasterfile",
                      "raster_mosaic"
                    ],
                    "type": "string"
                  }
                },
                "required": [
                  "name",
                  "type",
                  "connection_info"
                ],
                "type": "object"
              }
            }
          },
          "description": "Service to create",
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Service"
                }
              }
            },
            "description": "Created service"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Create service",
        "tags": [
          "Services"
        ]
      }
    },
    "/workspaces/{workspace}/services/test-connection": {
      "post": {
        "operationId": "testNewServiceConnection",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ServiceConnectionInput"
              }
            }
          },
          "description": "Service connection",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConnectionTest"
                }
              }
            },
            "description": "Connection test result"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Test a service connection before saving",
        "tags": [
          "Services"
        ]
      }
    },
    "/workspaces/{workspace}/services/{service}": {
      "delete": {
        "description": "Deletes an empty service synchronously. Non-empty services return 409 unless recurse=true, which also removes the transitive dependent-group closure.",
        "operationId": "deleteService",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Service ID",
            "in": "path",
            "name": "service",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Recursively remove dependent catalog and operational state using a durable asynchronous operation.",
            "in": "query",
            "name": "recurse",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeletionOperation"
                }
              }
            },
            "description": "Recursive deletion accepted"
          },
          "204": {
            "description": "No Content"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service not found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeletionConflict"
                }
              }
            },
            "description": "Service has dependencies"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Delete service",
        "tags": [
          "Services"
        ]
      },
      "get": {
        "description": "Returns a service by ID, including connection info.",
        "operationId": "getService",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Service ID",
            "in": "path",
            "name": "service",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Service"
                }
              }
            },
            "description": "Service details"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service not found"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Get service",
        "tags": [
          "Services"
        ]
      },
      "put": {
        "description": "Updates a service configuration.",
        "operationId": "updateService",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Service ID",
            "in": "path",
            "name": "service",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "cache_settings": {
                    "$ref": "#/components/schemas/ServiceCacheSettings"
                  },
                  "connection_info": {
                    "$ref": "#/components/schemas/ConnectionInfo"
                  },
                  "enabled": {
                    "type": "boolean"
                  },
                  "name": {
                    "type": "string"
                  }
                },
                "type": "object"
              }
            }
          },
          "description": "Service updates",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Service"
                }
              }
            },
            "description": "Updated service"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service not found"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Update service",
        "tags": [
          "Services"
        ]
      }
    },
    "/workspaces/{workspace}/services/{service}/coverages": {
      "get": {
        "operationId": "listCoverages",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Service ID",
            "in": "path",
            "name": "service",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CoverageList"
                }
              }
            },
            "description": "Published coverages"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "List coverages",
        "tags": [
          "Coverages"
        ]
      },
      "post": {
        "operationId": "createCoverage",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Service ID",
            "in": "path",
            "name": "service",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CoverageCreate"
              }
            }
          },
          "description": "Coverage publication",
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Coverage"
                }
              }
            },
            "description": "Created coverage"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Invalid coverage"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Publish coverage",
        "tags": [
          "Coverages"
        ]
      }
    },
    "/workspaces/{workspace}/services/{service}/coverages/{coverage}": {
      "delete": {
        "operationId": "deleteCoverage",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Service ID",
            "in": "path",
            "name": "service",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Coverage ID or public identifier",
            "in": "path",
            "name": "coverage",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Coverage is referenced by a layer group"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Delete coverage",
        "tags": [
          "Coverages"
        ]
      },
      "get": {
        "operationId": "getCoverage",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Service ID",
            "in": "path",
            "name": "service",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Coverage ID or public identifier",
            "in": "path",
            "name": "coverage",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Coverage"
                }
              }
            },
            "description": "Coverage"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Coverage not found"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Get coverage",
        "tags": [
          "Coverages"
        ]
      },
      "put": {
        "operationId": "updateCoverage",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Service ID",
            "in": "path",
            "name": "service",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Coverage ID or public identifier",
            "in": "path",
            "name": "coverage",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CoverageUpdate"
              }
            }
          },
          "description": "Mutable coverage metadata",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Coverage"
                }
              }
            },
            "description": "Updated coverage"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Coverage is referenced by a layer group"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Update coverage",
        "tags": [
          "Coverages"
        ]
      }
    },
    "/workspaces/{workspace}/services/{service}/deletion-plan": {
      "get": {
        "operationId": "getServiceDeletionPlan",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Service ID",
            "in": "path",
            "name": "service",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeletionPlan"
                }
              }
            },
            "description": "Deletion dependency plan"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service not found"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Inspect service deletion dependencies",
        "tags": [
          "Catalog Lifecycle"
        ]
      }
    },
    "/workspaces/{workspace}/services/{service}/discover": {
      "post": {
        "description": "Discovers available layers from the data source. Returns geometry tables/views for PostGIS, spatial tables for DuckDB.",
        "operationId": "discoverLayers",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Service ID",
            "in": "path",
            "name": "service",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "layers": {
                      "items": {
                        "$ref": "#/components/schemas/DiscoveredLayer"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Discovered layers"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Discovery failed"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Discover layers",
        "tags": [
          "Services"
        ]
      }
    },
    "/workspaces/{workspace}/services/{service}/discover-coverages": {
      "post": {
        "operationId": "discoverCoverages",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Service ID",
            "in": "path",
            "name": "service",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CoverageDiscoveryList"
                }
              }
            },
            "description": "Discovered coverages"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unsupported raster source"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Discover raster coverages",
        "tags": [
          "Coverages"
        ]
      }
    },
    "/workspaces/{workspace}/services/{service}/layers": {
      "get": {
        "description": "Returns all published layers for a service.",
        "operationId": "listLayers",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Service ID",
            "in": "path",
            "name": "service",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "layers": {
                      "items": {
                        "$ref": "#/components/schemas/Layer"
                      },
                      "type": "array"
                    },
                    "service_id": {
                      "type": "string"
                    },
                    "workspace_id": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "List of layers"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "List layers",
        "tags": [
          "Layers"
        ]
      },
      "post": {
        "description": "Publishes a readable discovered layer. Enabled publication validates the source. Set enabled=false explicitly to save an offline draft; enabling later requires validation. SQL views are read-only.",
        "operationId": "createLayer",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Service ID",
            "in": "path",
            "name": "service",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "allowed_roles": {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "crs_default": {
                    "description": "Default CRS EPSG code (defaults to 4326)",
                    "type": "integer"
                  },
                  "description": {
                    "type": "string"
                  },
                  "dimensions": {
                    "items": {
                      "$ref": "#/components/schemas/Dimension"
                    },
                    "type": "array"
                  },
                  "enabled": {
                    "type": "boolean"
                  },
                  "public": {
                    "type": "boolean"
                  },
                  "public_id": {
                    "description": "Public identifier for URLs (defaults to source_layer)",
                    "type": "string"
                  },
                  "source_layer": {
                    "description": "Name of the source table/layer in the data source",
                    "type": "string"
                  },
                  "sql_view": {
                    "$ref": "#/components/schemas/SQLView"
                  },
                  "title": {
                    "description": "Human-readable title",
                    "type": "string"
                  }
                },
                "type": "object"
              }
            }
          },
          "description": "Layer to publish",
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Layer"
                }
              }
            },
            "description": "Created layer"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "public_id is already published in this workspace"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Source layer is missing or unreadable"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Datasource unavailable"
          }
        },
        "summary": "Create layer",
        "tags": [
          "Layers"
        ]
      }
    },
    "/workspaces/{workspace}/services/{service}/layers/{layer}": {
      "delete": {
        "description": "Unpublishes and deletes a layer.",
        "operationId": "deleteLayer",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Service ID",
            "in": "path",
            "name": "service",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Layer ID",
            "in": "path",
            "name": "layer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Layer not found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Layer is referenced by a layer group"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Delete layer",
        "tags": [
          "Layers"
        ]
      },
      "get": {
        "description": "Returns layer configuration by ID.",
        "operationId": "getLayer",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Service ID",
            "in": "path",
            "name": "service",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Layer ID",
            "in": "path",
            "name": "layer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Layer"
                }
              }
            },
            "description": "Layer details"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Layer not found"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Get layer",
        "tags": [
          "Layers"
        ]
      },
      "put": {
        "description": "Updates layer configuration. Omitted/null title, description and dimensions preserve existing values; empty strings clear title/description and an empty dimensions array removes all dimensions. Enabling a regular layer validates its source.",
        "operationId": "updateLayer",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Service ID",
            "in": "path",
            "name": "service",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Layer ID",
            "in": "path",
            "name": "layer",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "allowed_roles": {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "crs_default": {
                    "type": "integer"
                  },
                  "default_style": {
                    "type": "string"
                  },
                  "description": {
                    "nullable": true,
                    "type": "string"
                  },
                  "dimensions": {
                    "items": {
                      "$ref": "#/components/schemas/Dimension"
                    },
                    "type": "array"
                  },
                  "enabled": {
                    "type": "boolean"
                  },
                  "public": {
                    "type": "boolean"
                  },
                  "public_id": {
                    "type": "string"
                  },
                  "styles": {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  },
                  "title": {
                    "type": "string"
                  }
                },
                "type": "object"
              }
            }
          },
          "description": "Layer updates",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Layer"
                }
              }
            },
            "description": "Updated layer"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Layer not found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "public_id conflicts or layer is referenced by a layer group"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Source layer is missing or unreadable"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Datasource unavailable"
          }
        },
        "summary": "Update layer",
        "tags": [
          "Layers"
        ]
      }
    },
    "/workspaces/{workspace}/services/{service}/mosaic/granules": {
      "get": {
        "operationId": "listMosaicGranules",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Service ID",
            "in": "path",
            "name": "service",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Native-CRS minx,miny,maxx,maxy intersection filter",
            "in": "query",
            "name": "bbox",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Exact RFC 3339 granule time",
            "in": "query",
            "name": "time",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Exact numeric granule elevation",
            "in": "query",
            "name": "elevation",
            "schema": {
              "type": "number"
            }
          },
          {
            "description": "Maximum records to return",
            "in": "query",
            "name": "limit",
            "schema": {
              "format": "int64",
              "type": "integer"
            }
          },
          {
            "description": "Zero-based record offset",
            "in": "query",
            "name": "offset",
            "schema": {
              "format": "int64",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "granules": {
                      "items": {
                        "$ref": "#/components/schemas/MosaicGranule"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Active granule generation"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Mosaic catalog disabled"
          }
        },
        "summary": "List active mosaic granules",
        "tags": [
          "Mosaic Catalog"
        ]
      }
    },
    "/workspaces/{workspace}/services/{service}/mosaic/granules/{granule}": {
      "delete": {
        "operationId": "deleteMosaicGranule",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Service ID",
            "in": "path",
            "name": "service",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "granule",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Granule not found"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Mosaic must retain at least one granule"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Remove granule through a new atomic generation",
        "tags": [
          "Mosaic Catalog"
        ]
      },
      "get": {
        "operationId": "getMosaicGranule",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Service ID",
            "in": "path",
            "name": "service",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "path",
            "name": "granule",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MosaicGranule"
                }
              }
            },
            "description": "Mosaic granule"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Granule not found"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Get mosaic granule",
        "tags": [
          "Mosaic Catalog"
        ]
      }
    },
    "/workspaces/{workspace}/services/{service}/mosaic/harvest-jobs": {
      "get": {
        "operationId": "listMosaicHarvestJobs",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Service ID",
            "in": "path",
            "name": "service",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Maximum records to return",
            "in": "query",
            "name": "limit",
            "schema": {
              "format": "int64",
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "jobs": {
                      "items": {
                        "$ref": "#/components/schemas/MosaicHarvestJob"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Harvest jobs"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "List mosaic harvest jobs",
        "tags": [
          "Mosaic Catalog"
        ]
      },
      "post": {
        "operationId": "createMosaicHarvestJob",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Service ID",
            "in": "path",
            "name": "service",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MosaicHarvestRequest"
              }
            }
          },
          "description": "Harvest request",
          "required": true
        },
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MosaicHarvestJob"
                }
              }
            },
            "description": "Accepted harvest job"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Invalid harvest request"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Create atomic mosaic harvest job",
        "tags": [
          "Mosaic Catalog"
        ]
      }
    },
    "/workspaces/{workspace}/services/{service}/mosaic/harvest-jobs/{job}": {
      "delete": {
        "operationId": "cancelMosaicHarvestJob",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Service ID",
            "in": "path",
            "name": "service",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tile cache job ID",
            "in": "path",
            "name": "job",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MosaicHarvestJob"
                }
              }
            },
            "description": "Cancelling harvest job"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Job not found"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Cancel mosaic harvest job",
        "tags": [
          "Mosaic Catalog"
        ]
      },
      "get": {
        "operationId": "getMosaicHarvestJob",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Service ID",
            "in": "path",
            "name": "service",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tile cache job ID",
            "in": "path",
            "name": "job",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MosaicHarvestJob"
                }
              }
            },
            "description": "Harvest job"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Job not found"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Get mosaic harvest job",
        "tags": [
          "Mosaic Catalog"
        ]
      }
    },
    "/workspaces/{workspace}/services/{service}/test-connection": {
      "post": {
        "operationId": "testExistingServiceConnection",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Service ID",
            "in": "path",
            "name": "service",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ServiceConnectionInput"
              }
            }
          },
          "description": "Optional connection updates",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConnectionTest"
                }
              }
            },
            "description": "Connection test result"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Test an existing service connection",
        "tags": [
          "Services"
        ]
      }
    },
    "/workspaces/{workspace}/services/{service}/validate-sql": {
      "post": {
        "description": "Validates a read-only SQL view query and discovers its columns and geometry metadata.",
        "operationId": "validateSQLView",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Service ID",
            "in": "path",
            "name": "service",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "sql": {
                    "type": "string"
                  }
                },
                "required": [
                  "sql"
                ],
                "type": "object"
              }
            }
          },
          "description": "SQL query to validate",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValidateSQLResponse"
                }
              }
            },
            "description": "SQL validation result"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Workspace or service not found"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Data source unavailable"
          }
        },
        "summary": "Validate SQL view",
        "tags": [
          "Services"
        ]
      }
    },
    "/workspaces/{workspace}/settings/ogc-tiles": {
      "get": {
        "description": "Returns OGC API Tiles settings for a workspace.",
        "operationId": "getOGCTilesAPISettings",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OGCTilesSettings"
                }
              }
            },
            "description": "OGC API Tiles settings"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Workspace not found"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Get OGC API Tiles settings",
        "tags": [
          "Settings"
        ]
      },
      "put": {
        "description": "Updates OGC API Tiles settings within the global server ceilings.",
        "operationId": "updateOGCTilesAPISettings",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OGCTilesSettings"
              }
            }
          },
          "description": "OGC API Tiles settings",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OGCTilesSettings"
                }
              }
            },
            "description": "Updated OGC API Tiles settings"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Workspace not found"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Update OGC API Tiles settings",
        "tags": [
          "Settings"
        ]
      }
    },
    "/workspaces/{workspace}/settings/ogcapi": {
      "get": {
        "description": "Returns the OGC API Features settings for a workspace.",
        "operationId": "getOGCAPISettings",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OGCAPISettings"
                }
              }
            },
            "description": "OGC API settings"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Workspace not found"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Get OGC API settings",
        "tags": [
          "Settings"
        ]
      },
      "put": {
        "description": "Updates the OGC API Features settings for a workspace.",
        "operationId": "updateOGCAPISettings",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OGCAPISettings"
              }
            }
          },
          "description": "OGC API settings",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OGCAPISettings"
                }
              }
            },
            "description": "Updated OGC API settings"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Workspace not found"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Update OGC API settings",
        "tags": [
          "Settings"
        ]
      }
    },
    "/workspaces/{workspace}/settings/wcs": {
      "get": {
        "operationId": "getWCSSettings",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WCSSettings"
                }
              }
            },
            "description": "WCS settings"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Get WCS settings",
        "tags": [
          "Settings"
        ]
      },
      "put": {
        "operationId": "updateWCSSettings",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WCSSettings"
              }
            }
          },
          "description": "WCS settings",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WCSSettings"
                }
              }
            },
            "description": "Updated WCS settings"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Limit exceeds server ceiling"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Update WCS settings",
        "tags": [
          "Settings"
        ]
      }
    },
    "/workspaces/{workspace}/settings/wfs": {
      "get": {
        "description": "Returns the WFS service settings for a workspace.",
        "operationId": "getWFSSettings",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WFSSettings"
                }
              }
            },
            "description": "WFS settings"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Workspace not found"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Get WFS settings",
        "tags": [
          "Settings"
        ]
      },
      "put": {
        "description": "Updates the WFS service settings for a workspace.",
        "operationId": "updateWFSSettings",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WFSSettings"
              }
            }
          },
          "description": "WFS settings",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WFSSettings"
                }
              }
            },
            "description": "Updated WFS settings"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Workspace not found"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Update WFS settings",
        "tags": [
          "Settings"
        ]
      }
    },
    "/workspaces/{workspace}/settings/wms": {
      "get": {
        "description": "Returns the WMS service settings for a workspace.",
        "operationId": "getWMSSettings",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WMSSettings"
                }
              }
            },
            "description": "WMS settings"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Workspace not found"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Get WMS settings",
        "tags": [
          "Settings"
        ]
      },
      "put": {
        "description": "Updates the WMS service settings for a workspace.",
        "operationId": "updateWMSSettings",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WMSSettings"
              }
            }
          },
          "description": "WMS settings",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WMSSettings"
                }
              }
            },
            "description": "Updated WMS settings"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Workspace not found"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Update WMS settings",
        "tags": [
          "Settings"
        ]
      }
    },
    "/workspaces/{workspace}/settings/wmts": {
      "get": {
        "operationId": "getWMTSSettings",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WMTSSettings"
                }
              }
            },
            "description": "WMTS settings"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Get WMTS settings",
        "tags": [
          "Settings"
        ]
      },
      "put": {
        "operationId": "updateWMTSSettings",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/WMTSSettings"
              }
            }
          },
          "description": "WMTS settings",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WMTSSettings"
                }
              }
            },
            "description": "Updated WMTS settings"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Update WMTS settings",
        "tags": [
          "Settings"
        ]
      }
    },
    "/workspaces/{workspace}/style-assets": {
      "get": {
        "description": "Lists metadata for managed PNG, JPEG, GIF, and SVG portrayal assets.",
        "operationId": "listStyleAssets",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "assets": {
                      "items": {
                        "$ref": "#/components/schemas/StyleAsset"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Style assets"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "List style assets",
        "tags": [
          "Styles"
        ]
      }
    },
    "/workspaces/{workspace}/style-assets/{asset}": {
      "delete": {
        "operationId": "deleteStyleAsset",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace-local graphic asset name",
            "in": "path",
            "name": "asset",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Style asset not found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Asset is referenced"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Delete style asset",
        "tags": [
          "Styles"
        ]
      },
      "get": {
        "operationId": "getStyleAsset",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace-local graphic asset name",
            "in": "path",
            "name": "asset",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "image/gif": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "image/jpeg": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "image/png": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              },
              "image/svg+xml": {
                "schema": {
                  "format": "binary",
                  "type": "string"
                }
              }
            },
            "description": "Asset payload"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Style asset not found"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Download style asset",
        "tags": [
          "Styles"
        ]
      },
      "put": {
        "description": "Atomically stores a bounded workspace-local graphic payload.",
        "operationId": "putStyleAsset",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Workspace-local graphic asset name",
            "in": "path",
            "name": "asset",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "image/gif": {
              "schema": {
                "format": "binary",
                "type": "string"
              }
            },
            "image/jpeg": {
              "schema": {
                "format": "binary",
                "type": "string"
              }
            },
            "image/png": {
              "schema": {
                "format": "binary",
                "type": "string"
              }
            },
            "image/svg+xml": {
              "schema": {
                "format": "binary",
                "type": "string"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StyleAsset"
                }
              }
            },
            "description": "Stored asset"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Invalid image"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Asset too large"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Create or replace style asset",
        "tags": [
          "Styles"
        ]
      }
    },
    "/workspaces/{workspace}/styles": {
      "get": {
        "description": "Returns all managed styles for a workspace.",
        "operationId": "listStyles",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "styles": {
                      "items": {
                        "$ref": "#/components/schemas/Style"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "List of styles"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "List styles",
        "tags": [
          "Styles"
        ]
      },
      "post": {
        "description": "Creates a managed SLD/SE, CSS, YSLD, or Mapbox style in the workspace.",
        "operationId": "createStyle",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "body": {
                    "description": "Authored style content",
                    "type": "string"
                  },
                  "description": {
                    "type": "string"
                  },
                  "format": {
                    "enum": [
                      "sld_1.0.0",
                      "sld_1.1.0",
                      "se_1.1.0",
                      "css",
                      "ysld",
                      "mapbox"
                    ],
                    "type": "string"
                  },
                  "name": {
                    "description": "Unique style name",
                    "type": "string"
                  },
                  "sld_body": {
                    "description": "Deprecated SLD/SE alias for body",
                    "type": "string"
                  },
                  "title": {
                    "type": "string"
                  }
                },
                "required": [
                  "name"
                ],
                "type": "object"
              }
            }
          },
          "description": "Style to create",
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StyleWithBody"
                }
              }
            },
            "description": "Created style"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request - invalid SLD"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict - style name already exists"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Create style",
        "tags": [
          "Styles"
        ]
      }
    },
    "/workspaces/{workspace}/styles/{style}": {
      "delete": {
        "description": "Deletes a style from the workspace.",
        "operationId": "deleteStyle",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Style name",
            "in": "path",
            "name": "style",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "No Content"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Style not found"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Delete style",
        "tags": [
          "Styles"
        ]
      },
      "get": {
        "description": "Returns a style by name, including its authored body.",
        "operationId": "getStyle",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Style name",
            "in": "path",
            "name": "style",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StyleWithBody"
                }
              }
            },
            "description": "Style details with SLD body"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Style not found"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Get style",
        "tags": [
          "Styles"
        ]
      },
      "put": {
        "description": "Updates an existing style.",
        "operationId": "updateStyle",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Style name",
            "in": "path",
            "name": "style",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "body": {
                    "description": "Authored style content",
                    "type": "string"
                  },
                  "description": {
                    "type": "string"
                  },
                  "format": {
                    "enum": [
                      "sld_1.0.0",
                      "sld_1.1.0",
                      "se_1.1.0",
                      "css",
                      "ysld",
                      "mapbox"
                    ],
                    "type": "string"
                  },
                  "name": {
                    "type": "string"
                  },
                  "sld_body": {
                    "description": "SLD XML content",
                    "type": "string"
                  },
                  "title": {
                    "type": "string"
                  }
                },
                "type": "object"
              }
            }
          },
          "description": "Style updates",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StyleWithBody"
                }
              }
            },
            "description": "Updated style"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Bad Request - invalid SLD"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Style not found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Conflict - style name already exists"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Update style",
        "tags": [
          "Styles"
        ]
      }
    },
    "/workspaces/{workspace}/summary": {
      "get": {
        "operationId": "getWorkspaceSummary",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WorkspaceSummary"
                }
              }
            },
            "description": "Workspace summary"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Get workspace console summary",
        "tags": [
          "Workspaces"
        ]
      }
    },
    "/workspaces/{workspace}/tile-cache/jobs": {
      "get": {
        "operationId": "listTileCacheJobs",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "jobs": {
                      "items": {
                        "$ref": "#/components/schemas/TileCacheJob"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Tile cache jobs"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "List tile cache jobs",
        "tags": [
          "Tile Cache"
        ]
      },
      "post": {
        "operationId": "createTileCacheJob",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TileCacheJobRequest"
              }
            }
          },
          "description": "Tile cache job",
          "required": true
        },
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TileCacheJob"
                }
              }
            },
            "description": "Accepted tile cache job"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Invalid job bounds or selector"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Create seed, reseed, or truncate job",
        "tags": [
          "Tile Cache"
        ]
      }
    },
    "/workspaces/{workspace}/tile-cache/jobs/{job}": {
      "delete": {
        "operationId": "cancelTileCacheJob",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tile cache job ID",
            "in": "path",
            "name": "job",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TileCacheJob"
                }
              }
            },
            "description": "Cancelling tile cache job"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Job is already terminal"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Cancel tile cache job",
        "tags": [
          "Tile Cache"
        ]
      },
      "get": {
        "operationId": "getTileCacheJob",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tile cache job ID",
            "in": "path",
            "name": "job",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TileCacheJob"
                }
              }
            },
            "description": "Tile cache job"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Job not found"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Get tile cache job",
        "tags": [
          "Tile Cache"
        ]
      }
    },
    "/workspaces/{workspace}/tile-cache/jobs/{job}/progress": {
      "get": {
        "operationId": "getTileCacheJobProgress",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Tile cache job ID",
            "in": "path",
            "name": "job",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TileJobProgress"
                }
              }
            },
            "description": "Tile cache job progress"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Job not found"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Get per-zoom tile cache job progress",
        "tags": [
          "Tile Cache"
        ]
      }
    },
    "/workspaces/{workspace}/tile-cache/stats": {
      "get": {
        "operationId": "getPersistentTileCacheStats",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TileCacheStats"
                }
              }
            },
            "description": "Persistent tile cache statistics"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "Get persistent tile cache usage",
        "tags": [
          "Tile Cache"
        ]
      }
    },
    "/workspaces/{workspace}/tile-matrix-sets": {
      "get": {
        "operationId": "listWorkspaceTileMatrixSets",
        "parameters": [
          {
            "description": "Workspace ID",
            "in": "path",
            "name": "workspace",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TileMatrixSetDefinitions"
                }
              }
            },
            "description": "Enabled tile matrix sets"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Authentication required or credential rejected"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Insufficient permission, disabled login, or invalid CSRF"
          },
          "413": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request body exceeds the configured limit"
          },
          "426": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "HTTPS required"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Request rate exceeded"
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            },
            "description": "Service temporarily unavailable"
          }
        },
        "summary": "List enabled workspace tile matrix sets",
        "tags": [
          "Tile Matrix Sets"
        ]
      }
    }
  },
  "security": [
    {
      "bearerAuth": []
    },
    {
      "apiKey": []
    }
  ],
  "servers": [
    {
      "url": "http://localhost:9000/api/v1"
    }
  ]
}
