Export
Download stored metrics as one file. The file is streamed to you as it is written.
GET
/v1/exportExport covers metrics. To pull events, use the Events API.
Query params
| Param | Example | Description |
|---|---|---|
sources | robot-01,robot-02 | Comma-separated device ids. Required. 1 to 50. |
metrics | battery.voltage,motor.rpm | Comma-separated metric names. Up to 500. Omit for all metrics. |
start | 2026-09-18T00:00:00Z | Start of the range. ISO 8601 or Unix milliseconds. Required. An ISO time with no offset is read as UTC. |
end | 2026-09-25T00:00:00Z | End of the range. Same formats. Required, and must be after start. |
resolution | raw, 1m, 1h | raw (default) is every stored point. 1m and 1h are the rollups. |
format | csv, parquet | File format. Default csv. |
estimate | 1 | Return a row count as JSON instead of the file. |
Example
curl -o robot-01.csv \
"https://api.plexus.company/v1/export?sources=robot-01&start=2026-09-18T00:00:00Z&end=2026-09-25T00:00:00Z" \
-H "x-api-key: YOUR_API_KEY"Response
A file, sent as an attachment named
plexus-export-<start day>-<end day>.csv (or .parquet). Rows are ordered by
source, then metric, then time.
resolution | Columns |
|---|---|
raw | timestamp, source, metric, value, tags |
1m, 1h | timestamp, source, metric, min, max, avg, count |
timestampis UTC. In CSV it is ISO 8601 with milliseconds, like2026-09-25T12:00:00.000Z. In Parquet it is a millisecond timestamp column.tagsis a JSON object written as a string.- The CSV has a header row. Parquet files are compressed with zstd.
- The
1mrollup is kept for 90 days and the1hrollup for 5 years, so an older range returns rows only at1h.
Estimate first
Add estimate=1 to see how many rows an export would return, without
downloading it:
curl "https://api.plexus.company/v1/export?sources=robot-01&start=2026-09-18T00:00:00Z&end=2026-09-25T00:00:00Z&estimate=1" \
-H "x-api-key: YOUR_API_KEY"{
"rows": 1234,
"start": "2026-09-18T00:00:00.000Z",
"end": "2026-09-25T00:00:00.000Z",
"clamped": false
}start is the start actually used. clamped is true when your plan's
history limit moved it.
Limits
- History by plan. Free reads its last 7 days. If
startis earlier than that, Plexus moves it up and returns the start it used in theX-Plexus-History-Startresponse header. A range that ends before the limit returns a file with no rows. - 3 exports at once per org. A 4th gets
429withRetry-After: 30. - 120 requests a minute per key, shared with the rest of the API.
- 300 seconds per export. For a long range, export it in pieces.
- Device ids and metric names can be at most 256 characters each.
Errors
Export errors are { "error": "...", "message": "..." }.
| Status | error | When |
|---|---|---|
400 | invalid_params | A missing or bad parameter. message says which. |
401 | unauthorized | Missing or invalid API key. |
402 | payment_required | API access is turned off for the org because of a billing problem. |
404 | source_not_found | A device id in sources has no stored data in your org. message lists them. |
429 | rate_limited | Over 120 requests a minute for this key. |
429 | too_many_exports | 3 exports are already running for the org. |
Both 429s carry a Retry-After header in seconds.