Ingest thing data (compact columnar)
A space-efficient alternative to POST /v2/thing/{thingId}/data for high-volume or wide
payloads. The column names are declared once in columns (which must contain exactly one
reserved timestamp column — Unix epoch milliseconds — plus one or more metric names), and
each entry in rows is a positional value array aligned to those columns. This avoids
repeating metric-name keys on every reading. Metric names are matched (case-insensitively)
against the thing's ThingTypeDefinition and mapped to their immutable metric ids; values may be
numbers, booleans, or strings (coerced to each metric's data type), and null means "not
reported in this row". Requires an API key with the write action scoped to the thing.
Authorizations
API key passed in the header.
Path Parameters
The thing to ingest data for.
Body
The columnar batch (column schema + value rows).
columnsarray<string>requiredThe column schema, declared once. Exactly one column must be the reserved `timestamp` column (Unix epoch milliseconds, UTC); every other column is a metric name matched against the thing's ThingTypeDefinition. Column order is arbitrary.
>= 2 elementsrowsarray<array>requiredThe rows. Each row is a value array the same length as `columns`, positionally aligned to it. Values are scalars — number, boolean, or string — coerced to each metric's declared data type; `null` means "not reported in this row".
>= 1 elementsResponse
Data accepted and written; returns an ingest summary.
thingIdstringThe thing the data was written for.
framesIngestedinteger | string<int32>The number of data frames written.
^-?(?:0|[1-9]\d*)$metricsarray<string>The distinct metric names that were ingested across the frames.