curl --request GET \
--url https://api.ionworks.com/cell_measurements/{measurement_id}/detailimport requests
url = "https://api.ionworks.com/cell_measurements/{measurement_id}/detail"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.ionworks.com/cell_measurements/{measurement_id}/detail', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.ionworks.com/cell_measurements/{measurement_id}/detail",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.ionworks.com/cell_measurements/{measurement_id}/detail"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.ionworks.com/cell_measurements/{measurement_id}/detail")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ionworks.com/cell_measurements/{measurement_id}/detail")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"name": "<string>",
"id": "<string>",
"cell_instance_id": "<string>",
"organization_id": "<string>",
"project_id": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"specification": {
"name": "<string>",
"ratings": {
"capacity": {
"value": 123,
"unit": "<string>"
},
"voltage_min": {
"value": 123,
"unit": "<string>"
},
"voltage_max": {
"value": 123,
"unit": "<string>"
},
"nominal_voltage": {
"value": 123,
"unit": "<string>"
},
"energy": {
"value": 123,
"unit": "<string>"
},
"energy_density_gravimetric": {
"value": 123,
"unit": "<string>"
},
"energy_density_volumetric": {
"value": 123,
"unit": "<string>"
},
"max_discharge_rate": {
"value": 123,
"unit": "<string>"
},
"max_charge_rate": {
"value": 123,
"unit": "<string>"
}
},
"id": "<string>",
"organization_id": "<string>",
"project_id": "<string>",
"form_factor": "<string>",
"manufacturer": "<string>",
"anode_id": "<string>",
"cathode_id": "<string>",
"electrolyte_id": "<string>",
"separator_id": "<string>",
"case_id": "<string>",
"properties": {},
"source": {},
"notes": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"created_by": "<string>",
"created_by_email": "<string>",
"instance_ids": [
{}
],
"default_parameterized_model_id": "<string>"
},
"instance": {
"name": "<string>",
"id": "<string>",
"cell_specification_id": "<string>",
"organization_id": "<string>",
"project_id": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"batch": "<string>",
"date_manufactured": "2023-12-25",
"measured_properties": {},
"notes": "<string>",
"created_by": "<string>",
"created_by_email": "<string>",
"measurement_ids": [
{}
]
},
"protocol": {},
"start_time": "2023-11-07T05:31:56Z",
"end_time": "2023-11-07T05:31:56Z",
"estimated_end_time": "2023-11-07T05:31:56Z",
"estimated_end_time_note": "<string>",
"estimated_end_time_calculated_at": "2023-11-07T05:31:56Z",
"test_setup": {},
"step_labels_validated": false,
"notes": "<string>",
"measurement_type": "time_series",
"properties": {},
"file_metadata": {},
"channel_id": "<string>",
"protocol_id": "<string>",
"program_id": "<string>",
"created_by": "<string>",
"created_by_email": "<string>",
"processing_status": "ready",
"processing_error": "<string>",
"source_etag": "<string>",
"row_count": 123,
"time_series_bytes": 123,
"estimated_end_time_status": "estimating",
"estimated_end_time_job_id": "<string>",
"extend_claim_id": "<string>",
"extend_in_progress_at": "2023-11-07T05:31:56Z",
"extend_claimed_at": "2023-11-07T05:31:56Z",
"steps": {},
"time_series": {},
"cycles": {}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Get detailed information for a cell measurement
Retrieves detailed information for a specific cell measurement by measurement ID.
Deprecated: prefer the individual endpoints GET /steps, GET /cycles, GET /time_series, and GET /steps_and_cycles instead.
Supports zoom-based resampling: specify x_min, x_max, and x_column to fetch higher resolution data for a specific x-axis range.
curl --request GET \
--url https://api.ionworks.com/cell_measurements/{measurement_id}/detailimport requests
url = "https://api.ionworks.com/cell_measurements/{measurement_id}/detail"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.ionworks.com/cell_measurements/{measurement_id}/detail', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.ionworks.com/cell_measurements/{measurement_id}/detail",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.ionworks.com/cell_measurements/{measurement_id}/detail"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.ionworks.com/cell_measurements/{measurement_id}/detail")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ionworks.com/cell_measurements/{measurement_id}/detail")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"name": "<string>",
"id": "<string>",
"cell_instance_id": "<string>",
"organization_id": "<string>",
"project_id": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"specification": {
"name": "<string>",
"ratings": {
"capacity": {
"value": 123,
"unit": "<string>"
},
"voltage_min": {
"value": 123,
"unit": "<string>"
},
"voltage_max": {
"value": 123,
"unit": "<string>"
},
"nominal_voltage": {
"value": 123,
"unit": "<string>"
},
"energy": {
"value": 123,
"unit": "<string>"
},
"energy_density_gravimetric": {
"value": 123,
"unit": "<string>"
},
"energy_density_volumetric": {
"value": 123,
"unit": "<string>"
},
"max_discharge_rate": {
"value": 123,
"unit": "<string>"
},
"max_charge_rate": {
"value": 123,
"unit": "<string>"
}
},
"id": "<string>",
"organization_id": "<string>",
"project_id": "<string>",
"form_factor": "<string>",
"manufacturer": "<string>",
"anode_id": "<string>",
"cathode_id": "<string>",
"electrolyte_id": "<string>",
"separator_id": "<string>",
"case_id": "<string>",
"properties": {},
"source": {},
"notes": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"created_by": "<string>",
"created_by_email": "<string>",
"instance_ids": [
{}
],
"default_parameterized_model_id": "<string>"
},
"instance": {
"name": "<string>",
"id": "<string>",
"cell_specification_id": "<string>",
"organization_id": "<string>",
"project_id": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"batch": "<string>",
"date_manufactured": "2023-12-25",
"measured_properties": {},
"notes": "<string>",
"created_by": "<string>",
"created_by_email": "<string>",
"measurement_ids": [
{}
]
},
"protocol": {},
"start_time": "2023-11-07T05:31:56Z",
"end_time": "2023-11-07T05:31:56Z",
"estimated_end_time": "2023-11-07T05:31:56Z",
"estimated_end_time_note": "<string>",
"estimated_end_time_calculated_at": "2023-11-07T05:31:56Z",
"test_setup": {},
"step_labels_validated": false,
"notes": "<string>",
"measurement_type": "time_series",
"properties": {},
"file_metadata": {},
"channel_id": "<string>",
"protocol_id": "<string>",
"program_id": "<string>",
"created_by": "<string>",
"created_by_email": "<string>",
"processing_status": "ready",
"processing_error": "<string>",
"source_etag": "<string>",
"row_count": 123,
"time_series_bytes": 123,
"estimated_end_time_status": "estimating",
"estimated_end_time_job_id": "<string>",
"extend_claim_id": "<string>",
"extend_in_progress_at": "2023-11-07T05:31:56Z",
"extend_claimed_at": "2023-11-07T05:31:56Z",
"steps": {},
"time_series": {},
"cycles": {}
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Path Parameters
Query Parameters
Target rows for downsampled time series
x >= 1Comma-separated list of columns to load (e.g., 'time,voltage')
Step numbers to keep, as singletons and/or ranges (e.g. '0-2,5,8-10')
Comma-separated list of cycle counts to filter (e.g., '1,2,3')
Minimum x-axis value to filter
Maximum x-axis value to filter
Column name for x-axis filtering (e.g., 'Time [s]' or 'Capacity throughput [A.h]')
Include steps in response.
Include time_series in response.
Response
Successful Response
Response model for the /detail endpoint for a single measurement.
1 - 255Organization this measurement belongs to.
Project this measurement belongs to
Model representing a cell specification as returned by the API.
Show child attributes
Show child attributes
Model representing a cell instance as returned by the API.
Show child attributes
Show child attributes
Protocol information. Typical keys: 'name' (str), 'ambient_temperature_degc' (float), 'definition' (dict | str — a UCP protocol definition or another protocol format).
ISO 8601 datetime with timezone (UTC preferred) marking when the test started.
ISO 8601 datetime with timezone (UTC preferred) marking when the test finished. Leave null while the test is still running; set it once the measurement is complete. A null end_time means the cell is still considered 'on test' in the Lab view.
ISO 8601 datetime with timezone (UTC preferred) forecasting when a still-running test will finish. Distinct from end_time (the actual finish): this is an estimate. Null when no estimate has been computed yet.
Free-text explanation of how estimated_end_time was derived.
ISO 8601 datetime with timezone marking when estimated_end_time was last computed.
Physical test setup. Typical keys: 'cycler' (model), 'operator', 'lab', 'channel_number' (int).
Set to true only once step-type labels (Rest, CC charge, CV, discharge, etc.) have been manually reviewed. Server-inferred labels should leave this false.
Free-text notes about the cell measurement
What shape of data this measurement holds. Determines which fields are populated and which upload flow applies. See the class docstring.
time_series, file, properties Flat key/value measurements, populated only when measurement_type is 'properties'. Numeric values use the Quantity format. Example: {'thickness': {'value': 0.52, 'unit': 'mm'}, 'DCIR': {'value': 12, 'unit': 'mohm'}}.
Metadata about uploaded files (MIME types, dimensions, etc.)
Optional ID of the channel this measurement ran on.
Optional ID of the experiment template (protocol) this measurement was run against.
Optional catalog program for this measurement (copied from a linked planned measurement when present).
User ID of the user who created this measurement
Email of the user who created this measurement
Lifecycle of server-side step processing. 'ready' once steps are available; 'pending'/'running' while the upload is being processed asynchronously; 'failed' if processing failed (see processing_error).
pending, running, ready, failed, awaiting_extend, extending Reason processing failed, when processing_status is 'failed'. Also carries why an extend did not apply, in which case the status is back to 'ready' and this is advisory only.
Lifecycle of a duration estimate computed by a background simulation.
Used by both estimates: a planned test's total duration
(planned_measurements.estimated_duration_*) and a running test's
remaining duration (cell_measurements.estimated_end_time_*). One enum
because the lifecycle is identical -- only what is being estimated differs.
estimating while the job is in flight, ready once a value came from
it, failed with the reason in the accompanying note. None means no
estimate was ever requested.
estimating, ready, failed Opaque token identifying the in-flight extend that holds this measurement, and the staging prefix its delta is uploaded to. Non-null exactly while processing_status is 'awaiting_extend' or 'extending'.
Deprecated and always null. Use processing_status.
When the in-flight extend claim was taken. Written only by the claim itself, so an unrelated update to the measurement does not age it. Null when no extend holds the measurement.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Was this page helpful?