The openculture SDK is a typed REST client — it calls the same
endpoints as the REST tab.
Namespace: h.schedule — 6 endpoints.
fromopencultureimportHabitatClientwithHabitatClient("http://mistyforest.local:8000")ash:# List scheduled eventsevents=h.schedule.list_events()# Create a scheduled eventevent=h.schedule.create_event(request=CreateEventRequest(...))# Delete a specific event by idh.schedule.delete_event(event.id)
All request and response shapes are in openculture.client.habitat.models.
Endpoint reference
Habitat API — schedule 0.1.0
REST API for the Habitat tissue-culture automation platform by Open Culture Science. All endpoints accept and return JSON.
schedule
GET /schedule/events
List Events
Description
List scheduled events with optional filters.
Call with no params for the full list (backward compatible).
Input parameters
Parameter
In
Type
Default
Nullable
Description
action
query
No
date_from
query
No
date_to
query
No
limit
query
No
offset
query
integer
0
No
sample_id
query
No
search
query
No
series_id
query
No
status
query
No
Responses
[{}]
⚠️This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.Schema of the response body
{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response List Events Schedule Events Get"}
⚠️This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.Schema of the response body
{"action":"drain_fill","sample_id":"sample_001","start_time":"2026-05-13T22:00:00+00:00","duration_min":3.0,"parameters":{"chip_id":"chip_A","source_role":"reagent","fill_volume_ul":100.0,"drain_volume_ul":100.0,"air_backpad_ul":200.0,"chip_speed_code":26,"offchip_speed_code":17},"notes":"Drug bolus at t+5 min from protocol start"}
{"properties":{"action":{"type":"string","title":"Action","description":"Action type (e.g. 'feed', 'wash')"},"sample_id":{"type":"string","title":"Sample Id","description":"Target sample ID"},"start_time":{"type":"string","title":"Start Time","description":"Scheduled start (ISO 8601)"},"duration_min":{"type":"number","exclusiveMinimum":0.0,"title":"Duration Min","default":5.0},"parameters":{"additionalProperties":true,"type":"object","title":"Parameters"},"series_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Series Id"},"notes":{"type":"string","title":"Notes","default":""},"color":{"type":"string","title":"Color","default":"#8FB87A"}},"type":"object","required":["action","sample_id","start_time"],"title":"CreateEventRequest","description":"Request body for POST /schedule/events."}
⚠️This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.Schema of the response body
List grouped series summaries (one row per series + one per singleton).
Input parameters
Parameter
In
Type
Default
Nullable
Description
action
query
No
date_from
query
No
date_to
query
No
limit
query
No
offset
query
integer
0
No
sample_id
query
No
search
query
No
status
query
No
Responses
[{}]
⚠️This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.Schema of the response body
{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response List Series Schedule Series Get"}
⚠️This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.Schema of the response body
⚠️This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.Schema of the response body
⚠️This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.Schema of the response body
⚠️This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.Schema of the response body
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.
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.
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.