Skip to main content
April 20, 2026
Python SDK resource clients, validation initial conditions, capacity calculation fix

Python SDK resource clients

The Python SDK gains typed sub-clients for managing Studio resources programmatically. You can now create, list, retrieve, update, and delete projects, models, parameterized models, studies, protocols, and optimizations directly from the Ionworks client — for example, client.project.list(), client.model.get(id), or client.study.create(...). A new “Managing resources” section in the Python API docs walks through each sub-client with usage examples, and the backend URL paths for Projects, Models, and Studies have been flattened so the organization is resolved from your auth token instead of being required in the URL.

Validation initial conditions and UX polish

Validations now let you choose how the simulation is initialized: auto-detect from the measurement, a custom starting voltage, or a custom state of charge. Each validation row in the Report tab can be removed individually with a confirmation dialog, and a dedup bug that caused two measurements sharing the same initial voltage to overwrite each other’s drive cycle has been fixed. Validation error plots also now render with grid lines for easier reading.

Capacity calculation fix for multi-electrode cells

ElectrodeCapacity was reading a non-canonical PyBaMM parameter name for the number of electrodes connected in parallel, causing c_max to be over-computed by a factor of N when users set the correct key. The fix aligns all lookups with PyBaMM’s canonical parameter name so multi-electrode cells parameterize correctly.
Improvements
  • Studies with simulations of a single experiment type now auto-select that type so the visualization view is immediately accessible.
  • Failed variable-evaluation jobs now surface an error state with a Retry button instead of spinning indefinitely.
  • Studies list endpoint now returns paginated results with items, count, and total.
  • Parameterized models list endpoint added with pagination.
Fixes
  • Fixed a crash when rendering time-series measurements with thousands of short steps (e.g. HPPC pulse protocols with ~1500 steps) — the dashboard can now load these measurements.
  • Fixed coupled custom variables being silently dropped when their resolution failed, which could remove convenience variables like “Temperature [degC]” from simulation outputs.
  • Capped the models list fallback page size to the backend’s 100-row limit to prevent 422 errors.
Improvements
  • Bumped PyBaMM to 26.3.1, which falls back to pybamm.BaseModel with a warning when a custom model’s base_class references a package that isn’t installed in the worker environment.
  • Refactored OCP objectives (OCPHalfCell, ElectrodeBalancingHalfCell, ElectrodeBalancing) to use the _run pattern so they support raise_on_failure and work correctly in Validation pipelines.
Fixes
  • DataFit now auto-wraps a bare objective in {ClassName: objective} so pipelines submitted with a single unwrapped objective no longer fail serialization.
Improvements
  • Added typed sub-clients for Models, Studies, Optimizations, Projects, Protocols, and ParameterizedModels, replacing raw HTTP requests for resource management.
  • SDK endpoints no longer include organization_id in paths — the organization is resolved from the auth token.
  • Simulation polling now propagates errors immediately instead of swallowing them, and uses typed JobResponse objects with server-computed is_terminal / is_failed fields.
Fixes
  • Fixed the simulation job poll endpoint (was hitting a non-existent /simulations/jobs/{id} route).
Fixes
  • Fixed a sign-detection bug in the ECM validator where a symmetric current profile (charge / discharge / charge returning to the same net charge) was incorrectly rejected despite having a non-zero SOC span.