Skip to content

Parameter Groups

albert.resources.parameter_groups

PGType

Bases: str, Enum

The kind of task a ParameterGroup relates to.

A Parameter Group is about making a sample and/or prepping it for measurement, and its type records which sort of task it is used in.

Attributes:

Name Type Description
GENERAL str

A group used in a general lab task (anything that is not a batch or property task).

BATCH str

A group used in a Batch Task (BatchTask), e.g. a mixing step when manufacturing a batch.

PROPERTY str

A group used in a property (measurement) task to prep a sample for testing.

GENERAL

GENERAL = 'general'

BATCH

BATCH = 'batch'

PROPERTY

PROPERTY = 'property'

DataType

Bases: str, Enum

The data type of a parameter value, driving how it is validated.

Used by ValueValidation to declare what kind of value a parameter accepts.

Attributes:

Name Type Description
NUMBER str

A numeric value.

STRING str

A free-text string value.

ENUM str

A value restricted to a fixed set of options (see EnumValidationValue).

IMAGE str

An image value.

CURVE str

A curve (series) value.

DATE str

A calendar date value stored as YYYY-MM-DD.

TIMESTAMP str

A date-and-time value in ISO 8601 format with a UTC offset (e.g. 2026-05-21T14:32:00+02:00).

NUMBER

NUMBER = 'number'

STRING

STRING = 'string'

ENUM

ENUM = 'enum'

IMAGE

IMAGE = 'image'

CURVE

CURVE = 'curve'

DATE

DATE = 'date'

TIMESTAMP

TIMESTAMP = 'timestamp'

Operator

Bases: str, Enum

A comparison operator constraining a numeric parameter value.

Used by ValueValidation to bound acceptable values (e.g. gte with a min requires the value to be at least min).

Attributes:

Name Type Description
BETWEEN str

Value must fall between min and max (inclusive).

LESS_THAN str

Value must be less than max.

LESS_THAN_OR_EQUAL str

Value must be less than or equal to max.

GREATER_THAN_OR_EQUAL str

Value must be greater than or equal to min.

GREATER_THAN str

Value must be greater than min.

EQUALS str

Value must equal the specified value.

BETWEEN

BETWEEN = 'between'

LESS_THAN

LESS_THAN = 'lt'

LESS_THAN_OR_EQUAL

LESS_THAN_OR_EQUAL = 'lte'

GREATER_THAN_OR_EQUAL

GREATER_THAN_OR_EQUAL = 'gte'

GREATER_THAN

GREATER_THAN = 'gt'

EQUALS

EQUALS = 'eq'

NOT_EQUALS

NOT_EQUALS = 'neq'

EnumValidationValue

Bases: BaseAlbertModel

Represents a value for an enum type validation.

Show JSON schema:
{
  "description": "Represents a value for an enum type validation.",
  "properties": {
    "text": {
      "description": "The text of the enum value.",
      "title": "Text",
      "type": "string"
    },
    "id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The ID of the enum value. If not provided, the ID will be generated upon creation.",
      "title": "Id"
    },
    "originalText": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Originaltext"
    }
  },
  "required": [
    "text"
  ],
  "title": "EnumValidationValue",
  "type": "object"
}

Fields:

text

text: str

The text of the enum value.

id

id: str | None = None

The ID of the enum value. If not provided, the ID will be generated upon creation.

original_text

original_text: str | None = None

ValueValidation

Bases: BaseAlbertModel

A validation rule constraining a ParameterValue.

Declares the expected DataType for a parameter value and, optionally, the bounds or allowed options it must satisfy. Attach one or more of these to a ParameterValue via its validation field.

When datatype is date or timestamp, value, min, and max are strings in the wire format documented on DataType.

Example

from albert.resources.parameter_groups import (
    DataType,
    Operator,
    ValueValidation,
)

rule = ValueValidation(
    datatype=DataType.NUMBER,
    operator=Operator.BETWEEN,
    min="0",
    max="100",
)
Show JSON schema:
{
  "$defs": {
    "DataType": {
      "description": "The data type of a parameter value, driving how it is validated.\n\nUsed by [`ValueValidation`][albert.resources.parameter_groups.ValueValidation] to declare what kind of value a parameter\naccepts.\n\nAttributes\n----------\nNUMBER : str\n    A numeric value.\nSTRING : str\n    A free-text string value.\nENUM : str\n    A value restricted to a fixed set of options (see\n    [`EnumValidationValue`][albert.resources.parameter_groups.EnumValidationValue]).\nIMAGE : str\n    An image value.\nCURVE : str\n    A curve (series) value.\nDATE : str\n    A calendar date value stored as ``YYYY-MM-DD``.\nTIMESTAMP : str\n    A date-and-time value in ISO 8601 format with a UTC offset\n    (e.g. ``2026-05-21T14:32:00+02:00``).",
      "enum": [
        "number",
        "string",
        "enum",
        "image",
        "curve",
        "date",
        "timestamp"
      ],
      "title": "DataType",
      "type": "string"
    },
    "EnumValidationValue": {
      "description": "Represents a value for an enum type validation.",
      "properties": {
        "text": {
          "description": "The text of the enum value.",
          "title": "Text",
          "type": "string"
        },
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The ID of the enum value. If not provided, the ID will be generated upon creation.",
          "title": "Id"
        },
        "originalText": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Originaltext"
        }
      },
      "required": [
        "text"
      ],
      "title": "EnumValidationValue",
      "type": "object"
    },
    "Operator": {
      "description": "A comparison operator constraining a numeric parameter value.\n\nUsed by [`ValueValidation`][albert.resources.parameter_groups.ValueValidation] to bound acceptable values (e.g. ``gte`` with\na ``min`` requires the value to be at least ``min``).\n\nAttributes\n----------\nBETWEEN : str\n    Value must fall between ``min`` and ``max`` (inclusive).\nLESS_THAN : str\n    Value must be less than ``max``.\nLESS_THAN_OR_EQUAL : str\n    Value must be less than or equal to ``max``.\nGREATER_THAN_OR_EQUAL : str\n    Value must be greater than or equal to ``min``.\nGREATER_THAN : str\n    Value must be greater than ``min``.\nEQUALS : str\n    Value must equal the specified value.",
      "enum": [
        "between",
        "lt",
        "lte",
        "gte",
        "gt",
        "eq",
        "neq"
      ],
      "title": "Operator",
      "type": "string"
    }
  },
  "description": "A validation rule constraining a [`ParameterValue`][albert.resources.parameter_groups.ParameterValue].\n\nDeclares the expected [`DataType`][albert.resources.parameter_groups.DataType] for a parameter value and, optionally,\nthe bounds or allowed options it must satisfy. Attach one or more of these to a\n[`ParameterValue`][albert.resources.parameter_groups.ParameterValue] via its ``validation`` field.\n\nWhen ``datatype`` is ``date`` or ``timestamp``, ``value``, ``min``, and ``max`` are\nstrings in the wire format documented on [`DataType`][albert.resources.parameter_groups.DataType].\n\n!!! example\n    ```python\n    from albert.resources.parameter_groups import (\n        DataType,\n        Operator,\n        ValueValidation,\n    )\n\n    rule = ValueValidation(\n        datatype=DataType.NUMBER,\n        operator=Operator.BETWEEN,\n        min=\"0\",\n        max=\"100\",\n    )\n    ```",
  "properties": {
    "datatype": {
      "$ref": "#/$defs/DataType",
      "description": "The data type the value must conform to. Required."
    },
    "value": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "items": {
            "$ref": "#/$defs/EnumValidationValue"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "For ``ENUM`` types, the list of allowed options (see [`EnumValidationValue`][albert.resources.parameter_groups.EnumValidationValue]); otherwise an optional expected value. For ``date`` and ``timestamp`` types, a string in the wire format documented on [`DataType`][albert.resources.parameter_groups.DataType].",
      "title": "Value"
    },
    "min": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The lower bound, used with ``operator``. For numeric types, a numeric string; for ``date`` and ``timestamp`` types, a string in the wire format documented on [`DataType`][albert.resources.parameter_groups.DataType].",
      "title": "Min"
    },
    "max": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The upper bound, used with ``operator``. For numeric types, a numeric string; for ``date`` and ``timestamp`` types, a string in the wire format documented on [`DataType`][albert.resources.parameter_groups.DataType].",
      "title": "Max"
    },
    "operator": {
      "anyOf": [
        {
          "$ref": "#/$defs/Operator"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The comparison operator applied against ``min`` and/or ``max``."
    }
  },
  "required": [
    "datatype"
  ],
  "title": "ValueValidation",
  "type": "object"
}

Fields:

datatype

datatype: DataType

The data type the value must conform to. Required.

value

value: str | list[EnumValidationValue] | None = None

For ENUM types, the list of allowed options (see EnumValidationValue); otherwise an optional expected value. For date and timestamp types, a string in the wire format documented on DataType.

min

min: str | None = None

The lower bound, used with operator. For numeric types, a numeric string; for date and timestamp types, a string in the wire format documented on DataType.

max

max: str | None = None

The upper bound, used with operator. For numeric types, a numeric string; for date and timestamp types, a string in the wire format documented on DataType.

operator

operator: Operator | None = None

The comparison operator applied against min and/or max.

ParameterValue

Bases: BaseAlbertModel

A single Parameter and its value within a ParameterGroup.

A ParameterValue binds one Parameter to the value, unit, and validation rules it takes inside a group. Each entry must reference an existing Parameter, so provide exactly one of id (the Parameter's Albert ID) or parameter (the Parameter object itself); when a parameter is given, the id, category, and name are populated from it. Values are later fixed to setpoints inside a Workflow.

Example

from albert.resources.parameter_groups import ParameterValue

# Reference the parameter by its Albert ID
value = ParameterValue(id="PRM9999999", value="500")
Show JSON schema:
{
  "$defs": {
    "ACL": {
      "description": "A single access rule for a user.",
      "properties": {
        "id": {
          "description": "The id of the user for which this ACL applies",
          "title": "Id",
          "type": "string"
        },
        "fgc": {
          "anyOf": [
            {
              "$ref": "#/$defs/AccessControlLevel"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Fine-Grain Control Level"
        }
      },
      "required": [
        "id"
      ],
      "title": "ACL",
      "type": "object"
    },
    "AccessControlLevel": {
      "description": "Access control levels you can grant users.",
      "enum": [
        "ProjectOwner",
        "ProjectEditor",
        "ProjectViewer",
        "ProjectAllTask",
        "ProjectStrictViewer",
        "ProjectPropertyTask",
        "InventoryOwner",
        "InventoryViewer",
        "CustomTemplateOwner",
        "CustomTemplateViewer",
        "CASFullAccess"
      ],
      "title": "AccessControlLevel",
      "type": "string"
    },
    "AuditFields": {
      "description": "The audit fields for a resource",
      "properties": {
        "by": {
          "default": null,
          "title": "By",
          "type": "string"
        },
        "byName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Byname"
        },
        "at": {
          "anyOf": [
            {
              "format": "date-time",
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "At"
        }
      },
      "title": "AuditFields",
      "type": "object"
    },
    "Cas": {
      "description": "A CAS entry: a chemical substance identified by its CAS Registry Number.\n\nA ``Cas`` is Albert's dictionary record for a substance. Raw-material Inventory\nItems reference these entries to declare what they are made of, pairing each\n``Cas`` with an amount (see [`CasAmount`][albert.resources.inventory.CasAmount]).\nManage entries through\n[`CasCollection`][albert.collections.cas.CasCollection] (``client.cas``): most fields\nare populated by Albert, so you typically only build a ``Cas`` from a registry\n``number`` when creating a new entry.\n\n!!! example\n    ```python\n    from albert.resources.cas import Cas\n    # Build a CAS entry to register a new substance\n    cas = Cas(number=\"7727-37-9\")\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "number": {
          "description": "The CAS number.",
          "title": "Number",
          "type": "string"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Name of the CAS.",
          "title": "Name"
        },
        "description": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The description or name of the CAS.",
          "title": "Description"
        },
        "notes": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Notes related to the CAS.",
          "title": "Notes"
        },
        "category": {
          "anyOf": [
            {
              "$ref": "#/$defs/CasCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The category of the CAS."
        },
        "casSmiles": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "CAS SMILES notation.",
          "title": "Cassmiles"
        },
        "inchiKey": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "InChIKey of the CAS.",
          "title": "Inchikey"
        },
        "iUpacName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "IUPAC name of the CAS.",
          "title": "Iupacname"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The AlbertID of the CAS.",
          "title": "Albertid"
        },
        "hazards": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/Hazard"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazards associated with the CAS.",
          "title": "Hazards"
        },
        "wgk": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "German Water Hazard Class (WGK) number.",
          "title": "Wgk"
        },
        "ecListNo": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "European Community (EC) number.",
          "title": "Eclistno"
        },
        "type": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Internal classification_type reference.",
          "title": "Type"
        },
        "classificationType": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Classification type of the CAS.",
          "title": "Classificationtype"
        },
        "order": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "CAS order.",
          "title": "Order"
        },
        "Metadata": {
          "additionalProperties": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "integer"
              },
              {
                "type": "string"
              },
              {
                "$ref": "#/$defs/EntityLinkWithName"
              },
              {
                "$ref": "#/$defs/EntityLink"
              },
              {
                "items": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/EntityLinkWithName"
                    },
                    {
                      "$ref": "#/$defs/EntityLink"
                    }
                  ]
                },
                "type": "array"
              }
            ]
          },
          "description": "Custom metadata keyed by field. Updatable.",
          "title": "Metadata",
          "type": "object"
        }
      },
      "required": [
        "number"
      ],
      "title": "Cas",
      "type": "object"
    },
    "CasAmount": {
      "description": "A single CAS constituent and its concentration within an [`InventoryItem`][albert.resources.inventory.InventoryItem].\n\nA ``CasAmount`` links one CAS number (a chemical substance identifier) to the\namount of that substance present in an inventory item, expressed as a range\n(``min`` to ``max``) with an optional ``target``. A list of these on an\n[`InventoryItem`][albert.resources.inventory.InventoryItem] gives the item's compositional breakdown.\n\nIdentify the CAS in one of two ways: pass a full [`Cas`][albert.resources.cas.Cas]\nobject as ``cas`` (its ``id``, ``number``, and ``cas_smiles`` are then copied onto\nthis amount), or pass just the CAS resource ``id`` string. Do not pass both.\n\n!!! example\n    ```python\n    from albert.resources.inventory import CasAmount\n\n    # Reference an existing CAS resource by its Albert ID, 10-30% concentration\n    amount = CasAmount(min=10.0, max=30.0, id=\"CAS1\")\n    ```",
      "properties": {
        "min": {
          "description": "The minimum amount (concentration) of the CAS in the item.",
          "title": "Min",
          "type": "number"
        },
        "max": {
          "description": "The maximum amount (concentration) of the CAS in the item.",
          "title": "Max",
          "type": "number"
        },
        "inventoryValue": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The target amount of the CAS in the item. Serialized as ``inventoryValue``.",
          "title": "Inventoryvalue"
        },
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the CAS resource this amount represents. Provide either a ``cas`` object or an ``id``; when ``cas`` is given, this is set from it.",
          "title": "Id"
        },
        "casCategory": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the CAS is a trade secret.",
          "title": "Cascategory"
        },
        "inventoryFunction": {
          "anyOf": [
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/$defs/ListItem"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  },
                  {
                    "type": "string"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Business-controlled functions associated with the CAS in this inventory context (e.g. what role the substance plays). Values come from a managed list.",
          "title": "Inventoryfunction"
        },
        "type": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The CAS type. Can be retrieved from the CAS collection before construction.",
          "title": "Type"
        },
        "classificationType": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The EU classification source for the CAS: harmonized, notified, or REACH.",
          "title": "Classificationtype"
        },
        "substanceId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The substance ID linked to this CAS entry.",
          "title": "Substanceid"
        },
        "cas": {
          "anyOf": [
            {
              "$ref": "#/$defs/Cas"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The full CAS object associated with this amount. Read-only after init; excluded from serialization. Provide either a ``cas`` or an ``id``."
        },
        "casSmiles": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The SMILES string of the CAS resource. Read-only; set from the ``cas`` object.",
          "title": "Cassmiles"
        },
        "number": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The CAS number (e.g. ``\"7440-32-6\"``). Read-only; set from the ``cas`` object.",
          "title": "Number"
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit metadata for creation. Read-only."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/CasAuditFieldsWithEmail"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit metadata for the last update. Read-only. See Also --------"
        }
      },
      "required": [
        "min",
        "max"
      ],
      "title": "CasAmount",
      "type": "object"
    },
    "CasAuditFieldsWithEmail": {
      "description": "The audit fields for a CAS resource with email",
      "properties": {
        "by": {
          "default": null,
          "title": "By",
          "type": "string"
        },
        "byName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Byname"
        },
        "at": {
          "anyOf": [
            {
              "format": "date-time",
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "At"
        },
        "email": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Email"
        }
      },
      "title": "CasAuditFieldsWithEmail",
      "type": "object"
    },
    "CasCategory": {
      "enum": [
        "User",
        "Verisk",
        "TSCA - Public",
        "TSCA - Private",
        "not TSCA",
        "CAS linked to External Database",
        "Unknown (Trade Secret)",
        "CL_Inventory Upload"
      ],
      "title": "CasCategory",
      "type": "string"
    },
    "Company": {
      "description": "A manufacturing company or supplier tracked in Albert.\n\nA Company is the organization that makes or supplies a material. It is the\n``company`` linked on raw-material inventory items: each raw material points\nback to the Company that manufactures it (see\n[`InventoryItem`][albert.resources.inventory.InventoryItem]). Companies are managed\nthrough [`CompanyCollection`][albert.collections.companies.CompanyCollection], accessed as\n``client.companies``.\n\nCompanies are identified by a Company ID (format ``COM...``). A Company is\ntypically minimal: a name plus its assigned ID. You construct one directly\n(``Company(name=\"Acme Chemicals\")``) to create it or to attach it to an\ninventory item.\n\n!!! example\n    ```python\n    from albert.resources.companies import Company\n\n    # Build a company to create or attach to an inventory item\n    company = Company(name=\"Acme Chemicals\")\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The company's name. This is the primary identifier used when searching for or creating a company.",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert Company ID (format ``COM...``). ``None`` until the company is created in or retrieved from Albert.",
          "title": "Albertid"
        },
        "distance": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Search-relevance score returned when the company comes back as a search result. Read-only; not set on companies you build yourself.",
          "title": "Distance"
        }
      },
      "required": [
        "name"
      ],
      "title": "Company",
      "type": "object"
    },
    "DataType": {
      "description": "The data type of a parameter value, driving how it is validated.\n\nUsed by [`ValueValidation`][albert.resources.parameter_groups.ValueValidation] to declare what kind of value a parameter\naccepts.\n\nAttributes\n----------\nNUMBER : str\n    A numeric value.\nSTRING : str\n    A free-text string value.\nENUM : str\n    A value restricted to a fixed set of options (see\n    [`EnumValidationValue`][albert.resources.parameter_groups.EnumValidationValue]).\nIMAGE : str\n    An image value.\nCURVE : str\n    A curve (series) value.\nDATE : str\n    A calendar date value stored as ``YYYY-MM-DD``.\nTIMESTAMP : str\n    A date-and-time value in ISO 8601 format with a UTC offset\n    (e.g. ``2026-05-21T14:32:00+02:00``).",
      "enum": [
        "number",
        "string",
        "enum",
        "image",
        "curve",
        "date",
        "timestamp"
      ],
      "title": "DataType",
      "type": "string"
    },
    "EntityLink": {
      "properties": {
        "id": {
          "title": "Id",
          "type": "string"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Name"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Category"
        }
      },
      "required": [
        "id"
      ],
      "title": "EntityLink",
      "type": "object"
    },
    "EntityLinkWithName": {
      "description": "EntityLink that includes the name field in serialization.",
      "properties": {
        "id": {
          "title": "Id",
          "type": "string"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Name"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Category"
        }
      },
      "required": [
        "id"
      ],
      "title": "EntityLinkWithName",
      "type": "object"
    },
    "EnumValidationValue": {
      "description": "Represents a value for an enum type validation.",
      "properties": {
        "text": {
          "description": "The text of the enum value.",
          "title": "Text",
          "type": "string"
        },
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The ID of the enum value. If not provided, the ID will be generated upon creation.",
          "title": "Id"
        },
        "originalText": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Originaltext"
        }
      },
      "required": [
        "text"
      ],
      "title": "EnumValidationValue",
      "type": "object"
    },
    "Hazard": {
      "description": "A single GHS hazard classification associated with a CAS substance.\n\nHazards are read from the CAS record; a [`Cas`][albert.resources.cas.Cas] may carry a list of them.",
      "properties": {
        "subCategory": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazard subcategory",
          "title": "Subcategory"
        },
        "hCode": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazard code",
          "title": "Hcode"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazard category",
          "title": "Category"
        },
        "class": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazard classification",
          "title": "Class"
        },
        "hCodeText": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazard code text",
          "title": "Hcodetext"
        }
      },
      "title": "Hazard",
      "type": "object"
    },
    "InventoryCategory": {
      "description": "The kind of material an [`InventoryItem`][albert.resources.inventory.InventoryItem] represents.\n\nEvery inventory item belongs to exactly one category, which determines how it\nis used across the platform and which fields are relevant to it.\n\nAttributes\n----------\nRAW_MATERIALS : str\n    A purchased substance used as an ingredient (e.g. a solvent or pigment).\n    Typically linked to a manufacturing ``company`` and one or more CAS numbers.\nCONSUMABLES : str\n    Lab supplies consumed during work (e.g. gloves, vials, filters).\nEQUIPMENT : str\n    Instruments and apparatus (e.g. a balance or spectrometer).\nFORMULAS : str\n    A mixture designed in Albert through a Worksheet. Formulas are not created\n    through the inventory collection; they are produced by the Worksheet\n    collection ([`WorksheetCollection`][albert.collections.worksheets.WorksheetCollection]).",
      "enum": [
        "RawMaterials",
        "Consumables",
        "Equipment",
        "Formulas"
      ],
      "title": "InventoryCategory",
      "type": "string"
    },
    "InventoryItem": {
      "description": "A catalog entry for a material tracked in Albert.\n\nAn ``InventoryItem`` is the canonical record for a raw material, consumable,\npiece of equipment, or formula. Its [`InventoryCategory`][albert.resources.inventory.InventoryCategory] determines how it\nis used across the platform, and once saved it is referenced everywhere by its\nInventory ID (format ``INV...``, e.g. ``\"INVA9999999\"``). Raw materials are typically\nlinked to a manufacturing ``company`` and a compositional breakdown of CAS\namounts. Formula items are designed in Worksheets rather than created here (the\n[`create`][albert.collections.inventory.InventoryCollection.create] method rejects\nFormula items), and a Formula requires a ``project_id``.\n\nItems are managed through\n[`InventoryCollection`][albert.collections.inventory.InventoryCollection] (``client.inventory``).\n\n!!! example\n    ```python\n    from albert.resources.inventory import InventoryItem, InventoryCategory\n\n    item = InventoryItem(\n        name=\"Titanium Dioxide\",\n        category=InventoryCategory.RAW_MATERIALS,\n        company=\"Acme Chemicals\",\n    )\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "Tags": {
          "anyOf": [
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/$defs/Tag"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A list of Tag objects or strings representing tags.",
          "title": "Tags"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The name of the item.",
          "title": "Name"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert Inventory ID (format ``INV...``). Set when the item is retrieved from or created in Albert. Serialized as ``albertId``.",
          "title": "Albertid"
        },
        "description": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A free-text description of the item.",
          "title": "Description"
        },
        "category": {
          "$ref": "#/$defs/InventoryCategory",
          "description": "The kind of material this item represents. Required. One of ``RawMaterials``, ``Consumables``, ``Equipment``, or ``Formulas``."
        },
        "unitCategory": {
          "anyOf": [
            {
              "$ref": "#/$defs/InventoryUnitCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The dimension the item is measured in (mass, volume, length, pressure, or units). If not supplied, it defaults from ``category``: mass for raw materials and formulas, units for equipment and consumables."
        },
        "class": {
          "anyOf": [
            {
              "$ref": "#/$defs/SecurityClass"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The access/security class of the item (e.g. confidential, shared, restricted)."
        },
        "Company": {
          "anyOf": [
            {
              "$ref": "#/$defs/Company"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The manufacturing Company associated with the item (links to the Company collection). Accepts a [`Company`][albert.resources.companies.Company] or a name string; a string is turned into a Company that is first-or-created on save.",
          "title": "Company"
        },
        "minimum": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/InventoryMinimum"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Per-Location reorder thresholds for the item. See [`InventoryMinimum`][albert.resources.inventory.InventoryMinimum].",
          "title": "Minimum"
        },
        "alias": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "An alternate name for the item.",
          "title": "Alias"
        },
        "Cas": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/CasAmount"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The item's compositional breakdown as CAS amounts. See [`CasAmount`][albert.resources.inventory.CasAmount].",
          "title": "Cas"
        },
        "isFormulaOverride": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the substance/CAS-level breakdown for this formula has been overridden from the auto-calculated value; commonly set to indicate the formula is not a non-reactive homogeneous mixture.",
          "title": "Isformulaoverride"
        },
        "Metadata": {
          "anyOf": [
            {
              "additionalProperties": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/EntityLinkWithName"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  },
                  {
                    "items": {
                      "anyOf": [
                        {
                          "$ref": "#/$defs/EntityLinkWithName"
                        },
                        {
                          "$ref": "#/$defs/EntityLink"
                        }
                      ]
                    },
                    "type": "array"
                  }
                ]
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Custom metadata fields. Allowed keys are defined by the workspace's CustomFields configuration.",
          "title": "Metadata"
        },
        "parentId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The parent Project ID. Required for Formulas. Serialized as ``parentId``.",
          "title": "Parentid"
        },
        "ACL": {
          "description": "Access-control entries governing who can act on the item.",
          "items": {
            "$ref": "#/$defs/ACL"
          },
          "title": "Acl",
          "type": "array"
        },
        "onHand": {
          "default": 0.0,
          "description": "Total amount currently on hand across all lots. Read-only.",
          "title": "Onhand",
          "type": "number"
        },
        "TaskConfig": {
          "anyOf": [
            {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Task configuration associated with the item. Read-only.",
          "title": "Taskconfig"
        },
        "formulaId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The formula ID for a formula item. Read-only.",
          "title": "Formulaid"
        },
        "Symbols": {
          "anyOf": [
            {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazard/pictogram symbols associated with the item. Read-only.",
          "title": "Symbols"
        },
        "unNumber": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The UN hazardous-material number, when applicable. Read-only.",
          "title": "Unnumber"
        },
        "recentAttachmentId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The ID of the most recent attachment on the item. Read-only. See Also --------",
          "title": "Recentattachmentid"
        }
      },
      "required": [
        "category"
      ],
      "title": "InventoryItem",
      "type": "object"
    },
    "InventoryMinimum": {
      "description": "A reorder threshold: the minimum stock of an [`InventoryItem`][albert.resources.inventory.InventoryItem] to keep at a Location.\n\nEach entry pairs one Location with the minimum quantity of an item that must be\nkept on hand there. An [`InventoryItem`][albert.resources.inventory.InventoryItem] may carry several of these, one per\nLocation. Identify the Location either by passing a full\n[`Location`][albert.resources.locations.Location] object as ``location`` (its ``id`` is\nthen copied onto ``id``), or by passing the location ``id`` string directly. Provide\none or the other, not both.\n\n!!! example\n    ```python\n    from albert.resources.inventory import InventoryMinimum\n\n    minimum = InventoryMinimum(id=\"LOC9999999\", minimum=500)\n    ```",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the Location this minimum applies to. Provide either a ``location`` or an ``id``; when ``location`` is given, this is set from it.",
          "title": "Id"
        },
        "location": {
          "anyOf": [
            {
              "$ref": "#/$defs/Location"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Location object this minimum applies to. Excluded from serialization. Provide either a ``location`` or an ``id``."
        },
        "minimum": {
          "description": "The minimum amount of the item that must be kept in stock at the Location. Must be between 0 and 1e15. See Also --------",
          "maximum": 1000000000000000,
          "minimum": 0,
          "title": "Minimum",
          "type": "number"
        }
      },
      "required": [
        "minimum"
      ],
      "title": "InventoryMinimum",
      "type": "object"
    },
    "InventoryUnitCategory": {
      "description": "The dimension of the unit an [`InventoryItem`][albert.resources.inventory.InventoryItem] is measured and stocked in.\n\nDetermines how quantities on hand and in formulas are interpreted. When not\nsupplied, the category defaults based on [`InventoryCategory`][albert.resources.inventory.InventoryCategory]: ``MASS``\nfor raw materials and formulas, ``UNITS`` for equipment and consumables.\n\nAttributes\n----------\nMASS : str\n    Measured by mass (e.g. grams, kilograms).\nVOLUME : str\n    Measured by volume (e.g. milliliters, liters).\nLENGTH : str\n    Measured by length (e.g. meters).\nPRESSURE : str\n    Measured by pressure.\nUNITS : str\n    Counted as discrete units (e.g. each item).",
      "enum": [
        "mass",
        "volume",
        "length",
        "pressure",
        "units"
      ],
      "title": "InventoryUnitCategory",
      "type": "string"
    },
    "ListItem": {
      "description": "A single allowed value in a configurable list of options.\n\nList items back the choices offered by ``list``-type custom fields (e.g.\ndropdown options) and other fixed option sets in Albert. A\n[`CustomField`][albert.resources.custom_fields.CustomField] with\n[`LIST`][albert.resources.custom_fields.FieldType.LIST] defines a list (keyed\nby ``list_type``, typically the field's name); its selectable options are\n``ListItem`` records with a matching ``list_type``. Managed through\n[`ListsCollection`][albert.collections.lists.ListsCollection] (``client.lists``).\n\n!!! example\n    ```python\n    from albert.resources.lists import ListItem, ListItemCategory\n    item = ListItem(name=\"In Progress\", category=ListItemCategory.USER_DEFINED)\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The display name of the list item (the option value).",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the list item. Set when the item is retrieved from or created in Albert.",
          "title": "Albertid"
        },
        "category": {
          "anyOf": [
            {
              "$ref": "#/$defs/ListItemCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The category of the list item. Allowed values are ``businessDefined``, ``userDefined``, ``projects``, ``extensions``, and ``inventory``."
        },
        "listType": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The list this item belongs to. For a list-type custom field this is typically the field's name (see [`CustomField`][albert.resources.custom_fields.CustomField]). For built-in categories the allowed values are ``projectState`` for ``projects``, ``extensions`` for ``extensions``, and ``casCategory`` or ``inventoryFunction`` for ``inventory``.",
          "title": "Listtype"
        }
      },
      "required": [
        "name"
      ],
      "title": "ListItem",
      "type": "object"
    },
    "ListItemCategory": {
      "description": "The category a list item belongs to, which governs its allowed list types.\n\nAttributes\n----------\nBUSINESS_DEFINED : str\n    Predefined values managed at the business/organization level.\nUSER_DEFINED : str\n    Custom values defined by users.\nPROJECTS : str\n    Values used by projects (e.g. project states).\nEXTENSIONS : str\n    Values used by extensions.\nINVENTORY : str\n    Values used by inventory (e.g. CAS categories or inventory functions).",
      "enum": [
        "businessDefined",
        "userDefined",
        "projects",
        "extensions",
        "inventory"
      ],
      "title": "ListItemCategory",
      "type": "string"
    },
    "Location": {
      "description": "A physical lab or site location in Albert.\n\nLocations are referenced by Tasks and Inventory Items to record where an\nactivity is performed or where a material lives, and each Location can hold\none or more Storage Locations\n([`StorageLocation`][albert.resources.storage_locations.StorageLocation]). Managed\nthrough [`LocationCollection`][albert.collections.locations.LocationCollection].\n\n!!! example\n    ```python\n    from albert.resources.locations import Location\n    location = Location(\n        name=\"Boston Lab\",\n        latitude=42.3601,\n        longitude=-71.0589,\n        address=\"1 Main St\",\n        country=\"US\",\n    )\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The human-readable name of the location.",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the location. Assigned by Albert and populated once the location has been created or retrieved.",
          "title": "Albertid"
        },
        "latitude": {
          "description": "The latitude of the location, in decimal degrees.",
          "title": "Latitude",
          "type": "number"
        },
        "longitude": {
          "description": "The longitude of the location, in decimal degrees.",
          "title": "Longitude",
          "type": "number"
        },
        "address": {
          "description": "The street address of the location.",
          "title": "Address",
          "type": "string"
        },
        "country": {
          "anyOf": [
            {
              "maxLength": 2,
              "minLength": 2,
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The two-letter country code of the location (for example, ``\"US\"``).",
          "title": "Country"
        }
      },
      "required": [
        "name",
        "latitude",
        "longitude",
        "address"
      ],
      "title": "Location",
      "type": "object"
    },
    "Operator": {
      "description": "A comparison operator constraining a numeric parameter value.\n\nUsed by [`ValueValidation`][albert.resources.parameter_groups.ValueValidation] to bound acceptable values (e.g. ``gte`` with\na ``min`` requires the value to be at least ``min``).\n\nAttributes\n----------\nBETWEEN : str\n    Value must fall between ``min`` and ``max`` (inclusive).\nLESS_THAN : str\n    Value must be less than ``max``.\nLESS_THAN_OR_EQUAL : str\n    Value must be less than or equal to ``max``.\nGREATER_THAN_OR_EQUAL : str\n    Value must be greater than or equal to ``min``.\nGREATER_THAN : str\n    Value must be greater than ``min``.\nEQUALS : str\n    Value must equal the specified value.",
      "enum": [
        "between",
        "lt",
        "lte",
        "gte",
        "gt",
        "eq",
        "neq"
      ],
      "title": "Operator",
      "type": "string"
    },
    "Parameter": {
      "description": "The definition of a single experimental condition or input variable.\n\nA Parameter (ID format ``PRM...``) names an \"indirect variable\" such as\nTemperature, Spin Speed, or Instrument. The Parameter itself only defines the\nvariable; its actual value and unit are fixed to a setpoint later, inside a\n[`Workflow`][albert.resources.workflows.Workflow]. Parameters are the building\nblocks of Parameter Groups\n([`ParameterGroup`][albert.resources.parameter_groups.ParameterGroup]) and form the\nparameter side of Data Templates\n([`DataTemplate`][albert.resources.data_templates.DataTemplate]).\n\nManage parameters through\n[`ParameterCollection`][albert.collections.parameters.ParameterCollection]\n(``client.parameters``).\n\n!!! example\n    ```python\n    from albert import Albert\n    from albert.resources.parameters import Parameter\n    client = Albert()\n    param = client.parameters.create(parameter=Parameter(name=\"Temperature\"))\n    param.id\n    # 'PRM9999999'\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The name of the parameter. Names must be unique.",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the parameter (format ``PRM...``). Set when the parameter is retrieved from or created in Albert.",
          "title": "Albertid"
        },
        "Metadata": {
          "anyOf": [
            {
              "additionalProperties": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/EntityLinkWithName"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  },
                  {
                    "items": {
                      "anyOf": [
                        {
                          "$ref": "#/$defs/EntityLinkWithName"
                        },
                        {
                          "$ref": "#/$defs/EntityLink"
                        }
                      ]
                    },
                    "type": "array"
                  }
                ]
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Optional user-defined metadata keyed by field name.",
          "title": "Metadata"
        },
        "category": {
          "anyOf": [
            {
              "$ref": "#/$defs/ParameterCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the parameter is ``Normal`` (scalar value) or ``Special`` (entity reference). Set by the platform and read-only."
        },
        "rank": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The rank of the returned parameter. Read-only.",
          "title": "Rank"
        },
        "required": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether this parameter must be filled in within a Parameter Group.",
          "title": "Required"
        }
      },
      "required": [
        "name"
      ],
      "title": "Parameter",
      "type": "object"
    },
    "ParameterCategory": {
      "description": "Whether a [`Parameter`][albert.resources.parameters.Parameter]'s value is a plain scalar or an entity reference.\n\nSet by the platform and read-only. It determines how a parameter's value is\ninterpreted when a setpoint is assigned to it inside a\n[`Workflow`][albert.resources.workflows.Workflow].\n\nAttributes\n----------\nNORMAL : str\n    A \"normal\" parameter whose value is a plain scalar (e.g. a number or text),\n    such as Temperature or Spin Speed.\nSPECIAL : str\n    A \"special\" parameter whose value references another entity (e.g. Equipment,\n    a Consumable, or a Template). The setpoint value is that entity's ID rather\n    than a plain scalar.",
      "enum": [
        "Normal",
        "Special"
      ],
      "title": "ParameterCategory",
      "type": "string"
    },
    "Role": {
      "description": "A named set of access permissions within a tenant.\n\nA role bundles policies that determine what a holder is allowed to do. Roles\nare assigned to users ([`User`][albert.resources.users.User]) and referenced\nby entity ACLs. Roles are typically read from Albert rather than built by\nhand.",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the role. Role IDs may contain ``#`` characters. Set once the role is retrieved from Albert.",
          "title": "Albertid"
        },
        "name": {
          "description": "The display name of the role.",
          "title": "Name",
          "type": "string"
        },
        "Policies": {
          "anyOf": [
            {
              "items": {},
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The policies (permission rules) associated with the role.",
          "title": "Policies"
        },
        "tenant": {
          "description": "The ID of the tenant the role belongs to.",
          "title": "Tenant",
          "type": "string"
        },
        "visibility": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the role is visible in the platform's role listings.",
          "title": "Visibility"
        }
      },
      "required": [
        "name",
        "tenant"
      ],
      "title": "Role",
      "type": "object"
    },
    "SecurityClass": {
      "description": "The security (access control) class of a resource.\n\nAttributes\n----------\nSHARED : str\n    Accessible to all members of the tenant.\nRESTRICTED : str\n    Access is restricted to specific teams or users.\nCONFIDENTIAL : str\n    Access is limited to designated users only.\nPRIVATE : str\n    Visible only to the owner. Used by Projects.",
      "enum": [
        "shared",
        "restricted",
        "confidential",
        "private"
      ],
      "title": "SecurityClass",
      "type": "string"
    },
    "Status": {
      "description": "The status of a resource.\n\nAttributes\n----------\nACTIVE : str\n    The resource is fully operational and visible in normal operations.\nINACTIVE : str\n    The resource is hidden from normal operations and disabled from use.",
      "enum": [
        "active",
        "inactive"
      ],
      "title": "Status",
      "type": "string"
    },
    "Tag": {
      "description": "A freeform text label used to categorize and connect entities.\n\nTags are shared by name across the platform and can be applied to inventory\nitems, companies, tasks, and other records to group and filter them. Managed\nthrough [`TagCollection`][albert.collections.tags.TagCollection] (``client.tags``);\nthe usual entry point is [`get_or_create`][albert.collections.tags.TagCollection.get_or_create].\n\n!!! example\n    ```python\n    from albert.resources.tags import Tag\n    tag = Tag(tag=\"high-priority\")\n    ```\nMethods\n-------\nfrom_string(tag) -> Tag\n    Build a Tag from its name string.",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The name of the tag (its text label).",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the tag (format ``TAG...``). Set when the tag is retrieved from or created in Albert. Methods ------- from_string(tag) -> Tag Build a Tag from its name string.",
          "title": "Albertid"
        }
      },
      "required": [
        "name"
      ],
      "title": "Tag",
      "type": "object"
    },
    "Unit": {
      "description": "A unit of measure (e.g. ``g``, ``mL``, ``\u00b0C``).\n\nUnits qualify quantities throughout the platform: inventory amounts,\nparameter values, and property results. Managed through\n[`UnitCollection`][albert.collections.units.UnitCollection] (``client.units``).\n\n!!! example\n    ```python\n    from albert.resources.units import Unit, UnitCategory\n    unit = Unit(name=\"milliliter\", symbol=\"mL\", category=UnitCategory.LIQUID_VOLUME)\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the unit (format ``UNI...``). Set when the unit is retrieved from or created in Albert.",
          "title": "Albertid"
        },
        "name": {
          "description": "Currently this is the only field that is displayed in Albert, so use this for display purposes. Therefore, users often use the symbol for the unit here as that's the preferred display.",
          "title": "Name",
          "type": "string"
        },
        "symbol": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The display symbol for the unit (e.g. ``\"g\"``).",
          "title": "Symbol"
        },
        "Synonyms": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Alternate names or spellings that also refer to this unit.",
          "title": "Synonyms"
        },
        "category": {
          "anyOf": [
            {
              "$ref": "#/$defs/UnitCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The physical quantity the unit measures (e.g. ``Mass``, ``Volume``)."
        },
        "verified": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": false,
          "description": "Whether the unit has been verified in Albert. Read-only.",
          "title": "Verified"
        }
      },
      "required": [
        "name"
      ],
      "title": "Unit",
      "type": "object"
    },
    "UnitCategory": {
      "description": "The physical quantity a unit measures.\n\nAttributes\n----------\nLENGTH : str\n    Length units (e.g. m, cm).\nVOLUME : str\n    Volume units (e.g. m\u00b3).\nLIQUID_VOLUME : str\n    Liquid volume units (e.g. L, mL).\nANGLES : str\n    Angle units (e.g. degrees, radians).\nTIME : str\n    Time units (e.g. s, h).\nFREQUENCY : str\n    Frequency units (e.g. Hz).\nMASS : str\n    Mass units (e.g. g, kg).\nCURRENT : str\n    Electric current units (e.g. A).\nTEMPERATURE : str\n    Temperature units (e.g. \u00b0C, K).\nAMOUNT : str\n    Amount of substance units (e.g. mol).\nLUMINOSITY : str\n    Luminous intensity units (e.g. cd).\nFORCE : str\n    Force units (e.g. N).\nENERGY : str\n    Energy units (e.g. J).\nPOWER : str\n    Power units (e.g. W).\nPRESSURE : str\n    Pressure units (e.g. Pa, bar).\nELECTRICITY_AND_MAGNETISM : str\n    Electricity and magnetism units.\nOTHER : str\n    Units that do not fit another category.\nWEIGHT : str\n    Weight units.\nAREA : str\n    Area units (e.g. m\u00b2).\nSURFACE_AREA : str\n    Surface area units.\nBINARY : str\n    Binary/digital-information units (e.g. bytes).\nCAPACITANCE : str\n    Capacitance units (e.g. F).\nSPEED : str\n    Speed units (e.g. m/s).\nELECTRICAL_CONDUCTIVITY : str\n    Electrical conductivity units.\nELECTRICAL_PERMITTIVITY : str\n    Electrical permittivity units.\nDENSITY : str\n    Density units (e.g. g/mL).\nRESISTANCE : str\n    Electrical resistance units (e.g. \u03a9).",
      "enum": [
        "Length",
        "Volume",
        "Liquid volume",
        "Angles",
        "Time",
        "Frequency",
        "Mass",
        "Electric current",
        "Temperature",
        "Amount of substance",
        "Luminous intensity",
        "Force",
        "Energy",
        "Power",
        "Pressure",
        "Electricity and magnetism",
        "Other",
        "Weight",
        "Area",
        "Surface Area",
        "Binary",
        "Capacitance",
        "Speed",
        "Electrical conductivity",
        "Electrical permitivitty",
        "Density",
        "Resistance"
      ],
      "title": "UnitCategory",
      "type": "string"
    },
    "User": {
      "description": "An Albert user account: a person who can log in and act in the platform.\n\nA user has a name and email, an optional home\n[`Location`][albert.resources.locations.Location], and a set of\n[`Role`][albert.resources.roles.Role] objects that govern what they can do.\nThe ``user_class`` sets a broad permission tier\n([`UserClass`][albert.resources.users.UserClass]). Users are grouped into teams\n([`Team`][albert.resources.teams.Team]), and are referenced across the\nplatform, for example as the assignee of a Task or in an entity's ACL.\n\n!!! example\n    ```python\n    from albert.resources.users import User, UserClass\n    user = User(\n        name=\"Ada Lovelace\",\n        email=\"ada@example.com\",\n        user_class=UserClass.STANDARD,\n    )\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The display name of the user.",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert User ID (format ``USR...``). Set once the user is registered in or retrieved from Albert.",
          "title": "Albertid"
        },
        "Location": {
          "anyOf": [
            {
              "$ref": "#/$defs/Location"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The user's home location.",
          "title": "Location"
        },
        "email": {
          "default": null,
          "description": "The user's email address.",
          "format": "email",
          "title": "Email",
          "type": "string"
        },
        "Roles": {
          "description": "The roles the user holds, which determine their permissions.",
          "items": {
            "anyOf": [
              {
                "$ref": "#/$defs/Role"
              },
              {
                "$ref": "#/$defs/EntityLink"
              }
            ]
          },
          "maxItems": 1,
          "title": "Roles",
          "type": "array"
        },
        "userClass": {
          "$ref": "#/$defs/UserClass",
          "default": "standard",
          "description": "The ACL class level of the user (broad permission tier)."
        },
        "witnesser": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the user can act as a witness on tasks (only relevant when witnessing is enabled for the tenant).",
          "title": "Witnesser"
        },
        "Metadata": {
          "anyOf": [
            {
              "additionalProperties": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/EntityLinkWithName"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  },
                  {
                    "items": {
                      "anyOf": [
                        {
                          "$ref": "#/$defs/EntityLinkWithName"
                        },
                        {
                          "$ref": "#/$defs/EntityLink"
                        }
                      ]
                    },
                    "type": "array"
                  }
                ]
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Custom metadata attached to the user.",
          "title": "Metadata"
        }
      },
      "required": [
        "name"
      ],
      "title": "User",
      "type": "object"
    },
    "UserClass": {
      "description": "The ACL class level of a user, setting a broad permission tier.\n\nAttributes\n----------\nGUEST : str\n    Most limited access; typically external or temporary users.\nSTANDARD : str\n    Default access level for regular users.\nTRUSTED : str\n    Elevated access above standard users.\nPRIVILEGED : str\n    High access level below full administrators.\nADMIN : str\n    Full administrative access to the tenant.",
      "enum": [
        "guest",
        "standard",
        "trusted",
        "privileged",
        "admin"
      ],
      "title": "UserClass",
      "type": "string"
    },
    "ValueValidation": {
      "description": "A validation rule constraining a [`ParameterValue`][albert.resources.parameter_groups.ParameterValue].\n\nDeclares the expected [`DataType`][albert.resources.parameter_groups.DataType] for a parameter value and, optionally,\nthe bounds or allowed options it must satisfy. Attach one or more of these to a\n[`ParameterValue`][albert.resources.parameter_groups.ParameterValue] via its ``validation`` field.\n\nWhen ``datatype`` is ``date`` or ``timestamp``, ``value``, ``min``, and ``max`` are\nstrings in the wire format documented on [`DataType`][albert.resources.parameter_groups.DataType].\n\n!!! example\n    ```python\n    from albert.resources.parameter_groups import (\n        DataType,\n        Operator,\n        ValueValidation,\n    )\n\n    rule = ValueValidation(\n        datatype=DataType.NUMBER,\n        operator=Operator.BETWEEN,\n        min=\"0\",\n        max=\"100\",\n    )\n    ```",
      "properties": {
        "datatype": {
          "$ref": "#/$defs/DataType",
          "description": "The data type the value must conform to. Required."
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "items": {
                "$ref": "#/$defs/EnumValidationValue"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "For ``ENUM`` types, the list of allowed options (see [`EnumValidationValue`][albert.resources.parameter_groups.EnumValidationValue]); otherwise an optional expected value. For ``date`` and ``timestamp`` types, a string in the wire format documented on [`DataType`][albert.resources.parameter_groups.DataType].",
          "title": "Value"
        },
        "min": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The lower bound, used with ``operator``. For numeric types, a numeric string; for ``date`` and ``timestamp`` types, a string in the wire format documented on [`DataType`][albert.resources.parameter_groups.DataType].",
          "title": "Min"
        },
        "max": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The upper bound, used with ``operator``. For numeric types, a numeric string; for ``date`` and ``timestamp`` types, a string in the wire format documented on [`DataType`][albert.resources.parameter_groups.DataType].",
          "title": "Max"
        },
        "operator": {
          "anyOf": [
            {
              "$ref": "#/$defs/Operator"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The comparison operator applied against ``min`` and/or ``max``."
        }
      },
      "required": [
        "datatype"
      ],
      "title": "ValueValidation",
      "type": "object"
    }
  },
  "description": "A single [`Parameter`][albert.resources.parameters.Parameter] and its value within a [`ParameterGroup`][albert.resources.parameter_groups.ParameterGroup].\n\nA ``ParameterValue`` binds one Parameter to the value, unit, and validation\nrules it takes inside a group. Each entry must reference an existing Parameter,\nso provide exactly one of ``id`` (the Parameter's Albert ID) or ``parameter``\n(the [`Parameter`][albert.resources.parameters.Parameter] object itself); when a\n``parameter`` is given, the ``id``, ``category``, and ``name`` are populated\nfrom it. Values are later fixed to setpoints inside a\n[`Workflow`][albert.resources.workflows.Workflow].\n\n!!! example\n    ```python\n    from albert.resources.parameter_groups import ParameterValue\n\n    # Reference the parameter by its Albert ID\n    value = ParameterValue(id=\"PRM9999999\", value=\"500\")\n    ```",
  "properties": {
    "parameter": {
      "anyOf": [
        {
          "$ref": "#/$defs/Parameter"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The Parameter this value is associated with. Provide either ``id`` or ``parameter``. Excluded from serialization."
    },
    "id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The Albert ID of the associated Parameter. Provide either ``id`` or ``parameter``.",
      "title": "Id"
    },
    "category": {
      "anyOf": [
        {
          "$ref": "#/$defs/ParameterCategory"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The category of the parameter (``Normal`` or ``Special``). Populated from ``parameter`` when one is provided. When only ``id`` is given, the parameter-group create API rejects the payload (``400 \"Category mismatch ... Category undefined expected\"``), so set ``category`` explicitly (``ParameterCategory.NORMAL`` for ordinary parameters) or pass the full ``parameter`` object."
    },
    "shortName": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "A short name for the parameter value. Serialized as ``shortName``.",
      "title": "Shortname"
    },
    "value": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "$ref": "#/$defs/InventoryItem"
        },
        {
          "$ref": "#/$defs/EntityLink"
        },
        {
          "$ref": "#/$defs/User"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The value of the parameter. Can be a plain string, an [`InventoryItem`][albert.resources.inventory.InventoryItem] (e.g. when the parameter represents an instrument choice), or a [`User`][albert.resources.users.User] (e.g. a user reference such as \"Performed By\").",
      "title": "Value"
    },
    "Unit": {
      "anyOf": [
        {
          "$ref": "#/$defs/Unit"
        },
        {
          "$ref": "#/$defs/EntityLink"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The unit of measure for the value. Serialized as ``Unit``.",
      "title": "Unit"
    },
    "Added": {
      "anyOf": [
        {
          "$ref": "#/$defs/AuditFields"
        },
        {
          "type": "null"
        }
      ],
      "default": null
    },
    "required": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Whether this parameter is required. Defaults to False.",
      "title": "Required"
    },
    "validation": {
      "anyOf": [
        {
          "items": {
            "$ref": "#/$defs/ValueValidation"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "description": "Validation rules applied to the value. See [`ValueValidation`][albert.resources.parameter_groups.ValueValidation].",
      "title": "Validation"
    },
    "name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The name of the parameter. Read-only.",
      "title": "Name"
    },
    "sequence": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The sequence of the parameter within the group. Read-only.",
      "title": "Sequence"
    },
    "originalShortName": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Originalshortname"
    },
    "originalName": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Originalname"
    }
  },
  "title": "ParameterValue",
  "type": "object"
}

Fields:

Validators:

parameter

parameter: Parameter | None = None

The Parameter this value is associated with. Provide either id or parameter. Excluded from serialization.

id

id: str | None = None

The Albert ID of the associated Parameter. Provide either id or parameter.

category

category: ParameterCategory | None = None

The category of the parameter (Normal or Special). Populated from parameter when one is provided. When only id is given, the parameter-group create API rejects the payload (400 "Category mismatch ... Category undefined expected"), so set category explicitly (ParameterCategory.NORMAL for ordinary parameters) or pass the full parameter object.

short_name

short_name: str | None = None

A short name for the parameter value. Serialized as shortName.

value

value: (
    str
    | SerializeAsEntityLink[InventoryItem]
    | SerializeAsEntityLink[User]
    | None
) = None

The value of the parameter. Can be a plain string, an InventoryItem (e.g. when the parameter represents an instrument choice), or a User (e.g. a user reference such as "Performed By").

unit

unit: SerializeAsEntityLink[Unit] | None = None

The unit of measure for the value. Serialized as Unit.

added

added: AuditFields | None = None

required

required: bool | None = None

Whether this parameter is required. Defaults to False.

validation

validation: list[ValueValidation] | None

Validation rules applied to the value. See ValueValidation.

name

name: str | None = None

The name of the parameter. Read-only.

sequence

sequence: str | None = None

The sequence of the parameter within the group. Read-only.

original_short_name

original_short_name: str | None = None

original_name

original_name: str | None = None

validate_parameter_value

validate_parameter_value(value: Any) -> Any
Source code in src/albert/resources/parameter_groups.py
@field_validator("value", mode="before")
@classmethod
def validate_parameter_value(cls, value: Any) -> Any:
    # Bug in ParameterGroups sometimes returns incorrect JSON from batch endpoint
    # Set to None if value is a dict but no ID field
    # Reference: https://linear.app/albert-invent/issue/IN-10
    if isinstance(value, dict) and "id" not in value:
        return None
    return value

set_parameter_fields

set_parameter_fields() -> ParameterValue
Source code in src/albert/resources/parameter_groups.py
@model_validator(mode="after")
def set_parameter_fields(self) -> ParameterValue:
    if self.parameter is None and self.id is None:
        raise ValueError("Please provide either an id or an parameter object.")

    if self.parameter is not None:
        object.__setattr__(self, "id", self.parameter.id)
        object.__setattr__(self, "category", self.parameter.category)
        object.__setattr__(self, "name", self.parameter.name)

    return self

ParameterGroup

Bases: BaseTaggedResource

A reusable set of parameters (PRG) for making or prepping a sample.

A Parameter Group bundles Parameter entities, along with their values, units, and validation rules, into a reusable unit. Whereas a Data Template's parameters relate to a given measurement, a Parameter Group is about making the sample and/or prepping it for measurement (e.g. a mixing step or a cure schedule). Some groups drive Batch Tasks (BatchTask); others are stacked within a task. A group's parameters, together with a Data Template's parameters, are fixed to setpoints inside a Workflow.

Once saved, a group is referenced by its Parameter Group ID (format PRG..., e.g. "PRG9999999"). Store test standards (e.g. ASTM or ISO) under the "Standards" key of metadata.

Groups are managed through ParameterGroupCollection (client.parameter_groups).

Example

from albert.resources.parameter_groups import (
    ParameterGroup,
    ParameterValue,
    PGType,
)

pg = ParameterGroup(
    name="Mixing Step",
    type=PGType.BATCH,
    parameters=[ParameterValue(id="PRM9999999", value="500")],
)
Show JSON schema:
{
  "$defs": {
    "ACL": {
      "description": "A single access rule for a user.",
      "properties": {
        "id": {
          "description": "The id of the user for which this ACL applies",
          "title": "Id",
          "type": "string"
        },
        "fgc": {
          "anyOf": [
            {
              "$ref": "#/$defs/AccessControlLevel"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Fine-Grain Control Level"
        }
      },
      "required": [
        "id"
      ],
      "title": "ACL",
      "type": "object"
    },
    "AccessControlLevel": {
      "description": "Access control levels you can grant users.",
      "enum": [
        "ProjectOwner",
        "ProjectEditor",
        "ProjectViewer",
        "ProjectAllTask",
        "ProjectStrictViewer",
        "ProjectPropertyTask",
        "InventoryOwner",
        "InventoryViewer",
        "CustomTemplateOwner",
        "CustomTemplateViewer",
        "CASFullAccess"
      ],
      "title": "AccessControlLevel",
      "type": "string"
    },
    "AuditFields": {
      "description": "The audit fields for a resource",
      "properties": {
        "by": {
          "default": null,
          "title": "By",
          "type": "string"
        },
        "byName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Byname"
        },
        "at": {
          "anyOf": [
            {
              "format": "date-time",
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "At"
        }
      },
      "title": "AuditFields",
      "type": "object"
    },
    "Cas": {
      "description": "A CAS entry: a chemical substance identified by its CAS Registry Number.\n\nA ``Cas`` is Albert's dictionary record for a substance. Raw-material Inventory\nItems reference these entries to declare what they are made of, pairing each\n``Cas`` with an amount (see [`CasAmount`][albert.resources.inventory.CasAmount]).\nManage entries through\n[`CasCollection`][albert.collections.cas.CasCollection] (``client.cas``): most fields\nare populated by Albert, so you typically only build a ``Cas`` from a registry\n``number`` when creating a new entry.\n\n!!! example\n    ```python\n    from albert.resources.cas import Cas\n    # Build a CAS entry to register a new substance\n    cas = Cas(number=\"7727-37-9\")\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "number": {
          "description": "The CAS number.",
          "title": "Number",
          "type": "string"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Name of the CAS.",
          "title": "Name"
        },
        "description": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The description or name of the CAS.",
          "title": "Description"
        },
        "notes": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Notes related to the CAS.",
          "title": "Notes"
        },
        "category": {
          "anyOf": [
            {
              "$ref": "#/$defs/CasCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The category of the CAS."
        },
        "casSmiles": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "CAS SMILES notation.",
          "title": "Cassmiles"
        },
        "inchiKey": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "InChIKey of the CAS.",
          "title": "Inchikey"
        },
        "iUpacName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "IUPAC name of the CAS.",
          "title": "Iupacname"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The AlbertID of the CAS.",
          "title": "Albertid"
        },
        "hazards": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/Hazard"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazards associated with the CAS.",
          "title": "Hazards"
        },
        "wgk": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "German Water Hazard Class (WGK) number.",
          "title": "Wgk"
        },
        "ecListNo": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "European Community (EC) number.",
          "title": "Eclistno"
        },
        "type": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Internal classification_type reference.",
          "title": "Type"
        },
        "classificationType": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Classification type of the CAS.",
          "title": "Classificationtype"
        },
        "order": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "CAS order.",
          "title": "Order"
        },
        "Metadata": {
          "additionalProperties": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "integer"
              },
              {
                "type": "string"
              },
              {
                "$ref": "#/$defs/EntityLinkWithName"
              },
              {
                "$ref": "#/$defs/EntityLink"
              },
              {
                "items": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/EntityLinkWithName"
                    },
                    {
                      "$ref": "#/$defs/EntityLink"
                    }
                  ]
                },
                "type": "array"
              }
            ]
          },
          "description": "Custom metadata keyed by field. Updatable.",
          "title": "Metadata",
          "type": "object"
        }
      },
      "required": [
        "number"
      ],
      "title": "Cas",
      "type": "object"
    },
    "CasAmount": {
      "description": "A single CAS constituent and its concentration within an [`InventoryItem`][albert.resources.inventory.InventoryItem].\n\nA ``CasAmount`` links one CAS number (a chemical substance identifier) to the\namount of that substance present in an inventory item, expressed as a range\n(``min`` to ``max``) with an optional ``target``. A list of these on an\n[`InventoryItem`][albert.resources.inventory.InventoryItem] gives the item's compositional breakdown.\n\nIdentify the CAS in one of two ways: pass a full [`Cas`][albert.resources.cas.Cas]\nobject as ``cas`` (its ``id``, ``number``, and ``cas_smiles`` are then copied onto\nthis amount), or pass just the CAS resource ``id`` string. Do not pass both.\n\n!!! example\n    ```python\n    from albert.resources.inventory import CasAmount\n\n    # Reference an existing CAS resource by its Albert ID, 10-30% concentration\n    amount = CasAmount(min=10.0, max=30.0, id=\"CAS1\")\n    ```",
      "properties": {
        "min": {
          "description": "The minimum amount (concentration) of the CAS in the item.",
          "title": "Min",
          "type": "number"
        },
        "max": {
          "description": "The maximum amount (concentration) of the CAS in the item.",
          "title": "Max",
          "type": "number"
        },
        "inventoryValue": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The target amount of the CAS in the item. Serialized as ``inventoryValue``.",
          "title": "Inventoryvalue"
        },
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the CAS resource this amount represents. Provide either a ``cas`` object or an ``id``; when ``cas`` is given, this is set from it.",
          "title": "Id"
        },
        "casCategory": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the CAS is a trade secret.",
          "title": "Cascategory"
        },
        "inventoryFunction": {
          "anyOf": [
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/$defs/ListItem"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  },
                  {
                    "type": "string"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Business-controlled functions associated with the CAS in this inventory context (e.g. what role the substance plays). Values come from a managed list.",
          "title": "Inventoryfunction"
        },
        "type": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The CAS type. Can be retrieved from the CAS collection before construction.",
          "title": "Type"
        },
        "classificationType": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The EU classification source for the CAS: harmonized, notified, or REACH.",
          "title": "Classificationtype"
        },
        "substanceId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The substance ID linked to this CAS entry.",
          "title": "Substanceid"
        },
        "cas": {
          "anyOf": [
            {
              "$ref": "#/$defs/Cas"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The full CAS object associated with this amount. Read-only after init; excluded from serialization. Provide either a ``cas`` or an ``id``."
        },
        "casSmiles": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The SMILES string of the CAS resource. Read-only; set from the ``cas`` object.",
          "title": "Cassmiles"
        },
        "number": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The CAS number (e.g. ``\"7440-32-6\"``). Read-only; set from the ``cas`` object.",
          "title": "Number"
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit metadata for creation. Read-only."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/CasAuditFieldsWithEmail"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit metadata for the last update. Read-only. See Also --------"
        }
      },
      "required": [
        "min",
        "max"
      ],
      "title": "CasAmount",
      "type": "object"
    },
    "CasAuditFieldsWithEmail": {
      "description": "The audit fields for a CAS resource with email",
      "properties": {
        "by": {
          "default": null,
          "title": "By",
          "type": "string"
        },
        "byName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Byname"
        },
        "at": {
          "anyOf": [
            {
              "format": "date-time",
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "At"
        },
        "email": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Email"
        }
      },
      "title": "CasAuditFieldsWithEmail",
      "type": "object"
    },
    "CasCategory": {
      "enum": [
        "User",
        "Verisk",
        "TSCA - Public",
        "TSCA - Private",
        "not TSCA",
        "CAS linked to External Database",
        "Unknown (Trade Secret)",
        "CL_Inventory Upload"
      ],
      "title": "CasCategory",
      "type": "string"
    },
    "Company": {
      "description": "A manufacturing company or supplier tracked in Albert.\n\nA Company is the organization that makes or supplies a material. It is the\n``company`` linked on raw-material inventory items: each raw material points\nback to the Company that manufactures it (see\n[`InventoryItem`][albert.resources.inventory.InventoryItem]). Companies are managed\nthrough [`CompanyCollection`][albert.collections.companies.CompanyCollection], accessed as\n``client.companies``.\n\nCompanies are identified by a Company ID (format ``COM...``). A Company is\ntypically minimal: a name plus its assigned ID. You construct one directly\n(``Company(name=\"Acme Chemicals\")``) to create it or to attach it to an\ninventory item.\n\n!!! example\n    ```python\n    from albert.resources.companies import Company\n\n    # Build a company to create or attach to an inventory item\n    company = Company(name=\"Acme Chemicals\")\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The company's name. This is the primary identifier used when searching for or creating a company.",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert Company ID (format ``COM...``). ``None`` until the company is created in or retrieved from Albert.",
          "title": "Albertid"
        },
        "distance": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Search-relevance score returned when the company comes back as a search result. Read-only; not set on companies you build yourself.",
          "title": "Distance"
        }
      },
      "required": [
        "name"
      ],
      "title": "Company",
      "type": "object"
    },
    "DataType": {
      "description": "The data type of a parameter value, driving how it is validated.\n\nUsed by [`ValueValidation`][albert.resources.parameter_groups.ValueValidation] to declare what kind of value a parameter\naccepts.\n\nAttributes\n----------\nNUMBER : str\n    A numeric value.\nSTRING : str\n    A free-text string value.\nENUM : str\n    A value restricted to a fixed set of options (see\n    [`EnumValidationValue`][albert.resources.parameter_groups.EnumValidationValue]).\nIMAGE : str\n    An image value.\nCURVE : str\n    A curve (series) value.\nDATE : str\n    A calendar date value stored as ``YYYY-MM-DD``.\nTIMESTAMP : str\n    A date-and-time value in ISO 8601 format with a UTC offset\n    (e.g. ``2026-05-21T14:32:00+02:00``).",
      "enum": [
        "number",
        "string",
        "enum",
        "image",
        "curve",
        "date",
        "timestamp"
      ],
      "title": "DataType",
      "type": "string"
    },
    "EntityLink": {
      "properties": {
        "id": {
          "title": "Id",
          "type": "string"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Name"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Category"
        }
      },
      "required": [
        "id"
      ],
      "title": "EntityLink",
      "type": "object"
    },
    "EntityLinkWithName": {
      "description": "EntityLink that includes the name field in serialization.",
      "properties": {
        "id": {
          "title": "Id",
          "type": "string"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Name"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Category"
        }
      },
      "required": [
        "id"
      ],
      "title": "EntityLinkWithName",
      "type": "object"
    },
    "EnumValidationValue": {
      "description": "Represents a value for an enum type validation.",
      "properties": {
        "text": {
          "description": "The text of the enum value.",
          "title": "Text",
          "type": "string"
        },
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The ID of the enum value. If not provided, the ID will be generated upon creation.",
          "title": "Id"
        },
        "originalText": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Originaltext"
        }
      },
      "required": [
        "text"
      ],
      "title": "EnumValidationValue",
      "type": "object"
    },
    "Hazard": {
      "description": "A single GHS hazard classification associated with a CAS substance.\n\nHazards are read from the CAS record; a [`Cas`][albert.resources.cas.Cas] may carry a list of them.",
      "properties": {
        "subCategory": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazard subcategory",
          "title": "Subcategory"
        },
        "hCode": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazard code",
          "title": "Hcode"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazard category",
          "title": "Category"
        },
        "class": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazard classification",
          "title": "Class"
        },
        "hCodeText": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazard code text",
          "title": "Hcodetext"
        }
      },
      "title": "Hazard",
      "type": "object"
    },
    "InventoryCategory": {
      "description": "The kind of material an [`InventoryItem`][albert.resources.inventory.InventoryItem] represents.\n\nEvery inventory item belongs to exactly one category, which determines how it\nis used across the platform and which fields are relevant to it.\n\nAttributes\n----------\nRAW_MATERIALS : str\n    A purchased substance used as an ingredient (e.g. a solvent or pigment).\n    Typically linked to a manufacturing ``company`` and one or more CAS numbers.\nCONSUMABLES : str\n    Lab supplies consumed during work (e.g. gloves, vials, filters).\nEQUIPMENT : str\n    Instruments and apparatus (e.g. a balance or spectrometer).\nFORMULAS : str\n    A mixture designed in Albert through a Worksheet. Formulas are not created\n    through the inventory collection; they are produced by the Worksheet\n    collection ([`WorksheetCollection`][albert.collections.worksheets.WorksheetCollection]).",
      "enum": [
        "RawMaterials",
        "Consumables",
        "Equipment",
        "Formulas"
      ],
      "title": "InventoryCategory",
      "type": "string"
    },
    "InventoryItem": {
      "description": "A catalog entry for a material tracked in Albert.\n\nAn ``InventoryItem`` is the canonical record for a raw material, consumable,\npiece of equipment, or formula. Its [`InventoryCategory`][albert.resources.inventory.InventoryCategory] determines how it\nis used across the platform, and once saved it is referenced everywhere by its\nInventory ID (format ``INV...``, e.g. ``\"INVA9999999\"``). Raw materials are typically\nlinked to a manufacturing ``company`` and a compositional breakdown of CAS\namounts. Formula items are designed in Worksheets rather than created here (the\n[`create`][albert.collections.inventory.InventoryCollection.create] method rejects\nFormula items), and a Formula requires a ``project_id``.\n\nItems are managed through\n[`InventoryCollection`][albert.collections.inventory.InventoryCollection] (``client.inventory``).\n\n!!! example\n    ```python\n    from albert.resources.inventory import InventoryItem, InventoryCategory\n\n    item = InventoryItem(\n        name=\"Titanium Dioxide\",\n        category=InventoryCategory.RAW_MATERIALS,\n        company=\"Acme Chemicals\",\n    )\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "Tags": {
          "anyOf": [
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/$defs/Tag"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A list of Tag objects or strings representing tags.",
          "title": "Tags"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The name of the item.",
          "title": "Name"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert Inventory ID (format ``INV...``). Set when the item is retrieved from or created in Albert. Serialized as ``albertId``.",
          "title": "Albertid"
        },
        "description": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A free-text description of the item.",
          "title": "Description"
        },
        "category": {
          "$ref": "#/$defs/InventoryCategory",
          "description": "The kind of material this item represents. Required. One of ``RawMaterials``, ``Consumables``, ``Equipment``, or ``Formulas``."
        },
        "unitCategory": {
          "anyOf": [
            {
              "$ref": "#/$defs/InventoryUnitCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The dimension the item is measured in (mass, volume, length, pressure, or units). If not supplied, it defaults from ``category``: mass for raw materials and formulas, units for equipment and consumables."
        },
        "class": {
          "anyOf": [
            {
              "$ref": "#/$defs/SecurityClass"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The access/security class of the item (e.g. confidential, shared, restricted)."
        },
        "Company": {
          "anyOf": [
            {
              "$ref": "#/$defs/Company"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The manufacturing Company associated with the item (links to the Company collection). Accepts a [`Company`][albert.resources.companies.Company] or a name string; a string is turned into a Company that is first-or-created on save.",
          "title": "Company"
        },
        "minimum": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/InventoryMinimum"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Per-Location reorder thresholds for the item. See [`InventoryMinimum`][albert.resources.inventory.InventoryMinimum].",
          "title": "Minimum"
        },
        "alias": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "An alternate name for the item.",
          "title": "Alias"
        },
        "Cas": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/CasAmount"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The item's compositional breakdown as CAS amounts. See [`CasAmount`][albert.resources.inventory.CasAmount].",
          "title": "Cas"
        },
        "isFormulaOverride": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the substance/CAS-level breakdown for this formula has been overridden from the auto-calculated value; commonly set to indicate the formula is not a non-reactive homogeneous mixture.",
          "title": "Isformulaoverride"
        },
        "Metadata": {
          "anyOf": [
            {
              "additionalProperties": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/EntityLinkWithName"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  },
                  {
                    "items": {
                      "anyOf": [
                        {
                          "$ref": "#/$defs/EntityLinkWithName"
                        },
                        {
                          "$ref": "#/$defs/EntityLink"
                        }
                      ]
                    },
                    "type": "array"
                  }
                ]
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Custom metadata fields. Allowed keys are defined by the workspace's CustomFields configuration.",
          "title": "Metadata"
        },
        "parentId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The parent Project ID. Required for Formulas. Serialized as ``parentId``.",
          "title": "Parentid"
        },
        "ACL": {
          "description": "Access-control entries governing who can act on the item.",
          "items": {
            "$ref": "#/$defs/ACL"
          },
          "title": "Acl",
          "type": "array"
        },
        "onHand": {
          "default": 0.0,
          "description": "Total amount currently on hand across all lots. Read-only.",
          "title": "Onhand",
          "type": "number"
        },
        "TaskConfig": {
          "anyOf": [
            {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Task configuration associated with the item. Read-only.",
          "title": "Taskconfig"
        },
        "formulaId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The formula ID for a formula item. Read-only.",
          "title": "Formulaid"
        },
        "Symbols": {
          "anyOf": [
            {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazard/pictogram symbols associated with the item. Read-only.",
          "title": "Symbols"
        },
        "unNumber": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The UN hazardous-material number, when applicable. Read-only.",
          "title": "Unnumber"
        },
        "recentAttachmentId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The ID of the most recent attachment on the item. Read-only. See Also --------",
          "title": "Recentattachmentid"
        }
      },
      "required": [
        "category"
      ],
      "title": "InventoryItem",
      "type": "object"
    },
    "InventoryMinimum": {
      "description": "A reorder threshold: the minimum stock of an [`InventoryItem`][albert.resources.inventory.InventoryItem] to keep at a Location.\n\nEach entry pairs one Location with the minimum quantity of an item that must be\nkept on hand there. An [`InventoryItem`][albert.resources.inventory.InventoryItem] may carry several of these, one per\nLocation. Identify the Location either by passing a full\n[`Location`][albert.resources.locations.Location] object as ``location`` (its ``id`` is\nthen copied onto ``id``), or by passing the location ``id`` string directly. Provide\none or the other, not both.\n\n!!! example\n    ```python\n    from albert.resources.inventory import InventoryMinimum\n\n    minimum = InventoryMinimum(id=\"LOC9999999\", minimum=500)\n    ```",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the Location this minimum applies to. Provide either a ``location`` or an ``id``; when ``location`` is given, this is set from it.",
          "title": "Id"
        },
        "location": {
          "anyOf": [
            {
              "$ref": "#/$defs/Location"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Location object this minimum applies to. Excluded from serialization. Provide either a ``location`` or an ``id``."
        },
        "minimum": {
          "description": "The minimum amount of the item that must be kept in stock at the Location. Must be between 0 and 1e15. See Also --------",
          "maximum": 1000000000000000,
          "minimum": 0,
          "title": "Minimum",
          "type": "number"
        }
      },
      "required": [
        "minimum"
      ],
      "title": "InventoryMinimum",
      "type": "object"
    },
    "InventoryUnitCategory": {
      "description": "The dimension of the unit an [`InventoryItem`][albert.resources.inventory.InventoryItem] is measured and stocked in.\n\nDetermines how quantities on hand and in formulas are interpreted. When not\nsupplied, the category defaults based on [`InventoryCategory`][albert.resources.inventory.InventoryCategory]: ``MASS``\nfor raw materials and formulas, ``UNITS`` for equipment and consumables.\n\nAttributes\n----------\nMASS : str\n    Measured by mass (e.g. grams, kilograms).\nVOLUME : str\n    Measured by volume (e.g. milliliters, liters).\nLENGTH : str\n    Measured by length (e.g. meters).\nPRESSURE : str\n    Measured by pressure.\nUNITS : str\n    Counted as discrete units (e.g. each item).",
      "enum": [
        "mass",
        "volume",
        "length",
        "pressure",
        "units"
      ],
      "title": "InventoryUnitCategory",
      "type": "string"
    },
    "ListItem": {
      "description": "A single allowed value in a configurable list of options.\n\nList items back the choices offered by ``list``-type custom fields (e.g.\ndropdown options) and other fixed option sets in Albert. A\n[`CustomField`][albert.resources.custom_fields.CustomField] with\n[`LIST`][albert.resources.custom_fields.FieldType.LIST] defines a list (keyed\nby ``list_type``, typically the field's name); its selectable options are\n``ListItem`` records with a matching ``list_type``. Managed through\n[`ListsCollection`][albert.collections.lists.ListsCollection] (``client.lists``).\n\n!!! example\n    ```python\n    from albert.resources.lists import ListItem, ListItemCategory\n    item = ListItem(name=\"In Progress\", category=ListItemCategory.USER_DEFINED)\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The display name of the list item (the option value).",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the list item. Set when the item is retrieved from or created in Albert.",
          "title": "Albertid"
        },
        "category": {
          "anyOf": [
            {
              "$ref": "#/$defs/ListItemCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The category of the list item. Allowed values are ``businessDefined``, ``userDefined``, ``projects``, ``extensions``, and ``inventory``."
        },
        "listType": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The list this item belongs to. For a list-type custom field this is typically the field's name (see [`CustomField`][albert.resources.custom_fields.CustomField]). For built-in categories the allowed values are ``projectState`` for ``projects``, ``extensions`` for ``extensions``, and ``casCategory`` or ``inventoryFunction`` for ``inventory``.",
          "title": "Listtype"
        }
      },
      "required": [
        "name"
      ],
      "title": "ListItem",
      "type": "object"
    },
    "ListItemCategory": {
      "description": "The category a list item belongs to, which governs its allowed list types.\n\nAttributes\n----------\nBUSINESS_DEFINED : str\n    Predefined values managed at the business/organization level.\nUSER_DEFINED : str\n    Custom values defined by users.\nPROJECTS : str\n    Values used by projects (e.g. project states).\nEXTENSIONS : str\n    Values used by extensions.\nINVENTORY : str\n    Values used by inventory (e.g. CAS categories or inventory functions).",
      "enum": [
        "businessDefined",
        "userDefined",
        "projects",
        "extensions",
        "inventory"
      ],
      "title": "ListItemCategory",
      "type": "string"
    },
    "Location": {
      "description": "A physical lab or site location in Albert.\n\nLocations are referenced by Tasks and Inventory Items to record where an\nactivity is performed or where a material lives, and each Location can hold\none or more Storage Locations\n([`StorageLocation`][albert.resources.storage_locations.StorageLocation]). Managed\nthrough [`LocationCollection`][albert.collections.locations.LocationCollection].\n\n!!! example\n    ```python\n    from albert.resources.locations import Location\n    location = Location(\n        name=\"Boston Lab\",\n        latitude=42.3601,\n        longitude=-71.0589,\n        address=\"1 Main St\",\n        country=\"US\",\n    )\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The human-readable name of the location.",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the location. Assigned by Albert and populated once the location has been created or retrieved.",
          "title": "Albertid"
        },
        "latitude": {
          "description": "The latitude of the location, in decimal degrees.",
          "title": "Latitude",
          "type": "number"
        },
        "longitude": {
          "description": "The longitude of the location, in decimal degrees.",
          "title": "Longitude",
          "type": "number"
        },
        "address": {
          "description": "The street address of the location.",
          "title": "Address",
          "type": "string"
        },
        "country": {
          "anyOf": [
            {
              "maxLength": 2,
              "minLength": 2,
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The two-letter country code of the location (for example, ``\"US\"``).",
          "title": "Country"
        }
      },
      "required": [
        "name",
        "latitude",
        "longitude",
        "address"
      ],
      "title": "Location",
      "type": "object"
    },
    "Operator": {
      "description": "A comparison operator constraining a numeric parameter value.\n\nUsed by [`ValueValidation`][albert.resources.parameter_groups.ValueValidation] to bound acceptable values (e.g. ``gte`` with\na ``min`` requires the value to be at least ``min``).\n\nAttributes\n----------\nBETWEEN : str\n    Value must fall between ``min`` and ``max`` (inclusive).\nLESS_THAN : str\n    Value must be less than ``max``.\nLESS_THAN_OR_EQUAL : str\n    Value must be less than or equal to ``max``.\nGREATER_THAN_OR_EQUAL : str\n    Value must be greater than or equal to ``min``.\nGREATER_THAN : str\n    Value must be greater than ``min``.\nEQUALS : str\n    Value must equal the specified value.",
      "enum": [
        "between",
        "lt",
        "lte",
        "gte",
        "gt",
        "eq",
        "neq"
      ],
      "title": "Operator",
      "type": "string"
    },
    "PGType": {
      "description": "The kind of task a [`ParameterGroup`][albert.resources.parameter_groups.ParameterGroup] relates to.\n\nA Parameter Group is about making a sample and/or prepping it for measurement,\nand its type records which sort of task it is used in.\n\nAttributes\n----------\nGENERAL : str\n    A group used in a general lab task (anything that is not a batch or\n    property task).\nBATCH : str\n    A group used in a Batch Task ([`BatchTask`][albert.resources.tasks.BatchTask]),\n    e.g. a mixing step when manufacturing a batch.\nPROPERTY : str\n    A group used in a property (measurement) task to prep a sample for testing.",
      "enum": [
        "general",
        "batch",
        "property"
      ],
      "title": "PGType",
      "type": "string"
    },
    "Parameter": {
      "description": "The definition of a single experimental condition or input variable.\n\nA Parameter (ID format ``PRM...``) names an \"indirect variable\" such as\nTemperature, Spin Speed, or Instrument. The Parameter itself only defines the\nvariable; its actual value and unit are fixed to a setpoint later, inside a\n[`Workflow`][albert.resources.workflows.Workflow]. Parameters are the building\nblocks of Parameter Groups\n([`ParameterGroup`][albert.resources.parameter_groups.ParameterGroup]) and form the\nparameter side of Data Templates\n([`DataTemplate`][albert.resources.data_templates.DataTemplate]).\n\nManage parameters through\n[`ParameterCollection`][albert.collections.parameters.ParameterCollection]\n(``client.parameters``).\n\n!!! example\n    ```python\n    from albert import Albert\n    from albert.resources.parameters import Parameter\n    client = Albert()\n    param = client.parameters.create(parameter=Parameter(name=\"Temperature\"))\n    param.id\n    # 'PRM9999999'\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The name of the parameter. Names must be unique.",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the parameter (format ``PRM...``). Set when the parameter is retrieved from or created in Albert.",
          "title": "Albertid"
        },
        "Metadata": {
          "anyOf": [
            {
              "additionalProperties": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/EntityLinkWithName"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  },
                  {
                    "items": {
                      "anyOf": [
                        {
                          "$ref": "#/$defs/EntityLinkWithName"
                        },
                        {
                          "$ref": "#/$defs/EntityLink"
                        }
                      ]
                    },
                    "type": "array"
                  }
                ]
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Optional user-defined metadata keyed by field name.",
          "title": "Metadata"
        },
        "category": {
          "anyOf": [
            {
              "$ref": "#/$defs/ParameterCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the parameter is ``Normal`` (scalar value) or ``Special`` (entity reference). Set by the platform and read-only."
        },
        "rank": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The rank of the returned parameter. Read-only.",
          "title": "Rank"
        },
        "required": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether this parameter must be filled in within a Parameter Group.",
          "title": "Required"
        }
      },
      "required": [
        "name"
      ],
      "title": "Parameter",
      "type": "object"
    },
    "ParameterCategory": {
      "description": "Whether a [`Parameter`][albert.resources.parameters.Parameter]'s value is a plain scalar or an entity reference.\n\nSet by the platform and read-only. It determines how a parameter's value is\ninterpreted when a setpoint is assigned to it inside a\n[`Workflow`][albert.resources.workflows.Workflow].\n\nAttributes\n----------\nNORMAL : str\n    A \"normal\" parameter whose value is a plain scalar (e.g. a number or text),\n    such as Temperature or Spin Speed.\nSPECIAL : str\n    A \"special\" parameter whose value references another entity (e.g. Equipment,\n    a Consumable, or a Template). The setpoint value is that entity's ID rather\n    than a plain scalar.",
      "enum": [
        "Normal",
        "Special"
      ],
      "title": "ParameterCategory",
      "type": "string"
    },
    "ParameterValue": {
      "description": "A single [`Parameter`][albert.resources.parameters.Parameter] and its value within a [`ParameterGroup`][albert.resources.parameter_groups.ParameterGroup].\n\nA ``ParameterValue`` binds one Parameter to the value, unit, and validation\nrules it takes inside a group. Each entry must reference an existing Parameter,\nso provide exactly one of ``id`` (the Parameter's Albert ID) or ``parameter``\n(the [`Parameter`][albert.resources.parameters.Parameter] object itself); when a\n``parameter`` is given, the ``id``, ``category``, and ``name`` are populated\nfrom it. Values are later fixed to setpoints inside a\n[`Workflow`][albert.resources.workflows.Workflow].\n\n!!! example\n    ```python\n    from albert.resources.parameter_groups import ParameterValue\n\n    # Reference the parameter by its Albert ID\n    value = ParameterValue(id=\"PRM9999999\", value=\"500\")\n    ```",
      "properties": {
        "parameter": {
          "anyOf": [
            {
              "$ref": "#/$defs/Parameter"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Parameter this value is associated with. Provide either ``id`` or ``parameter``. Excluded from serialization."
        },
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the associated Parameter. Provide either ``id`` or ``parameter``.",
          "title": "Id"
        },
        "category": {
          "anyOf": [
            {
              "$ref": "#/$defs/ParameterCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The category of the parameter (``Normal`` or ``Special``). Populated from ``parameter`` when one is provided. When only ``id`` is given, the parameter-group create API rejects the payload (``400 \"Category mismatch ... Category undefined expected\"``), so set ``category`` explicitly (``ParameterCategory.NORMAL`` for ordinary parameters) or pass the full ``parameter`` object."
        },
        "shortName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A short name for the parameter value. Serialized as ``shortName``.",
          "title": "Shortname"
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/$defs/InventoryItem"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "$ref": "#/$defs/User"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The value of the parameter. Can be a plain string, an [`InventoryItem`][albert.resources.inventory.InventoryItem] (e.g. when the parameter represents an instrument choice), or a [`User`][albert.resources.users.User] (e.g. a user reference such as \"Performed By\").",
          "title": "Value"
        },
        "Unit": {
          "anyOf": [
            {
              "$ref": "#/$defs/Unit"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The unit of measure for the value. Serialized as ``Unit``.",
          "title": "Unit"
        },
        "Added": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "required": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether this parameter is required. Defaults to False.",
          "title": "Required"
        },
        "validation": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/ValueValidation"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Validation rules applied to the value. See [`ValueValidation`][albert.resources.parameter_groups.ValueValidation].",
          "title": "Validation"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The name of the parameter. Read-only.",
          "title": "Name"
        },
        "sequence": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The sequence of the parameter within the group. Read-only.",
          "title": "Sequence"
        },
        "originalShortName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Originalshortname"
        },
        "originalName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Originalname"
        }
      },
      "title": "ParameterValue",
      "type": "object"
    },
    "Role": {
      "description": "A named set of access permissions within a tenant.\n\nA role bundles policies that determine what a holder is allowed to do. Roles\nare assigned to users ([`User`][albert.resources.users.User]) and referenced\nby entity ACLs. Roles are typically read from Albert rather than built by\nhand.",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the role. Role IDs may contain ``#`` characters. Set once the role is retrieved from Albert.",
          "title": "Albertid"
        },
        "name": {
          "description": "The display name of the role.",
          "title": "Name",
          "type": "string"
        },
        "Policies": {
          "anyOf": [
            {
              "items": {},
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The policies (permission rules) associated with the role.",
          "title": "Policies"
        },
        "tenant": {
          "description": "The ID of the tenant the role belongs to.",
          "title": "Tenant",
          "type": "string"
        },
        "visibility": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the role is visible in the platform's role listings.",
          "title": "Visibility"
        }
      },
      "required": [
        "name",
        "tenant"
      ],
      "title": "Role",
      "type": "object"
    },
    "SecurityClass": {
      "description": "The security (access control) class of a resource.\n\nAttributes\n----------\nSHARED : str\n    Accessible to all members of the tenant.\nRESTRICTED : str\n    Access is restricted to specific teams or users.\nCONFIDENTIAL : str\n    Access is limited to designated users only.\nPRIVATE : str\n    Visible only to the owner. Used by Projects.",
      "enum": [
        "shared",
        "restricted",
        "confidential",
        "private"
      ],
      "title": "SecurityClass",
      "type": "string"
    },
    "Status": {
      "description": "The status of a resource.\n\nAttributes\n----------\nACTIVE : str\n    The resource is fully operational and visible in normal operations.\nINACTIVE : str\n    The resource is hidden from normal operations and disabled from use.",
      "enum": [
        "active",
        "inactive"
      ],
      "title": "Status",
      "type": "string"
    },
    "Tag": {
      "description": "A freeform text label used to categorize and connect entities.\n\nTags are shared by name across the platform and can be applied to inventory\nitems, companies, tasks, and other records to group and filter them. Managed\nthrough [`TagCollection`][albert.collections.tags.TagCollection] (``client.tags``);\nthe usual entry point is [`get_or_create`][albert.collections.tags.TagCollection.get_or_create].\n\n!!! example\n    ```python\n    from albert.resources.tags import Tag\n    tag = Tag(tag=\"high-priority\")\n    ```\nMethods\n-------\nfrom_string(tag) -> Tag\n    Build a Tag from its name string.",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The name of the tag (its text label).",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the tag (format ``TAG...``). Set when the tag is retrieved from or created in Albert. Methods ------- from_string(tag) -> Tag Build a Tag from its name string.",
          "title": "Albertid"
        }
      },
      "required": [
        "name"
      ],
      "title": "Tag",
      "type": "object"
    },
    "Unit": {
      "description": "A unit of measure (e.g. ``g``, ``mL``, ``\u00b0C``).\n\nUnits qualify quantities throughout the platform: inventory amounts,\nparameter values, and property results. Managed through\n[`UnitCollection`][albert.collections.units.UnitCollection] (``client.units``).\n\n!!! example\n    ```python\n    from albert.resources.units import Unit, UnitCategory\n    unit = Unit(name=\"milliliter\", symbol=\"mL\", category=UnitCategory.LIQUID_VOLUME)\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the unit (format ``UNI...``). Set when the unit is retrieved from or created in Albert.",
          "title": "Albertid"
        },
        "name": {
          "description": "Currently this is the only field that is displayed in Albert, so use this for display purposes. Therefore, users often use the symbol for the unit here as that's the preferred display.",
          "title": "Name",
          "type": "string"
        },
        "symbol": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The display symbol for the unit (e.g. ``\"g\"``).",
          "title": "Symbol"
        },
        "Synonyms": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Alternate names or spellings that also refer to this unit.",
          "title": "Synonyms"
        },
        "category": {
          "anyOf": [
            {
              "$ref": "#/$defs/UnitCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The physical quantity the unit measures (e.g. ``Mass``, ``Volume``)."
        },
        "verified": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": false,
          "description": "Whether the unit has been verified in Albert. Read-only.",
          "title": "Verified"
        }
      },
      "required": [
        "name"
      ],
      "title": "Unit",
      "type": "object"
    },
    "UnitCategory": {
      "description": "The physical quantity a unit measures.\n\nAttributes\n----------\nLENGTH : str\n    Length units (e.g. m, cm).\nVOLUME : str\n    Volume units (e.g. m\u00b3).\nLIQUID_VOLUME : str\n    Liquid volume units (e.g. L, mL).\nANGLES : str\n    Angle units (e.g. degrees, radians).\nTIME : str\n    Time units (e.g. s, h).\nFREQUENCY : str\n    Frequency units (e.g. Hz).\nMASS : str\n    Mass units (e.g. g, kg).\nCURRENT : str\n    Electric current units (e.g. A).\nTEMPERATURE : str\n    Temperature units (e.g. \u00b0C, K).\nAMOUNT : str\n    Amount of substance units (e.g. mol).\nLUMINOSITY : str\n    Luminous intensity units (e.g. cd).\nFORCE : str\n    Force units (e.g. N).\nENERGY : str\n    Energy units (e.g. J).\nPOWER : str\n    Power units (e.g. W).\nPRESSURE : str\n    Pressure units (e.g. Pa, bar).\nELECTRICITY_AND_MAGNETISM : str\n    Electricity and magnetism units.\nOTHER : str\n    Units that do not fit another category.\nWEIGHT : str\n    Weight units.\nAREA : str\n    Area units (e.g. m\u00b2).\nSURFACE_AREA : str\n    Surface area units.\nBINARY : str\n    Binary/digital-information units (e.g. bytes).\nCAPACITANCE : str\n    Capacitance units (e.g. F).\nSPEED : str\n    Speed units (e.g. m/s).\nELECTRICAL_CONDUCTIVITY : str\n    Electrical conductivity units.\nELECTRICAL_PERMITTIVITY : str\n    Electrical permittivity units.\nDENSITY : str\n    Density units (e.g. g/mL).\nRESISTANCE : str\n    Electrical resistance units (e.g. \u03a9).",
      "enum": [
        "Length",
        "Volume",
        "Liquid volume",
        "Angles",
        "Time",
        "Frequency",
        "Mass",
        "Electric current",
        "Temperature",
        "Amount of substance",
        "Luminous intensity",
        "Force",
        "Energy",
        "Power",
        "Pressure",
        "Electricity and magnetism",
        "Other",
        "Weight",
        "Area",
        "Surface Area",
        "Binary",
        "Capacitance",
        "Speed",
        "Electrical conductivity",
        "Electrical permitivitty",
        "Density",
        "Resistance"
      ],
      "title": "UnitCategory",
      "type": "string"
    },
    "User": {
      "description": "An Albert user account: a person who can log in and act in the platform.\n\nA user has a name and email, an optional home\n[`Location`][albert.resources.locations.Location], and a set of\n[`Role`][albert.resources.roles.Role] objects that govern what they can do.\nThe ``user_class`` sets a broad permission tier\n([`UserClass`][albert.resources.users.UserClass]). Users are grouped into teams\n([`Team`][albert.resources.teams.Team]), and are referenced across the\nplatform, for example as the assignee of a Task or in an entity's ACL.\n\n!!! example\n    ```python\n    from albert.resources.users import User, UserClass\n    user = User(\n        name=\"Ada Lovelace\",\n        email=\"ada@example.com\",\n        user_class=UserClass.STANDARD,\n    )\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The display name of the user.",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert User ID (format ``USR...``). Set once the user is registered in or retrieved from Albert.",
          "title": "Albertid"
        },
        "Location": {
          "anyOf": [
            {
              "$ref": "#/$defs/Location"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The user's home location.",
          "title": "Location"
        },
        "email": {
          "default": null,
          "description": "The user's email address.",
          "format": "email",
          "title": "Email",
          "type": "string"
        },
        "Roles": {
          "description": "The roles the user holds, which determine their permissions.",
          "items": {
            "anyOf": [
              {
                "$ref": "#/$defs/Role"
              },
              {
                "$ref": "#/$defs/EntityLink"
              }
            ]
          },
          "maxItems": 1,
          "title": "Roles",
          "type": "array"
        },
        "userClass": {
          "$ref": "#/$defs/UserClass",
          "default": "standard",
          "description": "The ACL class level of the user (broad permission tier)."
        },
        "witnesser": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the user can act as a witness on tasks (only relevant when witnessing is enabled for the tenant).",
          "title": "Witnesser"
        },
        "Metadata": {
          "anyOf": [
            {
              "additionalProperties": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/EntityLinkWithName"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  },
                  {
                    "items": {
                      "anyOf": [
                        {
                          "$ref": "#/$defs/EntityLinkWithName"
                        },
                        {
                          "$ref": "#/$defs/EntityLink"
                        }
                      ]
                    },
                    "type": "array"
                  }
                ]
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Custom metadata attached to the user.",
          "title": "Metadata"
        }
      },
      "required": [
        "name"
      ],
      "title": "User",
      "type": "object"
    },
    "UserClass": {
      "description": "The ACL class level of a user, setting a broad permission tier.\n\nAttributes\n----------\nGUEST : str\n    Most limited access; typically external or temporary users.\nSTANDARD : str\n    Default access level for regular users.\nTRUSTED : str\n    Elevated access above standard users.\nPRIVILEGED : str\n    High access level below full administrators.\nADMIN : str\n    Full administrative access to the tenant.",
      "enum": [
        "guest",
        "standard",
        "trusted",
        "privileged",
        "admin"
      ],
      "title": "UserClass",
      "type": "string"
    },
    "ValueValidation": {
      "description": "A validation rule constraining a [`ParameterValue`][albert.resources.parameter_groups.ParameterValue].\n\nDeclares the expected [`DataType`][albert.resources.parameter_groups.DataType] for a parameter value and, optionally,\nthe bounds or allowed options it must satisfy. Attach one or more of these to a\n[`ParameterValue`][albert.resources.parameter_groups.ParameterValue] via its ``validation`` field.\n\nWhen ``datatype`` is ``date`` or ``timestamp``, ``value``, ``min``, and ``max`` are\nstrings in the wire format documented on [`DataType`][albert.resources.parameter_groups.DataType].\n\n!!! example\n    ```python\n    from albert.resources.parameter_groups import (\n        DataType,\n        Operator,\n        ValueValidation,\n    )\n\n    rule = ValueValidation(\n        datatype=DataType.NUMBER,\n        operator=Operator.BETWEEN,\n        min=\"0\",\n        max=\"100\",\n    )\n    ```",
      "properties": {
        "datatype": {
          "$ref": "#/$defs/DataType",
          "description": "The data type the value must conform to. Required."
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "items": {
                "$ref": "#/$defs/EnumValidationValue"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "For ``ENUM`` types, the list of allowed options (see [`EnumValidationValue`][albert.resources.parameter_groups.EnumValidationValue]); otherwise an optional expected value. For ``date`` and ``timestamp`` types, a string in the wire format documented on [`DataType`][albert.resources.parameter_groups.DataType].",
          "title": "Value"
        },
        "min": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The lower bound, used with ``operator``. For numeric types, a numeric string; for ``date`` and ``timestamp`` types, a string in the wire format documented on [`DataType`][albert.resources.parameter_groups.DataType].",
          "title": "Min"
        },
        "max": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The upper bound, used with ``operator``. For numeric types, a numeric string; for ``date`` and ``timestamp`` types, a string in the wire format documented on [`DataType`][albert.resources.parameter_groups.DataType].",
          "title": "Max"
        },
        "operator": {
          "anyOf": [
            {
              "$ref": "#/$defs/Operator"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The comparison operator applied against ``min`` and/or ``max``."
        }
      },
      "required": [
        "datatype"
      ],
      "title": "ValueValidation",
      "type": "object"
    }
  },
  "description": "A reusable set of parameters (PRG) for making or prepping a sample.\n\nA Parameter Group bundles [`Parameter`][albert.resources.parameters.Parameter]\nentities, along with their values, units, and validation rules, into a reusable\nunit. Whereas a Data Template's parameters relate to a given measurement, a\nParameter Group is about *making* the sample and/or *prepping* it for\nmeasurement (e.g. a mixing step or a cure schedule). Some groups drive Batch\nTasks ([`BatchTask`][albert.resources.tasks.BatchTask]); others are stacked within a\ntask. A group's parameters, together with a Data Template's parameters, are\nfixed to setpoints inside a [`Workflow`][albert.resources.workflows.Workflow].\n\nOnce saved, a group is referenced by its Parameter Group ID (format ``PRG...``,\ne.g. ``\"PRG9999999\"``). Store test standards (e.g. ASTM or ISO) under the\n``\"Standards\"`` key of ``metadata``.\n\nGroups are managed through\n[`ParameterGroupCollection`][albert.collections.parameter_groups.ParameterGroupCollection]\n(``client.parameter_groups``).\n\n!!! example\n    ```python\n    from albert.resources.parameter_groups import (\n        ParameterGroup,\n        ParameterValue,\n        PGType,\n    )\n\n    pg = ParameterGroup(\n        name=\"Mixing Step\",\n        type=PGType.BATCH,\n        parameters=[ParameterValue(id=\"PRM9999999\", value=\"500\")],\n    )\n    ```",
  "properties": {
    "status": {
      "anyOf": [
        {
          "$ref": "#/$defs/Status"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The status of the resource, optional."
    },
    "Created": {
      "anyOf": [
        {
          "$ref": "#/$defs/AuditFields"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Audit fields for the creation of the resource, optional."
    },
    "Updated": {
      "anyOf": [
        {
          "$ref": "#/$defs/AuditFields"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Audit fields for the update of the resource, optional."
    },
    "Tags": {
      "anyOf": [
        {
          "items": {
            "anyOf": [
              {
                "$ref": "#/$defs/Tag"
              },
              {
                "$ref": "#/$defs/EntityLink"
              }
            ]
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "A list of Tag objects or strings representing tags.",
      "title": "Tags"
    },
    "name": {
      "description": "The name of the parameter group. Required.",
      "title": "Name",
      "type": "string"
    },
    "type": {
      "anyOf": [
        {
          "$ref": "#/$defs/PGType"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The kind of task the group relates to (``general``, ``batch``, or ``property``)."
    },
    "albertId": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The Albert Parameter Group ID (format ``PRG...``). Set when the group is retrieved from or created in Albert. Serialized as ``albertId``.",
      "title": "Albertid"
    },
    "description": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "A free-text description of the group.",
      "title": "Description"
    },
    "class": {
      "$ref": "#/$defs/SecurityClass",
      "default": "restricted",
      "description": "The access/security class of the group. Defaults to ``RESTRICTED``. Serialized as ``class``."
    },
    "ACL": {
      "anyOf": [
        {
          "items": {
            "anyOf": [
              {
                "$ref": "#/$defs/User"
              },
              {
                "$ref": "#/$defs/EntityLink"
              }
            ]
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Access-control entries governing who can act on the group. Serialized as ``ACL``.",
      "title": "Acl"
    },
    "Metadata": {
      "additionalProperties": {
        "anyOf": [
          {
            "type": "number"
          },
          {
            "type": "integer"
          },
          {
            "type": "string"
          },
          {
            "$ref": "#/$defs/EntityLinkWithName"
          },
          {
            "$ref": "#/$defs/EntityLink"
          },
          {
            "items": {
              "anyOf": [
                {
                  "$ref": "#/$defs/EntityLinkWithName"
                },
                {
                  "$ref": "#/$defs/EntityLink"
                }
              ]
            },
            "type": "array"
          }
        ]
      },
      "description": "Custom metadata fields. Test standards are stored under the ``\"Standards\"`` key. Serialized as ``Metadata``.",
      "title": "Metadata",
      "type": "object"
    },
    "Parameters": {
      "description": "The parameters in the group, each with its value, unit, and validation. See [`ParameterValue`][albert.resources.parameter_groups.ParameterValue]. Serialized as ``Parameters``.",
      "items": {
        "$ref": "#/$defs/ParameterValue"
      },
      "title": "Parameters",
      "type": "array"
    },
    "verified": {
      "default": false,
      "description": "Whether the group has been verified (an approval/governance state). Read-only.",
      "title": "Verified",
      "type": "boolean"
    },
    "documents": {
      "description": "Documents (e.g. SOPs) associated with the Parameter Group. See Also --------",
      "items": {
        "$ref": "#/$defs/EntityLink"
      },
      "title": "Documents",
      "type": "array"
    }
  },
  "required": [
    "name"
  ],
  "title": "ParameterGroup",
  "type": "object"
}

Fields:

Validators:

name

name: str

The name of the parameter group. Required.

type

type: PGType | None = None

The kind of task the group relates to (general, batch, or property).

id

id: str | None = None

The Albert Parameter Group ID (format PRG...). Set when the group is retrieved from or created in Albert. Serialized as albertId.

description

description: str | None = None

A free-text description of the group.

security_class

The access/security class of the group. Defaults to RESTRICTED. Serialized as class.

acl

acl: list[SerializeAsEntityLink[User]] | None = None

Access-control entries governing who can act on the group. Serialized as ACL.

metadata

metadata: dict[str, MetadataItem]

Custom metadata fields. Test standards are stored under the "Standards" key. Serialized as Metadata.

parameters

parameters: list[ParameterValue]

The parameters in the group, each with its value, unit, and validation. See ParameterValue. Serialized as Parameters.

verified

verified: bool = False

Whether the group has been verified (an approval/governance state). Read-only.

documents

documents: list[EntityLink]

Documents (e.g. SOPs) associated with the Parameter Group. See Also --------

sanitize_metadata

sanitize_metadata(value: Any) -> Any
Source code in src/albert/resources/parameter_groups.py
@field_validator("metadata", mode="before")
@classmethod
def sanitize_metadata(cls, value: Any) -> Any:
    return _sanitize_metadata(value)

ParameterSearchItemParameter

Bases: BaseAlbertModel

A lightweight parameter reference within a parameter group search result.

Show JSON schema:
{
  "$defs": {
    "LocalizedNames": {
      "properties": {
        "de": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "De"
        },
        "ja": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Ja"
        },
        "zh": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Zh"
        },
        "es": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Es"
        }
      },
      "title": "LocalizedNames",
      "type": "object"
    }
  },
  "description": "A lightweight parameter reference within a parameter group search result.",
  "properties": {
    "name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The name of the parameter.",
      "title": "Name"
    },
    "id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The Albert ID of the parameter. ``None`` on search rows that omit it.",
      "title": "Id"
    },
    "localizedNames": {
      "anyOf": [
        {
          "$ref": "#/$defs/LocalizedNames"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Localized name variants for the parameter."
    }
  },
  "title": "ParameterSearchItemParameter",
  "type": "object"
}

Fields:

name

name: str | None = None

The name of the parameter.

id

id: str | None = None

The Albert ID of the parameter. None on search rows that omit it.

localized_names

localized_names: LocalizedNames | None = None

Localized name variants for the parameter.

ParameterGroupSearchItem

Bases: BaseAlbertModel, HydrationMixin[ParameterGroup]

A lightweight, partially populated parameter group from search results.

Returned by search. Search results omit some detail for speed; call hydrate() to fetch the full ParameterGroup.

Show JSON schema:
{
  "$defs": {
    "AuditFields": {
      "description": "The audit fields for a resource",
      "properties": {
        "by": {
          "default": null,
          "title": "By",
          "type": "string"
        },
        "byName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Byname"
        },
        "at": {
          "anyOf": [
            {
              "format": "date-time",
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "At"
        }
      },
      "title": "AuditFields",
      "type": "object"
    },
    "EntityLink": {
      "properties": {
        "id": {
          "title": "Id",
          "type": "string"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Name"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Category"
        }
      },
      "required": [
        "id"
      ],
      "title": "EntityLink",
      "type": "object"
    },
    "EntityLinkWithName": {
      "description": "EntityLink that includes the name field in serialization.",
      "properties": {
        "id": {
          "title": "Id",
          "type": "string"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Name"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Category"
        }
      },
      "required": [
        "id"
      ],
      "title": "EntityLinkWithName",
      "type": "object"
    },
    "LocalizedNames": {
      "properties": {
        "de": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "De"
        },
        "ja": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Ja"
        },
        "zh": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Zh"
        },
        "es": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Es"
        }
      },
      "title": "LocalizedNames",
      "type": "object"
    },
    "Location": {
      "description": "A physical lab or site location in Albert.\n\nLocations are referenced by Tasks and Inventory Items to record where an\nactivity is performed or where a material lives, and each Location can hold\none or more Storage Locations\n([`StorageLocation`][albert.resources.storage_locations.StorageLocation]). Managed\nthrough [`LocationCollection`][albert.collections.locations.LocationCollection].\n\n!!! example\n    ```python\n    from albert.resources.locations import Location\n    location = Location(\n        name=\"Boston Lab\",\n        latitude=42.3601,\n        longitude=-71.0589,\n        address=\"1 Main St\",\n        country=\"US\",\n    )\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The human-readable name of the location.",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the location. Assigned by Albert and populated once the location has been created or retrieved.",
          "title": "Albertid"
        },
        "latitude": {
          "description": "The latitude of the location, in decimal degrees.",
          "title": "Latitude",
          "type": "number"
        },
        "longitude": {
          "description": "The longitude of the location, in decimal degrees.",
          "title": "Longitude",
          "type": "number"
        },
        "address": {
          "description": "The street address of the location.",
          "title": "Address",
          "type": "string"
        },
        "country": {
          "anyOf": [
            {
              "maxLength": 2,
              "minLength": 2,
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The two-letter country code of the location (for example, ``\"US\"``).",
          "title": "Country"
        }
      },
      "required": [
        "name",
        "latitude",
        "longitude",
        "address"
      ],
      "title": "Location",
      "type": "object"
    },
    "PGType": {
      "description": "The kind of task a [`ParameterGroup`][albert.resources.parameter_groups.ParameterGroup] relates to.\n\nA Parameter Group is about making a sample and/or prepping it for measurement,\nand its type records which sort of task it is used in.\n\nAttributes\n----------\nGENERAL : str\n    A group used in a general lab task (anything that is not a batch or\n    property task).\nBATCH : str\n    A group used in a Batch Task ([`BatchTask`][albert.resources.tasks.BatchTask]),\n    e.g. a mixing step when manufacturing a batch.\nPROPERTY : str\n    A group used in a property (measurement) task to prep a sample for testing.",
      "enum": [
        "general",
        "batch",
        "property"
      ],
      "title": "PGType",
      "type": "string"
    },
    "ParameterSearchItemParameter": {
      "description": "A lightweight parameter reference within a parameter group search result.",
      "properties": {
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The name of the parameter.",
          "title": "Name"
        },
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the parameter. ``None`` on search rows that omit it.",
          "title": "Id"
        },
        "localizedNames": {
          "anyOf": [
            {
              "$ref": "#/$defs/LocalizedNames"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Localized name variants for the parameter."
        }
      },
      "title": "ParameterSearchItemParameter",
      "type": "object"
    },
    "Role": {
      "description": "A named set of access permissions within a tenant.\n\nA role bundles policies that determine what a holder is allowed to do. Roles\nare assigned to users ([`User`][albert.resources.users.User]) and referenced\nby entity ACLs. Roles are typically read from Albert rather than built by\nhand.",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the role. Role IDs may contain ``#`` characters. Set once the role is retrieved from Albert.",
          "title": "Albertid"
        },
        "name": {
          "description": "The display name of the role.",
          "title": "Name",
          "type": "string"
        },
        "Policies": {
          "anyOf": [
            {
              "items": {},
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The policies (permission rules) associated with the role.",
          "title": "Policies"
        },
        "tenant": {
          "description": "The ID of the tenant the role belongs to.",
          "title": "Tenant",
          "type": "string"
        },
        "visibility": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the role is visible in the platform's role listings.",
          "title": "Visibility"
        }
      },
      "required": [
        "name",
        "tenant"
      ],
      "title": "Role",
      "type": "object"
    },
    "Status": {
      "description": "The status of a resource.\n\nAttributes\n----------\nACTIVE : str\n    The resource is fully operational and visible in normal operations.\nINACTIVE : str\n    The resource is hidden from normal operations and disabled from use.",
      "enum": [
        "active",
        "inactive"
      ],
      "title": "Status",
      "type": "string"
    },
    "Tag": {
      "description": "A freeform text label used to categorize and connect entities.\n\nTags are shared by name across the platform and can be applied to inventory\nitems, companies, tasks, and other records to group and filter them. Managed\nthrough [`TagCollection`][albert.collections.tags.TagCollection] (``client.tags``);\nthe usual entry point is [`get_or_create`][albert.collections.tags.TagCollection.get_or_create].\n\n!!! example\n    ```python\n    from albert.resources.tags import Tag\n    tag = Tag(tag=\"high-priority\")\n    ```\nMethods\n-------\nfrom_string(tag) -> Tag\n    Build a Tag from its name string.",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The name of the tag (its text label).",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the tag (format ``TAG...``). Set when the tag is retrieved from or created in Albert. Methods ------- from_string(tag) -> Tag Build a Tag from its name string.",
          "title": "Albertid"
        }
      },
      "required": [
        "name"
      ],
      "title": "Tag",
      "type": "object"
    },
    "User": {
      "description": "An Albert user account: a person who can log in and act in the platform.\n\nA user has a name and email, an optional home\n[`Location`][albert.resources.locations.Location], and a set of\n[`Role`][albert.resources.roles.Role] objects that govern what they can do.\nThe ``user_class`` sets a broad permission tier\n([`UserClass`][albert.resources.users.UserClass]). Users are grouped into teams\n([`Team`][albert.resources.teams.Team]), and are referenced across the\nplatform, for example as the assignee of a Task or in an entity's ACL.\n\n!!! example\n    ```python\n    from albert.resources.users import User, UserClass\n    user = User(\n        name=\"Ada Lovelace\",\n        email=\"ada@example.com\",\n        user_class=UserClass.STANDARD,\n    )\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The display name of the user.",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert User ID (format ``USR...``). Set once the user is registered in or retrieved from Albert.",
          "title": "Albertid"
        },
        "Location": {
          "anyOf": [
            {
              "$ref": "#/$defs/Location"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The user's home location.",
          "title": "Location"
        },
        "email": {
          "default": null,
          "description": "The user's email address.",
          "format": "email",
          "title": "Email",
          "type": "string"
        },
        "Roles": {
          "description": "The roles the user holds, which determine their permissions.",
          "items": {
            "anyOf": [
              {
                "$ref": "#/$defs/Role"
              },
              {
                "$ref": "#/$defs/EntityLink"
              }
            ]
          },
          "maxItems": 1,
          "title": "Roles",
          "type": "array"
        },
        "userClass": {
          "$ref": "#/$defs/UserClass",
          "default": "standard",
          "description": "The ACL class level of the user (broad permission tier)."
        },
        "witnesser": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the user can act as a witness on tasks (only relevant when witnessing is enabled for the tenant).",
          "title": "Witnesser"
        },
        "Metadata": {
          "anyOf": [
            {
              "additionalProperties": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/EntityLinkWithName"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  },
                  {
                    "items": {
                      "anyOf": [
                        {
                          "$ref": "#/$defs/EntityLinkWithName"
                        },
                        {
                          "$ref": "#/$defs/EntityLink"
                        }
                      ]
                    },
                    "type": "array"
                  }
                ]
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Custom metadata attached to the user.",
          "title": "Metadata"
        }
      },
      "required": [
        "name"
      ],
      "title": "User",
      "type": "object"
    },
    "UserClass": {
      "description": "The ACL class level of a user, setting a broad permission tier.\n\nAttributes\n----------\nGUEST : str\n    Most limited access; typically external or temporary users.\nSTANDARD : str\n    Default access level for regular users.\nTRUSTED : str\n    Elevated access above standard users.\nPRIVILEGED : str\n    High access level below full administrators.\nADMIN : str\n    Full administrative access to the tenant.",
      "enum": [
        "guest",
        "standard",
        "trusted",
        "privileged",
        "admin"
      ],
      "title": "UserClass",
      "type": "string"
    }
  },
  "description": "A lightweight, partially populated parameter group from search results.\n\nReturned by\n[`search`][albert.collections.parameter_groups.ParameterGroupCollection.search].\nSearch results omit some detail for speed; call `hydrate()` to fetch the\nfull [`ParameterGroup`][albert.resources.parameter_groups.ParameterGroup].",
  "properties": {
    "name": {
      "description": "The name of the parameter group.",
      "title": "Name",
      "type": "string"
    },
    "type": {
      "anyOf": [
        {
          "$ref": "#/$defs/PGType"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The kind of task the group relates to."
    },
    "albertId": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The Albert Parameter Group ID (format ``PRG...``). Serialized as ``albertId``.",
      "title": "Albertid"
    },
    "description": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "A free-text description of the group.",
      "title": "Description"
    },
    "parameters": {
      "description": "Lightweight references to the parameters in the group.",
      "items": {
        "$ref": "#/$defs/ParameterSearchItemParameter"
      },
      "title": "Parameters",
      "type": "array"
    },
    "owner": {
      "anyOf": [
        {
          "items": {
            "anyOf": [
              {
                "$ref": "#/$defs/User"
              },
              {
                "$ref": "#/$defs/EntityLink"
              }
            ]
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The owner(s) of the group.",
      "title": "Owner"
    },
    "tags": {
      "anyOf": [
        {
          "items": {
            "anyOf": [
              {
                "$ref": "#/$defs/Tag"
              },
              {
                "$ref": "#/$defs/EntityLink"
              }
            ]
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Tags on the group.",
      "title": "Tags"
    },
    "acl": {
      "anyOf": [
        {
          "items": {
            "anyOf": [
              {
                "$ref": "#/$defs/User"
              },
              {
                "$ref": "#/$defs/EntityLink"
              }
            ]
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Access-control entries on the group.",
      "title": "Acl"
    },
    "createdAt": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "When the group was created. Serialized as ``createdAt``.",
      "title": "Createdat"
    },
    "createdByName": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The name of the user who created the group. Serialized as ``createdByName``.",
      "title": "Createdbyname"
    },
    "metadata": {
      "anyOf": [
        {
          "additionalProperties": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "integer"
              },
              {
                "type": "string"
              },
              {
                "$ref": "#/$defs/EntityLinkWithName"
              },
              {
                "$ref": "#/$defs/EntityLink"
              },
              {
                "items": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/EntityLinkWithName"
                    },
                    {
                      "$ref": "#/$defs/EntityLink"
                    }
                  ]
                },
                "type": "array"
              }
            ]
          },
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Custom metadata fields. Serialized as ``metadata``.",
      "title": "Metadata"
    },
    "team": {
      "anyOf": [
        {
          "items": {
            "anyOf": [
              {
                "$ref": "#/$defs/User"
              },
              {
                "$ref": "#/$defs/EntityLink"
              }
            ]
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The team associated with the group.",
      "title": "Team"
    }
  },
  "required": [
    "name"
  ],
  "title": "ParameterGroupSearchItem",
  "type": "object"
}

Fields:

Validators:

name

name: str

The name of the parameter group.

type

type: PGType | None = None

The kind of task the group relates to.

id

id: str | None = None

The Albert Parameter Group ID (format PRG...). Serialized as albertId.

description

description: str | None = None

A free-text description of the group.

parameters

Lightweight references to the parameters in the group.

owner

owner: list[SerializeAsEntityLink[User]] | None = None

The owner(s) of the group.

tags

tags: list[SerializeAsEntityLink[Tag]] | None = None

Tags on the group.

acl

acl: list[SerializeAsEntityLink[User]] | None = None

Access-control entries on the group.

created_at

created_at: str | None = None

When the group was created. Serialized as createdAt.

created_by_name

created_by_name: str | None = None

The name of the user who created the group. Serialized as createdByName.

metadata

metadata: dict[str, MetadataItem] | None = None

Custom metadata fields. Serialized as metadata.

team

team: list[SerializeAsEntityLink[User]] | None = None

The team associated with the group.

sanitize_metadata

sanitize_metadata(value: Any) -> Any
Source code in src/albert/resources/parameter_groups.py
@field_validator("metadata", mode="before")
@classmethod
def sanitize_metadata(cls, value: Any) -> Any:
    return _sanitize_metadata(value)
sanitize_entity_link_lists(value: Any) -> Any

Drop entity-link entries the search endpoint returns without an id.

Source code in src/albert/resources/parameter_groups.py
@field_validator("owner", "tags", "acl", "team", mode="before")
@classmethod
def sanitize_entity_link_lists(cls, value: Any) -> Any:
    """Drop entity-link entries the search endpoint returns without an ``id``."""
    if not isinstance(value, list):
        return value
    return [entry for entry in value if not (isinstance(entry, dict) and "id" not in entry)]