Devices
Endpoint reference
Habitat API — devices 0.1.0
REST API for the Habitat tissue-culture automation platform by Open Culture Science. All endpoints accept and return JSON.
devices
GET /devices/{kind}
List Kind Instances
Description
List the live instances of a device kind.
Returns 404 when kind is not a registered device kind. When
the kind is registered but has no live instances (config has
zero pumps of that kind, or the lifespan has not finished
wiring drivers), the response is an empty list — not a 404.
Input parameters
| Parameter |
In |
Type |
Default |
Nullable |
Description |
kind |
path |
string |
|
No |
|
Responses
GET /devices/{kind}/{id}/telemetry/stream
Get Telemetry Stream
Description
Stream the device's telemetry events as Server-Sent Events.
Subscribes to the per-device channel devices:{kind}:{id}.
Last-Event-ID is honored for replay; missing header is
treated as "" (full buffer replay) so subscribers connecting
after a burst of telemetry still see the recent history before
going live. The shared SSE plumbing emits a periodic
keep-alive comment every 15 seconds to defeat proxy idle
timeouts.
Returns 404 when kind is not a registered device kind or
when the kind has no telemetry_source_factory (i.e. emits
no telemetry).
Input parameters
| Parameter |
In |
Type |
Default |
Nullable |
Description |
id |
path |
string |
|
No |
|
kind |
path |
string |
|
No |
|
Responses
Schemas
AbsoluteMoveRequest
| Name |
Type |
Description |
position_increments |
|
Absolute position in increments |
position_ul |
|
Absolute position in microliters |
top_speed_ul_per_s |
|
Optional top plunger speed in µL/s to apply before the move. When omitted, the firmware's previously-set speed is used. |
AtomicCallRequest
| Name |
Type |
Description |
params |
|
Atomic parameters keyed by the names declared in the manifest. |
AtomicManifest
| Name |
Type |
Description |
authored_by |
string |
|
belongs_to_routines |
Array<string> |
|
blocking |
|
|
description |
string |
|
device_kind |
string |
|
emits_metrics |
Array<string> |
Advisory list of metric names this atomic is expected to emit. Not populated by any atomic today and not enforced or cross-checked against the telemetry layer -- agent-read-only metadata, not a live emission guarantee. |
estimated_fluid_volume_ul |
|
|
estimated_wear |
string |
Advisory relative wear estimate. Not derived from any measurement and not read by the runtime -- agent-read-only metadata for planning, not a calibrated cost model. |
expected_duration_ms |
|
|
failure_modes |
Array<FailureMode> |
|
hazards |
Array<Hazard> |
|
idempotent |
boolean |
|
interrupted_state |
string |
|
kind |
string |
|
last_calibrated |
|
|
mutates |
Array<string> |
|
name |
string |
|
params |
Array<ParamSpec> |
|
postconditions |
Array<Postcondition> |
|
preconditions |
Array<Precondition> |
|
requires_human_confirmation |
boolean |
|
requires_state |
|
|
reverse_atomic |
|
Advisory pointer to the atomic that would undo this one. Not populated by any atomic today and not enforced or invoked by the runtime -- agent-read-only metadata, not a guarantee a reverse operation exists or is registered. |
reversible |
boolean |
|
side_effects |
Array<string> |
|
summary |
string |
|
tier |
string |
|
typical_predecessors |
Array<string> |
|
typical_successors |
Array<string> |
|
validated_on_hardware |
Array<string> |
|
version |
string |
|
CreateEventRequest
| Name |
Type |
Description |
action |
string |
Action type (e.g. 'feed', 'wash') |
color |
string |
|
duration_min |
number |
|
notes |
string |
|
parameters |
|
|
sample_id |
string |
Target sample ID |
series_id |
|
|
start_time |
string |
Scheduled start (ISO 8601) |
CurrentLimitRequest
| Name |
Type |
Description |
current_limit_ma |
integer |
Current limit in mA (Tic 36v4 max: 4000) |
DeviceRef
| Name |
Type |
Description |
id |
string |
|
kind |
string |
|
DoseRequest
| Name |
Type |
Description |
block |
boolean |
Wait for motion to complete before returning |
direction |
FlowDirection |
Flow direction |
volume_ml |
number |
Volume to pump in mL |
ExecuteRoutineRequest
| Name |
Type |
Description |
params |
|
Routine parameters keyed by the names declared in the manifest. |
FailureMode
| Name |
Type |
Description |
error_class |
string |
|
recommended_recovery |
Array<RecoveryStep> |
|
when |
string |
|
FlowDirection
Type: string
| Name |
Type |
Description |
as_var |
string |
Loop variable name. Body placeholders ``{}`` are replaced with the current element on each iteration. |
list_param |
string |
Placeholder name (without braces) for the list parameter, e.g. 'samples' resolves to the value of bound_params['samples']. |
steps |
Array<RoutineStep-Input> |
Step body executed once per list element. |
ForeachBlock-Output
| Name |
Type |
Description |
as_var |
string |
Loop variable name. Body placeholders ``{}`` are replaced with the current element on each iteration. |
list_param |
string |
Placeholder name (without braces) for the list parameter, e.g. 'samples' resolves to the value of bound_params['samples']. |
steps |
Array<RoutineStep-Output> |
Step body executed once per list element. |
habitat__models__centris__CommandResponse
| Name |
Type |
Description |
addr |
integer |
|
data |
|
|
error_code |
integer |
|
error_message |
string |
|
message |
string |
|
success |
boolean |
|
habitat__models__centris__InitDirection
Type: string
habitat__models__centris__InitRequest
| Name |
Type |
Description |
direction |
habitat__models__centris__InitDirection |
|
init_gap_increments |
|
Optional one-shot post-init plunger gap in increments. If provided, ``set_init_gap`` is called BEFORE the Z command on this initialization only. ``None`` means use the previously-configured gap (firmware default ~1600 if never set). DANGER: see ``POST /pumps/{addr}/init-gap`` for hazard details. This path requires ``gap_increments >= 100`` (the safety floor) — there is no override field on this endpoint. Use the dedicated ``/init-gap`` endpoint with ``override_safety_floor=true`` if you must persist a sub-floor value before initialization. |
input_port |
integer |
Distribution-valve input port for homing. Use ``0`` (or omit) for auto-selection from the pump YAML ``port_map``: first waste role, else first port not listed in the map, else port 1. JSON may use the field name ``init_port`` as an alias. |
output_port |
integer |
Init output port (0=default) |
speed |
integer |
Init speed code |
habitat__models__peristaltic__CommandResponse
| Name |
Type |
Description |
error |
|
|
message |
string |
|
pump_name |
string |
|
success |
boolean |
|
habitat__models__smartvalve__CommandResponse
| Name |
Type |
Description |
addr |
integer |
|
data |
|
|
error_code |
integer |
|
error_message |
string |
|
message |
string |
|
success |
boolean |
|
habitat__models__smartvalve__InitDirection
Type: string
habitat__models__smartvalve__InitRequest
Hazard
| Name |
Type |
Description |
agent_guidance |
string |
|
condition |
string |
|
id |
string |
|
severity |
string |
|
HTTPValidationError
Job
| Name |
Type |
Description |
cancel_requested |
boolean |
|
created_at |
string(date-time) |
|
created_by |
|
|
error |
|
|
finished_at |
|
|
id |
string |
|
idempotency_key |
|
|
params |
|
|
parent_id |
|
|
progress |
|
|
request_id |
string |
|
result |
|
|
started_at |
|
|
status |
JobStatus |
|
targets |
Array<DeviceRef> |
|
type |
string |
|
JobProgress
| Name |
Type |
Description |
current_step |
string |
|
note |
|
|
step_index |
|
|
total_steps |
|
|
JobStatus
Type: string
JobSubmissionBody
| Name |
Type |
Description |
params |
|
Runnable-specific request body |
targets |
|
Optional list of device references the job acts on. If omitted, the runnable receives an empty target list. |
type |
string |
Registered runnable name (e.g. 'actions.wash') |
| Name |
Type |
Description |
count |
|
Iteration count. Integer literal or ``{}`` resolved against the routine scope at run time. |
steps |
Array<RoutineStep-Input> |
Step body executed once per iteration. |
LoopBlock-Output
| Name |
Type |
Description |
count |
|
Iteration count. Integer literal or ``{}`` resolved against the routine scope at run time. |
steps |
Array<RoutineStep-Output> |
Step body executed once per iteration. |
MoveRequest
| Name |
Type |
Description |
block |
boolean |
Wait for motion to complete before returning |
relative |
boolean |
If True, move relative to current position. If False, absolute. |
steps |
integer |
Number of microsteps (positive = forward, negative = reverse) |
ParallelBlock-Output
ParamSpec
| Name |
Type |
Description |
default |
|
|
name |
string |
|
range |
|
|
required |
boolean |
|
semantic_role |
string |
|
type |
string |
|
unit |
|
|
PeristalticStatus
| Name |
Type |
Description |
current_limit_ma |
|
|
current_position |
integer |
|
current_velocity |
integer |
|
energized |
boolean |
|
errors |
string |
|
flow_rate_ul_min |
number |
|
max_speed |
|
|
name |
string |
|
operation_state |
string |
|
planning_mode |
string |
|
ready |
boolean |
|
serial_number |
|
|
step_mode |
integer |
|
target_position |
integer |
|
vin_voltage |
|
|
PlungerMoveRequest
| Name |
Type |
Description |
increments |
|
Position in increments |
volume_ul |
|
Volume in microliters |
Postcondition
| Name |
Type |
Description |
description |
string |
|
state |
|
|
Precondition
| Name |
Type |
Description |
check_id |
string |
|
description |
string |
|
on_fail_atomic |
|
|
PrimeRequest
| Name |
Type |
Description |
seconds |
number |
Duration to run in seconds (max 5 minutes) |
velocity |
integer |
Velocity in microsteps per 10,000 seconds |
ProblemDetails
| Name |
Type |
Description |
detail |
|
|
instance |
|
|
request_id |
|
|
status |
integer |
HTTP status code |
title |
string |
Short human-readable summary |
type |
string |
Problem type URI |
ProtocolDefaults
| Name |
Type |
Description |
chip_id |
|
|
pump_name |
|
|
sample_id |
|
|
speed_code |
|
|
timeout_s |
|
|
ProtocolManifest
| Name |
Type |
Description |
author |
string |
|
color |
|
|
composes_atomics |
Array<string> |
|
composes_routines |
Array<string> |
|
created_at |
|
|
defaults |
ProtocolDefaults |
|
description |
string |
|
device_kinds |
Array<string> |
|
device_name |
|
|
emits_metrics |
Array<string> |
|
estimated_duration_ms |
|
|
estimated_wear |
string |
|
failure_modes |
Array<FailureMode> |
|
file_path |
|
|
hazards |
Array<Hazard> |
|
icon |
|
|
last_calibrated |
|
|
library |
string |
|
name |
string |
|
params |
Array<ParamSpec> |
|
postconditions |
Array<Postcondition> |
|
preconditions |
Array<Precondition> |
|
requires_human_confirmation |
boolean |
|
requires_state |
|
|
schedule_items |
Array<ProtocolScheduleItem> |
|
scope |
string |
|
side_effects |
Array<string> |
|
status |
string |
|
summary |
string |
|
tags |
Array<string> |
|
tier |
string |
|
updated_at |
|
|
validated_on_hardware |
Array<string> |
|
version |
string |
|
ProtocolPlan
| Name |
Type |
Description |
anchor_time |
string |
|
bound_params |
|
|
ended_at |
|
|
protocol_name |
string |
|
protocol_version |
string |
|
run_id |
string |
|
started_at |
string(date-time) |
|
status |
string |
|
step_results |
Array<ScheduleSubmission> |
|
submissions |
Array<ScheduleSubmission> |
|
ProtocolScheduleItem
| Name |
Type |
Description |
atomic |
|
|
item_id |
string |
|
label |
string |
|
params |
|
|
routine |
|
|
sample_id |
|
|
schedule |
ScheduleSpec |
|
PumpStatus
| Name |
Type |
Description |
addr |
integer |
|
cutoff_speed_inc_per_s |
integer |
|
error_code |
integer |
|
error_message |
string |
|
firmware |
|
|
initialized |
boolean |
|
name |
string |
|
operating_time_min |
|
|
plunger_position_increments |
integer |
|
plunger_position_ul |
|
|
ready |
boolean |
|
start_speed_inc_per_s |
integer |
|
syringe_volume_ul |
integer |
|
temperature_f |
|
|
top_speed_inc_per_s |
number |
|
valve_position |
integer |
|
valve_type |
string |
|
voltage |
|
|
QueryResponse
| Name |
Type |
Description |
addr |
integer |
|
parsed_value |
|
|
raw_value |
string |
|
register |
|
Register identifier |
RecoveryStep
| Name |
Type |
Description |
atomic_name |
string |
|
delay_ms_between_attempts |
integer |
|
expected_postcondition |
|
|
max_attempts |
integer |
|
params |
|
|
rationale |
string |
|
verify_with |
|
|
| Name |
Type |
Description |
authored_by |
string |
|
blocking |
boolean |
|
chip_aware |
boolean |
|
composes |
Array<string> |
|
created_at |
|
|
description |
string |
|
device_kinds |
Array<string> |
|
device_name |
|
|
emits_metrics |
Array<string> |
|
estimated_fluid_volume_ul |
|
|
estimated_wear |
string |
|
expected_duration_ms |
|
|
failure_modes |
Array<FailureMode> |
|
file_path |
|
|
hazards |
Array<Hazard> |
|
idempotent |
boolean |
|
interrupted_state |
string |
|
last_calibrated |
|
|
library |
string |
|
mutates |
Array<string> |
|
name |
string |
|
params |
Array<ParamSpec> |
|
postconditions |
Array<Postcondition> |
|
preconditions |
Array<Precondition> |
|
requires_human_confirmation |
boolean |
|
requires_state |
|
|
reversible |
boolean |
|
side_effects |
Array<string> |
|
steps |
Array<RoutineStep-Input> |
|
summary |
string |
|
tier |
string |
|
typical_predecessors |
Array<string> |
|
typical_successors |
Array<string> |
|
updated_at |
|
|
validated_on_hardware |
Array<string> |
|
version |
string |
|
RoutineManifest-Output
| Name |
Type |
Description |
authored_by |
string |
|
blocking |
boolean |
|
chip_aware |
boolean |
|
composes |
Array<string> |
|
created_at |
|
|
description |
string |
|
device_kinds |
Array<string> |
|
device_name |
|
|
emits_metrics |
Array<string> |
|
estimated_fluid_volume_ul |
|
|
estimated_wear |
string |
|
expected_duration_ms |
|
|
failure_modes |
Array<FailureMode> |
|
file_path |
|
|
hazards |
Array<Hazard> |
|
idempotent |
boolean |
|
interrupted_state |
string |
|
last_calibrated |
|
|
library |
string |
|
mutates |
Array<string> |
|
name |
string |
|
params |
Array<ParamSpec> |
|
postconditions |
Array<Postcondition> |
|
preconditions |
Array<Precondition> |
|
requires_human_confirmation |
boolean |
|
requires_state |
|
|
reversible |
boolean |
|
side_effects |
Array<string> |
|
steps |
Array<RoutineStep-Output> |
|
summary |
string |
|
tier |
string |
|
typical_predecessors |
Array<string> |
|
typical_successors |
Array<string> |
|
updated_at |
|
|
validated_on_hardware |
Array<string> |
|
version |
string |
|
| Name |
Type |
Description |
atomic |
|
|
delay_after_ms |
integer |
|
foreach |
|
|
label |
string |
|
loop |
|
|
max_retries |
integer |
|
on_error |
string |
|
parallel |
|
|
params |
|
|
routine |
|
|
RoutineStep-Output
| Name |
Type |
Description |
atomic |
|
|
delay_after_ms |
integer |
|
foreach |
|
|
label |
string |
|
loop |
|
|
max_retries |
integer |
|
on_error |
string |
|
parallel |
|
|
params |
|
|
routine |
|
|
RoutineValidationReport
| Name |
Type |
Description |
is_valid |
boolean |
|
issues |
Array<ValidationIssue> |
|
manifest |
|
|
RunProtocolRequest
| Name |
Type |
Description |
bound_params |
|
Bindings for the protocol's declared params. |
ScheduleSpec
| Name |
Type |
Description |
duration_min |
|
|
event_duration_min |
|
|
interval_min |
|
|
kind |
string |
|
offset_min |
|
|
ScheduleSubmission
| Name |
Type |
Description |
atomic |
|
|
duration_ms |
integer |
|
error |
|
|
event_id |
string |
|
fire_at |
string |
|
job_id |
|
|
label |
string |
|
params |
|
|
routine |
|
|
status |
string |
|
step_id |
string |
|
step_index |
integer |
|
target_kind |
string |
|
target_name |
string |
|
SensorListEntry
| Name |
Type |
Description |
connected |
boolean |
|
driver_mode |
string |
|
id |
string |
|
label |
string |
|
SensorListResponse
SensorReading
| Name |
Type |
Description |
co2_pct |
|
|
humidity_pct |
|
|
sample_count |
integer |
|
sample_rate_hz |
number |
|
temperature_c |
|
|
timestamp |
|
|
warming_up |
boolean |
|
SensorStatus
| Name |
Type |
Description |
connected |
boolean |
|
csv_path |
|
|
driver_mode |
string |
|
id |
string |
|
label |
string |
|
last_reading_at |
|
|
malformed_frame_count |
integer |
|
port |
|
|
sample_count |
integer |
|
sample_rate_hz |
number |
|
warming_up |
boolean |
|
SpeedConfigRequest
| Name |
Type |
Description |
max_accel |
|
Maximum acceleration in microsteps/s per 100 s |
max_decel |
|
Maximum deceleration in microsteps/s per 100 s |
max_speed |
|
Maximum speed in microsteps per 10,000 seconds |
starting_speed |
|
Starting speed in microsteps per 10,000 seconds |
SpeedRequest
| Name |
Type |
Description |
cutoff_speed_inc_per_s |
|
Cutoff speed in inc/s |
slope_down |
|
Ramp-down slope code |
slope_up |
|
Ramp-up slope code |
speed_code |
|
Predefined speed code (0-50) |
start_speed_inc_per_s |
|
Start speed in inc/s |
top_speed_inc_per_s |
|
Top speed in increments/second |
top_speed_ul_per_s |
|
Top speed in microliters/second |
SpinRequest
| Name |
Type |
Description |
velocity |
integer |
Velocity in microsteps per 10,000 seconds (negative = reverse) |
StepMode
Type: integer
StepModeRequest
| Name |
Type |
Description |
step_mode |
StepMode |
Microstepping divisor |
StopRequest
| Name |
Type |
Description |
hold |
boolean |
If True, hold position (energized). If False, de-energize (freewheel). |
TestRunRoutineRequest
| Name |
Type |
Description |
params |
|
Routine parameters. Merged on top of the routine's manifest defaults before the executor walks the steps. |
ValidateProtocolRequest
| Name |
Type |
Description |
yaml_text |
string |
Raw YAML text of the protocol manifest to validate. |
ValidateRoutineRequest
| Name |
Type |
Description |
yaml_text |
string |
Raw YAML text of the routine manifest to validate. |
ValidationError
| Name |
Type |
Description |
ctx |
|
|
input |
|
|
loc |
Array<> |
|
msg |
string |
|
type |
string |
|
ValidationIssue
| Name |
Type |
Description |
code |
string |
|
location |
string |
|
message |
string |
|
severity |
string |
|
suggested_fix |
|
|
ValidationReport
| Name |
Type |
Description |
is_valid |
boolean |
|
issues |
Array<ValidationIssue> |
|
manifest |
|
|
ValveMoveRequest
| Name |
Type |
Description |
direction |
string |
Rotation direction: 'cw' (I command) or 'ccw' (O command) |
port |
integer |
Target port number |
ValveStatus
| Name |
Type |
Description |
addr |
integer |
|
error_code |
integer |
|
error_message |
string |
|
firmware |
|
|
initialized |
boolean |
|
name |
string |
|
operating_time_min |
|
|
ready |
boolean |
|
temperature_f |
|
|
valve_position |
integer |
|
valve_type |
string |
|
voltage |
|
|