---
title: "Get a cell specification with nested component and material data"
method: GET
path: "/cell_specifications/{cell_spec_id}"
tags: ["Cell Specifications"]
---

# Get a cell specification with nested component and material data

`GET /cell_specifications/{cell_spec_id}`

Retrieve a cell specification with nested component and material information.

Returns the specification with anode, cathode, electrolyte, separator, and case
components, each including their material details.

## Path parameters

- `cell_spec_id` string, required

## Response `200`

Successful Response

- CellSpecificationWithComponents — Cell specification with nested component information.
  - `name` string, required — Name of the cell specification
  - `form_factor` string, nullable — Physical form factor. Common values: '18650', '21700', 'R2032' (coin cell), 'pouch', 'prismatic', 'cylindrical'.
  - `manufacturer` string, nullable — Who assembled/manufactured the cell
  - `ratings` Ratings, required — Electrical ratings from spec sheet / design targets.
    - `capacity` Quantity, required — A numeric value with its physical unit. All numeric fields that carry physical meaning across the cell-data API (capacities, voltages, masses, temperatures, etc.) use this structured format rather than bare floats. That keeps the units on the wire so the server, clients, and downstream consumers cannot disagree about them. Canonical form: ```json {"value": 1.1, "unit": "A.h"} ``` Common units used across the platform: ``V``, ``A``, ``A.h``, ``W.h``, ``degC``, ``s``, ``ohm``, ``mm``, ``g``, ``mg.cm-2``, ``C`` (C-rate). Units are stored in PyBaMM notation: ``.``-separated atoms with signed integer exponents and no ``*``/``/`` (``mg.cm-2``, ``A.h``, ``W.h.kg-1``). Pint-style strings (``mg/cm**2``, ``A*h``, ``W*h/kg``) are still accepted on input for backwards compatibility and are normalized to PyBaMM notation on construction. Either form parses correctly via :meth:`to_pint`.
      - `value` union, required
        - number
        - integer
      - `unit` string, required — Unit string in PyBaMM notation: '.'-separated atoms with signed integer exponents (e.g. 'A.h', 'mg.cm-2', 'W.h.kg-1'). Pint-style strings ('A*h', 'mg/cm**2') are also accepted and normalized to PyBaMM notation. Common units: V, A, A.h, W.h, degC, s, ohm.
    - `voltage_min` Quantity, required — A numeric value with its physical unit. All numeric fields that carry physical meaning across the cell-data API (capacities, voltages, masses, temperatures, etc.) use this structured format rather than bare floats. That keeps the units on the wire so the server, clients, and downstream consumers cannot disagree about them. Canonical form: ```json {"value": 1.1, "unit": "A.h"} ``` Common units used across the platform: ``V``, ``A``, ``A.h``, ``W.h``, ``degC``, ``s``, ``ohm``, ``mm``, ``g``, ``mg.cm-2``, ``C`` (C-rate). Units are stored in PyBaMM notation: ``.``-separated atoms with signed integer exponents and no ``*``/``/`` (``mg.cm-2``, ``A.h``, ``W.h.kg-1``). Pint-style strings (``mg/cm**2``, ``A*h``, ``W*h/kg``) are still accepted on input for backwards compatibility and are normalized to PyBaMM notation on construction. Either form parses correctly via :meth:`to_pint`.
      - `value` union, required
        - number
        - integer
      - `unit` string, required — Unit string in PyBaMM notation: '.'-separated atoms with signed integer exponents (e.g. 'A.h', 'mg.cm-2', 'W.h.kg-1'). Pint-style strings ('A*h', 'mg/cm**2') are also accepted and normalized to PyBaMM notation. Common units: V, A, A.h, W.h, degC, s, ohm.
    - `voltage_max` Quantity, required — A numeric value with its physical unit. All numeric fields that carry physical meaning across the cell-data API (capacities, voltages, masses, temperatures, etc.) use this structured format rather than bare floats. That keeps the units on the wire so the server, clients, and downstream consumers cannot disagree about them. Canonical form: ```json {"value": 1.1, "unit": "A.h"} ``` Common units used across the platform: ``V``, ``A``, ``A.h``, ``W.h``, ``degC``, ``s``, ``ohm``, ``mm``, ``g``, ``mg.cm-2``, ``C`` (C-rate). Units are stored in PyBaMM notation: ``.``-separated atoms with signed integer exponents and no ``*``/``/`` (``mg.cm-2``, ``A.h``, ``W.h.kg-1``). Pint-style strings (``mg/cm**2``, ``A*h``, ``W*h/kg``) are still accepted on input for backwards compatibility and are normalized to PyBaMM notation on construction. Either form parses correctly via :meth:`to_pint`.
      - `value` union, required
        - number
        - integer
      - `unit` string, required — Unit string in PyBaMM notation: '.'-separated atoms with signed integer exponents (e.g. 'A.h', 'mg.cm-2', 'W.h.kg-1'). Pint-style strings ('A*h', 'mg/cm**2') are also accepted and normalized to PyBaMM notation. Common units: V, A, A.h, W.h, degC, s, ohm.
    - `nominal_voltage` Quantity — A numeric value with its physical unit. All numeric fields that carry physical meaning across the cell-data API (capacities, voltages, masses, temperatures, etc.) use this structured format rather than bare floats. That keeps the units on the wire so the server, clients, and downstream consumers cannot disagree about them. Canonical form: ```json {"value": 1.1, "unit": "A.h"} ``` Common units used across the platform: ``V``, ``A``, ``A.h``, ``W.h``, ``degC``, ``s``, ``ohm``, ``mm``, ``g``, ``mg.cm-2``, ``C`` (C-rate). Units are stored in PyBaMM notation: ``.``-separated atoms with signed integer exponents and no ``*``/``/`` (``mg.cm-2``, ``A.h``, ``W.h.kg-1``). Pint-style strings (``mg/cm**2``, ``A*h``, ``W*h/kg``) are still accepted on input for backwards compatibility and are normalized to PyBaMM notation on construction. Either form parses correctly via :meth:`to_pint`.
      - `value` union, required
        - number
        - integer
      - `unit` string, required — Unit string in PyBaMM notation: '.'-separated atoms with signed integer exponents (e.g. 'A.h', 'mg.cm-2', 'W.h.kg-1'). Pint-style strings ('A*h', 'mg/cm**2') are also accepted and normalized to PyBaMM notation. Common units: V, A, A.h, W.h, degC, s, ohm.
    - `energy` Quantity — A numeric value with its physical unit. All numeric fields that carry physical meaning across the cell-data API (capacities, voltages, masses, temperatures, etc.) use this structured format rather than bare floats. That keeps the units on the wire so the server, clients, and downstream consumers cannot disagree about them. Canonical form: ```json {"value": 1.1, "unit": "A.h"} ``` Common units used across the platform: ``V``, ``A``, ``A.h``, ``W.h``, ``degC``, ``s``, ``ohm``, ``mm``, ``g``, ``mg.cm-2``, ``C`` (C-rate). Units are stored in PyBaMM notation: ``.``-separated atoms with signed integer exponents and no ``*``/``/`` (``mg.cm-2``, ``A.h``, ``W.h.kg-1``). Pint-style strings (``mg/cm**2``, ``A*h``, ``W*h/kg``) are still accepted on input for backwards compatibility and are normalized to PyBaMM notation on construction. Either form parses correctly via :meth:`to_pint`.
      - `value` union, required
        - number
        - integer
      - `unit` string, required — Unit string in PyBaMM notation: '.'-separated atoms with signed integer exponents (e.g. 'A.h', 'mg.cm-2', 'W.h.kg-1'). Pint-style strings ('A*h', 'mg/cm**2') are also accepted and normalized to PyBaMM notation. Common units: V, A, A.h, W.h, degC, s, ohm.
    - `energy_density_gravimetric` Quantity — A numeric value with its physical unit. All numeric fields that carry physical meaning across the cell-data API (capacities, voltages, masses, temperatures, etc.) use this structured format rather than bare floats. That keeps the units on the wire so the server, clients, and downstream consumers cannot disagree about them. Canonical form: ```json {"value": 1.1, "unit": "A.h"} ``` Common units used across the platform: ``V``, ``A``, ``A.h``, ``W.h``, ``degC``, ``s``, ``ohm``, ``mm``, ``g``, ``mg.cm-2``, ``C`` (C-rate). Units are stored in PyBaMM notation: ``.``-separated atoms with signed integer exponents and no ``*``/``/`` (``mg.cm-2``, ``A.h``, ``W.h.kg-1``). Pint-style strings (``mg/cm**2``, ``A*h``, ``W*h/kg``) are still accepted on input for backwards compatibility and are normalized to PyBaMM notation on construction. Either form parses correctly via :meth:`to_pint`.
      - `value` union, required
        - number
        - integer
      - `unit` string, required — Unit string in PyBaMM notation: '.'-separated atoms with signed integer exponents (e.g. 'A.h', 'mg.cm-2', 'W.h.kg-1'). Pint-style strings ('A*h', 'mg/cm**2') are also accepted and normalized to PyBaMM notation. Common units: V, A, A.h, W.h, degC, s, ohm.
    - `energy_density_volumetric` Quantity — A numeric value with its physical unit. All numeric fields that carry physical meaning across the cell-data API (capacities, voltages, masses, temperatures, etc.) use this structured format rather than bare floats. That keeps the units on the wire so the server, clients, and downstream consumers cannot disagree about them. Canonical form: ```json {"value": 1.1, "unit": "A.h"} ``` Common units used across the platform: ``V``, ``A``, ``A.h``, ``W.h``, ``degC``, ``s``, ``ohm``, ``mm``, ``g``, ``mg.cm-2``, ``C`` (C-rate). Units are stored in PyBaMM notation: ``.``-separated atoms with signed integer exponents and no ``*``/``/`` (``mg.cm-2``, ``A.h``, ``W.h.kg-1``). Pint-style strings (``mg/cm**2``, ``A*h``, ``W*h/kg``) are still accepted on input for backwards compatibility and are normalized to PyBaMM notation on construction. Either form parses correctly via :meth:`to_pint`.
      - `value` union, required
        - number
        - integer
      - `unit` string, required — Unit string in PyBaMM notation: '.'-separated atoms with signed integer exponents (e.g. 'A.h', 'mg.cm-2', 'W.h.kg-1'). Pint-style strings ('A*h', 'mg/cm**2') are also accepted and normalized to PyBaMM notation. Common units: V, A, A.h, W.h, degC, s, ohm.
    - `max_discharge_rate` Quantity — A numeric value with its physical unit. All numeric fields that carry physical meaning across the cell-data API (capacities, voltages, masses, temperatures, etc.) use this structured format rather than bare floats. That keeps the units on the wire so the server, clients, and downstream consumers cannot disagree about them. Canonical form: ```json {"value": 1.1, "unit": "A.h"} ``` Common units used across the platform: ``V``, ``A``, ``A.h``, ``W.h``, ``degC``, ``s``, ``ohm``, ``mm``, ``g``, ``mg.cm-2``, ``C`` (C-rate). Units are stored in PyBaMM notation: ``.``-separated atoms with signed integer exponents and no ``*``/``/`` (``mg.cm-2``, ``A.h``, ``W.h.kg-1``). Pint-style strings (``mg/cm**2``, ``A*h``, ``W*h/kg``) are still accepted on input for backwards compatibility and are normalized to PyBaMM notation on construction. Either form parses correctly via :meth:`to_pint`.
      - `value` union, required
        - number
        - integer
      - `unit` string, required — Unit string in PyBaMM notation: '.'-separated atoms with signed integer exponents (e.g. 'A.h', 'mg.cm-2', 'W.h.kg-1'). Pint-style strings ('A*h', 'mg/cm**2') are also accepted and normalized to PyBaMM notation. Common units: V, A, A.h, W.h, degC, s, ohm.
    - `max_charge_rate` Quantity — A numeric value with its physical unit. All numeric fields that carry physical meaning across the cell-data API (capacities, voltages, masses, temperatures, etc.) use this structured format rather than bare floats. That keeps the units on the wire so the server, clients, and downstream consumers cannot disagree about them. Canonical form: ```json {"value": 1.1, "unit": "A.h"} ``` Common units used across the platform: ``V``, ``A``, ``A.h``, ``W.h``, ``degC``, ``s``, ``ohm``, ``mm``, ``g``, ``mg.cm-2``, ``C`` (C-rate). Units are stored in PyBaMM notation: ``.``-separated atoms with signed integer exponents and no ``*``/``/`` (``mg.cm-2``, ``A.h``, ``W.h.kg-1``). Pint-style strings (``mg/cm**2``, ``A*h``, ``W*h/kg``) are still accepted on input for backwards compatibility and are normalized to PyBaMM notation on construction. Either form parses correctly via :meth:`to_pint`.
      - `value` union, required
        - number
        - integer
      - `unit` string, required — Unit string in PyBaMM notation: '.'-separated atoms with signed integer exponents (e.g. 'A.h', 'mg.cm-2', 'W.h.kg-1'). Pint-style strings ('A*h', 'mg/cm**2') are also accepted and normalized to PyBaMM notation. Common units: V, A, A.h, W.h, degC, s, ohm.
  - `anode_id` string, nullable — ID of the anode component
  - `cathode_id` string, nullable — ID of the cathode component
  - `electrolyte_id` string, nullable — ID of the electrolyte component
  - `separator_id` string, nullable — ID of the separator component
  - `case_id` string, nullable — ID of the case component
  - `properties` object, nullable — Other design-level properties that are not electrical ratings and not tied to a specific component — e.g. assembly method, overall cell dimensions, mass, target thickness. Numeric values must use the Quantity format ({'value': ..., 'unit': ...}).
  - `source` object, nullable — Provenance of the design. Typical keys: 'doi', 'citation', 'publication_date' (ISO 8601), 'license', 'creator_name', 'creator_orcid'. Lives on the specification (not the instance) because it describes the published design.
  - `notes` string, nullable — Free-text notes about the cell specification
  - `id` string, required — Unique identifier for the cell specification
  - `organization_id` string, required — Organization ID of the cell specification
  - `project_id` string, required — Project this cell specification belongs to
  - `created_at` string, date-time, nullable — When this specification was created
  - `updated_at` string, date-time, nullable — When this specification was last modified
  - `created_by` string, nullable — User ID of the user who created this specification
  - `created_by_email` string, nullable — Email of the user who created this specification
  - `instance_ids` object[], nullable — List of instance IDs associated with the cell specification
  - `default_parameterized_model_id` string, nullable — ID of the parameterized model marked as this specification's default model, or None if unset.
  - `anode` CellComponentWithMaterial — Cell component with nested material information.
    - `component_type` 'cathode' | 'anode' | 'electrolyte' | 'separator' | 'case' | 'cell', required — Enum for cell component types.
    - `material_id` string, required — ID of the material
    - `properties` object, nullable — Application properties using Quantity format for numerics. Example: {'diameter': {'value': 14, 'unit': 'mm'}, 'binder': 'PVDF'}
    - `id` string, required — Unique identifier for the component
    - `organization_id` string, required — Organization ID of the component
    - `project_id` string, required — Project the component is scoped to, derived from the cell specification(s) that reference it.
    - `created_at` string, date-time, required — Timestamp when the component was created
    - `updated_at` string, date-time, required — Timestamp when the component was last updated
    - `created_by` string, nullable — User ID of the creator.
    - `material` Material — Model representing a material as returned by the API.
      - `name` string, required — Name of the material
      - `definition` object, nullable — Material definition (formula, type, constituents)
      - `manufacturer` string, nullable — Manufacturer of the material
      - `product_id` string, nullable — Supplier product ID
      - `id` string, required — Unique identifier for the material
      - `organization_id` string, required — Organization ID of the material
      - `project_id` string, required — Project the material is scoped to, derived from the cell specification(s) that reference it.
      - `created_at` string, date-time, required — Timestamp when the material was created
      - `updated_at` string, date-time, required — Timestamp when the material was last updated
      - `created_by` string, nullable — User ID of the creator.
      - `property_count` integer — Number of property datasets attached to this material
  - `cathode` CellComponentWithMaterial — Cell component with nested material information.
    - `component_type` 'cathode' | 'anode' | 'electrolyte' | 'separator' | 'case' | 'cell', required — Enum for cell component types.
    - `material_id` string, required — ID of the material
    - `properties` object, nullable — Application properties using Quantity format for numerics. Example: {'diameter': {'value': 14, 'unit': 'mm'}, 'binder': 'PVDF'}
    - `id` string, required — Unique identifier for the component
    - `organization_id` string, required — Organization ID of the component
    - `project_id` string, required — Project the component is scoped to, derived from the cell specification(s) that reference it.
    - `created_at` string, date-time, required — Timestamp when the component was created
    - `updated_at` string, date-time, required — Timestamp when the component was last updated
    - `created_by` string, nullable — User ID of the creator.
    - `material` Material — Model representing a material as returned by the API.
      - `name` string, required — Name of the material
      - `definition` object, nullable — Material definition (formula, type, constituents)
      - `manufacturer` string, nullable — Manufacturer of the material
      - `product_id` string, nullable — Supplier product ID
      - `id` string, required — Unique identifier for the material
      - `organization_id` string, required — Organization ID of the material
      - `project_id` string, required — Project the material is scoped to, derived from the cell specification(s) that reference it.
      - `created_at` string, date-time, required — Timestamp when the material was created
      - `updated_at` string, date-time, required — Timestamp when the material was last updated
      - `created_by` string, nullable — User ID of the creator.
      - `property_count` integer — Number of property datasets attached to this material
  - `electrolyte` CellComponentWithMaterial — Cell component with nested material information.
    - `component_type` 'cathode' | 'anode' | 'electrolyte' | 'separator' | 'case' | 'cell', required — Enum for cell component types.
    - `material_id` string, required — ID of the material
    - `properties` object, nullable — Application properties using Quantity format for numerics. Example: {'diameter': {'value': 14, 'unit': 'mm'}, 'binder': 'PVDF'}
    - `id` string, required — Unique identifier for the component
    - `organization_id` string, required — Organization ID of the component
    - `project_id` string, required — Project the component is scoped to, derived from the cell specification(s) that reference it.
    - `created_at` string, date-time, required — Timestamp when the component was created
    - `updated_at` string, date-time, required — Timestamp when the component was last updated
    - `created_by` string, nullable — User ID of the creator.
    - `material` Material — Model representing a material as returned by the API.
      - `name` string, required — Name of the material
      - `definition` object, nullable — Material definition (formula, type, constituents)
      - `manufacturer` string, nullable — Manufacturer of the material
      - `product_id` string, nullable — Supplier product ID
      - `id` string, required — Unique identifier for the material
      - `organization_id` string, required — Organization ID of the material
      - `project_id` string, required — Project the material is scoped to, derived from the cell specification(s) that reference it.
      - `created_at` string, date-time, required — Timestamp when the material was created
      - `updated_at` string, date-time, required — Timestamp when the material was last updated
      - `created_by` string, nullable — User ID of the creator.
      - `property_count` integer — Number of property datasets attached to this material
  - `separator` CellComponentWithMaterial — Cell component with nested material information.
    - `component_type` 'cathode' | 'anode' | 'electrolyte' | 'separator' | 'case' | 'cell', required — Enum for cell component types.
    - `material_id` string, required — ID of the material
    - `properties` object, nullable — Application properties using Quantity format for numerics. Example: {'diameter': {'value': 14, 'unit': 'mm'}, 'binder': 'PVDF'}
    - `id` string, required — Unique identifier for the component
    - `organization_id` string, required — Organization ID of the component
    - `project_id` string, required — Project the component is scoped to, derived from the cell specification(s) that reference it.
    - `created_at` string, date-time, required — Timestamp when the component was created
    - `updated_at` string, date-time, required — Timestamp when the component was last updated
    - `created_by` string, nullable — User ID of the creator.
    - `material` Material — Model representing a material as returned by the API.
      - `name` string, required — Name of the material
      - `definition` object, nullable — Material definition (formula, type, constituents)
      - `manufacturer` string, nullable — Manufacturer of the material
      - `product_id` string, nullable — Supplier product ID
      - `id` string, required — Unique identifier for the material
      - `organization_id` string, required — Organization ID of the material
      - `project_id` string, required — Project the material is scoped to, derived from the cell specification(s) that reference it.
      - `created_at` string, date-time, required — Timestamp when the material was created
      - `updated_at` string, date-time, required — Timestamp when the material was last updated
      - `created_by` string, nullable — User ID of the creator.
      - `property_count` integer — Number of property datasets attached to this material
  - `case` CellComponentWithMaterial — Cell component with nested material information.
    - `component_type` 'cathode' | 'anode' | 'electrolyte' | 'separator' | 'case' | 'cell', required — Enum for cell component types.
    - `material_id` string, required — ID of the material
    - `properties` object, nullable — Application properties using Quantity format for numerics. Example: {'diameter': {'value': 14, 'unit': 'mm'}, 'binder': 'PVDF'}
    - `id` string, required — Unique identifier for the component
    - `organization_id` string, required — Organization ID of the component
    - `project_id` string, required — Project the component is scoped to, derived from the cell specification(s) that reference it.
    - `created_at` string, date-time, required — Timestamp when the component was created
    - `updated_at` string, date-time, required — Timestamp when the component was last updated
    - `created_by` string, nullable — User ID of the creator.
    - `material` Material — Model representing a material as returned by the API.
      - `name` string, required — Name of the material
      - `definition` object, nullable — Material definition (formula, type, constituents)
      - `manufacturer` string, nullable — Manufacturer of the material
      - `product_id` string, nullable — Supplier product ID
      - `id` string, required — Unique identifier for the material
      - `organization_id` string, required — Organization ID of the material
      - `project_id` string, required — Project the material is scoped to, derived from the cell specification(s) that reference it.
      - `created_at` string, date-time, required — Timestamp when the material was created
      - `updated_at` string, date-time, required — Timestamp when the material was last updated
      - `created_by` string, nullable — User ID of the creator.
      - `property_count` integer — Number of property datasets attached to this material

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/ionworks/apis/fastapi.md) · [All operations](https://skmtc.dev/ionworks/apis/fastapi/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/ionworks/fastapi/revisions/7337a3cbdaf2/schema)
