Skip to main content
POST
Requires scope: sdk:event-log Supported today: accelerometer, gyroscope, gps (more sensors will follow). Provide either records= (list of dicts with ts + measurement fields; requires pip install olira[signals]) or parquet= (pre-serialized bytes). The SDK hashes the payload and routes small bodies synchronously and larger bodies via a presigned upload. Returns a SignalJobHandle — call wait() or poll(). See the passive signals guide for absorb, features, and dedup policy.

Parameters

str
required
Olira patient id that owns the series.
SignalSensorType | str
required
One of “accelerometer”, “gyroscope”, “gps”.
str
required
Stable device id for the series (unique with patient + ts at the sink).
list[dict] | None
Measurement rows (each with ts plus sensor fields). Mutually exclusive with parquet=.
bytes | None
Pre-serialized Parquet bytes. Mutually exclusive with records=.
str | None
Sensor schema id (e.g. accelerometer@1). Defaults to latest for the sensor.
float | None
Nominal device sample rate stored with the batch metadata.
dict[str, str] | None
Per-field source units; server converts to canonical units.
str | None
When ts is epoch-encoded: ‘s’, ‘ms’, or ‘us’.
str | None
IANA timezone name; retains original UTC offset at collection.

Returns

SignalJobHandle — Poll/wait handle; .job is the current SignalJob snapshot.
str
Ingestion job id.
SignalJobStatus
received | processing | done | partial | failed.
int
Rows written after absorb.
int
Overlap skips during absorb (first write wins).
bool
True when the upload was a content-hash no-op.
Guide: /send-data/passive-signals.
On the bulk path, PUT Parquet bytes without the SDK Authorization header.

Raises