{
  "openapi": "3.1.0",
  "info": {
    "title": "ResourceManager",
    "description": "ResourceManager Manager",
    "version": "0.1.0"
  },
  "paths": {
    "/resource/{resource_id}/lock": {
      "post": {
        "summary": "Acquire Resource Lock",
        "description": "Acquire a lock on a resource.\n\nArgs:\n    resource_id (str): The ID of the resource to lock.\n    lock_duration (float): Lock duration in seconds.\n    client_id (Optional[str]): Client identifier.\n\nReturns:\n    dict: Lock acquisition result.",
        "operationId": "acquire_resource_lock_resource__resource_id__lock_post",
        "parameters": [
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            }
          },
          {
            "name": "lock_duration",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number",
              "default": 300.0,
              "title": "Lock Duration"
            }
          },
          {
            "name": "client_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Client Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/resource/add_or_update": {
      "post": {
        "summary": "Add Or Update Resource",
        "description": "Add a new resource to the Resource Manager.",
        "operationId": "add_or_update_resource_resource_add_or_update_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AnyResourceModel"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/resource/add": {
      "post": {
        "summary": "Add Resource",
        "description": "Add a new resource to the Resource Manager.",
        "operationId": "add_resource_resource_add_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AnyResourceModel"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/resource/{resource_id}/quantity/change_by": {
      "post": {
        "summary": "Change Quantity By",
        "description": "Change the quantity of a resource by a given amount.\n\nArgs:\n    resource_id (str): The ID of the resource.\n    amount (Union[float, int]): The amount to change the quantity by.\n\nReturns:\n    ResourceDataModels: The updated resource.",
        "operationId": "change_quantity_by_resource__resource_id__quantity_change_by_post",
        "parameters": [
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            }
          },
          {
            "name": "amount",
            "in": "query",
            "required": true,
            "schema": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "integer"
                }
              ],
              "title": "Amount"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/resource/{resource_id}/check_lock": {
      "get": {
        "summary": "Check Resource Lock",
        "description": "Check if a resource is currently locked.\n\nArgs:\n    resource_id (str): The ID of the resource to check.\n\nReturns:\n    dict: Lock status information.",
        "operationId": "check_resource_lock_resource__resource_id__check_lock_get",
        "parameters": [
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/template/{template_name}/create_resource": {
      "post": {
        "summary": "Create Resource From Template",
        "description": "Create a resource from a template.\n\nIf a matching resource already exists (based on name, class, type, owner, and any overrides),\nit will be returned instead of creating a duplicate.",
        "operationId": "create_resource_from_template_template__template_name__create_resource_post",
        "parameters": [
          {
            "name": "template_name",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Template Name"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateResourceFromTemplateBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/template/create": {
      "post": {
        "summary": "Create Template",
        "description": "Create a new resource template from a resource.",
        "operationId": "create_template_template_create_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TemplateCreateBody"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/resource/{resource_id}/quantity/decrease": {
      "post": {
        "summary": "Decrease Quantity",
        "description": "Decrease the quantity of a resource by a given amount.\n\nArgs:\n    resource_id (str): The ID of the resource.\n    amount (Union[float, int]): The amount to decrease the quantity by. Note that this is a magnitude, so negative and positive values will have the same effect.\n\nReturns:\n    ResourceDataModels: The updated resource.",
        "operationId": "decrease_quantity_resource__resource_id__quantity_decrease_post",
        "parameters": [
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            }
          },
          {
            "name": "amount",
            "in": "query",
            "required": true,
            "schema": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "integer"
                }
              ],
              "title": "Amount"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/template/{template_name}": {
      "delete": {
        "summary": "Delete Template",
        "description": "Delete a template from the database.",
        "operationId": "delete_template_template__template_name__delete",
        "parameters": [
          {
            "name": "template_name",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Template Name"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "get": {
        "summary": "Get Template",
        "description": "Get a template by name.",
        "operationId": "get_template_template__template_name__get",
        "parameters": [
          {
            "name": "template_name",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Template Name"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "put": {
        "summary": "Update Template",
        "description": "Update an existing template.",
        "operationId": "update_template_template__template_name__put",
        "parameters": [
          {
            "name": "template_name",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Template Name"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TemplateUpdateBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/resource/{resource_id}/empty": {
      "post": {
        "summary": "Empty Resource",
        "description": "Empty the contents of a container or consumable resource.\n\nArgs:\n    resource_id (str): The ID of the resource.\n\nReturns:\n    ResourceDataModels: The updated resource.",
        "operationId": "empty_resource_resource__resource_id__empty_post",
        "parameters": [
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/resource/{resource_id}/fill": {
      "post": {
        "summary": "Fill Resource",
        "description": "Fill a consumable resource to capacity.\n\nArgs:\n    resource_id (str): The ID of the resource.\n\nReturns:\n    ResourceDataModels: The updated resource.",
        "operationId": "fill_resource_resource__resource_id__fill_post",
        "parameters": [
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/resource/{resource_id}": {
      "get": {
        "summary": "Get Resource",
        "description": "Retrieve a resource from the database by ID.",
        "operationId": "get_resource_resource__resource_id__get",
        "parameters": [
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Remove Resource",
        "description": "Marks a resource as removed. This will remove the resource from the active resources table,\nbut it will still be available in the history table.",
        "operationId": "remove_resource_resource__resource_id__delete",
        "parameters": [
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/settings": {
      "get": {
        "summary": "Get Settings Endpoint",
        "description": "Export current settings for backup/replication.\n\nThis endpoint allows exporting the current manager settings in a format\nsuitable for backup, documentation, or replicating the configuration\nto another environment. Secrets are always redacted from the API\nendpoint for safety.\n\nArgs:\n    include_defaults: If True, include fields with default values.\n                     If False, only include non-default settings.\n    include_schema: If True, include JSON schema for documentation.\n\nReturns:\n    dict: Settings as a dictionary with sensitive fields redacted.",
        "operationId": "get_settings_endpoint_settings_get",
        "parameters": [
          {
            "name": "include_defaults",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": true,
              "title": "Include Defaults"
            }
          },
          {
            "name": "include_schema",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "default": false,
              "title": "Include Schema"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/template/{template_name}/info": {
      "get": {
        "summary": "Get Template Info",
        "description": "Get detailed template metadata.",
        "operationId": "get_template_info_template__template_name__info_get",
        "parameters": [
          {
            "name": "template_name",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Template Name"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/templates/categories": {
      "get": {
        "summary": "Get Templates By Category",
        "description": "Get templates organized by base_type category.",
        "operationId": "get_templates_by_category_templates_categories_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/health": {
      "get": {
        "summary": "Health Endpoint",
        "description": "Health check endpoint for the manager.\n\nThis endpoint is automatically inherited by all manager subclasses.\nManagers that override get_health() will automatically have their\ncustom health checks exposed through this endpoint.\n\nReturns:\n    ManagerHealth: The current health status",
        "operationId": "health_endpoint_health_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/resource/{resource_id}/quantity/increase": {
      "post": {
        "summary": "Increase Quantity",
        "description": "Increase the quantity of a resource by a given amount.\n\nArgs:\n    resource_id (str): The ID of the resource.\n    amount (Union[float, int]): The amount to increase the quantity by. Note that this is a magnitude, so negative and positive values will have the same effect.\n\nReturns:\n    ResourceDataModels: The updated resource.",
        "operationId": "increase_quantity_resource__resource_id__quantity_increase_post",
        "parameters": [
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            }
          },
          {
            "name": "amount",
            "in": "query",
            "required": true,
            "schema": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "integer"
                }
              ],
              "title": "Amount"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/resource/init": {
      "post": {
        "summary": "Init Resource",
        "description": "Initialize a resource in the database based on a definition. If a matching resource already exists, it will be returned.",
        "operationId": "init_resource_resource_init_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "anyOf": [
                  {
                    "$ref": "#/components/schemas/ResourceDefinition"
                  },
                  {
                    "$ref": "#/components/schemas/AssetResourceDefinition"
                  },
                  {
                    "$ref": "#/components/schemas/ContainerResourceDefinition"
                  },
                  {
                    "$ref": "#/components/schemas/CollectionResourceDefinition"
                  },
                  {
                    "$ref": "#/components/schemas/RowResourceDefinition"
                  },
                  {
                    "$ref": "#/components/schemas/GridResourceDefinition"
                  },
                  {
                    "$ref": "#/components/schemas/VoxelGridResourceDefinition"
                  },
                  {
                    "$ref": "#/components/schemas/StackResourceDefinition"
                  },
                  {
                    "$ref": "#/components/schemas/QueueResourceDefinition"
                  },
                  {
                    "$ref": "#/components/schemas/PoolResourceDefinition"
                  },
                  {
                    "$ref": "#/components/schemas/SlotResourceDefinition"
                  },
                  {
                    "$ref": "#/components/schemas/ConsumableResourceDefinition"
                  },
                  {
                    "$ref": "#/components/schemas/DiscreteConsumableResourceDefinition"
                  },
                  {
                    "$ref": "#/components/schemas/ContinuousConsumableResourceDefinition"
                  }
                ],
                "title": "Resource Definition"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/resource/{resource_id}/pop": {
      "post": {
        "summary": "Pop",
        "description": "Pop an asset from a stack or queue.\n\nArgs:\n    resource_id (str): The ID of the stack or queue to pop the asset from.\n\nReturns:\n    tuple[ResourceDataModels, Union[Stack, Queue, Slot]]: The popped asset and the updated stack or queue.",
        "operationId": "pop_resource__resource_id__pop_post",
        "parameters": [
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/resource/{resource_id}/push": {
      "post": {
        "summary": "Push",
        "description": "Push a resource onto a stack or queue.\n\nArgs:\n    resource_id (str): The ID of the stack or queue to push the resource onto.\n    body (PushResourceBody): The resource to push onto the stack or queue, or the ID of an existing resource.\n\nReturns:\n    Union[Stack, Queue, Slot]: The updated stack or queue.",
        "operationId": "push_resource__resource_id__push_post",
        "parameters": [
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PushResourceBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/templates/query_all": {
      "get": {
        "summary": "Query All Templates",
        "description": "List all templates.",
        "operationId": "query_all_templates_templates_query_all_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    },
    "/history/query": {
      "post": {
        "summary": "Query History",
        "description": "Retrieve the history of a resource.\n\nArgs:\n    query (ResourceHistoryGetQuery): The query parameters.\n\nReturns:\n    list[ResourceHistoryTable]: A list of historical resource entries.",
        "operationId": "query_history_history_query_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResourceHistoryGetQuery"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/resource/query": {
      "post": {
        "summary": "Query Resource",
        "description": "Retrieve a resource from the database based on the specified parameters.",
        "operationId": "query_resource_resource_query_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResourceGetQuery"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/resource/{resource_id}/hierarchy": {
      "get": {
        "summary": "Query Resource Hierarchy",
        "description": "Query the hierarchical relationships of a resource.\n\nReturns the ancestors (successive parent IDs from closest to furthest)\nand descendants (all children recursively, organized by parent) of the specified resource.\n\nArgs:\n    resource_id (str): The ID of the resource to query hierarchy for.\n\nReturns:\n    ResourceHierarchy: Hierarchy information with:\n        - ancestor_ids: List of all direct ancestors (parent, grandparent, etc.)\n        - resource_id: The ID of the queried resource\n        - descendant_ids: Dict mapping parent IDs to their direct child IDs,\n          recursively including all descendant generations (children, grandchildren, etc.)",
        "operationId": "query_resource_hierarchy_resource__resource_id__hierarchy_get",
        "parameters": [
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/templates/query": {
      "post": {
        "summary": "Query Templates",
        "description": "Query templates with optional filtering.",
        "operationId": "query_templates_templates_query_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TemplateGetQuery"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/resource/{resource_id}/unlock": {
      "delete": {
        "summary": "Release Resource Lock",
        "description": "Release a lock on a resource.\n\nArgs:\n    resource_id (str): The ID of the resource to unlock.\n    client_id (Optional[str]): Client identifier.\n\nReturns:\n    dict: Lock release result.",
        "operationId": "release_resource_lock_resource__resource_id__unlock_delete",
        "parameters": [
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            }
          },
          {
            "name": "client_id",
            "in": "query",
            "required": false,
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "title": "Client Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/resource/{resource_id}/capacity": {
      "delete": {
        "summary": "Remove Capacity Limit",
        "description": "Remove the capacity limit of a resource.\n\nArgs:\n    resource_id (str): The ID of the resource.\n\nReturns:\n    ResourceDataModels: The updated resource.",
        "operationId": "remove_capacity_limit_resource__resource_id__capacity_delete",
        "parameters": [
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Set Capacity",
        "description": "Set the capacity of a resource.\n\nArgs:\n    resource_id (str): The ID of the resource.\n    capacity (Union[float, int]): The capacity to set.\n\nReturns:\n    ResourceDataModels: The updated resource.",
        "operationId": "set_capacity_resource__resource_id__capacity_post",
        "parameters": [
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            }
          },
          {
            "name": "capacity",
            "in": "query",
            "required": true,
            "schema": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "integer"
                }
              ],
              "title": "Capacity"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/resource/{resource_id}/child/remove": {
      "post": {
        "summary": "Remove Child",
        "description": "Remove a child resource from a parent resource. Must be a container type that supports random access.\n\nArgs:\n    resource_id (str): The ID of the parent resource.\n    body (RemoveChildBody): The body of the request.\n\nReturns:\n    ResourceDataModels: The updated parent resource.",
        "operationId": "remove_child_resource__resource_id__child_remove_post",
        "parameters": [
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RemoveChildBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/history/{resource_id}/restore": {
      "post": {
        "summary": "Restore Deleted Resource",
        "description": "Restore a previously deleted resource from the history table.\n\nArgs:\n    resource_id (str): the id of the resource to restore.\n\nReturns:\n    ResourceDataModels: The restored resource.",
        "operationId": "restore_deleted_resource_history__resource_id__restore_post",
        "parameters": [
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/resource/{resource_id}/child/set": {
      "post": {
        "summary": "Set Child",
        "description": "Set a child resource for a parent resource. Must be a container type that supports random access.\n\nArgs:\n    resource_id (str): The ID of the parent resource.\n    body (SetChildBody): The body of the request.\n\nReturns:\n    ResourceDataModels: The updated parent resource.",
        "operationId": "set_child_resource__resource_id__child_set_post",
        "parameters": [
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetChildBody"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/resource/{resource_id}/quantity": {
      "post": {
        "summary": "Set Quantity",
        "description": "Set the quantity of a resource.\n\nArgs:\n    resource_id (str): The ID of the resource.\n    quantity (Union[float, int]): The quantity to set.\n\nReturns:\n    ResourceDataModels: The updated resource.",
        "operationId": "set_quantity_resource__resource_id__quantity_post",
        "parameters": [
          {
            "name": "resource_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "title": "Resource Id"
            }
          },
          {
            "name": "quantity",
            "in": "query",
            "required": true,
            "schema": {
              "anyOf": [
                {
                  "type": "number"
                },
                {
                  "type": "integer"
                }
              ],
              "title": "Quantity"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    },
    "/resource/update": {
      "post": {
        "summary": "Update Resource",
        "description": "Update or refresh a resource in the database, including its children.",
        "operationId": "update_resource_resource_update_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AnyResourceModel"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "422": {
            "description": "Validation Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HTTPValidationError"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Asset": {
        "properties": {
          "resource_name": {
            "type": "string",
            "title": "Resource Name",
            "description": "The name of the resource."
          },
          "resource_name_prefix": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Name Prefix",
            "description": "A prefix to append the key of the object to for machine instanciated resources"
          },
          "resource_class": {
            "type": "string",
            "title": "Resource Class",
            "description": "The class of the resource. Must match a class defined in the resource manager.",
            "default": ""
          },
          "base_type": {
            "type": "string",
            "const": "asset",
            "title": "Asset Base Type",
            "description": "The base type of the asset.",
            "default": "asset"
          },
          "resource_description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Description",
            "description": "A description of the resource."
          },
          "owner": {
            "$ref": "#/components/schemas/OwnershipInfo",
            "title": "Ownership Info",
            "description": "The owner of this resource"
          },
          "custom_attributes": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/CustomResourceAttributeDefinition"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Custom Attributes",
            "description": "Custom attributes used by resources of this type."
          },
          "resource_id": {
            "type": "string",
            "title": "Resource ID",
            "description": "The ID of the resource."
          },
          "resource_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource URL",
            "description": "The URL of the resource."
          },
          "parent_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Resource",
            "description": "The parent resource ID, if any."
          },
          "key": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Key",
            "description": "The key of the resource in the parent container, if any."
          },
          "attributes": {
            "additionalProperties": true,
            "type": "object",
            "title": "Attributes",
            "description": "Custom attributes for the asset."
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created Datetime",
            "description": "The timestamp of when the resource was created."
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated Datetime",
            "description": "The timestamp of when the resource was last updated."
          },
          "removed": {
            "type": "boolean",
            "title": "Removed",
            "description": "Whether the resource has been removed from the lab.",
            "default": false
          }
        },
        "additionalProperties": true,
        "type": "object",
        "title": "Asset",
        "description": "Base class for all MADSci Assets. These are tracked resources that aren't consumed (things like samples, labware, etc.)."
      },
      "AssetResourceDefinition": {
        "properties": {
          "resource_name": {
            "type": "string",
            "title": "Resource Name",
            "description": "The name of the resource."
          },
          "resource_name_prefix": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Name Prefix",
            "description": "A prefix to append the key of the object to for machine instanciated resources"
          },
          "resource_class": {
            "type": "string",
            "title": "Resource Class",
            "description": "The class of the resource. Must match a class defined in the resource manager.",
            "default": ""
          },
          "base_type": {
            "type": "string",
            "const": "asset",
            "title": "Resource Base Type",
            "description": "The base type of the asset.",
            "default": "asset"
          },
          "resource_description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Description",
            "description": "A description of the resource."
          },
          "owner": {
            "$ref": "#/components/schemas/OwnershipInfo",
            "title": "Ownership Info",
            "description": "The owner of this resource"
          },
          "custom_attributes": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/CustomResourceAttributeDefinition"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Custom Attributes",
            "description": "Custom attributes used by resources of this type."
          }
        },
        "additionalProperties": true,
        "type": "object",
        "title": "AssetResourceDefinition",
        "description": "Definition for an asset resource."
      },
      "Collection": {
        "properties": {
          "resource_name": {
            "type": "string",
            "title": "Resource Name",
            "description": "The name of the resource."
          },
          "resource_name_prefix": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Name Prefix",
            "description": "A prefix to append the key of the object to for machine instanciated resources"
          },
          "resource_class": {
            "type": "string",
            "title": "Resource Class",
            "description": "The class of the resource. Must match a class defined in the resource manager.",
            "default": ""
          },
          "base_type": {
            "type": "string",
            "const": "collection",
            "title": "Container Base Type",
            "description": "The base type of the collection.",
            "default": "collection"
          },
          "resource_description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Description",
            "description": "A description of the resource."
          },
          "owner": {
            "$ref": "#/components/schemas/OwnershipInfo",
            "title": "Ownership Info",
            "description": "The owner of this resource"
          },
          "custom_attributes": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/CustomResourceAttributeDefinition"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Custom Attributes",
            "description": "Custom attributes used by resources of this type."
          },
          "resource_id": {
            "type": "string",
            "title": "Resource ID",
            "description": "The ID of the resource."
          },
          "resource_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource URL",
            "description": "The URL of the resource."
          },
          "parent_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Resource",
            "description": "The parent resource ID, if any."
          },
          "key": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Key",
            "description": "The key of the resource in the parent container, if any."
          },
          "attributes": {
            "additionalProperties": true,
            "type": "object",
            "title": "Attributes",
            "description": "Custom attributes for the asset."
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created Datetime",
            "description": "The timestamp of when the resource was created."
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated Datetime",
            "description": "The timestamp of when the resource was last updated."
          },
          "removed": {
            "type": "boolean",
            "title": "Removed",
            "description": "Whether the resource has been removed from the lab.",
            "default": false
          },
          "capacity": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Capacity",
            "description": "The capacity of the container."
          },
          "children": {
            "additionalProperties": {
              "$ref": "#/components/schemas/AnyResourceModel"
            },
            "type": "object",
            "title": "Children",
            "description": "The children of the collection."
          }
        },
        "additionalProperties": true,
        "type": "object",
        "title": "Collection",
        "description": "Data Model for a Collection. A collection is a container that can hold other resources, and which supports random access."
      },
      "CollectionResourceDefinition": {
        "properties": {
          "resource_name": {
            "type": "string",
            "title": "Resource Name",
            "description": "The name of the resource."
          },
          "resource_name_prefix": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Name Prefix",
            "description": "A prefix to append the key of the object to for machine instanciated resources"
          },
          "resource_class": {
            "type": "string",
            "title": "Resource Class",
            "description": "The class of the resource. Must match a class defined in the resource manager.",
            "default": ""
          },
          "base_type": {
            "type": "string",
            "const": "collection",
            "title": "Resource Base Type",
            "description": "The base type of the collection.",
            "default": "collection"
          },
          "resource_description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Description",
            "description": "A description of the resource."
          },
          "owner": {
            "$ref": "#/components/schemas/OwnershipInfo",
            "title": "Ownership Info",
            "description": "The owner of this resource"
          },
          "custom_attributes": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/CustomResourceAttributeDefinition"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Custom Attributes",
            "description": "Custom attributes used by resources of this type."
          },
          "capacity": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Container Capacity",
            "description": "The capacity of the container. If None, uses the type's default_capacity."
          },
          "default_children": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/ResourceDefinition"
                },
                "type": "array"
              },
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/ResourceDefinition"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Default Children",
            "description": "The default children to create when initializing the collection. If None, use the type's default_children."
          },
          "default_child_template": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AnyResourceDefinitionModel"
              },
              {
                "type": "null"
              }
            ],
            "title": "Default Child Template",
            "description": "Template for creating child resources, supporting variable substitution. If None, use the type's default_child_template."
          },
          "keys": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Collection Keys",
            "description": "The keys for the collection. Can be an integer (converted to 1-based range) or explicit list."
          }
        },
        "additionalProperties": true,
        "type": "object",
        "title": "CollectionResourceDefinition",
        "description": "Definition for a collection resource. Collections are used for resources that have a number of children, each with a unique key, which can be randomly accessed."
      },
      "Consumable": {
        "properties": {
          "resource_name": {
            "type": "string",
            "title": "Resource Name",
            "description": "The name of the resource."
          },
          "resource_name_prefix": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Name Prefix",
            "description": "A prefix to append the key of the object to for machine instanciated resources"
          },
          "resource_class": {
            "type": "string",
            "title": "Resource Class",
            "description": "The class of the resource. Must match a class defined in the resource manager.",
            "default": ""
          },
          "base_type": {
            "type": "string",
            "const": "consumable",
            "title": "Consumable Base Type",
            "description": "The base type of the consumable.",
            "default": "consumable"
          },
          "resource_description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Description",
            "description": "A description of the resource."
          },
          "owner": {
            "$ref": "#/components/schemas/OwnershipInfo",
            "title": "Ownership Info",
            "description": "The owner of this resource"
          },
          "custom_attributes": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/CustomResourceAttributeDefinition"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Custom Attributes",
            "description": "Custom attributes used by resources of this type."
          },
          "resource_id": {
            "type": "string",
            "title": "Resource ID",
            "description": "The ID of the resource."
          },
          "resource_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource URL",
            "description": "The URL of the resource."
          },
          "parent_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Resource",
            "description": "The parent resource ID, if any."
          },
          "key": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Key",
            "description": "The key of the resource in the parent container, if any."
          },
          "attributes": {
            "additionalProperties": true,
            "type": "object",
            "title": "Attributes",
            "description": "Custom attributes for the asset."
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created Datetime",
            "description": "The timestamp of when the resource was created."
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated Datetime",
            "description": "The timestamp of when the resource was last updated."
          },
          "removed": {
            "type": "boolean",
            "title": "Removed",
            "description": "Whether the resource has been removed from the lab.",
            "default": false
          },
          "quantity": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "integer"
              }
            ],
            "title": "Quantity",
            "description": "The quantity of the consumable.",
            "default": 0,
            "ge": 0
          },
          "capacity": {
            "anyOf": [
              {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  }
                ],
                "ge": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Capacity",
            "description": "The maximum capacity of the consumable."
          },
          "unit": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Unit",
            "description": "The unit used to measure the quantity of the consumable."
          }
        },
        "additionalProperties": true,
        "type": "object",
        "title": "Consumable",
        "description": "Base class for all MADSci Consumables. These are resources that are consumed (things like reagents, pipette tips, etc.)."
      },
      "ConsumableResourceDefinition": {
        "properties": {
          "resource_name": {
            "type": "string",
            "title": "Resource Name",
            "description": "The name of the resource."
          },
          "resource_name_prefix": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Name Prefix",
            "description": "A prefix to append the key of the object to for machine instanciated resources"
          },
          "resource_class": {
            "type": "string",
            "title": "Resource Class",
            "description": "The class of the resource. Must match a class defined in the resource manager.",
            "default": ""
          },
          "base_type": {
            "type": "string",
            "const": "consumable",
            "title": "Resource Base Type",
            "description": "The base type of the consumable.",
            "default": "consumable"
          },
          "resource_description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Description",
            "description": "A description of the resource."
          },
          "owner": {
            "$ref": "#/components/schemas/OwnershipInfo",
            "title": "Ownership Info",
            "description": "The owner of this resource"
          },
          "custom_attributes": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/CustomResourceAttributeDefinition"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Custom Attributes",
            "description": "Custom attributes used by resources of this type."
          },
          "unit": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Unit",
            "description": "The unit used to measure the quantity of the consumable."
          },
          "quantity": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "integer"
              }
            ],
            "title": "Default Resource Quantity",
            "description": "The initial quantity of the consumable.",
            "default": 0.0,
            "ge": 0
          },
          "capacity": {
            "anyOf": [
              {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  }
                ],
                "ge": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Capacity",
            "description": "The initial capacity of the consumable."
          }
        },
        "additionalProperties": true,
        "type": "object",
        "title": "ConsumableResourceDefinition",
        "description": "Definition for a consumable resource."
      },
      "Container": {
        "properties": {
          "resource_name": {
            "type": "string",
            "title": "Resource Name",
            "description": "The name of the resource."
          },
          "resource_name_prefix": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Name Prefix",
            "description": "A prefix to append the key of the object to for machine instanciated resources"
          },
          "resource_class": {
            "type": "string",
            "title": "Resource Class",
            "description": "The class of the resource. Must match a class defined in the resource manager.",
            "default": ""
          },
          "base_type": {
            "type": "string",
            "const": "container",
            "title": "Container Base Type",
            "description": "The base type of the container.",
            "default": "container"
          },
          "resource_description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Description",
            "description": "A description of the resource."
          },
          "owner": {
            "$ref": "#/components/schemas/OwnershipInfo",
            "title": "Ownership Info",
            "description": "The owner of this resource"
          },
          "custom_attributes": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/CustomResourceAttributeDefinition"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Custom Attributes",
            "description": "Custom attributes used by resources of this type."
          },
          "resource_id": {
            "type": "string",
            "title": "Resource ID",
            "description": "The ID of the resource."
          },
          "resource_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource URL",
            "description": "The URL of the resource."
          },
          "parent_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Resource",
            "description": "The parent resource ID, if any."
          },
          "key": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Key",
            "description": "The key of the resource in the parent container, if any."
          },
          "attributes": {
            "additionalProperties": true,
            "type": "object",
            "title": "Attributes",
            "description": "Custom attributes for the asset."
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created Datetime",
            "description": "The timestamp of when the resource was created."
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated Datetime",
            "description": "The timestamp of when the resource was last updated."
          },
          "removed": {
            "type": "boolean",
            "title": "Removed",
            "description": "Whether the resource has been removed from the lab.",
            "default": false
          },
          "capacity": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Capacity",
            "description": "The capacity of the container."
          },
          "children": {
            "additionalProperties": {
              "$ref": "#/components/schemas/AnyResourceModel"
            },
            "type": "object",
            "title": "Children",
            "description": "The children of the container."
          }
        },
        "additionalProperties": true,
        "type": "object",
        "title": "Container",
        "description": "Data Model for a Container. A container is a resource that can hold other resources."
      },
      "ContainerResourceDefinition": {
        "properties": {
          "resource_name": {
            "type": "string",
            "title": "Resource Name",
            "description": "The name of the resource."
          },
          "resource_name_prefix": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Name Prefix",
            "description": "A prefix to append the key of the object to for machine instanciated resources"
          },
          "resource_class": {
            "type": "string",
            "title": "Resource Class",
            "description": "The class of the resource. Must match a class defined in the resource manager.",
            "default": ""
          },
          "base_type": {
            "type": "string",
            "const": "container",
            "title": "Resource Base Type",
            "description": "The base type of the container.",
            "default": "container"
          },
          "resource_description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Description",
            "description": "A description of the resource."
          },
          "owner": {
            "$ref": "#/components/schemas/OwnershipInfo",
            "title": "Ownership Info",
            "description": "The owner of this resource"
          },
          "custom_attributes": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/CustomResourceAttributeDefinition"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Custom Attributes",
            "description": "Custom attributes used by resources of this type."
          },
          "capacity": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Container Capacity",
            "description": "The capacity of the container. If None, uses the type's default_capacity."
          },
          "default_children": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/ResourceDefinition"
                },
                "type": "array"
              },
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/ResourceDefinition"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Default Children",
            "description": "The default children to create when initializing the container. If None, use the type's default_children."
          },
          "default_child_template": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AnyResourceDefinitionModel"
              },
              {
                "type": "null"
              }
            ],
            "title": "Default Child Template",
            "description": "Template for creating child resources, supporting variable substitution. If None, use the type's default_child_template."
          }
        },
        "additionalProperties": true,
        "type": "object",
        "title": "ContainerResourceDefinition",
        "description": "Definition for a container resource."
      },
      "ContinuousConsumable": {
        "properties": {
          "resource_name": {
            "type": "string",
            "title": "Resource Name",
            "description": "The name of the resource."
          },
          "resource_name_prefix": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Name Prefix",
            "description": "A prefix to append the key of the object to for machine instanciated resources"
          },
          "resource_class": {
            "type": "string",
            "title": "Resource Class",
            "description": "The class of the resource. Must match a class defined in the resource manager.",
            "default": ""
          },
          "base_type": {
            "type": "string",
            "const": "continuous_consumable",
            "title": "Consumable Base Type",
            "description": "The base type of the continuous consumable.",
            "default": "continuous_consumable"
          },
          "resource_description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Description",
            "description": "A description of the resource."
          },
          "owner": {
            "$ref": "#/components/schemas/OwnershipInfo",
            "title": "Ownership Info",
            "description": "The owner of this resource"
          },
          "custom_attributes": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/CustomResourceAttributeDefinition"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Custom Attributes",
            "description": "Custom attributes used by resources of this type."
          },
          "resource_id": {
            "type": "string",
            "title": "Resource ID",
            "description": "The ID of the resource."
          },
          "resource_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource URL",
            "description": "The URL of the resource."
          },
          "parent_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Resource",
            "description": "The parent resource ID, if any."
          },
          "key": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Key",
            "description": "The key of the resource in the parent container, if any."
          },
          "attributes": {
            "additionalProperties": true,
            "type": "object",
            "title": "Attributes",
            "description": "Custom attributes for the asset."
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created Datetime",
            "description": "The timestamp of when the resource was created."
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated Datetime",
            "description": "The timestamp of when the resource was last updated."
          },
          "removed": {
            "type": "boolean",
            "title": "Removed",
            "description": "Whether the resource has been removed from the lab.",
            "default": false
          },
          "quantity": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "integer"
              }
            ],
            "title": "Quantity",
            "description": "The quantity of the continuous consumable.",
            "default": 0.0,
            "ge": 0
          },
          "capacity": {
            "anyOf": [
              {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  }
                ],
                "ge": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Capacity",
            "description": "The maximum capacity of the continuous consumable."
          },
          "unit": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Unit",
            "description": "The unit used to measure the quantity of the consumable."
          }
        },
        "additionalProperties": true,
        "type": "object",
        "title": "ContinuousConsumable",
        "description": "Base class for all MADSci Continuous Consumables. These are consumables that are measured in continuous quantities (things like liquids, powders, etc.)."
      },
      "ContinuousConsumableResourceDefinition": {
        "properties": {
          "resource_name": {
            "type": "string",
            "title": "Resource Name",
            "description": "The name of the resource."
          },
          "resource_name_prefix": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Name Prefix",
            "description": "A prefix to append the key of the object to for machine instanciated resources"
          },
          "resource_class": {
            "type": "string",
            "title": "Resource Class",
            "description": "The class of the resource. Must match a class defined in the resource manager.",
            "default": ""
          },
          "base_type": {
            "type": "string",
            "const": "continuous_consumable",
            "title": "Resource Base Type",
            "description": "The base type of the continuous consumable.",
            "default": "continuous_consumable"
          },
          "resource_description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Description",
            "description": "A description of the resource."
          },
          "owner": {
            "$ref": "#/components/schemas/OwnershipInfo",
            "title": "Ownership Info",
            "description": "The owner of this resource"
          },
          "custom_attributes": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/CustomResourceAttributeDefinition"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Custom Attributes",
            "description": "Custom attributes used by resources of this type."
          },
          "unit": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Unit",
            "description": "The unit used to measure the quantity of the consumable."
          },
          "quantity": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "integer"
              }
            ],
            "title": "Default Resource Quantity",
            "description": "The initial quantity of the consumable.",
            "default": 0.0,
            "ge": 0
          },
          "capacity": {
            "anyOf": [
              {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  }
                ],
                "ge": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Capacity",
            "description": "The initial capacity of the consumable."
          }
        },
        "additionalProperties": true,
        "type": "object",
        "title": "ContinuousConsumableResourceDefinition",
        "description": "Definition for a continuous consumable resource."
      },
      "CreateResourceFromTemplateBody": {
        "properties": {
          "resource_name": {
            "type": "string",
            "title": "Resource Name"
          },
          "overrides": {
            "anyOf": [
              {
                "additionalProperties": true,
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Overrides"
          },
          "add_to_database": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Add To Database",
            "default": true
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "resource_name"
        ],
        "title": "CreateResourceFromTemplateBody",
        "description": "A request to create a resource from a template."
      },
      "CustomResourceAttributeDefinition": {
        "properties": {
          "attribute_name": {
            "type": "string",
            "title": "Attribute Name",
            "description": "The name of the attribute."
          },
          "attribute_description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Attribute Description",
            "description": "A description of the attribute."
          },
          "optional": {
            "type": "boolean",
            "title": "Optional",
            "description": "Whether the attribute is optional.",
            "default": false
          },
          "default_value": {
            "title": "Default Value",
            "description": "The default value of the attribute."
          }
        },
        "type": "object",
        "required": [
          "attribute_name"
        ],
        "title": "CustomResourceAttributeDefinition",
        "description": "Definition for a MADSci Custom Resource Attribute."
      },
      "DiscreteConsumable": {
        "properties": {
          "resource_name": {
            "type": "string",
            "title": "Resource Name",
            "description": "The name of the resource."
          },
          "resource_name_prefix": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Name Prefix",
            "description": "A prefix to append the key of the object to for machine instanciated resources"
          },
          "resource_class": {
            "type": "string",
            "title": "Resource Class",
            "description": "The class of the resource. Must match a class defined in the resource manager.",
            "default": ""
          },
          "base_type": {
            "type": "string",
            "const": "discrete_consumable",
            "title": "Consumable Base Type",
            "description": "The base type of the discrete consumable.",
            "default": "discrete_consumable"
          },
          "resource_description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Description",
            "description": "A description of the resource."
          },
          "owner": {
            "$ref": "#/components/schemas/OwnershipInfo",
            "title": "Ownership Info",
            "description": "The owner of this resource"
          },
          "custom_attributes": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/CustomResourceAttributeDefinition"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Custom Attributes",
            "description": "Custom attributes used by resources of this type."
          },
          "resource_id": {
            "type": "string",
            "title": "Resource ID",
            "description": "The ID of the resource."
          },
          "resource_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource URL",
            "description": "The URL of the resource."
          },
          "parent_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Resource",
            "description": "The parent resource ID, if any."
          },
          "key": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Key",
            "description": "The key of the resource in the parent container, if any."
          },
          "attributes": {
            "additionalProperties": true,
            "type": "object",
            "title": "Attributes",
            "description": "Custom attributes for the asset."
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created Datetime",
            "description": "The timestamp of when the resource was created."
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated Datetime",
            "description": "The timestamp of when the resource was last updated."
          },
          "removed": {
            "type": "boolean",
            "title": "Removed",
            "description": "Whether the resource has been removed from the lab.",
            "default": false
          },
          "quantity": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Quantity",
            "description": "The quantity of the discrete consumable.",
            "default": 0
          },
          "capacity": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Capacity",
            "description": "The maximum capacity of the discrete consumable."
          },
          "unit": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Unit",
            "description": "The unit used to measure the quantity of the consumable."
          }
        },
        "additionalProperties": true,
        "type": "object",
        "title": "DiscreteConsumable",
        "description": "Base class for all MADSci Discrete Consumables. These are consumables that are counted in whole numbers (things like pipette tips, tubes, etc.)."
      },
      "DiscreteConsumableResourceDefinition": {
        "properties": {
          "resource_name": {
            "type": "string",
            "title": "Resource Name",
            "description": "The name of the resource."
          },
          "resource_name_prefix": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Name Prefix",
            "description": "A prefix to append the key of the object to for machine instanciated resources"
          },
          "resource_class": {
            "type": "string",
            "title": "Resource Class",
            "description": "The class of the resource. Must match a class defined in the resource manager.",
            "default": ""
          },
          "base_type": {
            "type": "string",
            "const": "discrete_consumable",
            "title": "Resource Base Type",
            "description": "The base type of the consumable.",
            "default": "discrete_consumable"
          },
          "resource_description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Description",
            "description": "A description of the resource."
          },
          "owner": {
            "$ref": "#/components/schemas/OwnershipInfo",
            "title": "Ownership Info",
            "description": "The owner of this resource"
          },
          "custom_attributes": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/CustomResourceAttributeDefinition"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Custom Attributes",
            "description": "Custom attributes used by resources of this type."
          },
          "unit": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Unit",
            "description": "The unit used to measure the quantity of the consumable."
          },
          "quantity": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Default Resource Quantity",
            "description": "The initial quantity of the consumable.",
            "default": 0
          },
          "capacity": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Capacity",
            "description": "The initial capacity of the consumable."
          }
        },
        "additionalProperties": true,
        "type": "object",
        "title": "DiscreteConsumableResourceDefinition",
        "description": "Definition for a discrete consumable resource."
      },
      "Grid": {
        "properties": {
          "resource_name": {
            "type": "string",
            "title": "Resource Name",
            "description": "The name of the resource."
          },
          "resource_name_prefix": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Name Prefix",
            "description": "A prefix to append the key of the object to for machine instanciated resources"
          },
          "resource_class": {
            "type": "string",
            "title": "Resource Class",
            "description": "The class of the resource. Must match a class defined in the resource manager.",
            "default": ""
          },
          "base_type": {
            "type": "string",
            "const": "grid",
            "title": "Container Base Type",
            "description": "The base type of the grid.",
            "default": "grid"
          },
          "resource_description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Description",
            "description": "A description of the resource."
          },
          "owner": {
            "$ref": "#/components/schemas/OwnershipInfo",
            "title": "Ownership Info",
            "description": "The owner of this resource"
          },
          "custom_attributes": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/CustomResourceAttributeDefinition"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Custom Attributes",
            "description": "Custom attributes used by resources of this type."
          },
          "resource_id": {
            "type": "string",
            "title": "Resource ID",
            "description": "The ID of the resource."
          },
          "resource_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource URL",
            "description": "The URL of the resource."
          },
          "parent_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Resource",
            "description": "The parent resource ID, if any."
          },
          "key": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Key",
            "description": "The key of the resource in the parent container, if any."
          },
          "attributes": {
            "additionalProperties": true,
            "type": "object",
            "title": "Attributes",
            "description": "Custom attributes for the asset."
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created Datetime",
            "description": "The timestamp of when the resource was created."
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated Datetime",
            "description": "The timestamp of when the resource was last updated."
          },
          "removed": {
            "type": "boolean",
            "title": "Removed",
            "description": "Whether the resource has been removed from the lab.",
            "default": false
          },
          "capacity": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Capacity",
            "description": "The capacity of the container."
          },
          "children": {
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/Row"
                },
                {
                  "type": "null"
                }
              ]
            },
            "type": "array",
            "title": "Children",
            "description": "The children of the grid container.",
            "default": []
          },
          "columns": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Number of Columns",
            "description": "The number of columns in the row."
          },
          "is_one_indexed": {
            "type": "boolean",
            "title": "One Indexed",
            "description": "Whether the numeric index of the object start at 0 or 1, only used with string keys",
            "default": true
          },
          "rows": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Number of Rows",
            "description": "The number of rows in the grid."
          }
        },
        "additionalProperties": true,
        "type": "object",
        "required": [
          "columns",
          "rows"
        ],
        "title": "Grid",
        "description": "Data Model for a Grid. A grid is a container that can hold other resources in two dimensions and supports random access. For example, a 96-well microplate. Grids are indexed by integers or letters."
      },
      "GridResourceDefinition": {
        "properties": {
          "resource_name": {
            "type": "string",
            "title": "Resource Name",
            "description": "The name of the resource."
          },
          "resource_name_prefix": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Name Prefix",
            "description": "A prefix to append the key of the object to for machine instanciated resources"
          },
          "resource_class": {
            "type": "string",
            "title": "Resource Class",
            "description": "The class of the resource. Must match a class defined in the resource manager.",
            "default": ""
          },
          "base_type": {
            "type": "string",
            "const": "grid",
            "title": "Resource Base Type",
            "description": "The base type of the grid.",
            "default": "grid"
          },
          "resource_description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Description",
            "description": "A description of the resource."
          },
          "owner": {
            "$ref": "#/components/schemas/OwnershipInfo",
            "title": "Ownership Info",
            "description": "The owner of this resource"
          },
          "custom_attributes": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/CustomResourceAttributeDefinition"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Custom Attributes",
            "description": "Custom attributes used by resources of this type."
          },
          "capacity": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Container Capacity",
            "description": "The capacity of the container. If None, uses the type's default_capacity."
          },
          "default_children": {
            "anyOf": [
              {
                "additionalProperties": {
                  "additionalProperties": {
                    "$ref": "#/components/schemas/ResourceDefinition"
                  },
                  "type": "object"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Default Children",
            "description": "The default children to create when initializing the collection. If None, use the type's default_children."
          },
          "default_child_template": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AnyResourceDefinitionModel"
              },
              {
                "type": "null"
              }
            ],
            "title": "Default Child Template",
            "description": "Template for creating child resources, supporting variable substitution. If None, use the type's default_child_template."
          },
          "fill": {
            "type": "boolean",
            "title": "Fill",
            "description": "Whether to populate every empty key with a default child",
            "default": false
          },
          "columns": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Number of Columns",
            "description": "The number of columns in the row."
          },
          "is_one_indexed": {
            "type": "boolean",
            "title": "One Indexed",
            "description": "Whether the numeric index of the object start at 0 or 1",
            "default": true
          },
          "rows": {
            "type": "integer",
            "title": "Number of Rows",
            "description": "The number of rows in the grid. If None, use the type's rows."
          }
        },
        "additionalProperties": true,
        "type": "object",
        "required": [
          "columns"
        ],
        "title": "GridResourceDefinition",
        "description": "Definition for a grid resource. Grids are 2D grids of resources. They are treated as nested collections (i.e. Collection[Collection[Resource]])."
      },
      "HTTPValidationError": {
        "properties": {
          "detail": {
            "items": {
              "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
          }
        },
        "type": "object",
        "title": "HTTPValidationError"
      },
      "OwnershipInfo": {
        "properties": {
          "user_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "User ID",
            "description": "The ID of the user who owns the object."
          },
          "experiment_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Experiment ID",
            "description": "The ID of the experiment that owns the object."
          },
          "campaign_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Campaign ID",
            "description": "The ID of the campaign that owns the object."
          },
          "project_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Project ID",
            "description": "The ID of the project that owns the object."
          },
          "node_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Node ID",
            "description": "The ID of the node that owns the object."
          },
          "workcell_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Workcell ID",
            "description": "The ID of the workcell that owns the object."
          },
          "lab_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Lab ID",
            "description": "The ID of the lab that owns the object."
          },
          "step_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Step ID",
            "description": "The ID of the step that owns the object."
          },
          "workflow_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Workflow ID",
            "description": "The ID of the workflow that owns the object."
          },
          "manager_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Manager ID",
            "description": "The ID of the manager that owns the object."
          }
        },
        "type": "object",
        "title": "OwnershipInfo",
        "description": "Information about the ownership of a MADSci object."
      },
      "Pool": {
        "properties": {
          "resource_name": {
            "type": "string",
            "title": "Resource Name",
            "description": "The name of the resource."
          },
          "resource_name_prefix": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Name Prefix",
            "description": "A prefix to append the key of the object to for machine instanciated resources"
          },
          "resource_class": {
            "type": "string",
            "title": "Resource Class",
            "description": "The class of the resource. Must match a class defined in the resource manager.",
            "default": ""
          },
          "base_type": {
            "type": "string",
            "const": "pool",
            "title": "Container Base Type",
            "description": "The base type of the pool.",
            "default": "pool"
          },
          "resource_description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Description",
            "description": "A description of the resource."
          },
          "owner": {
            "$ref": "#/components/schemas/OwnershipInfo",
            "title": "Ownership Info",
            "description": "The owner of this resource"
          },
          "custom_attributes": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/CustomResourceAttributeDefinition"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Custom Attributes",
            "description": "Custom attributes used by resources of this type."
          },
          "resource_id": {
            "type": "string",
            "title": "Resource ID",
            "description": "The ID of the resource."
          },
          "resource_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource URL",
            "description": "The URL of the resource."
          },
          "parent_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Resource",
            "description": "The parent resource ID, if any."
          },
          "key": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Key",
            "description": "The key of the resource in the parent container, if any."
          },
          "attributes": {
            "additionalProperties": true,
            "type": "object",
            "title": "Attributes",
            "description": "Custom attributes for the asset."
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created Datetime",
            "description": "The timestamp of when the resource was created."
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated Datetime",
            "description": "The timestamp of when the resource was last updated."
          },
          "removed": {
            "type": "boolean",
            "title": "Removed",
            "description": "Whether the resource has been removed from the lab.",
            "default": false
          },
          "capacity": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Capacity",
            "description": "The capacity of the pool as a whole."
          },
          "children": {
            "additionalProperties": {
              "oneOf": [
                {
                  "$ref": "#/components/schemas/Consumable"
                },
                {
                  "$ref": "#/components/schemas/DiscreteConsumable"
                },
                {
                  "$ref": "#/components/schemas/ContinuousConsumable"
                }
              ],
              "discriminator": {
                "propertyName": "base_type",
                "mapping": {
                  "consumable": "#/components/schemas/Consumable",
                  "continuous_consumable": "#/components/schemas/ContinuousConsumable",
                  "discrete_consumable": "#/components/schemas/DiscreteConsumable"
                }
              }
            },
            "type": "object",
            "title": "Children",
            "description": "The children of the pool."
          }
        },
        "additionalProperties": true,
        "type": "object",
        "title": "Pool",
        "description": "Data Model for a Pool. A pool is a container for holding consumables that can be mixed or collocated. For example, a single well in a microplate, or a reservoir. Pools are indexed by string key."
      },
      "PoolResourceDefinition": {
        "properties": {
          "resource_name": {
            "type": "string",
            "title": "Resource Name",
            "description": "The name of the resource."
          },
          "resource_name_prefix": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Name Prefix",
            "description": "A prefix to append the key of the object to for machine instanciated resources"
          },
          "resource_class": {
            "type": "string",
            "title": "Resource Class",
            "description": "The class of the resource. Must match a class defined in the resource manager.",
            "default": ""
          },
          "base_type": {
            "type": "string",
            "const": "pool",
            "title": "Resource Base Type",
            "description": "The base type of the pool.",
            "default": "pool"
          },
          "resource_description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Description",
            "description": "A description of the resource."
          },
          "owner": {
            "$ref": "#/components/schemas/OwnershipInfo",
            "title": "Ownership Info",
            "description": "The owner of this resource"
          },
          "custom_attributes": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/CustomResourceAttributeDefinition"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Custom Attributes",
            "description": "Custom attributes used by resources of this type."
          },
          "capacity": {
            "anyOf": [
              {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  }
                ],
                "ge": 0
              },
              {
                "type": "null"
              }
            ],
            "title": "Capacity",
            "description": "The default capacity of the pool as a whole."
          },
          "default_children": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/ResourceDefinition"
                },
                "type": "array"
              },
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/ResourceDefinition"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Default Children",
            "description": "The default children to create when initializing the container. If None, use the type's default_children."
          },
          "default_child_template": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AnyResourceDefinitionModel"
              },
              {
                "type": "null"
              }
            ],
            "title": "Default Child Template",
            "description": "Template for creating child resources, supporting variable substitution. If None, use the type's default_child_template."
          },
          "unit": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Unit",
            "description": "The unit used to measure the quantity of the pool."
          }
        },
        "additionalProperties": true,
        "type": "object",
        "title": "PoolResourceDefinition",
        "description": "Definition for a pool resource. Pool resources are collections of consumables with no structure (used for wells, reservoirs, etc.)."
      },
      "PushResourceBody": {
        "properties": {
          "child_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Child Id"
          },
          "child": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AnyResourceModel"
              },
              {
                "type": "null"
              }
            ],
            "title": "Child"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "PushResourceBody",
        "description": "A request to push a resource to the database."
      },
      "Queue": {
        "properties": {
          "resource_name": {
            "type": "string",
            "title": "Resource Name",
            "description": "The name of the resource."
          },
          "resource_name_prefix": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Name Prefix",
            "description": "A prefix to append the key of the object to for machine instanciated resources"
          },
          "resource_class": {
            "type": "string",
            "title": "Resource Class",
            "description": "The class of the resource. Must match a class defined in the resource manager.",
            "default": ""
          },
          "base_type": {
            "type": "string",
            "const": "queue",
            "title": "Container Base Type",
            "description": "The base type of the queue.",
            "default": "queue"
          },
          "resource_description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Description",
            "description": "A description of the resource."
          },
          "owner": {
            "$ref": "#/components/schemas/OwnershipInfo",
            "title": "Ownership Info",
            "description": "The owner of this resource"
          },
          "custom_attributes": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/CustomResourceAttributeDefinition"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Custom Attributes",
            "description": "Custom attributes used by resources of this type."
          },
          "resource_id": {
            "type": "string",
            "title": "Resource ID",
            "description": "The ID of the resource."
          },
          "resource_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource URL",
            "description": "The URL of the resource."
          },
          "parent_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Resource",
            "description": "The parent resource ID, if any."
          },
          "key": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Key",
            "description": "The key of the resource in the parent container, if any."
          },
          "attributes": {
            "additionalProperties": true,
            "type": "object",
            "title": "Attributes",
            "description": "Custom attributes for the asset."
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created Datetime",
            "description": "The timestamp of when the resource was created."
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated Datetime",
            "description": "The timestamp of when the resource was last updated."
          },
          "removed": {
            "type": "boolean",
            "title": "Removed",
            "description": "Whether the resource has been removed from the lab.",
            "default": false
          },
          "capacity": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Capacity",
            "description": "The capacity of the container."
          },
          "children": {
            "items": {
              "$ref": "#/components/schemas/AnyResourceModel"
            },
            "type": "array",
            "title": "Children",
            "description": "The children of the queue."
          }
        },
        "additionalProperties": true,
        "type": "object",
        "title": "Queue",
        "description": "Data Model for a Queue. A queue is a container that can hold other resources in a single dimension and supports first-in, first-out (FIFO) access. For example, a conveyer belt. Queues are indexed by integers, with 0 being the front."
      },
      "QueueResourceDefinition": {
        "properties": {
          "resource_name": {
            "type": "string",
            "title": "Resource Name",
            "description": "The name of the resource."
          },
          "resource_name_prefix": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Name Prefix",
            "description": "A prefix to append the key of the object to for machine instanciated resources"
          },
          "resource_class": {
            "type": "string",
            "title": "Resource Class",
            "description": "The class of the resource. Must match a class defined in the resource manager.",
            "default": ""
          },
          "base_type": {
            "type": "string",
            "const": "queue",
            "title": "Resource Base Type",
            "description": "The base type of the queue.",
            "default": "queue"
          },
          "resource_description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Description",
            "description": "A description of the resource."
          },
          "owner": {
            "$ref": "#/components/schemas/OwnershipInfo",
            "title": "Ownership Info",
            "description": "The owner of this resource"
          },
          "custom_attributes": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/CustomResourceAttributeDefinition"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Custom Attributes",
            "description": "Custom attributes used by resources of this type."
          },
          "capacity": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Container Capacity",
            "description": "The capacity of the container. If None, uses the type's default_capacity."
          },
          "default_children": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/ResourceDefinition"
                },
                "type": "array"
              },
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/ResourceDefinition"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Default Children",
            "description": "The default children to create when initializing the container. If None, use the type's default_children."
          },
          "default_child_template": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AnyResourceDefinitionModel"
              },
              {
                "type": "null"
              }
            ],
            "title": "Default Child Template",
            "description": "Template for creating child resources, supporting variable substitution. If None, use the type's default_child_template."
          },
          "default_child_quantity": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Default Child Quantity",
            "description": "The number of children to create by default. If None, use the type's default_child_quantity."
          }
        },
        "additionalProperties": true,
        "type": "object",
        "title": "QueueResourceDefinition",
        "description": "Definition for a queue resource."
      },
      "RemoveChildBody": {
        "properties": {
          "key": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "prefixItems": [
                  {
                    "anyOf": [
                      {
                        "type": "integer"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "anyOf": [
                      {
                        "type": "integer"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  }
                ],
                "type": "array",
                "maxItems": 2,
                "minItems": 2
              },
              {
                "prefixItems": [
                  {
                    "anyOf": [
                      {
                        "type": "integer"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "anyOf": [
                      {
                        "type": "integer"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "anyOf": [
                      {
                        "type": "integer"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  }
                ],
                "type": "array",
                "maxItems": 3,
                "minItems": 3
              }
            ],
            "title": "Key"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "key"
        ],
        "title": "RemoveChildBody",
        "description": "A request to remove a child resource."
      },
      "Resource": {
        "properties": {
          "resource_name": {
            "type": "string",
            "title": "Resource Name",
            "description": "The name of the resource."
          },
          "resource_name_prefix": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Name Prefix",
            "description": "A prefix to append the key of the object to for machine instanciated resources"
          },
          "resource_class": {
            "type": "string",
            "title": "Resource Class",
            "description": "The class of the resource. Must match a class defined in the resource manager.",
            "default": ""
          },
          "base_type": {
            "type": "string",
            "const": "resource",
            "title": "Resource Base Type",
            "description": "The base type of the resource.",
            "default": "resource"
          },
          "resource_description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Description",
            "description": "A description of the resource."
          },
          "owner": {
            "$ref": "#/components/schemas/OwnershipInfo",
            "title": "Ownership Info",
            "description": "The owner of this resource"
          },
          "custom_attributes": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/CustomResourceAttributeDefinition"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Custom Attributes",
            "description": "Custom attributes used by resources of this type."
          },
          "resource_id": {
            "type": "string",
            "title": "Resource ID",
            "description": "The ID of the resource."
          },
          "resource_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource URL",
            "description": "The URL of the resource."
          },
          "parent_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Resource",
            "description": "The parent resource ID, if any."
          },
          "key": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Key",
            "description": "The key of the resource in the parent container, if any."
          },
          "attributes": {
            "additionalProperties": true,
            "type": "object",
            "title": "Attributes",
            "description": "Custom attributes for the asset."
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created Datetime",
            "description": "The timestamp of when the resource was created."
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated Datetime",
            "description": "The timestamp of when the resource was last updated."
          },
          "removed": {
            "type": "boolean",
            "title": "Removed",
            "description": "Whether the resource has been removed from the lab.",
            "default": false
          }
        },
        "additionalProperties": true,
        "type": "object",
        "title": "Resource",
        "description": "Base class for all MADSci Resources. Used to track any resource that isn't well-modeled by a more specific type."
      },
      "ResourceDefinition": {
        "properties": {
          "resource_name": {
            "type": "string",
            "title": "Resource Name",
            "description": "The name of the resource."
          },
          "resource_name_prefix": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Name Prefix",
            "description": "A prefix to append the key of the object to for machine instanciated resources"
          },
          "resource_class": {
            "type": "string",
            "title": "Resource Class",
            "description": "The class of the resource. Must match a class defined in the resource manager.",
            "default": ""
          },
          "base_type": {
            "type": "string",
            "const": "resource",
            "title": "Resource Base Type",
            "description": "The base type of the resource.",
            "default": "resource"
          },
          "resource_description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Description",
            "description": "A description of the resource."
          },
          "owner": {
            "$ref": "#/components/schemas/OwnershipInfo",
            "title": "Ownership Info",
            "description": "The owner of this resource"
          },
          "custom_attributes": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/CustomResourceAttributeDefinition"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Custom Attributes",
            "description": "Custom attributes used by resources of this type."
          }
        },
        "additionalProperties": true,
        "type": "object",
        "title": "ResourceDefinition",
        "description": "Definition for a MADSci Resource."
      },
      "ResourceGetQuery": {
        "properties": {
          "resource_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Id"
          },
          "resource_name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Name"
          },
          "resource_description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Description"
          },
          "parent_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Id"
          },
          "resource_class": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Class"
          },
          "base_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Base Type"
          },
          "owner": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/OwnershipInfo"
              },
              {
                "type": "null"
              }
            ]
          },
          "unique": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Unique",
            "default": false
          },
          "multiple": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Multiple",
            "default": true
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "ResourceGetQuery",
        "description": "A request to get a resource from the database."
      },
      "ResourceHistoryGetQuery": {
        "properties": {
          "resource_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Id"
          },
          "version": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Version"
          },
          "removed": {
            "anyOf": [
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ],
            "title": "Removed"
          },
          "change_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Change Type"
          },
          "start_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Start Date"
          },
          "end_date": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "End Date"
          },
          "limit": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Limit"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "ResourceHistoryGetQuery",
        "description": "A request to get the history of a resource from the database."
      },
      "Row": {
        "properties": {
          "resource_name": {
            "type": "string",
            "title": "Resource Name",
            "description": "The name of the resource."
          },
          "resource_name_prefix": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Name Prefix",
            "description": "A prefix to append the key of the object to for machine instanciated resources"
          },
          "resource_class": {
            "type": "string",
            "title": "Resource Class",
            "description": "The class of the resource. Must match a class defined in the resource manager.",
            "default": ""
          },
          "base_type": {
            "type": "string",
            "const": "row",
            "title": "Container Base Type",
            "description": "The base type of the row.",
            "default": "row"
          },
          "resource_description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Description",
            "description": "A description of the resource."
          },
          "owner": {
            "$ref": "#/components/schemas/OwnershipInfo",
            "title": "Ownership Info",
            "description": "The owner of this resource"
          },
          "custom_attributes": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/CustomResourceAttributeDefinition"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Custom Attributes",
            "description": "Custom attributes used by resources of this type."
          },
          "resource_id": {
            "type": "string",
            "title": "Resource ID",
            "description": "The ID of the resource."
          },
          "resource_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource URL",
            "description": "The URL of the resource."
          },
          "parent_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Resource",
            "description": "The parent resource ID, if any."
          },
          "key": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Key",
            "description": "The key of the resource in the parent container, if any."
          },
          "attributes": {
            "additionalProperties": true,
            "type": "object",
            "title": "Attributes",
            "description": "Custom attributes for the asset."
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created Datetime",
            "description": "The timestamp of when the resource was created."
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated Datetime",
            "description": "The timestamp of when the resource was last updated."
          },
          "removed": {
            "type": "boolean",
            "title": "Removed",
            "description": "Whether the resource has been removed from the lab.",
            "default": false
          },
          "capacity": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Capacity",
            "description": "The capacity of the container."
          },
          "children": {
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/AnyResourceModel"
                },
                {
                  "type": "null"
                }
              ]
            },
            "type": "array",
            "title": "Children",
            "description": "The children of the row container.",
            "default": []
          },
          "columns": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Number of Columns",
            "description": "The number of columns in the row."
          },
          "is_one_indexed": {
            "type": "boolean",
            "title": "One Indexed",
            "description": "Whether the numeric index of the object start at 0 or 1, only used with string keys",
            "default": true
          }
        },
        "additionalProperties": true,
        "type": "object",
        "required": [
          "columns"
        ],
        "title": "Row",
        "description": "Data Model for a Row. A row is a container that can hold other resources in a single dimension and supports random access. For example, a row of tubes in a rack or a single-row microplate. Rows are indexed by integers or letters."
      },
      "RowResourceDefinition": {
        "properties": {
          "resource_name": {
            "type": "string",
            "title": "Resource Name",
            "description": "The name of the resource."
          },
          "resource_name_prefix": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Name Prefix",
            "description": "A prefix to append the key of the object to for machine instanciated resources"
          },
          "resource_class": {
            "type": "string",
            "title": "Resource Class",
            "description": "The class of the resource. Must match a class defined in the resource manager.",
            "default": ""
          },
          "base_type": {
            "type": "string",
            "const": "row",
            "title": "Resource Base Type",
            "description": "The base type of the row.",
            "default": "row"
          },
          "resource_description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Description",
            "description": "A description of the resource."
          },
          "owner": {
            "$ref": "#/components/schemas/OwnershipInfo",
            "title": "Ownership Info",
            "description": "The owner of this resource"
          },
          "custom_attributes": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/CustomResourceAttributeDefinition"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Custom Attributes",
            "description": "Custom attributes used by resources of this type."
          },
          "capacity": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Container Capacity",
            "description": "The capacity of the container. If None, uses the type's default_capacity."
          },
          "default_children": {
            "anyOf": [
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/ResourceDefinition"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Default Children",
            "description": "The default children to create when initializing the collection. If None, use the type's default_children."
          },
          "default_child_template": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AnyResourceDefinitionModel"
              },
              {
                "type": "null"
              }
            ],
            "title": "Default Child Template",
            "description": "Template for creating child resources, supporting variable substitution. If None, use the type's default_child_template."
          },
          "fill": {
            "type": "boolean",
            "title": "Fill",
            "description": "Whether to populate every empty key with a default child",
            "default": false
          },
          "columns": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Number of Columns",
            "description": "The number of columns in the row."
          },
          "is_one_indexed": {
            "type": "boolean",
            "title": "One Indexed",
            "description": "Whether the numeric index of the object start at 0 or 1",
            "default": true
          }
        },
        "additionalProperties": true,
        "type": "object",
        "required": [
          "columns"
        ],
        "title": "RowResourceDefinition",
        "description": "Definition for a row resource. Rows are 1D collections of resources. They are treated as single collections (i.e. Collection[Resource])."
      },
      "SetChildBody": {
        "properties": {
          "key": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "integer"
              },
              {
                "prefixItems": [
                  {
                    "anyOf": [
                      {
                        "type": "integer"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "anyOf": [
                      {
                        "type": "integer"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  }
                ],
                "type": "array",
                "maxItems": 2,
                "minItems": 2
              },
              {
                "prefixItems": [
                  {
                    "anyOf": [
                      {
                        "type": "integer"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "anyOf": [
                      {
                        "type": "integer"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  },
                  {
                    "anyOf": [
                      {
                        "type": "integer"
                      },
                      {
                        "type": "string"
                      }
                    ]
                  }
                ],
                "type": "array",
                "maxItems": 3,
                "minItems": 3
              }
            ],
            "title": "Key"
          },
          "child": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "$ref": "#/components/schemas/AnyResourceModel"
              }
            ],
            "title": "Child"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "key",
          "child"
        ],
        "title": "SetChildBody",
        "description": "A request to set a child resource."
      },
      "Slot": {
        "properties": {
          "resource_name": {
            "type": "string",
            "title": "Resource Name",
            "description": "The name of the resource."
          },
          "resource_name_prefix": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Name Prefix",
            "description": "A prefix to append the key of the object to for machine instanciated resources"
          },
          "resource_class": {
            "type": "string",
            "title": "Resource Class",
            "description": "The class of the resource. Must match a class defined in the resource manager.",
            "default": ""
          },
          "base_type": {
            "type": "string",
            "const": "slot",
            "title": "Container Base Type",
            "description": "The base type of the slot.",
            "default": "slot"
          },
          "resource_description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Description",
            "description": "A description of the resource."
          },
          "owner": {
            "$ref": "#/components/schemas/OwnershipInfo",
            "title": "Ownership Info",
            "description": "The owner of this resource"
          },
          "custom_attributes": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/CustomResourceAttributeDefinition"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Custom Attributes",
            "description": "Custom attributes used by resources of this type."
          },
          "resource_id": {
            "type": "string",
            "title": "Resource ID",
            "description": "The ID of the resource."
          },
          "resource_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource URL",
            "description": "The URL of the resource."
          },
          "parent_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Resource",
            "description": "The parent resource ID, if any."
          },
          "key": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Key",
            "description": "The key of the resource in the parent container, if any."
          },
          "attributes": {
            "additionalProperties": true,
            "type": "object",
            "title": "Attributes",
            "description": "Custom attributes for the asset."
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created Datetime",
            "description": "The timestamp of when the resource was created."
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated Datetime",
            "description": "The timestamp of when the resource was last updated."
          },
          "removed": {
            "type": "boolean",
            "title": "Removed",
            "description": "Whether the resource has been removed from the lab.",
            "default": false
          },
          "capacity": {
            "type": "integer",
            "const": 1,
            "title": "Capacity",
            "description": "The capacity of the slot.",
            "default": 1
          },
          "children": {
            "items": {
              "$ref": "#/components/schemas/AnyResourceModel"
            },
            "type": "array",
            "title": "Children",
            "description": "The children of the slot."
          }
        },
        "additionalProperties": true,
        "type": "object",
        "title": "Slot",
        "description": "Data Model for a Slot. A slot is a container that can hold a single resource."
      },
      "SlotResourceDefinition": {
        "properties": {
          "resource_name": {
            "type": "string",
            "title": "Resource Name",
            "description": "The name of the resource."
          },
          "resource_name_prefix": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Name Prefix",
            "description": "A prefix to append the key of the object to for machine instanciated resources"
          },
          "resource_class": {
            "type": "string",
            "title": "Resource Class",
            "description": "The class of the resource. Must match a class defined in the resource manager.",
            "default": ""
          },
          "base_type": {
            "type": "string",
            "const": "slot",
            "title": "Resource Base Type",
            "description": "The base type of the slot.",
            "default": "slot"
          },
          "resource_description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Description",
            "description": "A description of the resource."
          },
          "owner": {
            "$ref": "#/components/schemas/OwnershipInfo",
            "title": "Ownership Info",
            "description": "The owner of this resource"
          },
          "custom_attributes": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/CustomResourceAttributeDefinition"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Custom Attributes",
            "description": "Custom attributes used by resources of this type."
          },
          "capacity": {
            "type": "integer",
            "const": 1,
            "title": "Capacity",
            "description": "The capacity of the slot.",
            "default": 1
          },
          "default_children": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/ResourceDefinition"
                },
                "type": "array"
              },
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/ResourceDefinition"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Default Children",
            "description": "The default children to create when initializing the container. If None, use the type's default_children."
          },
          "default_child_template": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AnyResourceDefinitionModel"
              },
              {
                "type": "null"
              }
            ],
            "title": "Default Child Template",
            "description": "Template for creating child resources, supporting variable substitution. If None, use the type's default_child_template."
          },
          "default_child_quantity": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 1.0,
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Default Child Quantity",
            "description": "The number of children to create by default. If None, use the type's default_child_quantity."
          }
        },
        "additionalProperties": true,
        "type": "object",
        "title": "SlotResourceDefinition",
        "description": "Definition for a slot resource."
      },
      "Stack": {
        "properties": {
          "resource_name": {
            "type": "string",
            "title": "Resource Name",
            "description": "The name of the resource."
          },
          "resource_name_prefix": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Name Prefix",
            "description": "A prefix to append the key of the object to for machine instanciated resources"
          },
          "resource_class": {
            "type": "string",
            "title": "Resource Class",
            "description": "The class of the resource. Must match a class defined in the resource manager.",
            "default": ""
          },
          "base_type": {
            "type": "string",
            "const": "stack",
            "title": "Container Base Type",
            "description": "The base type of the stack.",
            "default": "stack"
          },
          "resource_description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Description",
            "description": "A description of the resource."
          },
          "owner": {
            "$ref": "#/components/schemas/OwnershipInfo",
            "title": "Ownership Info",
            "description": "The owner of this resource"
          },
          "custom_attributes": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/CustomResourceAttributeDefinition"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Custom Attributes",
            "description": "Custom attributes used by resources of this type."
          },
          "resource_id": {
            "type": "string",
            "title": "Resource ID",
            "description": "The ID of the resource."
          },
          "resource_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource URL",
            "description": "The URL of the resource."
          },
          "parent_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Resource",
            "description": "The parent resource ID, if any."
          },
          "key": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Key",
            "description": "The key of the resource in the parent container, if any."
          },
          "attributes": {
            "additionalProperties": true,
            "type": "object",
            "title": "Attributes",
            "description": "Custom attributes for the asset."
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created Datetime",
            "description": "The timestamp of when the resource was created."
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated Datetime",
            "description": "The timestamp of when the resource was last updated."
          },
          "removed": {
            "type": "boolean",
            "title": "Removed",
            "description": "Whether the resource has been removed from the lab.",
            "default": false
          },
          "capacity": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Capacity",
            "description": "The capacity of the container."
          },
          "children": {
            "items": {
              "$ref": "#/components/schemas/AnyResourceModel"
            },
            "type": "array",
            "title": "Children",
            "description": "The children of the stack."
          }
        },
        "additionalProperties": true,
        "type": "object",
        "title": "Stack",
        "description": "Data Model for a Stack. A stack is a container that can hold other resources in a single dimension and supports last-in, first-out (LIFO) access. For example, a stack of plates in a vertical magazine. Stacks are indexed by integers, with 0 being the bottom."
      },
      "StackResourceDefinition": {
        "properties": {
          "resource_name": {
            "type": "string",
            "title": "Resource Name",
            "description": "The name of the resource."
          },
          "resource_name_prefix": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Name Prefix",
            "description": "A prefix to append the key of the object to for machine instanciated resources"
          },
          "resource_class": {
            "type": "string",
            "title": "Resource Class",
            "description": "The class of the resource. Must match a class defined in the resource manager.",
            "default": ""
          },
          "base_type": {
            "type": "string",
            "const": "stack",
            "title": "Resource Base Type",
            "description": "The base type of the stack.",
            "default": "stack"
          },
          "resource_description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Description",
            "description": "A description of the resource."
          },
          "owner": {
            "$ref": "#/components/schemas/OwnershipInfo",
            "title": "Ownership Info",
            "description": "The owner of this resource"
          },
          "custom_attributes": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/CustomResourceAttributeDefinition"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Custom Attributes",
            "description": "Custom attributes used by resources of this type."
          },
          "capacity": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Container Capacity",
            "description": "The capacity of the container. If None, uses the type's default_capacity."
          },
          "default_children": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/ResourceDefinition"
                },
                "type": "array"
              },
              {
                "additionalProperties": {
                  "$ref": "#/components/schemas/ResourceDefinition"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Default Children",
            "description": "The default children to create when initializing the container. If None, use the type's default_children."
          },
          "default_child_template": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AnyResourceDefinitionModel"
              },
              {
                "type": "null"
              }
            ],
            "title": "Default Child Template",
            "description": "Template for creating child resources, supporting variable substitution. If None, use the type's default_child_template."
          },
          "default_child_quantity": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ],
            "title": "Default Child Quantity",
            "description": "The number of children to create by default. If None, use the type's default_child_quantity."
          }
        },
        "additionalProperties": true,
        "type": "object",
        "title": "StackResourceDefinition",
        "description": "Definition for a stack resource."
      },
      "TemplateCreateBody": {
        "properties": {
          "resource": {
            "$ref": "#/components/schemas/AnyResourceModel"
          },
          "template_name": {
            "type": "string",
            "title": "Template Name"
          },
          "description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Description",
            "default": ""
          },
          "required_overrides": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Required Overrides"
          },
          "tags": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tags"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          },
          "version": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Version",
            "default": "1.0.0"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "resource",
          "template_name"
        ],
        "title": "TemplateCreateBody",
        "description": "A request to create a template from a resource."
      },
      "TemplateGetQuery": {
        "properties": {
          "base_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Base Type"
          },
          "tags": {
            "anyOf": [
              {
                "items": {
                  "type": "string"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Tags"
          },
          "created_by": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created By"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "TemplateGetQuery",
        "description": "A request to list/filter templates."
      },
      "TemplateUpdateBody": {
        "properties": {
          "updates": {
            "additionalProperties": true,
            "type": "object",
            "title": "Updates"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "updates"
        ],
        "title": "TemplateUpdateBody",
        "description": "A request to update a template."
      },
      "ValidationError": {
        "properties": {
          "loc": {
            "items": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "integer"
                }
              ]
            },
            "type": "array",
            "title": "Location"
          },
          "msg": {
            "type": "string",
            "title": "Message"
          },
          "type": {
            "type": "string",
            "title": "Error Type"
          },
          "input": {
            "title": "Input"
          },
          "ctx": {
            "type": "object",
            "title": "Context"
          }
        },
        "type": "object",
        "required": [
          "loc",
          "msg",
          "type"
        ],
        "title": "ValidationError"
      },
      "VoxelGrid": {
        "properties": {
          "resource_name": {
            "type": "string",
            "title": "Resource Name",
            "description": "The name of the resource."
          },
          "resource_name_prefix": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Name Prefix",
            "description": "A prefix to append the key of the object to for machine instanciated resources"
          },
          "resource_class": {
            "type": "string",
            "title": "Resource Class",
            "description": "The class of the resource. Must match a class defined in the resource manager.",
            "default": ""
          },
          "base_type": {
            "type": "string",
            "const": "voxel_grid",
            "title": "Container Base Type",
            "description": "The base type of the voxel grid.",
            "default": "voxel_grid"
          },
          "resource_description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Description",
            "description": "A description of the resource."
          },
          "owner": {
            "$ref": "#/components/schemas/OwnershipInfo",
            "title": "Ownership Info",
            "description": "The owner of this resource"
          },
          "custom_attributes": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/CustomResourceAttributeDefinition"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Custom Attributes",
            "description": "Custom attributes used by resources of this type."
          },
          "resource_id": {
            "type": "string",
            "title": "Resource ID",
            "description": "The ID of the resource."
          },
          "resource_url": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource URL",
            "description": "The URL of the resource."
          },
          "parent_id": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Parent Resource",
            "description": "The parent resource ID, if any."
          },
          "key": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Key",
            "description": "The key of the resource in the parent container, if any."
          },
          "attributes": {
            "additionalProperties": true,
            "type": "object",
            "title": "Attributes",
            "description": "Custom attributes for the asset."
          },
          "created_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Created Datetime",
            "description": "The timestamp of when the resource was created."
          },
          "updated_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ],
            "title": "Updated Datetime",
            "description": "The timestamp of when the resource was last updated."
          },
          "removed": {
            "type": "boolean",
            "title": "Removed",
            "description": "Whether the resource has been removed from the lab.",
            "default": false
          },
          "capacity": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Capacity",
            "description": "The capacity of the container."
          },
          "children": {
            "items": {
              "anyOf": [
                {
                  "$ref": "#/components/schemas/Grid"
                },
                {
                  "type": "null"
                }
              ]
            },
            "type": "array",
            "title": "Children",
            "description": "The children of the voxel grid container.",
            "default": []
          },
          "columns": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Number of Columns",
            "description": "The number of columns in the row."
          },
          "is_one_indexed": {
            "type": "boolean",
            "title": "One Indexed",
            "description": "Whether the numeric index of the object start at 0 or 1, only used with string keys",
            "default": true
          },
          "rows": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Number of Rows",
            "description": "The number of rows in the grid."
          },
          "layers": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Number of Layers",
            "description": "The number of layers in the voxel grid."
          }
        },
        "additionalProperties": true,
        "type": "object",
        "required": [
          "columns",
          "rows",
          "layers"
        ],
        "title": "VoxelGrid",
        "description": "Data Model for a Voxel Grid. A voxel grid is a container that can hold other resources in three dimensions and supports random access. Voxel grids are indexed by integers or letters."
      },
      "VoxelGridResourceDefinition": {
        "properties": {
          "resource_name": {
            "type": "string",
            "title": "Resource Name",
            "description": "The name of the resource."
          },
          "resource_name_prefix": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Name Prefix",
            "description": "A prefix to append the key of the object to for machine instanciated resources"
          },
          "resource_class": {
            "type": "string",
            "title": "Resource Class",
            "description": "The class of the resource. Must match a class defined in the resource manager.",
            "default": ""
          },
          "base_type": {
            "type": "string",
            "const": "voxel_grid",
            "title": "Resource Base Type",
            "description": "The base type of the voxel grid.",
            "default": "voxel_grid"
          },
          "resource_description": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Resource Description",
            "description": "A description of the resource."
          },
          "owner": {
            "$ref": "#/components/schemas/OwnershipInfo",
            "title": "Ownership Info",
            "description": "The owner of this resource"
          },
          "custom_attributes": {
            "anyOf": [
              {
                "items": {
                  "$ref": "#/components/schemas/CustomResourceAttributeDefinition"
                },
                "type": "array"
              },
              {
                "type": "null"
              }
            ],
            "title": "Custom Attributes",
            "description": "Custom attributes used by resources of this type."
          },
          "capacity": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "number"
              },
              {
                "type": "null"
              }
            ],
            "title": "Container Capacity",
            "description": "The capacity of the container. If None, uses the type's default_capacity."
          },
          "default_children": {
            "anyOf": [
              {
                "additionalProperties": {
                  "additionalProperties": {
                    "additionalProperties": {
                      "$ref": "#/components/schemas/ResourceDefinition"
                    },
                    "type": "object"
                  },
                  "type": "object"
                },
                "type": "object"
              },
              {
                "type": "null"
              }
            ],
            "title": "Default Children",
            "description": "The default children to create when initializing the collection. If None, use the type's default_children."
          },
          "default_child_template": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AnyResourceDefinitionModel"
              },
              {
                "type": "null"
              }
            ],
            "title": "Default Child Template",
            "description": "Template for creating child resources, supporting variable substitution. If None, use the type's default_child_template."
          },
          "fill": {
            "type": "boolean",
            "title": "Fill",
            "description": "Whether to populate every empty key with a default child",
            "default": false
          },
          "columns": {
            "type": "integer",
            "minimum": 0.0,
            "title": "Number of Columns",
            "description": "The number of columns in the row."
          },
          "is_one_indexed": {
            "type": "boolean",
            "title": "One Indexed",
            "description": "Whether the numeric index of the object start at 0 or 1",
            "default": true
          },
          "rows": {
            "type": "integer",
            "title": "Number of Rows",
            "description": "The number of rows in the grid. If None, use the type's rows."
          },
          "layers": {
            "type": "integer",
            "title": "Number of Layers",
            "description": "The number of layers in the voxel grid. If None, use the type's layers."
          }
        },
        "additionalProperties": true,
        "type": "object",
        "required": [
          "columns",
          "layers"
        ],
        "title": "VoxelGridResourceDefinition",
        "description": "Definition for a voxel grid resource. Voxel grids are 3D grids of resources. They are treated as nested collections (i.e. Collection[Collection[Collection[Resource]]])."
      },
      "AnyResourceModel": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/Resource"
          },
          {
            "$ref": "#/components/schemas/Asset"
          },
          {
            "$ref": "#/components/schemas/Consumable"
          },
          {
            "$ref": "#/components/schemas/DiscreteConsumable"
          },
          {
            "$ref": "#/components/schemas/ContinuousConsumable"
          },
          {
            "$ref": "#/components/schemas/Container"
          },
          {
            "$ref": "#/components/schemas/Collection"
          },
          {
            "$ref": "#/components/schemas/Row"
          },
          {
            "$ref": "#/components/schemas/Grid"
          },
          {
            "$ref": "#/components/schemas/VoxelGrid"
          },
          {
            "$ref": "#/components/schemas/Stack"
          },
          {
            "$ref": "#/components/schemas/Queue"
          },
          {
            "$ref": "#/components/schemas/Pool"
          },
          {
            "$ref": "#/components/schemas/Slot"
          }
        ],
        "title": "Resource",
        "discriminator": {
          "propertyName": "base_type",
          "mapping": {
            "resource": "#/components/schemas/Resource",
            "asset": "#/components/schemas/Asset",
            "consumable": "#/components/schemas/Consumable",
            "discrete_consumable": "#/components/schemas/DiscreteConsumable",
            "continuous_consumable": "#/components/schemas/ContinuousConsumable",
            "container": "#/components/schemas/Container",
            "collection": "#/components/schemas/Collection",
            "row": "#/components/schemas/Row",
            "grid": "#/components/schemas/Grid",
            "voxel_grid": "#/components/schemas/VoxelGrid",
            "stack": "#/components/schemas/Stack",
            "queue": "#/components/schemas/Queue",
            "pool": "#/components/schemas/Pool",
            "slot": "#/components/schemas/Slot"
          }
        }
      },
      "AnyResourceDefinitionModel": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/ResourceDefinition"
          },
          {
            "$ref": "#/components/schemas/AssetResourceDefinition"
          },
          {
            "$ref": "#/components/schemas/ContainerResourceDefinition"
          },
          {
            "$ref": "#/components/schemas/CollectionResourceDefinition"
          },
          {
            "$ref": "#/components/schemas/RowResourceDefinition"
          },
          {
            "$ref": "#/components/schemas/GridResourceDefinition"
          },
          {
            "$ref": "#/components/schemas/VoxelGridResourceDefinition"
          },
          {
            "$ref": "#/components/schemas/StackResourceDefinition"
          },
          {
            "$ref": "#/components/schemas/QueueResourceDefinition"
          },
          {
            "$ref": "#/components/schemas/PoolResourceDefinition"
          },
          {
            "$ref": "#/components/schemas/SlotResourceDefinition"
          },
          {
            "$ref": "#/components/schemas/ConsumableResourceDefinition"
          },
          {
            "$ref": "#/components/schemas/DiscreteConsumableResourceDefinition"
          },
          {
            "$ref": "#/components/schemas/ContinuousConsumableResourceDefinition"
          }
        ],
        "discriminator": {
          "propertyName": "base_type",
          "mapping": {
            "asset": "#/components/schemas/AssetResourceDefinition",
            "collection": "#/components/schemas/CollectionResourceDefinition",
            "consumable": "#/components/schemas/ConsumableResourceDefinition",
            "container": "#/components/schemas/ContainerResourceDefinition",
            "continuous_consumable": "#/components/schemas/ContinuousConsumableResourceDefinition",
            "discrete_consumable": "#/components/schemas/DiscreteConsumableResourceDefinition",
            "grid": "#/components/schemas/GridResourceDefinition",
            "pool": "#/components/schemas/PoolResourceDefinition",
            "queue": "#/components/schemas/QueueResourceDefinition",
            "resource": "#/components/schemas/ResourceDefinition",
            "row": "#/components/schemas/RowResourceDefinition",
            "slot": "#/components/schemas/SlotResourceDefinition",
            "stack": "#/components/schemas/StackResourceDefinition",
            "voxel_grid": "#/components/schemas/VoxelGridResourceDefinition"
          }
        }
      }
    }
  }
}
