Create SKUs
Create one or many SKUs. The body is a JSON array, even for a single record.
Only sku (the product code) is required; unit defaults to units and archived to
false.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/v1/skus" \ -H "Content-Type: application/json" \ -d '[ { "sku": "string" } ]'[ { "id": "36f7b519-d93e-4ec8-8245-7f4b8c123456", "company": { "id": 1, "name": "Company 1" }, "sku": "sku 1", "name": "sku 1", "description": "sku 1", "unit": "pcs", "archived": false, "createdAt": "2024-01-01T00:00:00.000Z", "updatedAt": "2024-01-01T00:00:00.000Z", "deletedAt": "2024-01-02T00:00:00.000Z" }]Read signal data GET
Return aggregated raw sensor points for one signal. Samples are bucketed before they are returned. The bucket width is `agg_period` x `agg_unit` (`agg_period=15`, `agg_unit=m` is a 15-minute bucket) and `agg_function` is how samples inside a bucket are reduced. By default points are returned as a `data` list of `{timestamp, value}` objects. Pass `transpose=true` to get two arrays of equal length instead, `timestamps` and `values`, where `values[i]` belongs to `timestamps[i]`. It carries the same points in a smaller body. Two limits are enforced and both reject the request rather than truncating the response: the window between `start_time` and `end_time` may not exceed **14 days**, and a query may not produce more than **10,000 points**. The defaults (`agg_unit=s`, `agg_period=1`) reach the point ceiling after under three hours, so most callers set them explicitly.
Search SKUs POST
Search the product catalog, or page through it with `{}`. The filters are separate rather than one combined search: `skus` matches the SKU code and also accepts `include` / `exclude` by id, while `names`, `description` and `unit` are each their own fuzzy filter. Archived SKUs are part of the catalog and are not excluded automatically.