Skip to content

SDS (🧪 Beta)

albert.resources.sds

SDSDataEntity

Bases: str, Enum

Entity names for get_field_options.

These are the entity query values accepted by the field-options endpoint. They do not always match the SDSRequest field name.

Attributes:

Name Type Description
FLASHPOINT str

Options for flash_point.

BOILINGPOINT str

Options for initial_boiling_point.

ENFORCECLOAKING str

Options for enforce_cloaking.

VOC_UNIT str

Options for voc_content_unit.

FLASHPOINT

FLASHPOINT = 'flashpoint'

BOILINGPOINT

BOILINGPOINT = 'boilingpoint'

ENFORCECLOAKING

ENFORCECLOAKING = 'enforcecloaking'

VOC_UNIT

VOC_UNIT = 'vocUnit'

MELTING_POINT_RANGE

MELTING_POINT_RANGE = 'meltingPointRange'

BOILING_POINT_RANGE

BOILING_POINT_RANGE = 'boilingPointRange'

VAPOR_PRESSURE

VAPOR_PRESSURE = 'vaporPressure'

VAPOR_DENSITY

VAPOR_DENSITY = 'vaporDensity'

WATER_SOLUBILITY

WATER_SOLUBILITY = 'waterSolubility'

AUTO_IGNITION_TEMP

AUTO_IGNITION_TEMP = 'autoIgnitionTemp'

DECOMPOSITION_TEMP

DECOMPOSITION_TEMP = 'decompositionTemp'

PLM_NUMBER

PLM_NUMBER = 'plmNumber'

SECTION_15_DISCLOSURE

SECTION_15_DISCLOSURE = 'section15Disclosure'

UFI_IDENTIFIER

UFI_IDENTIFIER = 'ufiIdentifier'

VISCOSITY_INPUT

VISCOSITY_INPUT = 'viscosityInput'

PH_INPUT

PH_INPUT = 'pHInput'

PHYSICAL_STATE

PHYSICAL_STATE = 'physicalState'

FLAMMABILITY

FLAMMABILITY = 'flammability'

CURRENT_LOCATION

CURRENT_LOCATION = 'currentLocation'

DEFAULT_LOCATION

DEFAULT_LOCATION = 'defaultLocation'

RECENT_CURRENT_LOCATION

RECENT_CURRENT_LOCATION = 'recentCurrentLocation'

INTENDED_USE

INTENDED_USE = 'intendedUse'

WASTE_CODE

WASTE_CODE = 'wasteCode'

BURNING_TEST_RESULT

BURNING_TEST_RESULT = 'burningTestResult'

PARTICLE_CHARACTERISTICS

PARTICLE_CHARACTERISTICS = 'particleCharacteristics'

VISCOSITY

VISCOSITY = 'viscosity'

SPECIFIC_GRAVITY

SPECIFIC_GRAVITY = 'specificGravity'

VISCOSITY_UNIT

VISCOSITY_UNIT = 'viscosityUnit'

QUANTITY

QUANTITY = 'quantity_'

INHALATION_CONTROL

INHALATION_CONTROL = 'inhalationControl'

CONTACT_CONTROL

CONTACT_CONTROL = 'contactControl'

MATERIAL_PHYSICAL_STATE

MATERIAL_PHYSICAL_STATE = 'materialPhysicalState'

USE

USE = 'use'

PHYSICAL_FORM

PHYSICAL_FORM = 'physicalForm'

GENERAL_INFO

GENERAL_INFO = 'generalInfo'

SDSLegalEntity

Bases: BaseAlbertModel

A legal-entity option for a jurisdiction.

Returned by get_legal_entities. Send value as SDSRequest.legal_entity.

Show JSON schema:
{
  "description": "A legal-entity option for a jurisdiction.\n\nReturned by\n[`get_legal_entities`][albert.collections.sds.SDSCollection.get_legal_entities].\nSend ``value`` as [`SDSRequest.legal_entity`][albert.resources.sds.SDSRequest.legal_entity].",
  "properties": {
    "legalEntityId": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The legal-entity identifier.",
      "title": "Legalentityid"
    },
    "legalEntityName": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The display name of the legal entity.",
      "title": "Legalentityname"
    },
    "value": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The integer sent as ``legal_entity`` on [`SDSRequest`][albert.resources.sds.SDSRequest].",
      "title": "Value"
    },
    "isDefault": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Whether this legal entity is the default for the jurisdiction.",
      "title": "Isdefault"
    }
  },
  "title": "SDSLegalEntity",
  "type": "object"
}

Fields:

legal_entity_id

legal_entity_id: int | None = None

The legal-entity identifier.

legal_entity_name

legal_entity_name: str | None = None

The display name of the legal entity.

value

value: int | None = None

The integer sent as legal_entity on SDSRequest.

is_default

is_default: bool | None = None

Whether this legal entity is the default for the jurisdiction.

SDSFieldOptions

Bases: BaseAlbertModel

Tenant-specific options for one SDS input field.

Returned by get_field_options. When display is false, omit the field on SDSRequest. When data is a list of objects with a value key, send that value.

Show JSON schema:
{
  "description": "Tenant-specific options for one SDS input field.\n\nReturned by\n[`get_field_options`][albert.collections.sds.SDSCollection.get_field_options].\nWhen ``display`` is false, omit the field on\n[`SDSRequest`][albert.resources.sds.SDSRequest]. When ``data`` is a list of\nobjects with a ``value`` key, send that ``value``.",
  "properties": {
    "display": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Whether the field should be shown and sent for this tenant.",
      "title": "Display"
    },
    "isRequired": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Whether the field is required for this tenant.",
      "title": "Isrequired"
    },
    "data": {
      "default": null,
      "description": "The allowed values. Shape varies by entity (list of objects, list of strings, or empty).",
      "title": "Data"
    }
  },
  "title": "SDSFieldOptions",
  "type": "object"
}

Fields:

display

display: bool | None = None

Whether the field should be shown and sent for this tenant.

is_required

is_required: bool | None = None

Whether the field is required for this tenant.

data

data: Any = None

The allowed values. Shape varies by entity (list of objects, list of strings, or empty).

SDSRequest

Bases: BaseAlbertModel

Input for generating an SDS for a formula inventory item.

Identity fields (Albert ID, region, language, product type, physical state, legal entity) are required. Resolve codes from the SDS lookup helpers and send map values (e.g. "EN", "liquid"), not display names.

Product name and formula composition are not caller-supplied. generate_sds always loads the inventory name and unpacks the formula for CAS, ingredients, and inventory SDS rows.

Formula inventory only (INVMO… / MO… / INVP…).

Show JSON schema:
{
  "additionalProperties": false,
  "description": "Input for generating an SDS for a formula inventory item.\n\nIdentity fields (Albert ID, region, language, product type, physical state,\nlegal entity) are required. Resolve codes from the SDS lookup helpers and\nsend map **values** (e.g. ``\"EN\"``, ``\"liquid\"``), not display names.\n\nProduct name and formula composition are not caller-supplied.\n[`generate_sds`][albert.collections.sds.SDSCollection.generate_sds] always\nloads the inventory name and unpacks the formula for CAS, ingredients, and\ninventory SDS rows.\n\nFormula inventory only (``INVMO\u2026`` / ``MO\u2026`` / ``INVP\u2026``).",
  "properties": {
    "albertID": {
      "description": "Formula inventory Albert ID. ``INV`` is added on input if omitted and stripped on output because generate expects ``albertID`` without the prefix.",
      "title": "Albertid",
      "type": "string"
    },
    "productType": {
      "description": "Product-type code from [`get_products`][albert.collections.sds.SDSCollection.get_products] (e.g. ``\"acrylate\"``).",
      "title": "Producttype",
      "type": "string"
    },
    "language": {
      "description": "Language code from [`get_languages`][albert.collections.sds.SDSCollection.get_languages] (e.g. ``\"EN\"``).",
      "title": "Language",
      "type": "string"
    },
    "region": {
      "description": "Jurisdiction code from [`get_jurisdictions`][albert.collections.sds.SDSCollection.get_jurisdictions] (e.g. ``\"US\"``). Required; no default.",
      "title": "Region",
      "type": "string"
    },
    "legalEntity": {
      "description": "Integer ``value`` from [`get_legal_entities`][albert.collections.sds.SDSCollection.get_legal_entities].",
      "title": "Legalentity",
      "type": "integer"
    },
    "physicalState": {
      "description": "Physical-state code from [`get_physical_states`][albert.collections.sds.SDSCollection.get_physical_states] (e.g. ``\"liquid\"``).",
      "title": "Physicalstate",
      "type": "string"
    },
    "flashPoint": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Flash-point option **value** from [`get_field_options`][albert.collections.sds.SDSCollection.get_field_options], not the display label.",
      "title": "Flashpoint"
    },
    "initialBoilingPoint": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Initial boiling point option value, optional.",
      "title": "Initialboilingpoint"
    },
    "viscosity": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Dynamic viscosity, optional.",
      "title": "Viscosity"
    },
    "viscosityUnit": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Viscosity unit code (e.g. ``\"cP\"``), optional.",
      "title": "Viscosityunit"
    },
    "specificGravity": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Specific gravity, optional.",
      "title": "Specificgravity"
    },
    "color": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Color description, optional.",
      "title": "Color"
    },
    "odor": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Odor description, optional.",
      "title": "Odor"
    },
    "vocContent": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "VOC content, optional.",
      "title": "Voccontent"
    },
    "vocContentUnit": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "VOC unit from [`get_field_options`][albert.collections.sds.SDSCollection.get_field_options] with ``vocUnit``, optional.",
      "title": "Voccontentunit"
    },
    "pHvalue": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "pH range enum string (e.g. ``\"2 \u2264 pH \u2264 11.5\"``), optional.",
      "title": "Phvalue"
    },
    "heatOfReaction": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Heat-of-reaction enum string (e.g. ``\"<300J/g\"``), optional.",
      "title": "Heatofreaction"
    },
    "peroxideCheck": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Peroxide check value, optional.",
      "title": "Peroxidecheck"
    },
    "enforceCloaking": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "When True, cloak CAS numbers on the SDS. Tenant-gated via field options.",
      "title": "Enforcecloaking"
    },
    "section15Disclosure": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Section 15 disclosure option value, optional.",
      "title": "Section15Disclosure"
    },
    "projectColorFormulaId": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Project / color / formula identifier, optional.",
      "title": "Projectcolorformulaid"
    },
    "currentLocation": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Current location code, optional.",
      "title": "Currentlocation"
    },
    "location": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Location code, optional.",
      "title": "Location"
    },
    "kinematicViscosity40": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Kinematic viscosity at 40\u00b0C in mm\u00b2/s, optional.",
      "title": "Kinematicviscosity40"
    }
  },
  "required": [
    "albertID",
    "productType",
    "language",
    "region",
    "legalEntity",
    "physicalState"
  ],
  "title": "SDSRequest",
  "type": "object"
}

Config:

  • extra: forbid

Fields:

model_config

model_config = ConfigDict(extra='forbid')

albert_id

albert_id: InventoryId

Formula inventory Albert ID. INV is added on input if omitted and stripped on output because generate expects albertID without the prefix.

product_type

product_type: str

Product-type code from get_products (e.g. "acrylate").

language

language: str

Language code from get_languages (e.g. "EN").

region

region: str

Jurisdiction code from get_jurisdictions (e.g. "US"). Required; no default.

legal_entity

legal_entity: int

Integer value from get_legal_entities.

physical_state

physical_state: str

Physical-state code from get_physical_states (e.g. "liquid").

flash_point

flash_point: float | None = None

Flash-point option value from get_field_options, not the display label.

initial_boiling_point

initial_boiling_point: float | None = None

Initial boiling point option value, optional.

viscosity

viscosity: float | None = None

Dynamic viscosity, optional.

viscosity_unit

viscosity_unit: str | None = None

Viscosity unit code (e.g. "cP"), optional.

specific_gravity

specific_gravity: float | None = None

Specific gravity, optional.

color

color: str | None = None

Color description, optional.

odor

odor: str | None = None

Odor description, optional.

voc_content

voc_content: str | None = None

VOC content, optional.

voc_content_unit

voc_content_unit: str | None = None

VOC unit from get_field_options with vocUnit, optional.

ph_value

ph_value: str | None = None

pH range enum string (e.g. "2 ≤ pH ≤ 11.5"), optional.

heat_of_reaction

heat_of_reaction: str | None = None

Heat-of-reaction enum string (e.g. "<300J/g"), optional.

peroxide_check

peroxide_check: str | None = None

Peroxide check value, optional.

enforce_cloaking

enforce_cloaking: bool | None = None

When True, cloak CAS numbers on the SDS. Tenant-gated via field options.

section_15_disclosure

section_15_disclosure: str | None = None

Section 15 disclosure option value, optional.

project_color_formula_id

project_color_formula_id: str | int | None = None

Project / color / formula identifier, optional.

current_location

current_location: str | None = None

Current location code, optional.

location

location: str | None = None

Location code, optional.

kinematic_viscosity_40

kinematic_viscosity_40: float | None = None

Kinematic viscosity at 40°C in mm²/s, optional.

GeneratedSDS

Bases: BaseAlbertModel

The SDS generated for a formula inventory item.

The inner SDS JSON can include keys beyond the core GHS sections, so unknown response fields are preserved on the model.

Show JSON schema:
{
  "additionalProperties": true,
  "description": "The SDS generated for a formula inventory item.\n\nThe inner SDS JSON can include keys beyond the core GHS sections, so unknown\nresponse fields are preserved on the model.",
  "properties": {
    "id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The formula Albert ID associated with the generated SDS.",
      "title": "Id"
    },
    "sds": {
      "additionalProperties": true,
      "description": "The generated SDS JSON (GHS sections plus extra keys such as coversheet and explainability).",
      "title": "Sds",
      "type": "object"
    },
    "presignedURL": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Short-lived URL for the generated SDS PDF.",
      "title": "Presignedurl"
    },
    "presignedURL_Metadata": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Short-lived URL for the generated SDS metadata spreadsheet, when present.",
      "title": "Presignedurl Metadata"
    }
  },
  "required": [
    "sds"
  ],
  "title": "GeneratedSDS",
  "type": "object"
}

Config:

  • extra: allow

Fields:

model_config

model_config = ConfigDict(extra='allow')

id

id: str | None = None

The formula Albert ID associated with the generated SDS.

sds_json

sds_json: dict[str, Any]

The generated SDS JSON (GHS sections plus extra keys such as coversheet and explainability).

pdf_url

pdf_url: str | None = None

Short-lived URL for the generated SDS PDF.

metadata_url

metadata_url: str | None = None

Short-lived URL for the generated SDS metadata spreadsheet, when present.