Time
Forecasting and anomaly detection with open time-series models served on the Tenzro Network, and time series (sensor data first) kept in Datasets with what they measure. Every result carries the node's receipt.
503 coming_online. Series can be kept now. POST /forecasts keeps working as before and is the same call as POST /time/forecasts.| Task | Endpoint | Key |
|---|---|---|
| Forecast | POST /time/forecasts (also /forecasts) | inference |
| Find anomalies | POST /time/anomalies | inference |
| Keep a series | POST /time/series | datasets:write |
| Import a series from a link | POST /time/series/import | datasets:write |
| Readings from participants' devices | POST /ingest/items, /ingest/items/stream | ingest key |
Forecasts
curl https://api.tenzro.xyz/time/forecasts \
-H "Authorization: Bearer $TENZRO_API_KEY" -H "Content-Type: application/json" \
-d '{"model": "timesfm-2.5-200m", "history": [112, 118, 132, 129, 121, 135, 148, 148], "horizon": 6, "quantiles": [0.1, 0.5, 0.9]}'Anomaly detection
The model forecasts the latest window points from the context before them, with a band holding band of normal points (default 0.9). Points outside it are anomalies, scored by how far outside they lie, in band widths.
curl https://api.tenzro.xyz/time/anomalies \
-H "Authorization: Bearer $TENZRO_API_KEY" -H "Content-Type: application/json" \
-d '{"values": [20.1, 20.3, 20.2, 20.4, 20.3, 27.9, 20.2], "window": 3, "band": 0.9}'
# { "anomalies": [{ "index": 5, "value": 27.9, "expected": 20.3, "low": 19.8, "high": 20.9, "score": 6.36, "direction": "above" }], "provenance": { ... } }Sensor data and series
Each series names its units and source, and may carry a sensor_type, a sample_rate_hz and a device identity you choose. A location is kept only with location_consented=true. Series land in Datasets of kind timeseries.
curl "https://api.tenzro.xyz/time/series?units=degC&source=greenhouse-3&sensor_type=temperature&sample_rate_hz=0.0167&dataset_name=Greenhouse" \
-H "Authorization: Bearer $TENZRO_API_KEY" -H "Content-Type: text/csv" --data-binary @readings.csv
curl https://api.tenzro.xyz/time/series/import -H "Authorization: Bearer $TENZRO_API_KEY" -H "Content-Type: application/json" \
-d '{"url": "https://data.example.org/meter-4.csv", "meta": {"units": "kW", "source": "meter-4"}, "dataset": {"dataset_name": "Meters"}}'Readings from people's own devices are collected with their consent through a Fieldwork project that collects sensor readings: the page reads the device's motion sensors, and a device or app can stream them. Location is a separate, optional consent.
# A consenting participant's device, on a Fieldwork project that collects sensor readings (ingest key tzi_...):
curl "https://api.tenzro.xyz/ingest/items/stream?prompt=walk" \
-H "Authorization: Bearer $TZI_KEY" -H "X-Participant-Token: $TOKEN" -H "Content-Type: application/x-ndjson" \
--data-binary @readings.ndjson
# one line per set of readings:
{"sensor": "accelerometer", "units": "m/s2", "sample_rate_hz": 50, "channels": ["x", "y", "z"], "samples": [[0, 0.1, 0.2, 9.8], [20, 0.1, 0.3, 9.7]]}SDK and MCP
SDK: labs.time.forecast(), labs.time.anomalies(), labs.time.series.upload(), labs.time.series.import(); for participants' devices, FieldworkIngest.streamReadings(). MCP: the forecast tool, detect_anomalies, upload_time_series, import_time_series and list_time_models.
Models and prices
| Model | Licence | Price |
|---|---|---|
TimesFM 2.5 timesfm-2.5-200m | Apache-2.0 | 0 credits per request |
Chronos-2 chronos-2 | Apache-2.0 | not set yet |
TiRex-2 tirex-2 | Apache-2.0 | not set yet |
Toto 2.0 313M toto-2.0-313m | Apache-2.0 | not set yet |